Follow Me Widget

пятница, 2 сентября 2011 г.

Windows Azure Connect. Полное погружение.

Добрый день, друзья ! Сегодня  мы с Вами подробно познакомимся с технологией Windows Azure Connect. Начнем по старинке с определения. Итак, технология Windows Azure Connect позволяет объединять на IP-уровне наши облачные сервисы (роли) с удаленными компьютерами, работающими вне датацентров Microsoft, в единую виртуальную сеть. С помощью этой штуковины мы получаем инструмент, при помощи которого можно связать разбросанные по интернету физические машины в одну единую сеть на очень контролируемой и безопасной основе. На диаграмме чуть ниже мы можем увидеть ключевые особенности Azure Connect.

Windows Azure Connect
Как мы видим Windows Azure Connect создает логическую виртуальную сеть, состоящую из 2-х типов сущностей: Ролевых групп и Машинных групп. Ролевая группа содержит в себе набор ролей, запущенных в клауде, для которых включена возможность соединения с внешними машинами посредством Azure Connect. Машинная группа – это коллекция внешних машин, которая соединена с ролями в облаке посредством установки специального программного обеспечения под названием Windows Azure Connect Endpoint Software. Одна внешняя машина может принадлежать лишь одной машинной группе – это ограничение текущей версии коннекта. Кроме того существует целый ряд других ограничений и правил, с которыми стоит познакомиться:
  • Ролевая группа может быть присоединена к машинной группе либо к нескольким машинным группам (на рисунке выше можно заметить, что основная ролевая группа соединена одновременно с 2-мя машинными группами)
  • Участники одной ролевой группы не имеют соединения между собой, а также с другими ролевыми группами. Это сделано по причине того, что среда Windows Azure предлагает более удобные и прогрессивные средства соединения облачных сервисов.
  • Машинные группы в свою очередь могут объединятся как с ролевыми группами так и с другими машинными.
  • Машинные группы имеют свойство под названием “interconnected” – если оно установлено то все машины группы могут взаимодействовать друг-с-другом.
В целом это вся теория, о которой я хотел рассказать. В продолжение я хотел бы показать на примере как использовать технологию Windows Azure Connect. В качестве показательного примера будет приведено приложение, получающее набор данных из локального SQL-сервера и выводящее их на странице. Для демонстрации мы переведем приложение в облако, а сам SQL-сервер оставим на локальной машине, после чего при помощи Azure Connect снова попытаемся запустить приложение. Для тестового приложения воспользуемся базой данных Chinook, которую можно скачать вот по этому адресу http://chinookdatabase.codeplex.com/. (Примечание. Так как технология сейчас находится в Beta режиме, чтобы получить доступ к ней необходимо предварительно отправить запрос. Как правило его удовлетворяют в течение 4-5 дней)
В приложении находится одна страница Default.aspx, на которой выводится список всех музыкальных треков из таблицы Tracks. Для этих целей мы добавили в разметку EntityDataSource и GridView
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>

<asp:content id="HeaderContent" contentplaceholderid="HeadContent" runat="server">
</asp:content>
<asp:content id="BodyContent" contentplaceholderid="MainContent" runat="server">
    Datasource: <asp:Label runat="server" ID="Datasource"></asp:Label><br />
    <% foreach (var ip in Ips)
       {  %>
       Address: <%= ip %> <br />
    <%} %>
    <br />
<asp:entitydatasource id="MainDataSource" runat="server" where="it.TrackId < 100" enableflattening="False" connectionstring="name=ChinookEntities" defaultcontainername="ChinookEntities" entitysetname="Track"></asp:entitydatasource>
<asp:gridview runat="server" datakeynames="TrackId" autogeneratecolumns="False" datasourceid="MainDataSource">
    <columns>
        <asp:boundfield sortexpression="TrackId" readonly="True" headertext="TrackId" datafield="TrackId" />
        <asp:boundfield sortexpression="Name" headertext="Name" datafield="Name" />
        <asp:boundfield sortexpression="AlbumId" headertext="AlbumId" datafield="AlbumId" />
        <asp:boundfield sortexpression="MediaTypeId" headertext="MediaTypeId" datafield="MediaTypeId" />
        <asp:boundfield sortexpression="GenreId" headertext="GenreId" datafield="GenreId" />
        <asp:boundfield sortexpression="Composer" headertext="Composer" datafield="Composer" />
        <asp:boundfield sortexpression="Milliseconds" headertext="Milliseconds" datafield="Milliseconds" />
        <asp:boundfield sortexpression="Bytes" headertext="Bytes" datafield="Bytes" />
        <asp:boundfield sortexpression="UnitPrice" headertext="UnitPrice" datafield="UnitPrice" />
    </columns>
    </asp:gridview>
</asp:content>

Давайте также взглянем одним глазом на скудный codebehind страницы.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;

namespace WebRole1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected IPAddress[] Ips { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            using (var context = new ChinookEntities())
            {
                var datasource = context.Connection.DataSource;
                datasource = datasource.Remove(datasource.IndexOf('\\'));
                if (datasource == ".")
                {
                    datasource = "localhost";
                }
                Ips = Dns.GetHostEntry(datasource).AddressList;
                Datasource.Text = datasource;
            }
        }
    }
}

После запуска приложения на локальном эмуляторе получим список всех музыкальных треков в табличном виде.

Azire Connect Test App

Для того, чтобы портировать приложение в облако необходимо выполнить ряд действий. Во-первых необходимо получить активационный токен. Делается это на портале разработчика в разделе Virtual Network.

Windows Azure Connect Activation Token

После выбора пункта меню “Get Activation Token” откроется модальное окошко, в котором появится необходимый нам активационный токен. После копирования токена идем в свойства нашей Веб-роли и во вкладке Virtual Network ставим галочку “Activate Windows Azure Connect” и в текстовое поле вставляем скопированную ранее строку. Следующим шагом необходимо развернуть приложение в облаке. Делается это стандартными для Windows Azure средствами. В моем случае был выбран простейший способ - путем загрузки пакета. Как только приложение инициализируется и запустится в облаке мы увидим его в ветке “Groups and Roles”.

Connect App

Сейчас приложение не может получить доступ к локальном SQL серверу, поэтому следует приступить к объединению роли с локальной машиной. Для этого в первую очередь необходимо установить специальное программное обеспечение, оно становится доступным на скачивание при клике на специальную кнопку “Install Local Endpoint”.

Install Local Endpoint Software

После скачивания запускаем процесс инсталляции на машине с SQL-сервером и терпеливо ждем успешного завершения.

Windows Azure Connect Endpoint Software

Как только установка успешно завершится мы увидим на портале машину с SQL сервером.

Windows Azure Connect Software Installed

На данный момент у нас есть все реквизиты для объединения машин. Поэтому сделаем последний шаг, а именно создадим новую группу.

Create New Group Dialog

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

Create New Connect Group Dialog

Как только группа будет создана, запущенное в клауде приложение перезапустится в течении минут 5-10 и мы сможем посмотреть на результат. Для этого откроем приложение в браузере и посмотрим, что получилось.

Windows Azure Connect

А получилось то чего мы и добивались. Веб-роль получила доступ удаленному SQL серверу и отобразила информацию на странице. Как видим Windows Azure Connect просто великолепная технология, позволяющая создавать виртуальные сети и объединять в них внутрисистемные для облака роли с удаленными машинами, которые могут находится в различных уголках земного шара. Спасибо за внимание ! Пишите комментарии, задавайте вопросы, с удовольствием буду на них отвечать :)

Комментариев нет: