Статьи

Размещать PHP в облаке с Windows Azure

Облачные вычисления — это не просто модное слово на совещаниях руководителей, это еще одна важная вещь в мире ИТ. Облака предлагают бесконечное количество ресурсов, как по требованию, так и в моделях с платой за использование: компьютерные ресурсы под рукой! В этой статье я сосредоточусь на одной из этих облачных платформ, Microsoft Windows Azure, и дам вам всю информацию, необходимую для начала разработки приложений PHP на этой платформе. Хотя мы не будем вдаваться в технические аспекты, я покажу вам дополнительную информацию и ресурсы по конкретным вопросам.

Разные облака

Выбор это хорошая вещь. Хорошая новость для нас, разработчиков, в том, что у облачных вычислений есть много вариантов. Microsoft, Google, Amazon, Rackspace, GoGrid и многие другие предлагают облачные продукты, которые имеют свои особые характеристики. Похоже, что весь мир делит эти предложения на две разные категории: IaaS (инфраструктура как услуга) и PaaS (платформа как услуга) — разница между ними показана на рисунке 1. разница между облачными платформами ».

Разница между облачными платформами

Сначала давайте посмотрим на IaaS. Amazon EC2 был первым, кто предложил виртуальные машины, которые могли запускать ваше приложение. Однако эти виртуальные машины находятся под вашим контролем, как физические серверы в вашем центре обработки данных. Это означает, что вы контролируете исправления, безопасность, обслуживание операционной системы — и все с полным доступом root или администратора. Облачная платформа избавляет инфраструктуру от проблем, таких как сетевое взаимодействие,
балансировщики нагрузки и брандмауэры обрабатываются для вас.

Далее идет PaaS. Этот подход также основан на виртуальных машинах, но вы не можете контролировать их. Вместо этого предоставляется набор инструментов и API, которые позволяют упаковать ваше приложение и загрузить его на вашу виртуальную машину, поэтому вам нужно беспокоиться только о приложении. Сеть, операционная система и т. Д. Поддерживаются облачной платформой.

Все поставщики облачных услуг имеют общие функции, включая виртуальные машины и хранилище, доступное по протоколам на основе REST. С другой стороны, каждое предложение имеет свои уникальные особенности, что хорошо: облака все еще находятся на очень инновационной фазе, и как разработчики мы можем позволить себе роскошь выбирать платформу, которая лучше всего подходит для наших конкретных приложений.

Обзор платформы Windows Azure

В этой статье я буду описывать платформу Windows Azure, PaaS от Microsoft, предназначенную для облачных вычислений. Но прежде чем углубляться в технические детали, давайте разберемся с компонентами, включенными в это предложение, и с тем, что они делают.

Windows Azure

Windows Azure является основным компонентом платформы Windows Azure. Маркетологи описывают этот компонент как «операционную систему для облака Azure». Я не большой поклонник маркетологов и их цитат, но на этот раз они правы! Windows Azure является сердцем предложения Microsoft и делает то, что вы ожидаете от любой операционной системы:
позволяет запускать ваше приложение на виртуальной машине, либо в веб-роли (с установленным веб-сервером), либо в рабочей роли — более чистой виртуальной машине, которая позволяет размещать приложения других типов.

Windows Azure также позволяет быстро масштабироваться: просто измените значение конфигурации, и у вас будет несколько экземпляров, запускаемых одним щелчком мыши. Балансировка нагрузки осуществляется автоматически и не требует настройки.

Рядом с операционной системой включен набор служб хранения, которые доступны через API на основе REST. Хранилище BLOB-объектов позволяет размещать любые файлы: текстовые файлы, изображения, загружаемые файлы и многое другое.

Хранение таблиц — это, по сути, база данных документов, которая имеет ограниченные возможности запросов, но может масштабироваться. Кроме того, существуют очереди, которые в основном используются для обмена данными между сетевыми и рабочими ролями.

