SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Интеграция Apache Lucene
в Windows Azure                          // DevCon•12

ВАДИМ НОВИЦКИЙ
Вице-президент по разработке в проекте
AtContent.com, IFFace Inc.

@vadinov | ifface.com
AtContent.com
О сервисе




                #msdevcon
AtContent - это
Новый
                                         Легальное
подход к      Автоматиза   Управление    копирование
публикации    ция          контентом     проще и
и             разделения   из одного     выгоднее
дистрибуции   дохода       места         нелегального




Платежная     Аналитика                  Оплата
                           Управление
система       и            разделением   автору
внутри        статистика   дохода        напрямую
Архитектура
Демонстрация решения
Как же все происходит внутри?
                                Демонстрация




                                               #msdevcon
Apache Lucene
Полнотекстовый поиск в Windows Azure




                                       #msdevcon
Apache Lucene - это
Библиотека для полнотекстового поиска
Высокопроизводительная
Написана на Java
С открытым исходным кодом
Кроссплатформенная
Портирована на многие языки программирования, включая C#
Apache Lucene в AtContent
Индексирование публикаций
Индексирование профилей
пользователей
Поиск по публикациям и профилям
пользователей
Библиотека Lucene.NET for
Azure
Доступна по ссылке:
  http://ou.gs/AzureDirectory



                                #msdevcon
Детали реализации
Хранение индексов
Apache Lucene — файлы
Lucene.NET for Azure — блобы


