Skip to content

Commit f450544

Browse files
committed
Update
1 parent 33a016b commit f450544

20 files changed

+8412
-0
lines changed

src/pages/advanced/best-practices.mdx

Lines changed: 484 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/advanced/deployment.mdx

Lines changed: 711 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/advanced/scaling.mdx

Lines changed: 482 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/advanced/troubleshooting.mdx

Lines changed: 614 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/api/connection.mdx

Lines changed: 513 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/api/server.mdx

Lines changed: 576 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/api/timer.mdx

Lines changed: 417 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/architecture/connections.mdx

Lines changed: 554 additions & 0 deletions
Large diffs are not rendered by default.

src/pages/architecture/event-loops.mdx

Lines changed: 414 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
export const pageTitle = 'Архитектура системы'
2+
3+
# Архитектура Localzet Server
4+
5+
Localzet Server представляет собой высокопроизводительный асинхронный event-driven сервер для PHP, построенный на принципах многопроцессорной обработки и неблокирующего I/O.
6+
7+
## Концептуальная архитектура
8+
9+
Localzet Server использует архитектуру **Master-Worker** с разделением ответственности между процессами:
10+
11+
```
12+
┌─────────────────────────────────────────────────────────────┐
13+
│ Master Process │
14+
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
15+
│ │ Init │ │ Monitor │ │ Signal │ │
16+
│ │ System │ │ Workers │ │ Handler │ │
17+
│ └──────────────┘ └──────────────┘ └──────────────┘ │
18+
└─────────────────────────────────────────────────────────────┘
19+
20+
┌─────────────┼─────────────┐
21+
│ │ │
22+
┌──────▼─────┐ ┌────▼──────┐ ┌───▼──────┐
23+
│ Worker 1 │ │ Worker 2 │ │ Worker N │
24+
│ │ │ │ │ │
25+
│ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │
26+
│ │ Event│ │ │ │ Event│ │ │ │ Event│ │
27+
│ │ Loop │ │ │ │ Loop │ │ │ │ Loop │ │
28+
│ └──────┘ │ │ └──────┘ │ │ └──────┘ │
29+
│ │ │ │ │ │
30+
│ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │
31+
│ │Socket│ │ │ │Socket│ │ │ │Socket│ │
32+
│ │Accept│ │ │ │Accept│ │ │ │Accept│ │
33+
│ └──────┘ │ │ └──────┘ │ │ └──────┘ │
34+
└────────────┘ └───────────┘ └──────────┘
35+
```
36+
37+
## Основные компоненты
38+
39+
### 1. Master Process (Мастер-процесс)
40+
41+
Мастер-процесс является координатором всей системы и выполняет следующие функции:
42+
43+
- **Инициализация системы**: Проверка окружения, загрузка конфигурации, создание слушающих сокетов
44+
- **Управление процессами**: Создание и мониторинг дочерних процессов (workers)
45+
- **Обработка сигналов**: Управление жизненным циклом через POSIX сигналы
46+
- **Сбор статистики**: Агрегация метрик от всех worker процессов
47+
48+
**Характеристики:**
49+
- Не обрабатывает клиентские запросы
50+
- Работает в режиме мониторинга
51+
- Поддерживает плавную перезагрузку без простоя сервиса
52+
53+
### 2. Worker Processes (Рабочие процессы)
54+
55+
Worker процессы — это дочерние процессы, которые фактически обрабатывают входящие соединения:
56+
57+
- **Обработка соединений**: Принятие и обработка TCP/UDP соединений
58+
- **Event Loop**: Работа с событийным циклом для неблокирующего I/O
59+
- **Выполнение бизнес-логики**: Обработка запросов через протоколы прикладного уровня
60+
- **Управление памятью**: Изоляция памяти между процессами
61+
62+
**Ключевые особенности:**
63+
- Полная изоляция памяти между процессами
64+
- Независимая работа событийных циклов
65+
- Автоматическое пересоздание при критических ошибках
66+
67+
### 3. Event Loop (Событийный цикл)
68+
69+
Event Loop — это ядро асинхронной обработки:
70+
71+
```
72+
┌─────────────────────────────────────┐
73+
│ Event Loop │
74+
│ │
75+
│ ┌──────────┐ ┌──────────────┐ │
76+
│ │ Timers │ │ Streams │ │
77+
│ │ │ │ │ │
78+
│ │ - Delay │ │ - Readable │ │
79+
│ │ - Repeat │ │ - Writable │ │
80+
│ └──────────┘ └──────────────┘ │
81+
│ │
82+
│ ┌──────────┐ ┌──────────────┐ │
83+
│ │ Signals │ │ Suspension │ │
84+
│ │ │ │ │ │
85+
│ │ - SIGINT │ │ - Fiber │ │
86+
│ │ - SIGTERM│ │ - Coroutine │ │
87+
│ └──────────┘ └──────────────┘ │
88+
│ │
89+
└─────────────────────────────────────┘
90+
```
91+
92+
**Поддерживаемые реализации:**
93+
94+
1. **Linux Event Loop** (по умолчанию для Unix)
95+
- Использует libuv, libev или libevent при наличии
96+
- Fallback на stream_select() если расширения недоступны
97+
- Оптимальная производительность на Unix-системах
98+
99+
2. **Windows Event Loop**
100+
- Адаптированная реализация для Windows
101+
- Использует stream_select() и Windows-специфичные API
102+
103+
3. **Swoole Event Loop**
104+
- Использует встроенный событийный цикл Swoole
105+
- Максимальная производительность при наличии расширения
106+
107+
4. **Swow Event Loop**
108+
- Современная реализация на базе Swow
109+
- Поддержка coroutines и fibers
110+
111+
## Многоуровневая архитектура протоколов
112+
113+
Localzet Server использует двухуровневую модель протоколов:
114+
115+
### Транспортный уровень (Transport Layer)
116+
117+
Отвечает за передачу данных по сети:
118+
119+
- **TCP** — надежная потоковая передача данных
120+
- **UDP** — дейтаграммная передача без установки соединения
121+
- **Unix Socket** — локальная межпроцессная коммуникация
122+
- **SSL/TLS** — зашифрованная передача поверх TCP
123+
124+
### Прикладной уровень (Application Layer)
125+
126+
Определяет формат данных и правила их обработки:
127+
128+
- **HTTP/HTTPS** — стандартный веб-протокол
129+
- **WebSocket** — двунаправленная коммуникация
130+
- **Text** — текстовый протокол с разделителем
131+
- **Frame** — фреймовая структура данных
132+
- **Custom** — пользовательские протоколы
133+
134+
## Поток данных в системе
135+
136+
```
137+
Клиент
138+
139+
│ TCP Connection
140+
141+
┌─────────────────┐
142+
│ Listening │
143+
│ Socket │
144+
└─────────────────┘
145+
146+
│ Accept Connection
147+
148+
┌─────────────────┐
149+
│ Event Loop │
150+
│ (Epoll/Select) │
151+
└─────────────────┘
152+
153+
│ Data Available
154+
155+
┌─────────────────┐
156+
│ Transport │
157+
│ Protocol │
158+
│ (TCP/UDP) │
159+
└─────────────────┘
160+
161+
│ Raw Data
162+
163+
┌─────────────────┐
164+
│ Application │
165+
│ Protocol │
166+
│ (HTTP/WS/etc) │
167+
└─────────────────┘
168+
169+
│ Decoded Data
170+
171+
┌─────────────────┐
172+
│ Business │
173+
│ Logic │
174+
│ (onMessage) │
175+
└─────────────────┘
176+
177+
│ Response
178+
179+
┌─────────────────┐
180+
│ Protocol │
181+
│ Encoding │
182+
└─────────────────┘
183+
184+
│ Encoded Data
185+
186+
┌─────────────────┐
187+
│ Transport │
188+
│ Sending │
189+
└─────────────────┘
190+
191+
│ Send to Client
192+
193+
Клиент
194+
```
195+
196+
## Модель памяти
197+
198+
### Изоляция процессов
199+
200+
Каждый worker процесс имеет полностью изолированную память:
201+
202+
```
203+
Master Process Worker 1 Worker 2 Worker 3
204+
┌─────────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
205+
│ Static Vars │ │Memory │ │Memory │ │Memory │
206+
│ Config │ │Isolated │ │Isolated │ │Isolated │
207+
│ Monitoring │ │ │ │ │ │ │
208+
└─────────────┘ └──────────┘ └──────────┘ └──────────┘
209+
│ │ │ │
210+
└─────────────────────┴─────────────────┴─────────────────┘
211+
Shared Socket (SO_REUSEPORT)
212+
```
213+
214+
### Управление соединениями
215+
216+
Каждое соединение хранится в памяти соответствующего worker процесса:
217+
218+
```php
219+
Worker Process Memory:
220+
├── $server->connections[id] → TcpConnection
221+
│ ├── $sendBuffer // Буфер отправки
222+
│ ├── $recvBuffer // Буфер приема
223+
│ ├── $protocol // Протокол прикладного уровня
224+
│ └── $context // Контекст соединения
225+
└── Static cache
226+
├── Request cache // Кеш запросов
227+
└── Protocol cache // Кеш протоколов
228+
```
229+
230+
## Масштабируемость
231+
232+
### Горизонтальное масштабирование
233+
234+
- **Многопроцессорность**: Каждый CPU core может обслуживать отдельный процесс
235+
- **SO_REUSEPORT**: Распределение соединений между процессами на уровне ядра
236+
- **Load Balancing**: Автоматическая балансировка через kernel
237+
238+
### Вертикальное масштабирование
239+
240+
- **Event-driven I/O**: Обработка тысяч соединений в одном процессе
241+
- **Memory efficiency**: Минимальное потребление памяти на соединение
242+
- **CPU optimization**: Эффективное использование процессорного времени
243+
244+
## Безопасность
245+
246+
### Изоляция процессов
247+
248+
- Каждый процесс работает независимо
249+
- Критическая ошибка в одном процессе не влияет на другие
250+
- Автоматическое восстановление после сбоев
251+
252+
### Управление привилегиями
253+
254+
- Возможность запуска worker процессов от непривилегированного пользователя
255+
- Drop privileges после привязки к портам
256+
- Изоляция от системных ресурсов
257+
258+
### Валидация данных
259+
260+
- Проверка всех входящих данных
261+
- Ограничение размера пакетов
262+
- Защита от переполнения буферов
263+
264+
## Производительность
265+
266+
### Ключевые оптимизации
267+
268+
1. **Zero-copy операции** где возможно
269+
2. **Буферизация I/O** для минимизации системных вызовов
270+
3. **Кеширование** парсированных данных
271+
4. **Пул соединений** для повторного использования ресурсов
272+
5. **Оптимизация памяти** через эффективные структуры данных
273+
274+
### Метрики производительности
275+
276+
- **Пропускная способность**: До сотен тысяч запросов в секунду
277+
- **Латентность**: Микросекунды на обработку запроса
278+
- **Параллельность**: Десятки тысяч одновременных соединений на процесс
279+
- **Использование памяти**: Минимальные накладные расходы на соединение
280+
281+
<Button
282+
href="/architecture/process-model"
283+
variant="text"
284+
arrow="right"
285+
children="Детали модели процессов"
286+
/>
287+

0 commit comments

Comments
 (0)