Windows Azure — это место, где будет размещаться ваше приложение. Веб-роль будет размещать ваше веб-приложение; вы, вероятно, будете использовать хранилище BLOB-объектов для хранения файлов и, возможно, хранилище таблиц (или SQL Azure, о котором мы поговорим чуть позже) для хранения ваших данных. Windows Azure также используется другими компонентами платформы.

SQL Azure

Помимо хостинга, вам, вероятно, понадобится место, где вы можете хранить свои реляционные данные. Вот где приходит SQL Azure: это слегка измененная версия Microsoft SQL Server, которая предоставляет все службы, которые вы ожидаете от базы данных: таблицы, представления, индексы, хранимые процедуры, триггеры и так далее.

SQL Azure предоставляет службы баз данных масштабируемым и надежным способом. Данные реплицируются на разных сайтах и ​​доступны через балансировщик нагрузки, что обеспечивает высокую производительность на уровне данных вашего приложения.

Платформа Windows Azure AppFabric

Платформа Windows Azure AppFabric, по сути, представляет собой сочетание двух продуктов. Есть служба контроля доступа, которой вы можете делегировать задачи аутентификации и авторизации пользователей, и есть служебная шина, которая, на мой взгляд, является одной из функций, которая действительно выделяет Windows Azure. Короче говоря, сервисная шина позволяет установить связь между двумя конечными точками. Это может быть служба, которая публикует сообщения для ряда подписчиков, но служебная шина также может использоваться для пробивания дыр в брандмауэрах!

Представьте себе приложения A и B, каждое в разных сетях, за разными брандмауэрами. Прямая связь не представляется возможной, однако сервисная шина AppFabric обеспечит связь между обоими приложениями. Нет необходимости открывать порты в брандмауэре вашей компании, чтобы ваше облачное приложение связывалось с локальным приложением.

Живые Услуги

Live Services предоставляет систему идентификации в Интернете, которую вы, вероятно, уже знаете: Windows Live ID. Live Services также предлагают такие функции, как распознавание присутствия, поиск, сопоставление с помощью Bing Maps, синхронизация и многое другое.

Проекты под кодовым названием: Даллас и Сидней

Эти продукты все еще находятся на стадии инкубации, и, вероятно, в будущем они претерпят некоторые изменения. Тем не менее, они уже предлагают некоторые замечательные функции. Даллас — это в основном решение «Данные как услуга», с помощью которого вы можете подписаться на различные наборы данных, предлагаемые в открытом формате OData, который основан на REST и Atom. Это также предоставляет вашему бизнесу новый источник дохода: если вы сидите на большом количестве полезных данных, почему бы не сделать их доступными через Даллас и заставить других платить за их использование?

Проект Сидней отличается: он ориентирован на то, как вы общаетесь с облачным приложением. В настоящее время эта связь завершается через общедоступный Интернет, но Sydney позволит вам настроить VPN-подключение к вашим виртуальным машинам, что позволит вам защищать связь с использованием ваших собственных сертификатов безопасности и тому подобного.

Инструменты и API, доступные для PHP

Когда мы говорим об использовании PHP в облачной платформе, такой как Windows Azure, есть некоторые цели, которые мы должны выполнить, прежде чем начать работу с облаком. Вам понадобятся правильные инструменты для создания и развертывания вашего приложения, а также правильные API — те, которые позволяют вам использовать платформу и все ее функции.

Microsoft проделала большую работу в этой области. Да, Windows Azure — это основанная на Windows платформа, предназначенная только для языков .NET. Однако, если вы посмотрите на инструменты, учебные пособия, API-интерфейсы и сообщения в блогах, посвященные PHP и Windows Azure, становится ясно, что PHP является одинаково ценным гражданином платформы!

Давайте ознакомимся со всеми инструментами и API, которые доступны для PHP в Windows Azure сегодня. Многие из этих инструментов очень просты в установке с помощью установщика веб-платформы — мастера «проверяй, а потом заканчивай», который позволяет легко и эффективно устанавливать платформы и инструменты.

Поддержка IDE