Структура данных
Элемент индекса — документ
Элемент документа — поле
Добавление в индекс
SearchTicket Ticket = Item.GetSearchTicket();
DeleteDocument(Ticket.Id);
string Language = DefinitionLanguage(Ticket.Language);
Analyzer Analyzer = new SnowballAnalyzer(Language);
var Writer = new IndexWriter(Directory, Analyzer);
AddDocument(Writer, Ticket);
Writer.Optimize();
Writer.Commit();
Writer.Close();
Добавление документа
var Doc = new Document();
Doc.Add(new Field("Id", Id, Field.Store.YES,
Field.Index.NOT_ANALYZED, Field.TermVector.NO));
Doc.Add(new Field("Type", Type, Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
Doc.Add(new Field("IndexField", IndexField,
Field.Store.YES, Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
Writer.AddDocument(Doc);
Блокировка поискового индекса
           Поисковый индекс
           блокируется на время
           изменения
Lease Extensions
            Используется
            расширение для
            блобов, блокирующее
            запись в блоб
Особенности исключений
          Некоторые исключения
          вываливаются из
          библиотеки наружу
Производительность
Синтетический тест на 1 000 000 записей
Заполнение индекса — около 250 секунд
Поиск частоупотребимого слова — 8-25 мс. (50 потоков,
478 325 совпадений)
Поиск редкоупотребимого слова — ≈0-5 мс. (50 потоков,
283 совпадения)
Конкурентный поиск не увеличивает время обработки запроса

Размер индекса — 20-30% от исходного контента
Сделать свой Яндекс?
Не получится 
Отсутствие поддержки морфологии
Терабайты индексов нужно где-то хранить

Отличия между поисковым движком и поисковой системой
Альтернативы
Bing API
5 000 запросов в сутки бесплатно
Поиск по веб, картинкам, новостям, видео
Не решает проблему поиска внутри сервиса

Sphinx
Потребует дополнительного MySQL-сервера
Более сложная интеграция
НЕ масштабируется
CPlase Engine
Библиотека улучшений для Windows Azure




                                         #msdevcon
Фабрика контекстов
           Создание контекстов
           для работы с Table
           Storage, Blob Storage и
           Queue
Фабрика контекстов
Создание контекста для Table Storage
 //было
 var StorageAccount = RoleEnvironment.IsEmulated ?
 CloudStorageAccount.FromConfigurationSetting(
   "EmulatedConnectionString") :
 CloudStorageAccount.FromConfigurationSetting(
   "ConnectionString");
 var Context = new TableServiceContext(
   StorageAccount.TableEndpoint.ToString(),
   StorageAccount.Credentials);
 //стало
 var Context = CPlase.Azure.GetContext();
Утилиты для Blob
           Работа с хранилищем,
           чтение папок, удаление
           папок, сериализация в
           блобы
Утилиты для Blob
Сохранение данных в блоб
 //было
 try
 {
     var BlobClient = Azure.GetBlobClient();
     var BlobRef = BlobClient.GetBlobReference(BlobUrl);
     BlobRef.UploadText(Content);
 }
 catch { }
 //стало
 CPlase.BlobUtils.SaveBlob(BlobUrl, Content);
Работа с кешем на экземпляре
           Создание кеша,
           управление кешем,
           синхронизация кеша
           между инстанциями
Сохранение на экземляре
//было
var Storage = RoleEnvironment.GetLocalResource(LocalResourceName);
var FinalPath = GetPath(Storage, Path);
try
{
    string DirectoryPath = System.IO.Path.GetDirectoryName(FinalPath);
    if (!Directory.Exists(DirectoryPath))
        Directory.CreateDirectory(DirectoryPath);
    File.WriteAllText(FinalPath, Content);
}
catch () {}
//стало
CPlase.InstanceStorage.Save(LocalResourceName, Path, Content);
Утилиты для работы с Queue
           Создание очередей,
           управление
           сообщениями в
           очередях
Работа с Queue
Добавление в очередь и вызов обработчика
 public static bool AddToQueue<QueueHandlerType>(
                 CloudQueue Queue, string Task) {
     try {
         var Message = new CloudQueueMessage(Task);
         Queue.AddMessage(Message);
         Internal.RoleCommunicatior.
                 WorkerRoleCommand(typeof(QueueHandlerType));
         return true;
     }
     catch { return false; } }
Расширения для LINQ
          Позволяют
          осуществлять
          операции Or и
          Contains для Table
          Storage
Утилиты безопасности
           Работа с шифрованием
           MD5, генерация
           последовательностей,
           системы счисления
Генерация ключа раздела
Использование утилит безопасности
 string MD5Bits = Security.GetHashMD5Binary(
                     InputString, PartitionBitCount);
 string MD5PartitionBits =
    Convert.ToString(Convert.ToInt32(MD5Bits, 2), 16);
 Entity.PartitionKey = MD5PartitionBits;
Фреймворк для сообщений
          Организация обмена
          сообщениями между
          ролями и
          экземплярами
Примеры сообщений
var Command = new CPlase.Internal.Commands.
           ClearCacheCommand(RESOURCE_NAME, LocalUrl);
CPlase.Internal.RoleCommunicatior.WebRoleCommand(Command);

CPlase.Internal.RoleCommunicatior.
                          WorkerRoleEchoCommand(Command);

CPlase.Internal.RoleCommunicatior.
              WorkerRoleCommand(typeof(QueueHandlerType));
Полезные материалы
http://ou.gs/AzureDirectory
https://cplaseengine.codeplex.com
http://ou.gs/CPlaseEngineAbout
Связанные сессии
WEB202
ASP.NET for Mobile and Slate Devices
IOP201
Windows Azure and Open Source Solutions
AZR205MN
Запускаем корпоративные сервисы в облака - практика для
разработчика
Пожалуйста
Оцените доклад и мастерство докладчика.
Форма для оценки находится в вашем инфопакете.
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the
         part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Weitere ähnliche Inhalte

Was ist angesagt?

Полное руководство по аудиту доменных служб Active Directory в Windows Server...
Полное руководство по аудиту доменных служб Active Directory в Windows Server...Полное руководство по аудиту доменных служб Active Directory в Windows Server...
Полное руководство по аудиту доменных служб Active Directory в Windows Server...
Netwrix Россия/СНГ
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
Alexander Feschenko
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
Alexey Androsov
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: Асинхронность
Yandex
 
Контейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПКонтейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООП
itclub_kz
 
Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011
ilyubin
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
PowerShell Web Access Руководство по использованию
PowerShell Web Access Руководство по использованиюPowerShell Web Access Руководство по использованию
PowerShell Web Access Руководство по использованию
Andrey Markin
 

Was ist angesagt? (20)

PowerShell
PowerShellPowerShell
PowerShell
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Полное руководство по аудиту доменных служб Active Directory в Windows Server...
Полное руководство по аудиту доменных служб Active Directory в Windows Server...Полное руководство по аудиту доменных служб Active Directory в Windows Server...
Полное руководство по аудиту доменных служб Active Directory в Windows Server...
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: Асинхронность
 
Михаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. Асинхронность
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
 
Контейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООПКонтейнеры и хранение объектов в ООП
Контейнеры и хранение объектов в ООП
 
Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011Игорь Любин - PowerShell - ConfeT&QA 2011
Игорь Любин - PowerShell - ConfeT&QA 2011
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Подводные камни System.Security.Cryptography
Подводные камни System.Security.CryptographyПодводные камни System.Security.Cryptography
Подводные камни System.Security.Cryptography
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
What's in a metrics? Ruby Russia 2018
What's in a metrics? Ruby Russia 2018What's in a metrics? Ruby Russia 2018
What's in a metrics? Ruby Russia 2018
 
PowerShell Web Access Руководство по использованию
PowerShell Web Access Руководство по использованиюPowerShell Web Access Руководство по использованию
PowerShell Web Access Руководство по использованию
 
NoSQL DataBase На коленке
NoSQL DataBase На коленкеNoSQL DataBase На коленке
NoSQL DataBase На коленке
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQL
 

Ähnlich wie IOP202 DevCon 2012 Apache Lucene in Windows Azure

Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
Alexander Feschenko
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows Azure
Andrew Mayorov
 
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Ontico
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
DevDay
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
JSC “Arcadia Inc”
 

Ähnlich wie IOP202 DevCon 2012 Apache Lucene in Windows Azure (20)

The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Как легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облакеКак легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облаке
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека
 
Построение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows AzureПостроение высоконагруженных приложений на базе Windows Azure
Построение высоконагруженных приложений на базе Windows Azure
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Современный подход к локализации на примере одного проекта
Современный подход к локализации на примере одного проектаСовременный подход к локализации на примере одного проекта
Современный подход к локализации на примере одного проекта
 
владивосток форум новости технологий 2015
владивосток форум новости технологий 2015владивосток форум новости технологий 2015
владивосток форум новости технологий 2015
 
HTML 5
HTML 5HTML 5
HTML 5
 
Windows azure общий обзор
Windows azure общий обзорWindows azure общий обзор
Windows azure общий обзор
 
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft UkraineHTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
HTML 5: будущее уже сегодня, Сергей Байдачный, Microsoft Ukraine
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows Azure
 
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
Windows Azure - BigData and Hadoop
Windows Azure - BigData and HadoopWindows Azure - BigData and Hadoop
Windows Azure - BigData and Hadoop
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
 
Silverlight 5
Silverlight 5Silverlight 5
Silverlight 5
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 

IOP202 DevCon 2012 Apache Lucene in Windows Azure

  • 1. Интеграция Apache Lucene в Windows Azure // DevCon•12 ВАДИМ НОВИЦКИЙ Вице-президент по разработке в проекте AtContent.com, IFFace Inc. @vadinov | ifface.com
  • 3. AtContent - это Новый Легальное подход к Автоматиза Управление копирование публикации ция контентом проще и и разделения из одного выгоднее дистрибуции дохода места нелегального Платежная Аналитика Оплата Управление система и разделением автору внутри статистика дохода напрямую
  • 5. Демонстрация решения Как же все происходит внутри? Демонстрация #msdevcon
  • 7. Apache Lucene - это Библиотека для полнотекстового поиска Высокопроизводительная Написана на Java С открытым исходным кодом Кроссплатформенная Портирована на многие языки программирования, включая C#
  • 8. Apache Lucene в AtContent Индексирование публикаций Индексирование профилей пользователей Поиск по публикациям и профилям пользователей
  • 9. Библиотека Lucene.NET for Azure Доступна по ссылке: http://ou.gs/AzureDirectory #msdevcon
  • 10. Детали реализации Хранение индексов Apache Lucene — файлы Lucene.NET for Azure — блобы Структура данных Элемент индекса — документ Элемент документа — поле
  • 11. Добавление в индекс SearchTicket Ticket = Item.GetSearchTicket(); DeleteDocument(Ticket.Id); string Language = DefinitionLanguage(Ticket.Language); Analyzer Analyzer = new SnowballAnalyzer(Language); var Writer = new IndexWriter(Directory, Analyzer); AddDocument(Writer, Ticket); Writer.Optimize(); Writer.Commit(); Writer.Close();
  • 12. Добавление документа var Doc = new Document(); Doc.Add(new Field("Id", Id, Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO)); Doc.Add(new Field("Type", Type, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); Doc.Add(new Field("IndexField", IndexField, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); Writer.AddDocument(Doc);
  • 13. Блокировка поискового индекса Поисковый индекс блокируется на время изменения
  • 14. Lease Extensions Используется расширение для блобов, блокирующее запись в блоб
  • 15. Особенности исключений Некоторые исключения вываливаются из библиотеки наружу
  • 16. Производительность Синтетический тест на 1 000 000 записей Заполнение индекса — около 250 секунд Поиск частоупотребимого слова — 8-25 мс. (50 потоков, 478 325 совпадений) Поиск редкоупотребимого слова — ≈0-5 мс. (50 потоков, 283 совпадения) Конкурентный поиск не увеличивает время обработки запроса Размер индекса — 20-30% от исходного контента
  • 17. Сделать свой Яндекс? Не получится  Отсутствие поддержки морфологии Терабайты индексов нужно где-то хранить Отличия между поисковым движком и поисковой системой
  • 18. Альтернативы Bing API 5 000 запросов в сутки бесплатно Поиск по веб, картинкам, новостям, видео Не решает проблему поиска внутри сервиса Sphinx Потребует дополнительного MySQL-сервера Более сложная интеграция НЕ масштабируется
  • 20. Фабрика контекстов Создание контекстов для работы с Table Storage, Blob Storage и Queue
  • 21. Фабрика контекстов Создание контекста для Table Storage //было var StorageAccount = RoleEnvironment.IsEmulated ? CloudStorageAccount.FromConfigurationSetting( "EmulatedConnectionString") : CloudStorageAccount.FromConfigurationSetting( "ConnectionString"); var Context = new TableServiceContext( StorageAccount.TableEndpoint.ToString(), StorageAccount.Credentials); //стало var Context = CPlase.Azure.GetContext();
  • 22. Утилиты для Blob Работа с хранилищем, чтение папок, удаление папок, сериализация в блобы
  • 23. Утилиты для Blob Сохранение данных в блоб //было try { var BlobClient = Azure.GetBlobClient(); var BlobRef = BlobClient.GetBlobReference(BlobUrl); BlobRef.UploadText(Content); } catch { } //стало CPlase.BlobUtils.SaveBlob(BlobUrl, Content);
  • 24. Работа с кешем на экземпляре Создание кеша, управление кешем, синхронизация кеша между инстанциями
  • 25. Сохранение на экземляре //было var Storage = RoleEnvironment.GetLocalResource(LocalResourceName); var FinalPath = GetPath(Storage, Path); try { string DirectoryPath = System.IO.Path.GetDirectoryName(FinalPath); if (!Directory.Exists(DirectoryPath)) Directory.CreateDirectory(DirectoryPath); File.WriteAllText(FinalPath, Content); } catch () {} //стало CPlase.InstanceStorage.Save(LocalResourceName, Path, Content);
  • 26. Утилиты для работы с Queue Создание очередей, управление сообщениями в очередях
  • 27. Работа с Queue Добавление в очередь и вызов обработчика public static bool AddToQueue<QueueHandlerType>( CloudQueue Queue, string Task) { try { var Message = new CloudQueueMessage(Task); Queue.AddMessage(Message); Internal.RoleCommunicatior. WorkerRoleCommand(typeof(QueueHandlerType)); return true; } catch { return false; } }
  • 28. Расширения для LINQ Позволяют осуществлять операции Or и Contains для Table Storage
  • 29. Утилиты безопасности Работа с шифрованием MD5, генерация последовательностей, системы счисления
  • 30. Генерация ключа раздела Использование утилит безопасности string MD5Bits = Security.GetHashMD5Binary( InputString, PartitionBitCount); string MD5PartitionBits = Convert.ToString(Convert.ToInt32(MD5Bits, 2), 16); Entity.PartitionKey = MD5PartitionBits;
  • 31. Фреймворк для сообщений Организация обмена сообщениями между ролями и экземплярами
  • 32. Примеры сообщений var Command = new CPlase.Internal.Commands. ClearCacheCommand(RESOURCE_NAME, LocalUrl); CPlase.Internal.RoleCommunicatior.WebRoleCommand(Command); CPlase.Internal.RoleCommunicatior. WorkerRoleEchoCommand(Command); CPlase.Internal.RoleCommunicatior. WorkerRoleCommand(typeof(QueueHandlerType));
  • 34. Связанные сессии WEB202 ASP.NET for Mobile and Slate Devices IOP201 Windows Azure and Open Source Solutions AZR205MN Запускаем корпоративные сервисы в облака - практика для разработчика
  • 35. Пожалуйста Оцените доклад и мастерство докладчика. Форма для оценки находится в вашем инфопакете.
  • 36. © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.