HL — масштабирование web-серверов

Начать. Это бесплатно
или регистрация c помощью Вашего email-адреса
HL — масштабирование web-серверов создатель Mind Map: HL — масштабирование web-серверов

1. Ловушки / проблемы

1.1. share nothing

1.1.1. примеры: общие данные на NFS: сессии, код

1.1.2. минимум доступа к разделяемым ресурсам

1.1.3. share accuretely

1.1.3.1. клиент д.б. привязан жёстко к серверу

1.2. общий кэш

1.2.1. больше cache hits

2. Frontend / акселлератор

2.1. Почему двухуровневая схема: frontend / backend

2.1.1. принципиально разные задачи у frontend и backend

2.1.2. Разве повар вместо официанта принимает заказ?

2.1.3. backend (приложения)

2.1.3.1. на скриптовых языках

2.1.3.1.1. относительно медленно

2.1.3.2. Много блокирующего IO

2.1.3.3. Часто создают существенную нагрузку на CPU

2.2. Преимущества

2.2.1. Медленные клиенты (spoon feeding)

2.2.2. Большое количество соединений (> 100000)

2.2.3. Раздача статики

2.2.4. Кэширование динамики

2.2.5. Шифрование

2.2.6. Сжатие трафика

2.2.7. Аутентификация

2.2.8. SSI

2.2.8.1. server-side includes

2.2.8.1.1. юзаем на expired.reg.ru

2.2.9. Интеллектуальная обработка / доп. логика

2.2.9.1. nginx-perl

2.3. Примеры

2.3.1. nginx

2.3.1.1. до 100K+ соединений

2.3.1.2. малое потребление памяти (250 байт для неактивных keepalive-соединений)

2.3.1.3. удобная конфигурация

2.3.1.4. умение работать в несколько процессов

2.3.1.5. большое внимание к скорости и качеству кода

2.3.2. haproxy

2.3.3. lighttpd

2.4. кейсы frontend/backend

2.4.1. статика / динамика

2.4.2. nginx + Apache + mod_php, mod_perl, mod_python

2.4.3. nginx + FCGI

2.4.4. nginx + stand-alone http app server

3. Способы распределения нагрузки

3.1. DNS-LB

3.1.1. TTL

3.2. IP AnyCast

3.2.1. BGP

3.3. IP-LB (Layer-4)

3.3.1. Linux IPVS

3.3.2. FreeBSD CARP

3.3.3. M$ NLB

3.4. http-проксирование / reverse proxy (Layer-7)

3.5. http-переадресация

3.6. (технологии CDN)

3.7. можно миксовать различные подходы / выстраивать иерархию LB

4. Модели обработки сетевых соединений

4.1. process per connection

4.1.1. apache mpm_prefork

4.1.2. CGI: fork per connection

4.1.3. упираемся в RAM, CSW и число процессов

4.2. thread per connection

4.2.1. apache mpm_worker

4.2.2. упираемся в CSW и число потоков

4.3. FSM (finite state machine) / async IO

4.3.1. nginx