4. Чем
занят
backend?
• Склеивание
строк
• Сетевой
ввод-‐вывод
L1
cache
reference
0.5
ns
Main
memory
reference
100
ns
Read
1
MB
sequenRally
from
network
10,000,000
ns
Read
1
MB
sequenRally
from
disk
30,000,000
ns
5. Что
делает
backend
1. Принять
соединение
(обычно
от
proxy)
и
распарсить
HTTP-‐запрос
2. Аутенфикация
3. Авторизация
4. Сессия
6. Что
делает
backend
5. Распарсить
URL,
routing
6. Определение
формата
вывода,
rate
limiting,
…
7. Бизнес-‐логика,
выполнение
запроса,
кеширование
8. Формирование
ответа,
шаблоны
9. Блокирующийся
ввод-‐вывод
• accept(fd)
-‐
заблокируется,
пока
не
будет
нового
входящего
соединения
• read(fd,
buf)
-‐
заблокируется,
пока
не
прибудут
данные
в
сокет
• write(fd,
buf)
-‐
заблокируется,
пока
не
освободится
место
в
буфере
TCP
16. Нити
(ОС)
• Видны
планировщику
• Имеют
отдельный
стек
и
TLS
• Более
легковесные,
чем
процесс
• Отсутствует
изоляция
• Сложность
написания
корректных
программ
17. Синхронизация
• Любой
доступ
к
общим
данным
должен
быть
синхронизирован
• Атомарные
операции
(без
синхронизации)
• GIL
21. Кооперативная
многозадачность
• “Невидима”
для
ОС,
один
процесс
(нить)
• “Поток”
добровольно
передает
управление
другому
(проще
синхронизация)
• Явная:
callbackи
• Неявная:
green
threads
22. Реактор
• “Дай
мне
кучу
сокетов,
а
я
сделаю
callback,
когда
они
будут
готовы”
• Таймер:
“Вызови
меня
через
X
мс”
28. Соединение
• Соединение:
• на
один
запрос
• постоянное
TCP!
connect
Auth Send query Wait Result
Send query Wait Result Send query Wait Result
Disconnect