Конечно, вы можете использовать свой любимый редактор для работы с PHP-приложением, которое будет размещено в Windows Azure. С другой стороны, если вы используете редактор на основе Eclipse, такой как Eclipse PDT, Zend Studio или Aptana, вы можете воспользоваться отличным плагином, который ускорит ваши усилия по разработке, как показано на рисунке 2, «Использование Eclipse для развитие».

Плагин Eclipse для Windows Azure доступен по адресу http://windowsazure4e.org . Также,
Джош Холмс подготовил удобную публикацию « Простая настройка PHP для разработки на Azure» .

Использование Eclipse для разработки

После установки плагина вы найдете следующие функции
были добавлены в вашу IDE:

  • Создание и миграция проектов позволяет легко переносить
    существующего приложения в приложение Windows Azure. Эта
    инструмент подготовит ваше приложение к упаковке и развертыванию
    в Windows Azure.
  • Storage Explorer предоставляет доступ к вашему Windows Azure
    хранение учетных записей и позволяет загружать и скачивать BLOB-объекты,
    таблицы запросов, очереди списков и т. д.
  • Также включена отладка и локальное тестирование: нет
    необходимо развернуть и протестировать приложение сразу в Windows
    Azure. Доступна среда моделирования «локальное облако».

упаковка

Когда ваше приложение будет готово к развертыванию, оно должно быть упаковано для Windows Azure. Упаковка — это в основном процесс создания ZIP-архива вашего приложения и встраивания манифеста всех включенных файлов и их конфигурации.
требования.

Плагин Eclipse для Windows Azure содержит эту функцию. Однако, если вы не используете Eclipse в качестве среды IDE или работаете в среде, отличной от Windows, вы можете упаковать свое приложение, используя инструменты командной строки Windows Azure для разработчиков PHP .

Инструменты разработки и SDK

Далее рассмотрим некоторые инструменты и SDK, которые Windows Azure делает доступными для разработчиков.

Windows Azure SDK для PHP

Если вы планируете перенести приложение или создать новое для Windows Azure, скорее всего, вам потребуется хранилище. Вот где Windows Azure SDK для PHP пригодится: он предоставляет вам простой доступ к хранилищу BLOB-объектов, хранилищам таблиц и очередям, предоставляемым Windows Azure. Вы можете загрузить этот SDK в виде автономного пакета с открытым исходным кодом, который позволяет получать доступ к хранилищу как из локальных расположений, так и из вашего облачного приложения. Если вы используете плагин Eclipse, который мы обсуждали ранее, вы обнаружите, что этот API включен.

Процесс использования хранилища всегда начинается с настройки учетных данных: имени учетной записи и общего ключа (воспринимайте это как очень длинный пароль). Затем вы можете использовать один из определенных классов, доступных для хранения больших двоичных объектов, хранения таблиц или хранения в очереди.

Вот пример хранилища BLOB-объектов в действии. Сначала я создаю контейнер (представьте, что это виртуальный жесткий диск). Затем я загружаю файл с локального жесткого диска в хранилище BLOB-объектов:

/** Microsoft_WindowsAzure_Storage_Blob */ require_once 'Microsoft/WindowsAzure/Storage/Blob.php'; $storageClient = new Microsoft_WindowsAzure_Storage_Blob(); $storageClient->createContainer('testcontainer'); // upload /home/maarten/example.txt to Windows Azure $result = $storageClient->putBlob('testcontainer', 'example.txt', '/home/maarten/example.txt'); 

Чтение сгустка потом довольно
проста:

 /** Microsoft_WindowsAzure_Storage_Blob */ require_once 'Microsoft/WindowsAzure/Storage/Blob.php'; $storageClient = new Microsoft_WindowsAzure_Storage_Blob(); // download file to /home/maarten/example.txt $storageClient->getBlob('testcontainer', 'example.txt', '/home/maarten/example.txt'); 

Хранение таблиц немного сложнее. Это похоже на очень масштабируемую базу данных, которая не привязана к схеме и имеет ограниченные возможности запросов. Чтобы использовать хранилище таблиц, вам потребуются некоторые классы, которые могут использоваться как вашим приложением PHP, так и таблицей Windows Azure.
место хранения. Вот пример класса, представляющего человека:

 class Person extends Microsoft_WindowsAzure_Storage_TableEntity { /** * @azure Name */ public $Name; /** * @azure Age Edm.Int64 */ public $Age; } 

