Your SlideShare is downloading. ×
  • Like
Разработка высоконагруженных веб-сайтов на платформе ASP.NET
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 4,169 views
Published

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

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

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,169
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
40
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Разработка высоконагруженных веб-сайтов на платформе ASP.NET
    Гайдар Магдануров
    t: twitter.com/gaidar
    e: gaidarma@microsoft.com
    m: +7 (905) 504-5716
  • 2. Содержание
    Проектирование
    Кеширование
    Многопоточность
    Оптимизация доступа к БД
    Возможности веб-сервера
    Тестирование производительности
  • 3. Портальные решения
    Инструменты разработки
    Клиентская платформы разработки
    Серверная платформа разработки
    Серверная платформа
  • 4. Проектирование
    Слоеная архитектура
    Выделение front-end серверов
    Отделение слоя БД
    Масштабирование
    Во времени (логические компоненты)
    В пространстве (физические серверы)
  • 5. Распределенная архитектура
    Один сервер
    Несколько серверов
    Масштабируемая система
    Дискретное добавление блоков серверов
    Динамическое масштабирование
    Вовлечение возможностей клиента
  • 6. Реализация распределения
    Веб-службы
    ASMX
    WCF (Windows Communication Foundation)
    Потребление данных на стороне клиента
    Microsoft Ajax
  • 7. Простейшие приемы
    Сервер(ы) для статики
    Сервер(ы) для фоновых операций
    Очереди запросов
    Приоретизация
    Кеширование, асинхронность, многопоточность
  • 8. Кеширование
    Компромисс производительность/актуальность
    Снижение накладных расходов на доступ
    Кеш в ASP.NET
    Статические переменные; Объекты Application и Session; Cookie файлы; Файловая система; База данных; Подсистема кэширования ASP.NET
  • 9. Кеширование вывода страницы
    На уровне страницы
    <%@ OutputCache Duration="30" VaryByParam=“None" %>
    Фрагментарное кеширование в элементах управления
  • 10. Схемы кеширования страниц
    В web.config
    <outputCacheSettings> <outputCacherofiles>
    <add name="Basic" duration="10"varyByParam="none" />
    </outputCacheProfiles></outputCacheSettings>
    На странице
    <%@ OutputCacheCacheProfile="Basic" %>
  • 11. Актуализация кеша страницы
    Устаревание кеша
    Частичное обновление
    Время: <asp:Substitutionrunat="server" id="UnCachedArea" methodname="GetDateTime" />
    static string GetDateTime(HttpContext context){
    return DateTime.Now.ToString();}
  • 12. Объект 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;
    }
  • 13. Актуализация и зависимости
    Декларативное использование
    <asp:SqlDataSource ID="SupportDataSource" runat="server" ConnectionString="<%$ConnectionStrings:DemoString %>"
    SelectCommand="SELECT …" EnableCaching="true" SqlCacheDependency="Demo:Support"CacheDuration="3600" CacheExpirationPolicy="Absolute">
    </asp:SqlDataSource>
  • 14. Актуализация и зависимости
    Программное использование
    using (SqlConnection con = new SqlConnection(connectionString)) {SqlCommand cm= new SqlCommand("SELECT …", con);
    SqlCacheDependencydep = new SqlCacheDependency(cm);
    ...
    Cache.Insert("Categories", categories, dep);
    }
  • 15. SqlCacheDependency
  • 16. Создание зависимостей
    Базовый класс
    System.Web.Caching.CacheDependency
    Сложные зависимости
    AggregateCacheDependency
  • 17. Расширение кеш-подсистемы
    Механизм провайдеров для кеша и сеанса
    namespace MemcachedProviders.Cache
    {
    public abstract class CacheProvider : ProviderBase
    {
    public abstract long DefaultExpireTime { get;set;}
    public abstract string KeySuffix { get; set; }
    ...
  • 18. Проект Velocity
    Распределенный кеш для сериализуемых объектов CLR
    Динамическое добавление кеш-узлов
    Автоматическая балансировка нагрузки
    Реализация в качестве Windows службы или встраиваемая в приложение
  • 19. Асинхронная обработка запросов
    Асинхронный метод страницы
    Асинхронные задачи
    Асинхронный вызов веб-службы
  • 20. Асинхронные страницы
    Директива @ Page
    <%@ Page Async="true" AsyncTimeout="30" %>
    Для асинхронных страниц возможно использовать методы асинхронной обработки
  • 21.
  • 22. Асинхронные методы
    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)
    { // заканчиваем асинхронную операцию }
  • 23. Асинхронные задачи
    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){ }
  • 24. Прокси-классывеб-служб
    ds = new localhost.WebService();
    ds.MyMethodCompleted += new localhost.GetLoginNamesCompletedEventHandler (ds_MyMethodCompleted);
    ds. MyMethodAsync();
    void ds_MyMethodCompleted(object sender, localhost.МетодCompletedEventArgs e) { }
  • 25. Многопоточность
    Процессы, не взаимодействующие с UI
    Задачи по расписанию
  • 26. Реализация многопоточности
    System.Threading.Thread thread = new System.Threading.Thread( new System.Threading.ThreadStart(functionName));
    thread.Start();
  • 27. Оптимизация среды выполения
    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"/>
  • 28. Оптимизация среды выполения
    Machine.configфайл
    <httpRuntimeexecutionTimeout="90" maxRequestLength="4096"
    useFullyQualifiedRedirectUrl="false" minFreeThreads="8"
    minLocalRequestFreeThreads="4" appRequestQueueLimit="100"
    enableVersionHeader="true"/>
  • 29. Проектирование работы с БД
    Распределение данных
    Частота чтения
    Частота обновления
    Связки между данными
    Использование разных хранилищ
    Логические / физические БД
    Файловый кеш / Память
  • 30. Доступ к данным
    ADO.NET
    ORM: LINQ2SQL, Entity Framwork
    Дополнительные накладные расходы
    Поддержка хранимых процедур
  • 31. .NET на стороне сервера
    Использование .NET процедур, типов и функций
    Выполнение сложных вычислительных операций
    Вынесение бизнес логики на сервер
  • 32. Механизмы веб-сервера
    Отключение не используемых модулей
    Кеширование
    На уровне ядра / в пользовательском режиме
    Балансировка нагрузки
    Модуль Application Request Routing
    Трассировка и логирование
  • 33. Инструменты тестирования
    Отдельная машина для тестирования
    Эмуляция
    Разных типов соединений
    Разных схем поведения пользователей
    Разных браузеров
  • 34. Инструменты тестирования
    ASP.NET Tracing
    Visual Studio Team Test
    Microsoft Application Center Test Tool
    Web Application Stress Tool
  • 35. Спасибо за внимание!
  • 36. Полезные ссылки
    Платформа
    Сервер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/
  • 37. Гайдар Магдануров
    t: twitter.com/gaidar
    e: gaidarma@microsoft.com
    m: +7 (905) 504-5716