Статьи

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

  • Создание и миграция проектов позволяет легко перенести существующее приложение в приложение Windows Azure. Этот инструмент подготовит ваше приложение к упаковке и развертыванию в Windows Azure.

  • Storage Explorer предоставляет доступ к вашим учетным записям хранения Windows Azure и позволяет загружать и загружать большие двоичные объекты, таблицы запросов, очереди списков и т. Д.

  • Также включены отладка и локальное тестирование: нет необходимости немедленно развертывать и тестировать приложение в Windows Azure. Доступна среда моделирования «локальное облако».

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

Если вы планируете перенести приложение или создать новое для 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/ample 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 (); // загрузить файл в /home/maarten/example.txt$storageClient->getBlob(test 'example.txt', '/home/maarten/example.txt'); 

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

  класс 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 позволяет разработчикам 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 и получить записи, упорядоченные по дате публикации:

  // Подключение к SQL Azure с использованием PDO $ connection = new PDO ('bvoj6aovnk.database.windows.net', 'sqladm @ bvoj6aovnk', 'mypassword', array ('Database' => 'blog')); // Выборка конкретная запись $ posts = array (); $ query = 'SELECT * FROM posts ORDER BY PubDate DESC'; $ Statement = $ connection-> query ($ query); while ($ row = $ Statement-> fetchObject ('Post') )) {$ posts [] = $ row;} 

Как я уже упоминал ранее, 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 /', $ signatureKey)) {// Пользователю разрешено создавать заказ!} else {// Пользователь не авторизован.} 

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

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


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

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

Платформа 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 («Это полезная информация!», «Информация»); 

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

Как разработчик 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 / ([^ /] +) /? $" /> <условия> <add input = "{REQUEST_FILENAME}" matchType = "IsFile" negate = "true" /> <add input = "{ REQUEST_FILENAME} "matchType =" IsDirectory "negate =" true "/> </ condition> <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 .

В этой статье мы сделали снимок платформы 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, чтобы проверить свои знания.

примечание: Microsoft: бизнес-партнер SitePoint

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