Вставить экземпляр Person в таблицу так же просто, как создать новый экземпляр и присвоить ему некоторые свойства. После этого API хранения таблиц в Windows Azure SDK для PHP позволяет вставлять объект в таблицу с именем
testtable :

 /** Microsoft_WindowsAzure_Storage_Table */ require_once 'Microsoft/WindowsAzure/Storage/Table.php'; $entity = new Person('partition1', 'row1'); $entity->Name = "Maarten"; $entity->Age = 25; $storageClient = new Microsoft_WindowsAzure_Storage_Table('table.core.windows.net', 'myaccount', 'myauthkey'); $storageClient->insertEntity('testtable', $entity); 

Это было много информации в одном фрагменте кода! Прежде всего, что такое partition1 и row1 ? Ну, это ключ раздела и ключ строки. Ключ раздела — это логическая группа объектов. Например, в приложении, где пользователи могут отправлять сообщения в блоге, хорошим кандидатом на ключ раздела будет имя пользователя — это позволит вам легко запрашивать все данные, относящиеся к данному пользователю. Ряд
Ключ — это уникальный идентификатор строки.

Очереди следуют той же идее — есть API, который позволяет помещать, получать и удалять сообщения из очереди в Windows Azure. Также гарантируется обработка очередей: когда сообщение читается из очереди, данные становятся невидимыми в течение определенного времени. Если по истечении этого времени сообщение не было явно удалено, например, из-за сбоя пакетного сценария, сообщение снова появится и снова будет доступно для обработки.

Windows Azure SDK для PHP также имеет некоторые дополнительные функции, характерные как для PHP, так и для Windows Azure. Это включает в себя такие функции, как поставщик хранилища сеансов, который позволяет обмениваться данными веб-сеанса через несколько экземпляров веб-роли. Еще одна особенность — это поток
Обертка, которая позволяет вам использовать стандартные файловые функции, такие как fopen для хранения fopen объектов.

Пример приложения ImageCloud, в котором используются все функции, описанные выше, доступно для загрузки в моем блоге.

Драйвер SQL Server для PHP

Драйвер SQL Server для PHP позволяет разработчикам PHP получать доступ к базам данных SQL Server, которые размещены на SQL Server или SQL Azure. Драйвер SQL Server для PHP использует драйвер ODBC для Microsoft SQL Server для низкоуровневой связи с SQL Server. В результате драйвер SQL Server для PHP поддерживается только в Windows и Windows Azure. Его можно загрузить и установить как расширение PHP.

При загрузке этого драйвера обязательно загрузите версию 2.0. Эта версия имеет дополнительное преимущество, заключающееся в том, что она поддерживает PDO (объекты данных PHP), что позволяет быстро переключаться между, например, MySQL и SQL Server.

Теперь давайте представим, что у вас есть база данных SQL Azure. В следующем коде показано, как подключиться к базе данных blog на blog базы данных SQL Azure и получить записи, упорядоченные по дате публикации:

 // Connect to SQL Azure using PDO $connection = new PDO('bvoj6aovnk.database.windows.net', 'sqladm@bvoj6aovnk', 'mypassword', array('Database' => 'blog')); // Fetch specific post $posts = array(); $query = 'SELECT * FROM posts ORDER BY PubDate DESC'; $statement = $connection->query($query); while ( $row = $statement->fetchObject('Post') ) { $posts[] = $row; } 

AppFabric SDK для PHP

Как я уже упоминал ранее, Windows Azure Platform AppFabric (не путать с Windows Server AppFabric) позволяет делегировать аутентификацию и авторизацию пользователей, а также пробивать брандмауэры и подключать приложения в различных защищенных сетях с помощью
легкость. Вы можете скачать его с http://dotnetservicesphp.codeplex.com .

