Разработка высоконагруженных веб-сайтов на платформе ASP.NET<br />Гайдар Магдануров<br />t: twitter.com/gaidar<br />e: gai...
Содержание<br />Проектирование<br />Кеширование<br />Многопоточность<br />Оптимизация доступа к БД<br />Возможности веб-се...
Портальные решения<br />Инструменты разработки<br />Клиентская платформы разработки<br />Серверная платформа разработки<br...
Проектирование<br />Слоеная архитектура<br />Выделение front-end серверов<br />Отделение слоя БД<br />Масштабирование<br /...
Распределенная архитектура<br />Один сервер<br />Несколько серверов<br />Масштабируемая система<br />Дискретное добавление...
Реализация распределения<br />Веб-службы<br />ASMX<br />WCF (Windows Communication Foundation)<br />Потребление данных на ...
Простейшие приемы<br />Сервер(ы) для статики<br />Сервер(ы) для фоновых операций<br />Очереди запросов<br />Приоретизация<...
Кеширование<br />Компромисс производительность/актуальность<br />Снижение накладных расходов на доступ<br />Кеш в ASP.NET<...
Кеширование вывода страницы<br />На уровне страницы<br /><%@ OutputCache Duration="30" VaryByParam=“None" %><br />Фрагмент...
Схемы кеширования страниц<br />В web.config<br /><outputCacheSettings> <outputCacherofiles><br />    <add name="Basic" dur...
Актуализация кеша страницы<br />Устаревание кеша<br />Частичное обновление<br />Время: <asp:Substitutionrunat="server" id=...
Объект Cache<br />public DataObjectGetDataObject() {<br />  string cacheKey = "key";<br />  object cacheItem = Cache[cache...
Актуализация и зависимости<br />Декларативное использование<br /><asp:SqlDataSource ID="SupportDataSource" runat="server" ...
Актуализация и зависимости<br />Программное использование<br />using (SqlConnection con =  new SqlConnection(connectionStr...
SqlCacheDependency<br />
Создание зависимостей<br />Базовый класс<br />System.Web.Caching.CacheDependency<br />Сложные зависимости<br />AggregateCa...
Расширение кеш-подсистемы<br />Механизм провайдеров для кеша и сеанса<br />namespace MemcachedProviders.Cache<br />{<br />...
Проект Velocity<br />Распределенный кеш для сериализуемых объектов CLR<br />Динамическое добавление кеш-узлов<br />Автомат...
Асинхронная обработка запросов<br />Асинхронный метод страницы<br />Асинхронные задачи<br />Асинхронный вызов веб-службы<b...
Асинхронные страницы<br />Директива @ Page<br /> <%@ Page Async="true" AsyncTimeout="30" %><br />Для асинхронных страниц в...
Асинхронные методы<br />protected void Page_Load(object sender, EventArgs e){      AddOnPreRenderCompleteAsync(new BeginEv...
Асинхронные задачи<br />PageAsyncTask t = new PageAsyncTask(new BeginEventHandler(BeginAsyncM), new EndEventHandler(EndAsy...
Прокси-классывеб-служб<br />ds = new localhost.WebService();<br />ds.MyMethodCompleted += new localhost.GetLoginNamesCompl...
Многопоточность<br />Процессы, не взаимодействующие с UI<br />Задачи по расписанию<br />
Реализация многопоточности<br />System.Threading.Thread thread = new 	System.Threading.Thread( new 	System.Threading.Threa...
Оптимизация среды выполения<br />Machine.configфайл<br /><processModel enable="true" timeout="Infinite"idleTimeout="Infini...
Оптимизация среды выполения<br />Machine.configфайл<br /><httpRuntimeexecutionTimeout="90" maxRequestLength="4096"<br />us...
Проектирование работы с БД<br />Распределение данных<br />Частота чтения<br />Частота обновления<br />Связки между данными...
Доступ к данным<br />ADO.NET<br />ORM: LINQ2SQL, Entity Framwork<br />Дополнительные накладные расходы<br />Поддержка хран...
.NET на стороне сервера<br />Использование .NET процедур, типов и функций<br />Выполнение сложных вычислительных операций<...
Механизмы веб-сервера<br />Отключение не используемых модулей<br />Кеширование<br />На уровне ядра / в пользовательском ре...
Инструменты тестирования<br />Отдельная машина для тестирования<br />Эмуляция <br />Разных типов соединений<br />Разных сх...
Инструменты тестирования<br />ASP.NET Tracing<br />Visual Studio Team Test<br />Microsoft Application Center Test Tool<br ...
Спасибо за внимание!<br />
Полезные ссылки<br />Платформа<br />Серверhttp://www.iis.net<br />ASP.NET http://www.asp.net/<br />SQL Server http://www.m...
Гайдар Магдануров<br />t: twitter.com/gaidar<br />e: gaidarma@microsoft.com<br />m: +7 (905) 504-5716<br />
Upcoming SlideShare
Loading in …5
×

Разработка высоконагруженных веб-сайтов на платформе ASP.NET

5,198 views

Published on

Мастер-класс, проведенный на Highload 2009.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,198
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
44
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Разработка высоконагруженных веб-сайтов на платформе ASP.NET

  1. 1. Разработка высоконагруженных веб-сайтов на платформе ASP.NET<br />Гайдар Магдануров<br />t: twitter.com/gaidar<br />e: gaidarma@microsoft.com<br />m: +7 (905) 504-5716<br />
  2. 2. Содержание<br />Проектирование<br />Кеширование<br />Многопоточность<br />Оптимизация доступа к БД<br />Возможности веб-сервера<br />Тестирование производительности<br />
  3. 3. Портальные решения<br />Инструменты разработки<br />Клиентская платформы разработки<br />Серверная платформа разработки<br />Серверная платформа<br />
  4. 4. Проектирование<br />Слоеная архитектура<br />Выделение front-end серверов<br />Отделение слоя БД<br />Масштабирование<br />Во времени (логические компоненты)<br />В пространстве (физические серверы)<br />
  5. 5. Распределенная архитектура<br />Один сервер<br />Несколько серверов<br />Масштабируемая система<br />Дискретное добавление блоков серверов<br />Динамическое масштабирование<br />Вовлечение возможностей клиента<br />
  6. 6. Реализация распределения<br />Веб-службы<br />ASMX<br />WCF (Windows Communication Foundation)<br />Потребление данных на стороне клиента<br />Microsoft Ajax<br />
  7. 7. Простейшие приемы<br />Сервер(ы) для статики<br />Сервер(ы) для фоновых операций<br />Очереди запросов<br />Приоретизация<br />Кеширование, асинхронность, многопоточность<br />
  8. 8. Кеширование<br />Компромисс производительность/актуальность<br />Снижение накладных расходов на доступ<br />Кеш в ASP.NET<br />Статические переменные; Объекты Application и Session; Cookie файлы; Файловая система; База данных; Подсистема кэширования ASP.NET<br />
  9. 9. Кеширование вывода страницы<br />На уровне страницы<br /><%@ OutputCache Duration="30" VaryByParam=“None" %><br />Фрагментарное кеширование в элементах управления<br />
  10. 10. Схемы кеширования страниц<br />В web.config<br /><outputCacheSettings> <outputCacherofiles><br /> <add name="Basic" duration="10"varyByParam="none" /><br /> </outputCacheProfiles></outputCacheSettings><br />На странице<br /><%@ OutputCacheCacheProfile="Basic" %><br />
  11. 11. Актуализация кеша страницы<br />Устаревание кеша<br />Частичное обновление<br />Время: <asp:Substitutionrunat="server" id="UnCachedArea" methodname="GetDateTime" /><br />static string GetDateTime(HttpContext context){<br /> return DateTime.Now.ToString();}<br />
  12. 12. Объект Cache<br />public DataObjectGetDataObject() {<br /> string cacheKey = "key";<br /> object cacheItem = Cache[cacheKey] as DataObject; <br /> if(cacheItem == null) {<br />  cacheItem = DbHelper.GetDataObject();<br /> Cache.Insert(cacheKey, cacheItem, null, DateTime.Now.Add(AppConfig.CacheDuration), TimeSpan.Zero); }<br /> return (DataObject)cacheItem;<br />}<br />
  13. 13. Актуализация и зависимости<br />Декларативное использование<br /><asp:SqlDataSource ID="SupportDataSource" runat="server" ConnectionString="<%$ConnectionStrings:DemoString %>"<br />SelectCommand="SELECT …" EnableCaching="true" SqlCacheDependency="Demo:Support"CacheDuration="3600" CacheExpirationPolicy="Absolute"><br /></asp:SqlDataSource><br />
  14. 14. Актуализация и зависимости<br />Программное использование<br />using (SqlConnection con = new SqlConnection(connectionString)) {SqlCommand cm= new SqlCommand("SELECT …", con);<br />SqlCacheDependencydep = new SqlCacheDependency(cm);<br />...<br />Cache.Insert("Categories", categories, dep);<br />}<br />
  15. 15. SqlCacheDependency<br />
  16. 16. Создание зависимостей<br />Базовый класс<br />System.Web.Caching.CacheDependency<br />Сложные зависимости<br />AggregateCacheDependency<br />
  17. 17. Расширение кеш-подсистемы<br />Механизм провайдеров для кеша и сеанса<br />namespace MemcachedProviders.Cache<br />{<br /> public abstract class CacheProvider : ProviderBase<br /> { <br /> public abstract long DefaultExpireTime { get;set;}<br /> public abstract string KeySuffix { get; set; }<br />...<br />
  18. 18. Проект Velocity<br />Распределенный кеш для сериализуемых объектов CLR<br />Динамическое добавление кеш-узлов<br />Автоматическая балансировка нагрузки<br />Реализация в качестве Windows службы или встраиваемая в приложение<br />
  19. 19. Асинхронная обработка запросов<br />Асинхронный метод страницы<br />Асинхронные задачи<br />Асинхронный вызов веб-службы<br />
  20. 20. Асинхронные страницы<br />Директива @ Page<br /> <%@ Page Async="true" AsyncTimeout="30" %><br />Для асинхронных страниц возможно использовать методы асинхронной обработки<br />
  21. 21.
  22. 22. Асинхронные методы<br />protected void Page_Load(object sender, EventArgs e){ AddOnPreRenderCompleteAsync(new BeginEventHandler(BeginAsync), new EndEventHandler(EndAsync));<br />}public IAsyncResultBeginAsync(object sender, EventArgs e,AsyncCallback callback, object state)<br />{ // начинаем асинхронную операцию }public void EndAsync(IAsyncResultasyncResult)<br />{ // заканчиваем асинхронную операцию }<br />
  23. 23. Асинхронные задачи<br />PageAsyncTask t = new PageAsyncTask(new BeginEventHandler(BeginAsyncM), new EndEventHandler(EndAsyncM), new EndEventHandler(OnTimeoutAsyncM),StateObject, executeInParallel);<br />RegisterAsyncTask(task);<br />IAsyncResultBeginAsyncM (object sender, EventArgs e, AsyncCallback callback, object state){ }<br />void EndAsyncM(IAsyncResultasyncResult){ }<br />void OnTimeoutAsyncM (IAsyncResultasyncResult){ }<br />
  24. 24. Прокси-классывеб-служб<br />ds = new localhost.WebService();<br />ds.MyMethodCompleted += new localhost.GetLoginNamesCompletedEventHandler (ds_MyMethodCompleted);<br />ds. MyMethodAsync();<br />void ds_MyMethodCompleted(object sender, localhost.МетодCompletedEventArgs e) { }<br />
  25. 25. Многопоточность<br />Процессы, не взаимодействующие с UI<br />Задачи по расписанию<br />
  26. 26. Реализация многопоточности<br />System.Threading.Thread thread = new System.Threading.Thread( new System.Threading.ThreadStart(functionName));<br />thread.Start();<br />
  27. 27. Оптимизация среды выполения<br />Machine.configфайл<br /><processModel enable="true" timeout="Infinite"idleTimeout="Infinite"<br />shutdownTimeout="0:00:05" requestLimit="Infinite" <br />requestQueueLimit="5000" restartQueueLimit="10“<br />memoryLimit="60“ webGarden="false" cpuMask="0xffffffff" <br />userName="machine“ password="AutoGenerate" logLevel="Errors“ clientConnectedCheck="0:00:05“ responseDeadlockInterval="00:03:00" maxWorkerThreads="20“ maxIoThreads="20"/><br />
  28. 28. Оптимизация среды выполения<br />Machine.configфайл<br /><httpRuntimeexecutionTimeout="90" maxRequestLength="4096"<br />useFullyQualifiedRedirectUrl="false" minFreeThreads="8"<br />minLocalRequestFreeThreads="4" appRequestQueueLimit="100"<br />enableVersionHeader="true"/><br />
  29. 29. Проектирование работы с БД<br />Распределение данных<br />Частота чтения<br />Частота обновления<br />Связки между данными<br />Использование разных хранилищ<br />Логические / физические БД<br />Файловый кеш / Память<br />
  30. 30. Доступ к данным<br />ADO.NET<br />ORM: LINQ2SQL, Entity Framwork<br />Дополнительные накладные расходы<br />Поддержка хранимых процедур<br />
  31. 31. .NET на стороне сервера<br />Использование .NET процедур, типов и функций<br />Выполнение сложных вычислительных операций<br />Вынесение бизнес логики на сервер<br />
  32. 32. Механизмы веб-сервера<br />Отключение не используемых модулей<br />Кеширование<br />На уровне ядра / в пользовательском режиме<br />Балансировка нагрузки<br />Модуль Application Request Routing<br />Трассировка и логирование<br />
  33. 33. Инструменты тестирования<br />Отдельная машина для тестирования<br />Эмуляция <br />Разных типов соединений<br />Разных схем поведения пользователей<br />Разных браузеров<br />
  34. 34. Инструменты тестирования<br />ASP.NET Tracing<br />Visual Studio Team Test<br />Microsoft Application Center Test Tool<br />Web Application Stress Tool<br />
  35. 35. Спасибо за внимание!<br />
  36. 36. Полезные ссылки<br />Платформа<br />Серверhttp://www.iis.net<br />ASP.NET http://www.asp.net/<br />SQL Server http://www.microsoft.com/sqlserver/<br />Среда разработки<br />Visual Studio http://www.microsoft.com/visualstudio/<br />Expression http://www.microsoft.com/expression/<br />
  37. 37. Гайдар Магдануров<br />t: twitter.com/gaidar<br />e: gaidarma@microsoft.com<br />m: +7 (905) 504-5716<br />

×