Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Евгений Клоков "Проектирование высоконагруженны...

DotNetRu
February 12, 2020

Евгений Клоков "Проектирование высоконагруженных приложений"

Преждевременная оптимизация – корень всех зол. На это высказывание Дональда Кнута обычно ссылаются те, кто в дальнейшем утопают в запоздалой оптимизации.
Масштабируемость приложений закладывается при проектировании. Так что поговорим о вопросах, которые помогут избежать проблем в будущем и на что стоит обратить внимание при создании приложения.

Евгений Клоков
Ведущий разработчик, БАРС груп, Казань
Имею опыт не только в возведении монолитов, но и разработки SOA приложений.

DotNetRu

February 12, 2020
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. МЫ СЕЙЧАС СДЕЛАЕМ ПРОТОТИП, А ПОТОМ ПЕРЕДЕЛАЕМ НОРМАЛЬНО. Первые попытки

    человечества решить проблемы с производительностью ПРОТОТИП В ПРОДАКШЕНЕ 2076 г.н.э. DB WebServer N App N WebServer 1 App 1 Balancer 4
  2. МЫ СЕЙЧАС СДЕЛАЕМ ПРОТОТИП, А ПОТОМ ПЕРЕДЕЛАЕМ НОРМАЛЬНО. Первые попытки

    человечества решить проблемы с производительностью ПРОТОТИП В ПРОДАКШЕНЕ 2076 г.н.э. DB WebServer N App N WebServer 1 App 1 Balancer 5
  3. МЫ СЕЙЧАС СДЕЛАЕМ ПРОТОТИП, А ПОТОМ ПЕРЕДЕЛАЕМ НОРМАЛЬНО. ПРОТОТИП В

    ПРОДАКШЕНЕ 2077 г.н.э. Master DB WebServer N App N WebServer 1 App 1 Balancer Slave DB 1 Slave DB 1 Новые попытки человечества решить проблемы с производительностью 6
  4. ЧТО НЕ ТАК 0 2 4 6 8 10 12

    1 2 3 N нагрузка сервис App Service 1 Service 2 Service 3 Service N 7
  5. ЧТО НЕ ТАК App.Main Service 1 Service 3 Service N

    App.2.1 Service 2 App.2.2 Service 2 0 2 4 6 8 10 12 1 2 3 N нагрузка сервис 8
  6. ЧТО НЕ ТАК 0 2 4 6 8 10 12

    1 2 3 N нагрузка сервис DB App App.Main Service 1 Service 3 Service N App.2.1 Service 2 App.2.2 Service 2 9
  7. ЧТО НЕ ТАК 0 2 4 6 8 10 12

    1 2 3 N нагрузка сервис DB App App.Main Service 1 Service 3 Service N App.2.1 Service 2 App.2.2 Service 2 10
  8. СУБД ХРАНЕНИЕ ДАННЫХ Data.file 100500Mb 110 001 101 111 111

    000 011 110 101 111 111 000 011 110 110 001 101 111 111 000 011 110 110 001 101 111 111 000 011 110 110 001 8, 16, 32, 64Kb 17
  9. СУБД ХРАНЕНИЕ ДАННЫХ Data.file 100500Mb 8, 16, 32, 64Kb 0x03

    0x01 0x00 0x04 0x0E 0x0F 0x0C 0x0D 0x07 0x06 0x0A 0x0B 0x08 0x09 0x05 0x02 18
  10. СУБД ХРАНЕНИЕ ДАННЫХ Data.file 100500Mb 0x03 0x01 0x00 0x04 0x0E

    0x0F 0x0C 0x0D 0x07 0x06 0x0A 0x0B 0x08 0x09 0x05 0x02 cache 0x03 0x02 0x02 0x03 address 10 2 meta 19
  11. СУБД ХРАНЕНИЕ ДАННЫХ Data.file 100500Mb 0x03 0x01 0x00 0x04 0x0E

    0x0F 0x0C 0x0D 0x07 0x06 0x0A 0x0B 0x08 0x09 0x05 0x02 cache 0x03 0x02 0x02 0x03 address 10 2 meta 0x0A 20
  12. СУБД ХРАНЕНИЕ ДАННЫХ Data.file 100500Mb 0x03 0x01 0x00 0x04 0x0E

    0x0F 0x0C 0x0D 0x07 0x06 0x0A 0x0B 0x08 0x09 0x05 0x02 cache 0x03 0x02 0x02 0x03 0x0A address 10 2 1 meta 0x08 0x0A 21
  13. 0xEF 0x02 СУБД ID:PK Column 1 Column 2 Table ЧТЕНИЕ

    ДАННЫХ. ФРАГМЕНТАЦИЯ 23
  14. 0xEF 0x02 СУБД ЧТЕНИЕ ДАННЫХ. ФРАГМЕНТАЦИЯ ID:PK Column 1 Column

    2 Table 1 ID:PK Column 1 Table 2 ID:PK Column 1 Table N 0xE1 0xFF 24
  15. СУБД Source Transform Table Cache Report Changed Transform Table Cache

    Report КЭШИРОВАНИЕ ДАННЫХ. ПЕРЕСЧЕТ 32
  16. СУБД Source Transform Table Cache Report Changed Transform Table Cache

    Report Report Transform КЭШИРОВАНИЕ ДАННЫХ. ПЕРЕСЧЕТ 33
  17. СУБД КЭШИРОВАНИЕ ДАННЫХ. ТРИГГЕРЫ Source Trigger Table Cache Report Source

    Trigger ок: - встроенный механизм - транзакционность - консистентность - простота реализации 36
  18. СУБД КЭШИРОВАНИЕ ДАННЫХ. ТРИГГЕРЫ Source Trigger Table Cache Report Source

    Trigger не ок: - блокировки - избыточные срабатывания - отсутствие контроля на уровне приложения 37
  19. СУБД/APP КЭШИРОВАНИЕ ДАННЫХ. ПРИЛОЖЕНИЕ Interceptor Changed Table Cache Report Source

    Transform ок: - асинхронность - контроль выполнения - нет связи запись\чтение App layer Storage layer 43
  20. СУБД/APP КЭШИРОВАНИЕ ДАННЫХ. ПРИЛОЖЕНИЕ Interceptor Changed Table Cache Report Source

    Transform не ок: - собственная реализация - нет очередей - нет транзакций - задержка запись/чтение App layer Storage layer 44
  21. СУБД ЗАДЕРЖКА ЗАПИСЬ/ЧТЕНИЕ - Пользователь 1 получает данные, актуальные на

    момент запроса (много времени) - Пользователь 2 меняет данные - Данные для пользователя 1 не актуальны в момент получения time 1 time 2 time 3 Data.V1 Select Result V1->V2 Update 46
  22. СУБД ЗАДЕРЖКА ЗАПИСЬ/ЧТЕНИЕ SQL в кэш + Trigger Cache V1

    Select Result Update Trigger Cache.V2 time 1 time 2 time 3 47
  23. СУБД ЗАДЕРЖКА ЗАПИСЬ/ЧТЕНИЕ SQL в кэш + Trigger - Пользователь

    1 получает данные, актуальные на момент запроса - Пользователь 2 меняет данные и ожидает пересчет триггера Cache V1 Select Result Update Trigger Cache.V2 time 1 time 2 time 3 48
  24. СУБД ЗАДЕРЖКА ЗАПИСЬ/ЧТЕНИЕ - Пользователь 1 получает данные, актуальные на

    момент запроса - Пользователь 2 меняет данные Async ReСalc Cache V1 Select Result Update Cache.V2 time 1 time 2 time 3 50
  25. СУБД/APP МАСШТАБИРОВАНИЕ Interceptor Changed Report Source App layer Storage layer

    Transform Table Cache Bus layer Service Report Table Cache Service 53
  26. Source Master DB SOA Interceptor Changed Report Source ServiceApp Transform

    Table Cache Service Service Internal balancer Report Table Cache Slave DB 1 Slave DB 2 54
  27. SOA ServiceApp 1 ServiceApp 2.2 Slave DB N Slave DB

    1 ServiceApp 2.1 Master DB ClientNode 2 SP1 SP2 ClientNode 1 SP1 SP2 ClientNode N SP1 SP2 56
  28. SOA ServiceApp 1 ServiceApp 2.2 Slave DB N ServiceApp2 Master

    DB ClientNode 2 SP1 SP2 ClientNode 1 SP1 SP2 ClientNode N SP1 SP2 ServiceApp 2.1 ServiceApp1 Master DB 57
  29. SOA ServiceApp 1 ServiceApp 2.2 Slave DB N ServiceApp2 Master

    DB ClientNode 2 SP1 SP2 ClientNode 1 SP1 SP2 ClientNode N SP1 SP2 ServiceApp 2.1 ServiceApp1 Master DB МАРШРУТИЗАЦИЯ 60