С точки зрения аутентификации и авторизации важно немного узнать об аутентификации и федерации на основе утверждений — теме, по которой доступны некоторые интересные ресурсы . В основном ваше приложение
устанавливает доверительные отношения с полномочиями проверки подлинности (например, Windows Azure Platform AppFabric), что означает, что ваше приложение доверяет пользователям, прошедшим проверку подлинности с этими полномочиями. Далее ваше приложение попросит своих пользователей заявить о своих правах. За
Например, мое приложение может попросить пользователя заявить, что он может создавать заказы:

 $requiredClaims = array('CreateOrder' => true); if (ValidateClaimUtil::ValidateClaims($requiredClaims, "phpservice", 'http://localhost/SalesDashboard/', $signingKey)) { // User is allowed to create an order! } else { // User is not authorized. } 

Служба контроля доступа AppFabric платформы Windows Azure проверит наличие у пользователя этой претензии и подпишет токен безопасности с этой информацией. Поскольку ваше приложение доверяет этим полномочиям, оно будет либо продолжено, либо отклонено в зависимости от того, является ли претензия действительной.

Теперь есть два приложения, которые не могут соединиться друг с другом из-за политик, связанных с брандмауэром. Если оба приложения могут установить исходящее соединение с служебной шиной, служебная шина будет ретранслировать связь между двумя приложениями. Это так же просто, как
это — и невероятно полезно, если у вас жесткий ИТ-отдел!

Преимущества службы Windows Azure Platform AppFabric
автобус

Демонстрационный пример кода того, как это работает, приведет нас слишком далеко (поскольку это потребует некоторой настройки и настройки задач). Но если вы думаете, что это звучит как отличная функция, проверьте веб-сайт AppFabric для PHP , который содержит множество учебных пособий по этому
иметь значение.

Другие преимущества

В дополнение ко всем функциям и API, которые мы уже исследовали, существует ряд других функций и продуктов, на которые стоит обратить внимание. Эти функции не всегда специфичны для Windows Azure, как модуль перезаписи URL для IIS7, но ваше приложение может извлечь из них значительную выгоду.

Вклад PHP Azure

Платформа Windows Azure предоставляет некоторые полезные функции, такие как чтение файлов конфигурации (которые можно изменить даже после завершения развертывания) или вход в среду Windows Azure и доступ к локальному хранилищу на виртуальной машине для временного хранения файлов. К сожалению, эти функции встроены в гостевую ОС Windows Azure Cloud и недоступны в качестве служб REST.

Однако, к счастью, эти функции представлены в виде библиотеки динамических ссылок C, что означает, что написание расширения PHP для взаимодействия с ними является логическим шагом. И это именно то, что предоставляет библиотека PHP Azure Contributions: расширение PHP для использования данных конфигурации, ведения журнала и локального хранилища. Представьте, что в вашем файле ServiceConfiguration.csdef есть значение конфигурации с именем EmailSubject . Считать это значение очень просто, используя расширение PHP Azure Contributions:

 $$emailSubject = azure_getconfig("EmailSubject"); 

Мы также можем записать данные в журнал диагностики Windows Azure.
Вот пример, в котором я пишу информационное сообщение в
журнал диагностики:

 azure_log("This is some useful information!", "Information"); 

Проект PHP Azure Contributions доступен в CodePlex по адресу
http://phpazurecontrib.codeplex.com .

Перезапись URL

Как разработчик PHP, вы уже можете использовать перезапись URL. В файлах Apache .htaccess очень легко включить механизм перезаписи и переписать входящие URL-адреса в реальные сценарии. Например, URL http://www.example.com/products/books может быть сопоставлен с
http://www.example.com/index.php?page=products&category=books
на вашем сервере. Этот метод также доступен в IIS7, веб-сервере Microsoft, который также используется в веб-ролях Windows Azure. Приведенный выше пример перезаписи URL можно определить в
Файл Web.config в корне приложения Windows Azure:

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="RewriteProductsUrl" enabled="true" stopProcessing="true"> <match url="^products/([^/]+)/?$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php?page=products&category={R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration> 

Также обратите внимание на то, что, поскольку ваше приложение размещено на веб-сервере IIS в Windows Azure, вы можете использовать любой HttpModule для IIS, так же, как и для приложения, размещенного традиционно. Это позволяет легко включить сжатие вывода, использовать функции проверки подлинности и авторизации IIS и многое другое. Загрузите модуль перезаписи URL IIS
с
http://www.iis.net/download/urlrewrite .

Расширение WinCache

Как вы, возможно, знаете, файлы PHP интерпретируются в байт-код и выполняются из этого байт-кода при каждом запросе. Этот процесс довольно быстрый, но на сайтах с большим трафиком рекомендуется кэшировать байт-код и пропускать интерпретацию сценариев. Этот метод повышает производительность сайта без дополнительных ресурсов.

В Linux модули ускорителей, использующие эти методы, такие как APC и IonCube, очень распространены. Они также работают в Windows и потенциально могут работать в Windows Azure. Тем не менее, Microsoft также выпустила свой собственный модуль, который применяет эту технику: WinCache
расширение для PHP. Это расширение является самым быстрым ускорителем PHP в Windows, а также предоставляет такие функции, как хранение данных сеанса в этом слое кэша. Расширение Wincache для PHP можно загрузить с http://www.iis.net/download/wincacheforphp .

CDN — Сеть доставки контента

При использовании хранилища BLOB-объектов Windows Azure вы обнаружите, что доступна также полнофункциональная сеть доставки контента (CDN). CDN гарантирует, что, например, когда пользователь загружает изображение, это изображение будет извлечено с сервера хранения, который находится близко к клиенту этого пользователя. Это обеспечивает оптимальную скорость загрузки и задержку, а пользователь получает изображение очень быстро.

С хранилищем BLOB-объектов включить CDN так же просто, как нажать кнопку. После этого ваши общедоступные контейнеры реплицируются в CDN, что позволяет пользователям вашего сайта получать файлы и ресурсы как можно быстрее!

Использование Windows Azure CDN

Отображение доменного имени

В Windows Azure вашему приложению будет назначено доменное имя в домене cloudapp.net, например, myphpapp.cloudapp.net . Я думаю, вы согласитесь, что это не самый лучший URL. Это становится еще хуже, когда вы используете хранилище BLOB-объектов
для размещения файлов: myphpappstorage.blob.core.windows.net
ну просто безобразно!

К счастью, все URL-адреса в Windows Azure могут быть сопоставлены с настраиваемым доменным именем. Итак, чтобы сопоставить www.myphpapp.com с myphpapp.cloudapp.net , вам просто нужно добавить запись CNAME на ваш сервер имен. То же самое относится к хранилищу BLOB-объектов:
storage.myphpapp.com может быть сопоставлен с очень длинным myphpappstorage.blob.core.windows.net путем добавления записи CNAME на ваш DNS-сервер.

Подробнее об этом читайте в статье члена Azure Стива Маркса о пользовательских доменных именах .

Вывод

В этой статье мы сделали снимок платформы Windows Azure с точки зрения PHP. Хотя я немного предвзят, что внес вклад в Windows Azure SDK для PHP, я считаю, что платформа Windows Azure — отличный выбор для размещения приложений PHP в облачной среде с высокой степенью масштабируемости. Я также считаю, что такие функции, как служебная шина Windows Azure AppFabric Service Bus, очень важны. Суть в следующем: я считаю, что Microsoft делает все возможное, чтобы сделать PHP первоклассным гражданином на своей облачной платформе.

Еще один замечательный ресурс, связанный с PHP и Windows Azure, — это http://www.interoperabilitybridges.com , веб-сайт, на котором перечислены все PHP-проекты и проекты с открытым исходным кодом от Microsoft.

примечание: Microsoft: бизнес-партнер SitePoint
Эта статья стала возможной при поддержке Microsoft.
Мы тесно сотрудничаем с Microsoft, чтобы помочь разработать контент, который наиболее
полезно и актуально для вас — наших читателей.