diff --git a/docs/benefits.md b/docs/benefits.md index f9e2edc2545d79869cd7f261b771236bd516dac2..a8b391c2ddccf9b6d35add5fd89f59cf5e962719 100644 --- a/docs/benefits.md +++ b/docs/benefits.md @@ -9,10 +9,10 @@ * ПолноÑтью роÑÑийÑкое программное обеÑпечение; ## Ð“Ð°Ñ€Ð°Ð½Ñ‚Ð¸Ñ ÑохранноÑти данных -Picodata реализует [ACID-подход](https://ru.wikipedia.org/wiki/ACID), при котором любые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… предварительно ÑохранÑÑŽÑ‚ÑÑ Ð² журнале на диÑке и реплицируютÑÑ Ð½Ð° неÑколько Ñерверов. При выходе из ÑÑ‚Ñ€Ð¾Ñ Ð»ÑŽÐ±Ð¾Ð¹ компоненты данные автоматичеÑки воÑÑтанавливаютÑÑ Ð¸Ð· ÑущеÑтвующих копий. Ð’Ñе операции Ñ Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð³Ð¸ÐµÐ¹ клаÑтера и Ñхемой данных также атомарны. +Picodata реализует [ACID-подход](https://ru.wikipedia.org/wiki/ACID), при котором любые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… предварительно ÑохранÑÑŽÑ‚ÑÑ Ð² журнале на диÑке и реплицируютÑÑ Ð½Ð° неÑколько Ñерверов. При выходе из ÑÑ‚Ñ€Ð¾Ñ Ð»ÑŽÐ±Ð¾Ð¹ компоненты данные автоматичеÑки воÑÑтанавливаютÑÑ Ð¸Ð· ÑущеÑтвующих копий, что позволÑет добитьÑÑ Ð²Ñ‹Ñокой отказоуÑтойчивоÑти. Ð’Ñе операции Ñ Ñ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð³Ð¸ÐµÐ¹ клаÑтера и Ñхемой данных также атомарны. ## Горизонтальное маÑштабирование -Picodata разделÑет данные на незавиÑимые фрагменты (шарды) по чиÑлу доÑтупных Ñдер процеÑÑора. Такой подход Ñнижает издержки на разделÑемый доÑтуп к данным, повышает утилизацию Ð¾Ð±Ð¾Ñ€ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ позволÑет в любой момент нараÑтить вычиÑлительную мощноÑÑ‚ÑŒ ÑиÑтемы. +Picodata обеÑпечивает Ñффективное управление раÑпределённым клаÑтером. Данные в клаÑтере разделены на незавиÑимые фрагменты (шарды) по чиÑлу доÑтупных Ñдер процеÑÑора. Такой подход Ñнижает издержки на разделÑемый доÑтуп к данным, повышает утилизацию Ð¾Ð±Ð¾Ñ€ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ позволÑет в любой момент нараÑтить вычиÑлительную мощноÑÑ‚ÑŒ ÑиÑтемы. ## Выполнение бизнеÑ-логики внутри решетки данных Мы в Picodata нашли ÑпоÑоб маÑштабировать не только данные, но и вычиÑлениÑ. Ðаша ÑиÑтема хранит и верÑионирует программный код на каждом узле клаÑтера. Мы разработали целый Ñ€Ñд техник, позволÑющих безопаÑно обновлÑÑ‚ÑŒ раÑпределенные приложениÑ, ÑохранÑÑ Ñ†ÐµÐ»Ð¾ÑтноÑÑ‚ÑŒ данных и Ð¸Ð·Ð±ÐµÐ³Ð°Ñ Ð¿Ñ€Ð¾Ñтоев ÑиÑтемы (no downtime). Ð’Ñе Ñто позволÑет обеÑпечить беÑкомпромиÑÑную ÑкороÑÑ‚ÑŒ операций Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸. diff --git a/docs/benefits_rust.md b/docs/benefits_rust.md new file mode 100644 index 0000000000000000000000000000000000000000..66cee5d4e644ce8d20d22fc489315d1321fc212f --- /dev/null +++ b/docs/benefits_rust.md @@ -0,0 +1,10 @@ +# ПреимущеÑтва Rust + +Программное обеÑпечение Picodata предоÑтавлÑет вÑтроенные ÑредÑтва разработки приложений на Ñзыке Rust. Такой выбор Ñзыка имеет Ñ€Ñд преимущеÑтв, не только Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñ€Ð°Ñтущей популÑрноÑти Rust, но и за Ñчёт его богатой Ñтандартной библиотеки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет реализовывать многие функции, не Ð¿Ñ€Ð¸Ð±ÐµÐ³Ð°Ñ Ðº Ñторонним библиотекам, например, в отличие от Lua. Также, к чиÑлу доÑтоинÑтв Rust отноÑÑÑ‚ÑÑ: + +- ÑÑ‚Ñ€Ð¾Ð³Ð°Ñ ÑтатичеÑÐºÐ°Ñ Ñ‚Ð¸Ð¿Ð¸Ð·Ð°Ñ†Ð¸Ñ, ÑƒÐ¿Ñ€Ð¾Ñ‰Ð°ÑŽÑ‰Ð°Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÑƒ и поддержку больших проектов. При Ñтом наличие мощного движка Ð²Ñ‹Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² ([type inference](https://dhghomon.github.io/easy_rust/Chapter_8.html)) позволÑет не указывать Ñвно вÑе типы в коде; +- безопаÑÐ½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° Ñ Ð¿Ð°Ð¼Ñтью ([borrow checker](https://doc.rust-lang.org/1.8.0/book/references-and-borrowing.html)), что делает код безопаÑнне чем на Ñзыках C/C++. При Ñтом код оÑтаётÑÑ Ð±Ð¾Ð»ÐµÐµ Ñффективным чем на Ñзыках, иÑпользующих "Ñборщики муÑора" (C#, Java, Go), за Ñчёт того, что безопаÑноÑÑ‚ÑŒ обеÑпечиваетÑÑ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции, а не иÑполнениÑ; +- мощные вÑтроенные ÑредÑтва оптимизации (а также оптимизации LLVM) делают Rust одним из Ñамых Ñффективных Ñзыков на ÑегоднÑшний день; +- Ñ€Ð°Ð·Ð²Ð¸Ñ‚Ð°Ñ ÑкоÑиÑтема: [Cargo](https://doc.rust-lang.org/cargo/) — единый инÑтрумент Ð´Ð»Ñ Ð½Ð°Ñтройки/Ñборки/теÑтированиÑ/уÑтановки завиÑимоÑтей и публикации кода. [Crates.io](https://crates.io) — централизованное хранилище Rust-модулей, напиÑанных ÑообщеÑтвом. +- ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ â€” наиболее удобный ÑпоÑоб ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑобÑтвенного кода (доÑтаточно напиÑать комментарий Ñ Ð¿Ñ€Ð¾Ñтой разметкой, и затем при публикации Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки ÑтановитÑÑ Ð´Ð¾Ñтупна вÑем пользователÑм на Ñайте [docs.rs](https://docs.rs)); +- быÑтро раÑтущее ÑообщеÑтво разработчиков и ÑнтузиаÑтов. Ð’ ежегодном [опроÑе](https://insights.stackoverflow.com/survey/2021) пользователей [stackoverflow.com](https://stackoverflow.com) Ñзык Rust неÑколько лет подрÑд [занимает первое меÑто](https://stackoverflow.blog/2020/06/05/why-the-developers-who-use-rust-love-it-so-much) по удовлетворённоÑти пользователей (те, которые пишут на Rust, не хотÑÑ‚ пиÑать ни на чём другом). diff --git a/docs/cluster.png b/docs/cluster.png index c0f95527833a48b6d2c11549ede3645ae5d3c120..fbf86ab61ffa0757aeb865d1090fa6d7284e2d38 100644 Binary files a/docs/cluster.png and b/docs/cluster.png differ diff --git a/docs/description.md b/docs/description.md index 14aaea68581c9b3b0a5c66c3dce28d60afeeea52..11d67865eceea75252ee4b22783c8a621226ef0c 100644 --- a/docs/description.md +++ b/docs/description.md @@ -38,18 +38,23 @@ Picodata позволÑет развёртывать и управлÑÑ‚ÑŒ кл ## Ðрхитектура Ðрхитектура клаÑтера под управлением Picodata предполагает ÑиÑтему узлов, входÑщих в ÑоÑтав клаÑтера. Каждый узел может выполнÑÑ‚ÑŒ различные роли, например роль Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…, роль Ñервера приложениÑ, или Ñлужебную роль координатора клаÑтера. Ð’Ñе узлы работают Ñ ÐµÐ´Ð¸Ð½Ð¾Ð¹ Ñхемой данных и кодом приложениÑ. Каждый процеÑÑ Ð±Ð°Ð·Ñ‹ данных выполнÑетÑÑ Ð½Ð° одном процеÑÑорном Ñдре и хранит вÑе Ñвои данные в оперативной памÑти. -Любой отдельный узел ÑвлÑетÑÑ Ñ‡Ð°ÑÑ‚ÑŒ набора реплик, который также называют *репликаÑетом*. РепликаÑет может ÑоÑтоÑÑ‚ÑŒ из одного узла или неÑкольких дубликатов одного и того же набора данных. Внутри репликаÑета вÑегда еÑÑ‚ÑŒ *лидер* (оÑновной узел) и - еÑли реплик больше 1 - то некоторое чиÑло вÑпомогательных узлов, обеÑпечивающие отказоуÑтойчивоÑÑ‚ÑŒ ÑиÑтемы в Ñлучае выхода из ÑÑ‚Ñ€Ð¾Ñ Ð¸Ð»Ð¸ недоÑтупноÑти лидера. ЧиÑло реплик определÑетÑÑ *фактором репликации*, заданным Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° в глобальных наÑтройках Picodata. +Любой отдельный узел ÑвлÑетÑÑ Ñ‡Ð°ÑÑ‚ÑŒ набора реплик, который также называют *репликаÑетом*. РепликаÑет может ÑоÑтоÑÑ‚ÑŒ из одного узла или неÑкольких дубликатов одного и того же набора данных. Внутри репликаÑета вÑегда еÑÑ‚ÑŒ *лидер* (оÑновной узел) и — еÑли реплик больше 1 — то некоторое чиÑло вÑпомогательных узлов, обеÑпечивающие отказоуÑтойчивоÑÑ‚ÑŒ ÑиÑтемы в Ñлучае выхода из ÑÑ‚Ñ€Ð¾Ñ Ð¸Ð»Ð¸ недоÑтупноÑти лидера. ЧиÑло реплик определÑетÑÑ *фактором репликации*, заданным Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° в глобальных наÑтройках Picodata. Ðа риÑунке ниже показана Ñхема проÑтого клаÑтера из двух репликаÑетов, каждый из которых ÑоÑтоит из двух узлов (активного и в ожидании):  РепликаÑеты ÑвлÑÑŽÑ‚ÑÑ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð°Ð¼Ð¸ физичеÑкого маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ñтера. Данные баланÑируютÑÑ Ð¼ÐµÐ¶Ð´Ñƒ ними автоматичеÑки. -Внутри каждого репликаÑета еÑÑ‚ÑŒ *bucket* - Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð° хранениÑ, обеÑÐ¿ÐµÑ‡Ð¸Ð²Ð°ÑŽÑ‰Ð°Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾ÑÑ‚ÑŒ данных (например, хранение неÑкольких ÑвÑзанных Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð¼ запиÑей на одном физичеÑком узле). Таким образом, при горизонтальном маÑштабировании клаÑтера данные раÑпределÑÑŽÑ‚ÑÑ Ð¿Ð¾ уÑтройÑтвам Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ напрÑмую, а внутри bucket'ов. Ðто позволÑет увеличить ÑкороÑÑ‚ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов к БД и одновременно Ñ Ñтим Ñнизить нагрузку на Ñетевую инфраÑтруктуру клаÑтера. +Внутри каждого репликаÑета еÑÑ‚ÑŒ *bucket* — Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»Ð¸Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½ÐµÐ´ÐµÐ»Ð¸Ð¼Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð° хранениÑ, обеÑÐ¿ÐµÑ‡Ð¸Ð²Ð°ÑŽÑ‰Ð°Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾ÑÑ‚ÑŒ данных (например, хранение неÑкольких ÑвÑзанных Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð¼ запиÑей на одном физичеÑком узле). Таким образом, при горизонтальном маÑштабировании клаÑтера данные раÑпределÑÑŽÑ‚ÑÑ Ð¿Ð¾ уÑтройÑтвам Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ напрÑмую, а внутри bucket'ов. Ðто позволÑет увеличить ÑкороÑÑ‚ÑŒ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов к БД и одновременно Ñ Ñтим Ñнизить нагрузку на Ñетевую инфраÑтруктуру клаÑтера. Bucket вÑегда хранитÑÑ Ñ„Ð¸Ð·Ð¸Ñ‡ÐµÑки на одном узле и ÑвлÑетÑÑ Ð¿Ñ€Ð¾Ð¼ÐµÐ¶ÑƒÑ‚Ð¾Ñ‡Ð½Ñ‹Ð¼ звеном между данными и уÑтройÑтвом хранениÑ. Ð’ каждом репликаÑете может быть много bucket'ов (или не быть не одного). Внутри bucket'а данные задублированы по вÑем узлам в рамках репликаÑета в ÑоответÑтвие Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ репликации. -Ðа Ñхеме ниже показан пример ÑˆÐ°Ñ€Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñлементов клаÑтера путём раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñетов по неÑкольким Ñерверам: +Ðа Ñхеме ниже показан пример Ñхемы Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… внутри репликаÑета: - + -Ð’ Ñвою очередь, Ñервера могут находитьÑÑ Ð² разных дата-центрах и быть географичеÑки раÑпределены. С точки Ð·Ñ€ÐµÐ½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора клаÑтера, данные Ñначала попадают в опредёленный bucket и лишь затем оказываютÑÑ Ð½Ð° физичеÑком уÑтройÑтве хранениÑ. -Каждый bucket в любой момент времени может находитьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в одном репликаÑете. Ð’ то же времÑ, в репликаÑете может быть неÑколько bucket'ов, или не быть ни одного. Внутри bucket'а данные задублированы по вÑем узлам в рамках репликаÑета в ÑоответÑтвие Ñ Ñ„Ð°ÐºÑ‚Ð¾Ñ€Ð¾Ð¼ репликации. \ No newline at end of file +Узлы внутри репликаÑета обеÑпечивают его отказоуÑтойчивоÑÑ‚ÑŒ. Однако, Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸Ñ Ð½Ð°Ð´Ñ‘Ð¶Ð½Ð¾Ñти каждый узел внутри репликаÑета находитÑÑ Ð½Ð° разных физичеÑких Ñерверах, а также, как правило, в разных, географичеÑки удалённых друг от друга датацентрах. Таким образом, репликаÑет ÑтановитÑÑ *раÑпределённым* и в Ñлучае недоÑтупноÑти или выходы из ÑÑ‚Ñ€Ð¾Ñ Ð´Ð°Ñ‚Ð°Ñ†ÐµÐ½Ñ‚Ñ€Ð° продолжает работать, Ð´ÐµÐ»Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼ другой узел. За раÑпределение узлов между разными Ñерверами отвечает библиотека Tarantool vShard, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð² Picodata. + +Пример географичеÑкого раÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¿Ð»Ð¸ÐºÐ°Ñета показан на Ñхеме ниже: + + + +Таким образом, каждый узел ÑвлÑетÑÑ *репликаÑетом*, а каждый репликаÑет — *шардом*. \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 81a9525d61eb2030cd2a3c2c6818d8eed93ad1e6..5fb0493bd256af57393e36c17fb31b9d87939e75 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,6 +6,7 @@ Picodata — Ñто раÑпределенный Ñервер приложен * Общее [опиÑание](description) продукта * [ПреимущеÑтва](benefits) иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Picodata +* [ПреимущеÑтва Ñзыка Rust](benefits_rust) при разработке приложений * ÐдминиÑтрирование БД как [уÑлуга](services) * СиÑтемные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ * РуководÑтво по уÑтановке diff --git a/docs/sharding.png b/docs/sharding.png index b4f4497fddcccf9c157222569eb7f51238a4cfcc..8859c926fbb333a90309d36eb19af5d85f6c0778 100644 Binary files a/docs/sharding.png and b/docs/sharding.png differ diff --git a/docs/storage.png b/docs/storage.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2e836b8a46a41afc69c44cce78c29e259a795f Binary files /dev/null and b/docs/storage.png differ diff --git a/mkdocs.yml b/mkdocs.yml index 411e3d999d3c51f6a274c9fa313d286fc3c08eea..3f6d052bb7559b088fb5673f07a0750cf296875d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,7 +2,8 @@ site_name: Портал документации Picodata nav: - ГлавнаÑ: index.md - ОпиÑание продукта: description.md - - ПреимущеÑтва: benefits.md + - ПреимущеÑтва Picodata: benefits.md + - ПреимущеÑÑ‚Ð²Ð°Ñ Ñзыка Rust: benefits_rust.md - УÑтановка и первые шаги: install.md - УÑлуги: services.md theme: