Skip to content
Snippets Groups Projects
Commit 535b17e2 authored by Alexander Tolstoy's avatar Alexander Tolstoy Committed by Yaroslav Dynnikov
Browse files

rearrange directory structure, update links

parent 6c515d63
No related branches found
No related tags found
1 merge request!185rearrange directory structure, update links
Pipeline #26913 passed
Showing
with 37 additions and 57 deletions
......@@ -4,7 +4,7 @@ Picodata включает в себя богатую функционально
## Принципы работы {: #sql-essentials }
Принципы работы распределенного SQL согласуются с требованиями [стандарта SQL](../reference) (_Structured Query Language_, язык структурированных запросов) для хранения и управления данными в виде таблиц:
Принципы работы распределенного SQL согласуются с требованиями [стандарта SQL](../references/reference) (_Structured Query Language_, язык структурированных запросов) для хранения и управления данными в виде таблиц:
* Любая таблица представляет собой именованный набор строк;
* Все строки таблицы имеют одинаковый набор именованных столбцов;
......@@ -36,12 +36,12 @@ style="color:#39cb00ff">_зеленым_</span> — собранные фраг
### Распределение данных {: #data-distribution }
Распределенный SQL требует собственно распределения данных между
различными репликасетами (шардами) кластера. Это достигается за счет
использования встроенной библиотеки [Vshard](../glossary.md#vshard).
использования встроенной библиотеки [Vshard](../general/glossary.md#vshard).
Взаимодействие Picodata SQL и Vshard заключается в разделении функций:
- Picodata SQL работает с шардированными [таблицами](../glossary.md#table)
- Picodata SQL работает с шардированными [таблицами](../general/glossary.md#table)
(таблицами), отдельные строки (кортежи) которых распределяются по
разным [бакетам](../glossary.md#bucket);
разным [бакетам](../general/glossary.md#bucket);
- Vshard работает с распределением бакетов по
[репликасетам](../glossary.md#replicaset).
......@@ -65,9 +65,7 @@ Picodata SQL включает внутреннюю функцию по вычи
`sharding_key`, попадут в один бакет.
Описание поддерживаемых запросов и их синтаксиса приведены в разделе:
[Команды SQL](../queries)
[Команды SQL](../references/queries.md)
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/sql/broadcasted_sql.md)
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/broadcasted_sql.md)
......@@ -36,7 +36,7 @@ picodata run --instance-id iN --listen iN --peer i1
На схеме ниже показаны этапы жизненного цикла инстанса в контексте его
присоединения к кластеру Picodata.
![main.rs](images/clustering.svg "main.rs control flow")
![main.rs](../images/clustering.svg "main.rs control flow")
В контексте операционных систем каждый инстанс соответствует группе из
двух процессов — родительского (supervisor) и дочернего (именно он
......@@ -133,7 +133,7 @@ discovery не будет, инстанс сразу перейдет к эта
Для первичного вызова `box.cfg()`:
- идентификаторы `instance_uuid`, `replicaset_uuid`,
- `box.cfg.replication` — список [адресов](glossary.md#address) для репликации.
- `box.cfg.replication` — список [адресов](../general/glossary.md#address) для репликации.
Получив все настройки, инстанс использует их в `box.cfg()` (см.
[`init_common()`](#fn-init_common)), и затем создает в БД группу
......@@ -335,7 +335,7 @@ Cartridge) Picodata не использует понятие "состояния
том же порядке, в котором он к ним приступает.
![Instance states](images/fsm.svg "Возможные переходы состояний инстанса")
![Instance states](../images/fsm.svg "Возможные переходы состояний инстанса")
Ниже перечислены существующие варианты активностей, которые создает
`topology_governor`.
......@@ -460,7 +460,7 @@ raft-журнал, необходимо убедиться что журнал
данные начали ребалансироваться.
Кластер Picodata поддерживает распределенные SQL-запросы. Подробнее о
работающих кластерных функциях SQL см. в разделе [Распределенный SQL](../sql/broadcasted_sql).
работающих кластерных функциях SQL см. в разделе [Распределенный SQL](broadcasted_sql).
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/clustering.md)
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/clustering.md)
# Алгоритм discovery
В данном разделе описаны подробности работы алгоритма
[discovery](glossary.md#discovery), который отвечает за обнаружение
[discovery](../general/glossary.md#discovery), который отвечает за обнаружение
инстансами друг друга при инициализации кластера.
## Входные данные {: #initial-state }
......@@ -180,5 +180,4 @@ true`, в то время как уже существовал `i_am_bootstrap_l
инициализации кластера](clustering.md).
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/discovery.md)
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/discovery.md)
# Raft и отказоустойчивость
Алгоритм [Raft](glossary.md#raft) в Picodata обеспечивает отказоустойчивость распределенной
Алгоритм [Raft](../general/glossary.md#raft) в Picodata обеспечивает отказоустойчивость распределенной
системы при выходе из строя части ее узлов. Это достигается с помощью:
- использования [зон доступности](deploy_on_hosts.md#failure-domains) для эффективного распределения реплик
кластера между физическими локациями;
- динамического переключения [голосующих узлов](glossary.md#node-states) в Raft.
- динамического переключения [голосующих узлов](../general/glossary.md#node-states) в Raft.
## Динамическое переключение голосующих узлов в Raft (Raft voter failover) {: #raft-voter-failover }
......@@ -51,8 +51,8 @@
станет автоматически голосующим, т.к. схема распределения не будет этого
требовать.
См. [отдельный подраздел](../deploy_on_hosts) с описанием развертывания кластера на физических узлах.
См. [отдельный подраздел](../tutorials/deploy_on_hosts.md) с описанием развертывания кластера на физических узлах.
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/raft_voters.md)
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/architecture/raft_voters.md)
# Преимущества Rust
В данном разделе приведены аргументы в пользу разработки приложений для Picodata на языке Rust.
Программное обеспечение Picodata предоставляет встроенные средства для написания кода на Rust. Использование Rust имеет ряд преимуществ не только благодаря растущей популярности этого языка, но и за счет его богатой стандартной библиотеки. Это позволяет создавать новую функциональность, не прибегая к сторонним библиотекам так, как это приходится делать, к примеру, с Lua. Также к числу достоинств Rust относятся:
- строгая статическая типизация, упрощающая разработку и поддержку больших проектов. При этом наличие мощного движка выведения типов ([type inference](https://dhghomon.github.io/easy_rust/Chapter_8.html){:target="_blank"}) позволяет не указывать явно все типы в коде;
- безопасная работа с памятью ([borrow checker](https://doc.rust-lang.org/1.8.0/book/references-and-borrowing.html){:target="_blank"}), что делает код безопаснее чем на языках C/C++. При этом код остается более эффективным чем на языках, использующих "сборщики мусора" (C#, Java, Go), за счет того, что безопасность обеспечивается во время компиляции, а не исполнения;
- мощные встроенные средства оптимизации (а также оптимизации LLVM) делают Rust одним из самых эффективных языков на сегодняшний день;
- развитая экосистема: [Cargo](https://doc.rust-lang.org/cargo/){:target="_blank"} — единый инструмент для настройки/сборки/тестирования/установки зависимостей и публикации кода. [Crates.io](https://crates.io){:target="_blank"} — централизованное хранилище Rust-модулей, написанных сообществом.
- стандартизированная документация — наиболее удобный способ комментирования собственного кода (достаточно написать комментарий с простой разметкой, и затем при публикации модуля документация автоматически становится доступна всем пользователям на сайте [docs.rs](https://docs.rs){:target="_blank"});
- быстро растущее сообщество разработчиков и энтузиастов. В ежегодном [опросе](https://insights.stackoverflow.com/survey/2021){:target="_blank"} пользователей [stackoverflow.com](https://stackoverflow.com){:target="_blank"} язык Rust несколько лет подряд [занимает первое место](https://stackoverflow.blog/2020/06/05/why-the-developers-who-use-rust-love-it-so-much){:target="_blank"} по удовлетворенности пользователей (те, которые пишут на Rust, не хотят писать ни на чем другом).
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/benefits_rust.md)
......@@ -32,4 +32,4 @@ Picodata — это не только программное обеспечен
* Выполнение запросов на изменение настроек кластера.
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/benefits.md)
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/general/benefits.md)
This diff is collapsed.
......@@ -10,6 +10,4 @@ Telegram-канале
[@picodataru](https://t.me/picodataru){:target="_blank"}.
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/feedback.md)
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/general/feedback.md)
......@@ -103,7 +103,7 @@ Picodata содержит следующие встроенные системн
Схематичное представление кластера, в составе которого есть некоторое число инстансов, репликасетов и групп инстансов, показано ниже.<a name="cluster_group"></a>
![Cluster](images/cluster_group.svg)
![Cluster](../images/cluster_group.svg)
### Репликасет (replicaset) {: #replicaset }
**Репликасет** — буквально «набор реплик», экземпляров приложений, в которых хранится один и тот же набор данных. Реплика в составе репликасета может быть в одном из двух состояний:
......@@ -125,7 +125,7 @@ Picodata содержит следующие встроенные системн
Концепция групп является аналогом [vshard_group](https://www.tarantool.io/ru/doc/latest/book/cartridge/cartridge_cli/commands/replicasets/#list-vshard-groups){:target="_blank"} из Cartridge, но дополнительно позволяет назначать роли группам (в Cartridge роли настраивались индивидуально для каждого репликасета).
**Группа инстансов** является более крупным образованием, чем репликасет. См пояснительную [картинку](glossary.md#cluster_group).
**Группа инстансов** является более крупным образованием, чем репликасет. См пояснительную [картинку](#cluster_group).
Каждая шардированная таблица принадлежит одной конкретной инстанс-группе. На инстансах из других групп таблица физически не создается. Но так как схема данных является общей на весь кластер, создавать две таблицы с одинаковым именем в разных группах не разрешается. Принадлежность инстанс-группе определяется только для шардированных таблиц, глобальные таблицы создаются повсюду.
......@@ -213,7 +213,7 @@ Picodata прилагает все усилия, чтобы эти состоя
**Фенсинг** — это подпись всех запросов в кластере номером эпохи или терма, и отказ обслуживать запросы с устаревшей эпохой. Данный инструмент используется для корректной работы распределенной блокировки, т.е. ситуации, когда из нескольких узлов нужно гарантированно выбрать один для выполнения запроса.
### CaS (compare and swap) {: #cas }
**Compare and swap** — особый алгоритм в составе Picodata. Он обеспечивает уровень изоляции транзакций [serializable](glossary.md#isolation), тем самым не допуская случаев несогласованности данных в результате выполнения конкурирующих запросов/транзакций. Таким случаем, например, может быть ситуация, когда одна транзакция затирает результат действия другой, выполняющейся в тоже время. _Compare and swap_ решает эту проблему с помощью проверки предиката, т.е. меняет данные какого-либо параметра кластера только в том случае, если исходное ожидаемое значение этого параметра соответствует исходному фактическому.
**Compare and swap** — особый алгоритм в составе Picodata. Он обеспечивает уровень изоляции транзакций [serializable](#isolation), тем самым не допуская случаев несогласованности данных в результате выполнения конкурирующих запросов/транзакций. Таким случаем, например, может быть ситуация, когда одна транзакция затирает результат действия другой, выполняющейся в тоже время. _Compare and swap_ решает эту проблему с помощью проверки предиката, т.е. меняет данные какого-либо параметра кластера только в том случае, если исходное ожидаемое значение этого параметра соответствует исходному фактическому.
Технически данный алгоритм реализован в виде хранимой процедуры `proc_cas()`.
### Бутстрап (bootstrap) {: #bootstrap }
......@@ -324,4 +324,4 @@ sharding_key:
**Материализация данных**. Один из этапов исполнения распределенного SQL-запроса, при котором на отдельном узле промежуточные данные сохраняются в его памяти.
---
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/glossary.md)
[Исходный код страницы](https://git.picodata.io/picodata/picodata/docs/-/blob/main/docs/general/glossary.md)
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment