350 likes | 478 Views
Создание масштабируемых web приложений на Windows Azure. Проблема масштабирования web приложения. Увеличение нагрузки на сервера. Увеличиваем количество инстансов ролей для обслуживания большего количества клиентов.
E N D
Создание масштабируемыхweb приложений на WindowsAzure
Проблема масштабированияweb приложения
Увеличение нагрузки на сервера Увеличиваем количество инстансов ролей для обслуживания большего количества клиентов. Максимально используем все возможности Windows Azure для уменьшения нагрузки на основные сервера.
Подход к решению задачи - Генерал! Мы можем увеличить количество танков? - Так точно, товарищ министр! Можем,а зачем? - Хм, ну ладно, тогда не будем увеличивать. «ФайнаЮкрайна»
построения масштабируемогоweb приложения
Что поможет нам построить масштабируемое приложение Асинхронные механизмы работы Использование очередей сообщений Использование BLOB storage Использование CDN Использование Caching Использование SQL Azure Federation aka Sharding
Синхронная обработка private byte[] GetURLContents(string url) { var content = new MemoryStream(); varwebReq = (HttpWebRequest)WebRequest.Create(url); using (var response = webReq.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { responseStream.CopyTo(content); } } return content.ToArray(); }
Асинхронная обработка private async Task<byte[]>GetURLContentsAsync(string url) { varcontent = new MemoryStream(); varwebReq = (HttpWebRequest)WebRequest.Create(url); Task<WebResponse> responseTask = webReq.GetResponseAsync(); using (WebResponse response = awaitresponseTask) { using (Stream responseStream = response.GetResponseStream()) { Task copyTask = responseStream.CopyToAsync(content); await copyTask; } } return content.ToArray(); }
ВАЖНО! Copy Local = True
Стоимость asyncи await Безвозмездно, т.е. даром. http://msdn.microsoft.com/en-us/vstudio/gg316360
Использование Queue Хвост Очередь Голова
Стоимость Queue Storage Service Bus $0.01 за 10 000 сообщений $1.99 за 100 000 транзакцийAccess Control • $0.125 за1 GB данных • $0.01 за 10 000 транзакций
Azure web role Happy user Stateless HTML JPEG Azure web role
Azure web role + BLOB JPEG Azure BLOB Happy user HTML Azure web role
Стоимость BLOB $0.125 за 1 GB данных $0.01 за 10 000 транзакций
Использование CDN • BLOB URL: http://youraccount.blob.core.windows.net/images/image01.jpg • CDN URL: http://someidentifier.vo.msecnd.net/images/image01.jpg CDN может быть использован только для распространения контента публичных BLOB`ов
Стоимость CDN $0.12 за 1GB трафика изЕвропы иСеверной Америки $0.19 за 1GB трафика из других локаций $0.01 за 10,000 транзакций
Использование Cache AppFabric Cache AppFabric Cache Happy user 1 Happy user2 Happy user3 SQL Azure web role 1 web role 2
Что можно кэшировать Результаты запросов на выборку данных из базы Состояние сеанса Поток вывода (output caching) Любые другие данные
ИспользованиеSQL Azure Federation Happy user 1 Happy user2 Happy user3 SQL Azure Federated DB SQL Azure Node 1 SQL Azure Node 2 SQL Azure Node 3 web role 1 web role 2
Работа с SQL Azure Federation CREATE FEDERATION blogs_federation(fed_idBIGINT RANGE) GO USE FEDERATION blogs_federation (fed_id=-1) WITH RESET, FILTERING=OFF GO CREATE TABLE blogs_tbl ( blog_idbigintprimary key, blog_titlenvarchar(1024) not null, ... ) FEDERATED ON (fed_id=blog_id) GO ALTER FEDERATION blogs_federation SPLIT AT (fed_id=100) GO
Стоимость SQL Azure Federation Безвозмездно, т.е. даром. http://social.technet.microsoft.com/wiki/contents/articles/2281.federations-building-scalable-elastic-and-multi-tenant-database-solutions-with-sql-azure.aspx
Масштабируемое решение Queue worker 1 BLOB Happy user CDN worker 2 Cache SQL Node 1 web 2 web 1 SQL Azure Federated DB SQL Node 2
Вопросы? Бойко Антон Data Art .NET разработчик boyko.ant@live.com boykoant.blogspot.com
DEMO HOST TRACKER