• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Разработка высоконагруженных веб-сайтов на платформе ASP.NET
 

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

on

  • 4,653 views

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

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

Statistics

Views

Total Views
4,653
Views on SlideShare
4,649
Embed Views
4

Actions

Likes
1
Downloads
31
Comments
0

3 Embeds 4

https://twitter.com 2
http://www.slideshare.net 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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