В рамках курса "Проектирование высоконагруженных систем" для студентов 3-го семестра
образовательного проекта "Технополис": история Web, цель и содержание курса, источники и курсовой проект.
Видео всех лекций выложено в блоге Одноклассников: https://habrahabr.ru/company/odnoklassniki/blog/347798/
2. В этой лекции 2
История Web
Цель курса
Будущие лекции
Источники
Курсовой проект
3. История Web 3
The future is already here —
it’s just not very evenly
distributed.
William Gibson
4. Эры 4
«The Practice of Cloud System Administration ...» by Limoncelli
et al. (Appendix B):
The pre-web era (1985-1994)
The first web era (1995-2000)
The dot-bomb era (2000-2003)
The second web era (2003-2010)
The cloud computing era (2010-present)
5. The Pre-Web Era (1985–1994) 5
Internal customers of computer systems
Downtime used to be normal
Text-based Internet
Mainframes with spare capacity
«Fault-tolerant» computers if needed
Predictable growth
6. The Bubble (1995–2000) 6
Internet-only 24x7 companies
xDSL, VoIP, multi-user games, music, videos
Large AND reliable systems (Sun E4500), load balancers
Machine per website (licensing)
Unpredictable growth — bigger machines
Against economies of scale: more customers — higher
$/customer cost
Pre-announce downtimes or N+1/N+2
7. The Dot-Bomb Era (2000–2003) 7
Same high availability
Cheap surplus capacity: fiber, colocation — a kickstart
Commoditization of hardware, lower $ of home PCs, x86
LAMP vs Java/.NET
Recovery-Oriented Computing
Distributed computing techniques
Custom-designed stripped machines
8. The 2nd Web Era (2003–2010) 8
Better economics — second chance (Search, Ads, etc.)
HDFS, Hadoop, HBase, etc.
Standardization and automation
Datacenter as a computer
More $ effectiveness — PUE from 2.5 to 1.08
Ad-based freemium services
9. The Cloud Era (2010–present) 9
Faster communication, SSD, virtualization, SDN, etc.
Powerful life-critical mobile computing
Demand for low latency and even higher reliability
Larger infrastructure is cheaper
Profit from spare capacity subsidizes infra
Win-win: affordable, agile, elastic, etc.
10. Высоконагруженные системы 10
Устоявшегося определения нет
Обычно реактивные — отвечают на внешние запросы
RPS/QPS > 1 K
p99 < 300 мс
p999 < 1 с
Утилизация ресурсов 50-70%
11. Определения 11
Сервер — ПО
Сервис — система или продукт из нескольких серверов
Машина — ВМ или железка
Доступность — доля времени за год/неделю/день, когда
система отвечала на запросы (99.9%, 99.9%, etc.)
Масштабируемость — способность системы расширяться с
ростом нагрузки
12. Цель курса 12
Цель:
Подготовить разработчиков высоконагруженных систем
Задачи:
Подходы к построению
Стек технологий
Инструменты
Промышленные практики
13. 02. Типовые архитектуры 13
Производительность и оптимизация
Масштабируемость
Распределённые системы и отказоустойчивость
Кеширование и очереди
Микросервисы
Толстые и тонкие клиенты
Выбор технологий
14. 03. Эксплуатация 14
Роли и процессы
Деплой
Управление конфигурацией серверов
Инструменты администрирования
Выбор железа
Управление ростом и отказоустойчивостью
Инциденты
15. 04. Сетевой стек 15
TCP/IP
Web
Мобильные клиенты
Тонкая настройка
Оптимизации
Версионирование
Новые протоколы
26. Базовые технологии 26
Java 8
com.sun.net.httpserver.*
Файл(ы)/Embedded DBMS/one.nio.mem.*
HTTP REST API1
Параметры:
-Xmx1g
Сетевой порт
Путь на диске 32 ГБ
(Топология)
27. Организация 27
1. https://github.com/polis-mail-ru
2. Форкаем проект 2017-highload-kv
3. Реализуем хранилище, в цикле:
Отлаживаем
Расширяем и прогоняем модульные тесты
Подтягиваем тесты из upstream
4. Посылаем pull request в бранч со своим именем
5. Исправляем замечания
6. Получаем баллы
28. Обязательные этапы 28
1. Standalone: HTTP REST API + storage
GET/PUT/DELETE /v0/entity?id=<id>
Функциональные тесты
2. Multi Node: Coordinator, Sharding, Replication
Настраиваемая консистентность
Тесты на отказоустойчивость/консистентность
3. High Load: stress tests, optimization
Индивидуальная работа
Фиксы производительности
29. Баллы 29
1. Максимум — 30 баллов х 3 этапа + 10 бонусных
Хорошая реализация — 20 баллов/этап
2. Бонусные фичи
100 M ключей
Consistent hashing
Streaming (значения > 1 ГБ)
Разрешение конфликтов
Expire
Server-side processing
Что-то своё?