Секция-эксперимент. Обладая внушительным опытом консалтинга крупных проектов, сталкивающихся с наплывом посетителей и не справляющихся с нагрузкой, от ВКонтакте и Photosight до Эльдорадо и 1С-Битрикса, мы обратили внимание на то, что каждый раз мы рассказываем одно и тоже. В любом проекте мы говорим о фронтенде, очередях, партиционировании, каждый раз отговариваем заказчика от вертикального масштабирования и каждый раз раскрываем "тайну" виртуальных шардов ;)
Мы, сообщество веб-разработчиков, решили попробовать написать учебник. А сначала его проговорить. И начнем мы с этой лекции - двух часового экскурса по ИНСТРУМЕНТАМ для построения высоконагруженных систем. Мы не расскажем вам, как правильно, но мы расскажем как ВОЗМОЖНО. Раскроем пару десятков инструментов, которые применяются архитекторами крупных проектов.
Это будет шоу нескольких актеров, попробуем сделать это живо и интересно. Итак, о чем будем говорить:
Высоконагруженные веб-сервисы, общая архитектура системы: монолитное приложение или cервис-ориентированная архитектура.
Масштабирование архитектурного решения: в пространстве (распределение элементов программной системы по разным машинам, шардинг, принципы шардинга) или во времени (асинхронная обработка, пост-обработка). Вертикальное и горизонтальное масштабирование.
Масштабирование фронт-енд: балансировка нагрузки, проблема одновременного переподключения клиентов.
Архитектура приложения: трехзвенная модель архитектуры, разделение на слои: представление, бизнес-логика, данные.
Кеширование: проблема инвалидации кеша: малое время жизни кеша vs. сложная система инвалидации.
Масштабирование баз данных: различные типы БД (RDBMS, NoSQL), тюнинг запросов, шардинг, репликация, партиционирование, особенности использования БД в высоконагруженных проектах: отход от классической теории, денормализация данных.
Надежность (точнее - ненадежность): надежность железа; надежность, обеспечиваемая программными средствами; избыточность и дублирование.
Мониторинг и предупреждение проблем.
Эксплуатация высоконагруженных систем: dev-ops, общие вопросы администрирования, deployment.