Skip to content

Commit 074b1f6

Browse files
eguguchkinssnd
andauthored
docs: translate architecture docs to russian (#123)
Co-authored-by: Sandu K <[email protected]>
1 parent f80709c commit 074b1f6

File tree

2 files changed

+74
-91
lines changed

2 files changed

+74
-91
lines changed

docs/en/13-architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,5 +156,5 @@ That is, if a write operation succeeds on a replica of a shard and fails on anot
156156
would be out of sync and won't be (automatically) synced.
157157
The only given guarantee is that a write operation will succeed only having at least RF replicas saved on disk.
158158
This optimization allows seq-db to have a higher than alternatives ingestion throughput
159-
with the obvious price of the possible inconsistencies of retrieval and aggregation queries.
159+
with the obvious price of the possible inconsistencies of histogram and aggregation queries.
160160
seq-db was designed as a database for logs/traces with this tradeoff in mind.

docs/ru/13-architecture.md

Lines changed: 73 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,61 @@
1-
# Cluster-Mode Architecture
1+
# Архитектура кластерного режима
22

3-
## Components overview
3+
## Обзор компонентов
44

5-
In cluster mode, seq-db consists of two main components:
6-
- seq-db store (seq-db instance running with `--mode=store flag`)
7-
- seq-db proxy (seq-db instance running with `--mode=proxy flag`).
5+
В кластерном режиме seq-db состоит из двух основных компонентов:
6+
- seq-db store (экземпляр seq-db, запущенный с флагом `--mode=store`)
7+
- seq-db proxy (экземпляр seq-db, запущенный с флагом `--mode=proxy`).
88

99
### seq-db store
10-
seq-db store is the stateful storage component, that keeps all the
11-
written documents and handles both reads and writes.
12-
All data written into seq-db eventually makes its way to one or multiple stores.
10+
seq-db store — это stateful-компонент, который хранит все записанные документы и обрабатывает как чтение, так и запись.
11+
Все данные, записанные в seq-db, в конечном итоге попадают в один или несколько store'ов.
1312

13+
#### Ключевые характеристики
14+
- Развертывается как k8s `Statefulset`
15+
- Архитектура без общего состояния (share-nothing): экземпляр seq-db store не знает о других store'ах.
16+
- Поддерживает обратный индекс в памяти и на диске, что позволяет осуществлять поиск по индексированным полям.
1417

15-
#### Key characteristics
16-
- Deployed as k8s `Statefulset`
17-
- Share-nothing architecture: a seq-db store instance is unaware of any other stores.
18-
- Maintains in-memory and on-disk inverted indexes, allowing search on indexed fields.
18+
#### Структура файлов
19+
seq-db store хранит все данные документов в трех типах файлов:
1920

21+
| Тип файла | Назначение |
22+
|-----------|--------------------------------------------------------|
23+
| `.docs` | Хранит сжатые батчи сырых документов логов |
24+
| `.meta` | Токенизированный поток метаданных (для восстановления) |
25+
| `.index` | Дисковый обратный индекс. |
2026

21-
#### File layout
22-
seq-db store keeps all document data in three file types:
27+
Поскольку набор данных хранится в этих трех типах файлов, перемещение или восстановление шарда выполняется просто: достаточно скопировать (`cp` / `rsync`) директорию на целевой узел и запустить под.
2328

24-
| File type | Purpose |
25-
|-----------|------------------------------------------------|
26-
| `.docs` | Stores compressed batches of raw log documents |
27-
| `.meta` | Tokenized metadata stream (used for recovery) |
28-
| `.index` | On-disk inverted index |
29+
Подробнее о типах файлов и их внутренней структуре читайте [здесь](internal/fractions.md).
2930

30-
31-
Because the dataset is stored in these three file types, moving or restoring a
32-
shard is straightforward: simply `cp` / `rsync` the directory
33-
to the target node and start the pod.
34-
35-
Read more about file types and their internal structure [here](internal/fractions.md).
36-
37-
#### Durability
38-
A write operation is acknowledged only after the payload is safely persisted:
31+
#### Durability (обеспечение надежности)
32+
Операция записи подтверждается только после того, как полезная нагрузка гарантированно сохранена:
3933

4034
```
41-
write, fsync # .meta file
42-
write, fsync # .data file
35+
write, fsync # файл .meta
36+
write, fsync # файл .data
4337
```
44-
That is, two write system calls followed by two fsync
45-
calls—guaranteeing the data survives a node
46-
crash or restart before the client receives a success response.
47-
Indexing occurs asynchronously, so it usually takes under 1
48-
second before the newly written documents are available for search queries.
49-
Note that this value may be slightly higher when bulk load spikes happen
38+
То есть, два системных вызова `write`, за которыми следуют два вызова `fsync` — это гарантирует, что данные переживут аварию узла или его перезапуск до того, как клиент получит ответ об успехе.
39+
Индексация происходит асинхронно, поэтому обычно проходит менее 1 секунды, прежде чем вновь записанные документы становятся доступны для поисковых запросов.
40+
Примечание: это значение может быть немного выше в периоды пиковой нагрузки.
5041

5142
### seq-db proxy
52-
seq-db proxy is a stateless coordinator for all read & write traffic.
53-
It maintans a user-defined cluster topology, and allows changes in read-write
54-
traffic distribution without changes to the stateful components
43+
seq-db proxy — это stateless-координатор всего трафика чтения и записи.
44+
Он поддерживает заданную пользователем топологию кластера и позволяет изменять распределение read-write трафика без изменений stateful-компонентов.
5545

46+
#### Ключевые характеристики
47+
- Развертывается как k8s `Deployment`
48+
- Выполняет логическую репликацию между store'ами
49+
- Маршрутизирует трафик между уровнями хранения (hot/cold stores)
5650

57-
#### Key characteristics
58-
- Deployed as k8s `Deployment`
59-
- Performs logical replication between stores
60-
- Routes traffic between storage tiers (hot/cold stores)
51+
seq-db proxy токенизирует каждый входящий документ и сжимает батчи с помощью zstd / lz4 перед отправкой батчей в seq-db stores.
6152

62-
seq-db proxy tokenizes every incoming document
63-
and compresses batches with zstd / lz4
64-
before sending batches to seq-db stores.
53+
### Read-path & write-path (коэффициент репликации rf=2)
54+
Давайте рассмотрим пример архитектуры с 4 шардами seq-db и коэффициентом репликации (replication-factor)=2 (каждый лог должен храниться в двух отдельных seq-db stores).
55+
Обратите внимание, что реплики шарда могут располагаться в разных зонах доступности (availability zones).
6556

66-
### Read-path & write-path (rf=2)
67-
Let's take a look at an example architecture with 4 seq-db shards and replication-factor=2
68-
(each log must be stored in two separate seq-db stores).
69-
Note that replicas of shard can be located in different availability zones.
70-
71-
### Write-path
72-
The write commits only after seq-db proxy receives an ack **from all replicas of the addressed shard**.
57+
### Write-path (путь записи)
58+
Запись фиксируется (commit) только после того, как seq-db proxy получает подтверждение (ack) **от всех реплик целевого шарда**.
7359

7460
```mermaid
7561
sequenceDiagram
@@ -78,16 +64,16 @@ sequenceDiagram
7864
participant Proxy as seq-db proxy
7965
8066
box Shard1
81-
participant A as seq-db store<br /> shard1 replica A
82-
participant B as seq-db store <br />shard1 replica B
67+
participant A as seq-db store<br />шард1 реплика A
68+
participant B as seq-db store<br />шард1 реплика B
8369
end
8470
8571
box Shard2
86-
participant C as seq-db store <br /> shard2 replica A
87-
participant D as seq-db store <br /> shard2 replica B
72+
participant C as seq-db store<br />шард2 реплика A
73+
participant D as seq-db store<br />шард2 реплика B
8874
end
8975
90-
Note over Proxy,B: seq-db proxy chooses a random shard
76+
Note over Proxy,B: seq-db proxy выбирает случайный шард
9177
Client->>Proxy: write(batch1)
9278
Proxy->>A: write(batch1)
9379
Proxy->>B: write(batch1)
@@ -96,7 +82,7 @@ sequenceDiagram
9682
B-->>Proxy: ack
9783
Proxy-->>Client: ack
9884
99-
Note over Proxy,B: the write is done if acks received <br/> from both replicas of a shard
85+
Note over Proxy,B: запись завершена, если подтверждения получены<br/>от обеих реплик шарда
10086
10187
Client->>Proxy: write(batch2)
10288
Proxy->>C: write(batch2)
@@ -108,10 +94,8 @@ sequenceDiagram
10894
Proxy-->>Client: ack
10995
```
11096

111-
### Read-path
112-
While the written document must be acknowledged by all replicas
113-
of a shard,
114-
a read is successful when **at least one replica of each shard** returns a response.
97+
### Read-path (путь чтения)
98+
В то время как записанный документ должен быть подтвержден всеми репликами шарда, чтение считается успешным, когда **хотя бы одна реплика каждого шарда** возвращает ответ.
11599

116100
```mermaid
117101
sequenceDiagram
@@ -120,41 +104,40 @@ sequenceDiagram
120104
participant Proxy as seq-db proxy
121105
122106
box Shard1
123-
participant A as seq-db store<br /> shard1 replica A
124-
participant B as seq-db store <br />shard1 replica B
107+
participant A as seq-db store<br />шард1 реплика A
108+
participant B as seq-db store<br />шард1 реплика B
125109
end
126110
127111
box Shard2
128-
participant C as seq-db store <br /> shard2 replica A
129-
participant D as seq-db store <br /> shard2 replica B
112+
participant C as seq-db store<br />шард2 реплика A
113+
participant D as seq-db store<br />шард2 реплика B
130114
end
131115
132-
Note over Proxy,C: seq-db proxy chooses <br /> a random replica of each shard
133-
Client->>Proxy: request 1
134-
Proxy->>A: request 1
135-
Proxy->>C: request 1
116+
Note over Proxy,C: seq-db proxy выбирает<br />случайную реплику каждого шарда
117+
Client->>Proxy: запрос 1
118+
Proxy->>A: запрос 1
119+
Proxy->>C: запрос 1
136120
137-
A-->>Proxy: response 1 (shard1 replica A)
138-
C-->>Proxy: response 1 (shard2 replica A)
139-
Note over Proxy: seq-db proxy merges the returned responses
140-
Proxy-->>Client: merge(res1_s1rA, res1_s2rA)
121+
A-->>Proxy: ответ 1 (шард1 реплика A)
122+
C-->>Proxy: ответ 1 (шард2 реплика A)
123+
Note over Proxy: seq-db proxy объединяет (merge) полученные ответы
124+
Proxy-->>Client: merge(ответ1_ш1рA, ответ1_ш2рA)
141125
126+
Client->>Proxy: запрос 2
127+
Proxy->>B: запрос 2
128+
Proxy->>D: запрос 2
142129
143-
Client->>Proxy: request 2
144-
Proxy->>B: request 2
145-
Proxy->>D: request 2
146-
147-
B-->>Proxy: response 2 (shard1 replica B)
148-
D-->>Proxy: response 2 (shard2 replica B)
130+
B-->>Proxy: ответ 2 (шард1 реплика B)
131+
D-->>Proxy: ответ 2 (шард2 реплика B)
149132
150-
Proxy-->>Client: merge(res2_s1rB, res2_s2rB)
133+
Proxy-->>Client: merge(ответ2_ш1рB, ответ2_ш2рB)
151134
```
152135

153-
## Notes about replication & consistency
154-
seq-db doesn't have any mechanism to keep replicas consistent between each other.
155-
That is, if a write operation succeeds on a replica of a shard and fails on another replica, the replicas
156-
would be out of sync and won't be (automatically) synced.
157-
The only given guarantee is that a write operation will succeed only having at least RF replicas saved on disk.
158-
This optimization allows seq-db to have a higher than alternatives ingestion throughput
159-
with the obvious price of the possible inconsistencies of retrieval and aggregation queries.
160-
seq-db was designed as a database for logs/traces with this tradeoff in mind.
136+
## Примечания о репликации и согласованности (consistency)
137+
seq-db не имеет каких-либо механизмов для поддержания согласованности реплик между собой.
138+
То есть, если операция записи завершилась успешно на одной реплике шарда и завершилась ошибкой на другой, реплики окажутся
139+
в рассогласованном состоянии и не будут автоматически синхронизированы. Единственная предоставляемая гарантия
140+
заключается в том, что операция записи завершится успехом, только если как минимум RF реплик сохранили данные на диск.
141+
Эта оптимизация позволяет seq-db иметь более высокую пропускную способность приема данных по сравнению с аналогами,
142+
за очевидную цену — возможной несогласованности результатов запросов на получение гистограмм и агрегации.
143+
seq-db был разработан как база данных для логов/трейсов с учетом этого компромисса.

0 commit comments

Comments
 (0)