Данный подраздел содержит информацию для разработчиков и системных администраторов, которые смогут лучше разобраться во внутреннем устройстве нашего программного продукта, в частности, запускать и обновлять приложения, работающие на сервере приложений Picodata. Для этого пригодится описание версионирования приложений и схемы данных, а также особенностей останова и запуска приложений.
Данный раздел содержит информацию для разработчиков и системных администраторов, которые смогут лучше разобраться во внутреннем устройстве нашего программного продукта, в частности, запускать и обновлять приложения, работающие на сервере приложений Picodata. Для этого пригодится описание версионирования приложений и схемы данных, а также особенностей останова и запуска приложений.
## Версионирование
В этом разделе мы описываем особенности изменения версий у схем данных и приложений, выполняющихся на сервере Picodata.
Ниже описаны особенности изменения версий схем данных и приложений, выполняющихся на сервере Picodata.
Версия схемы и версия приложения разделены и изменяются независимо друг от друга. Для версионирования схемы используется набор семантических правил [SemVer](https://semver.org/lang/ru/). Правила изменения версий приложения могут быть произвольными и задаваться по желанию пользователя, но при этом должно быть выполнено условие: у любых двух версий приложения с разной логикой должны быть разные пары **имя приложения** - **версия приложения**.
Версия схемы и версия приложения изменяются раздельно друг от друга. Для версионирования схемы используется набор семантических правил [SemVer](https://semver.org/lang/ru/). Правила изменения версий приложения могут быть произвольными и задаваться по желанию пользователя, но при этом должно быть выполнено условие: у любых двух версий приложения с разной логикой должны быть разные пары **имя приложения** - **версия приложения**.
Приложение должно работать только когда в кластере на всех мастер инстансах во всех репликасетах находится одна и та же версия приложения. Проверка версий запущенных приложений делается через журнал Raft. Каждое приложение при запуске ждет коммита своей версии в Raft log.
Приложение может работать только когда в кластере на всех активных инстансах во всех репликасетах запущена одна и та же версия приложения. Проверка версий запущенных приложений делается через журнал Raft. Каждое приложение при запуске ждет коммита своей версии в Raft log.
Версия схемы в кластере меняется только в большую сторону. Любые изменения схемы сопровождаются увеличением версии. Откатить версию нельзя (кроме восстановления из резервной копии).
Зависимость приложения от версии схемы задается явно двумя способами:
1. (Обязательно).В коде приложения. Если в приложении задана зависимость от схемы v3.2.1, то это приложение не должно запускаться, если в кластере и, соответственно, на инстансе не выполняется уcловие: 3.2.1 <= версия схемы < 4.0.0, за исключением случаев, описанных в следующем пункте. В случае обнаружeния несовместимой версии схемы, Picodata должна моментально останавливать приложение и ждать, пока схема станет совместимой. При этом должно выводиться соответствующее сообщение в журнал.
1. (Обязательно).В коде приложения. Если в приложении задана зависимость от схемы v3.2.1, то это приложение не должно запускаться, если не выполняется условие: 3.2.1 <= версия схемы в кластере < 4.0.0, за исключением случаев, описанных в следующем пункте. В случае обнаружения несовместимой версии схемы Picodata должна останавливать приложение и ждать, пока схема станет совместимой. При этом должно выводиться соответствующее сообщение в журнал действий.
2. (Опционально). Глобально в кластере в реплицируемом через Raft хранилище конфигурации может быть задано множество вариантов совместимости любой версии схемы с любой версией приложения. Этот признак совместимости имеет приоритет над первым. Т.е. когда Picodata запускает приложение, сначала проверяется признак совместимости согласно глобальной кластерной конфигурации: если совместимо, то Picodata запускает приложение НЕЗАВИСИМО ОТ ПРАВИЛ SEMVER. Предполагается, что администратору может понадобиться задать совместимость таким образом при решении проблем, см. пример ниже.
Проверка совместимости версий включена по умолчанию, но ее можно выключить в случае если пользователь отдает отчет в своих действиях.
Проверка совместимости версий включена по умолчанию, но её можно отключить.
### Явное задание совместимости версий приложения и схемы
Приведем пример, когда нужно воспользоваться явным способом задания совместимости между приложением и схемой данных. Это и есть _опциональный_ способ, указанный выше.
...
...
@@ -29,28 +29,26 @@
стало: v6 v2.0.0 v2.0.0
```
После этого обнаружилось, что в приложении v6 имеется критичная ошибка. Принято решение откатить приложение на v5. Но оно не запустится на схеме v2.0.0 даже если отключить проверку совместимости версий. Для решения проблемы схему меняют так, чтобы приложение v5 могло запуститься. Этим изменениям схемы присваивают версию v3.0.0. Глобально в конфигурации кластера задается совместимость app v5 и schema v3.0.0. После этого приложение v5 можно запустить в кластере с версией схемы v3.0.0, хотя приложение v5 было разработано и собрано в прошлом, когда про схему v3.0.0 еще не было известно.
После этого обнаружилось, что в приложении v6 имеется критичная ошибка. Принято решение откатить приложение на v5. Но эта версия не запустится на схеме v2.0.0 даже если отключить проверку совместимости версий. Для решения проблемы через административный API схему меняют так, чтобы приложение v5 могло запуститься. Этим изменениям схемы присваивают версию v3.0.0. Глобально в конфигурации кластера задается совместимость app v5 и schema v3.0.0. После этого приложение v5 можно запустить в кластере с версией схемы v3.0.0, хотя приложение v5 было разработано и собрано в прошлом, когда про схему v3.0.0 еще не было известно.
### Алгоритм запуска инстанса.
1. Подключиться к Raft-группе (кластеру) и актуализировать журнал Raft.
1. Сформировать из глобальной конфигурации кластера параметры репликации для данного инстанса.
1. Проверить совместимость версии приложения и схемы в кластере. Если версии несовместимы, то написать об этом в журнал Raft.
1. Отправить в глобальную конфигурацию версию запускаемого приложения через журнал Raft.
1. Запустить Tarantool, даже если версия приложения несовместима со схемой.
1. Применить все изменения схемы из глобальной конфигурации кластера.
1. Если запускаемое приложение содержит обновления схемы, то применить эти обновления глобально в кластере.
1. Если версии совместимы, запустить приложение Picodata, иначе сделать запись в журнале и ждать пока версии станут совместимы.
1. Подключиться к кластеру и получить актуальную глобальную конфигурацию кластера.
2. Отправить в глобальную конфигурацию версию запускаемого приложения через журнал Raft.
3. Запустить Tarantool, даже если версия приложения несовместима со схемой.
4. Применить все изменения схемы из глобальной конфигурации кластера.
5. Если запускаемое приложение совместимо с версией схемы в кластере и содержит обновления схемы, то применить эти обновления глобально в кластере.
6. Если версии совместимы, запустить приложение, иначе сделать запись в журнале и ждать пока версии станут совместимы.
### Обновления и время простоя
Под временем простоя (downtime) подразумевается длительный промежуток времени, когда клиенты приложения Picodata не могут в полной мере пользоваться его функциями. Мероприятия, связанные со вводом резервных узлов в рамках отказоустойчивости (switchover, failover), происходят относительно быстро и не считаются простоем. Перезапуск репликасета Tarantool со снапшотами по 10 GB считается долгим, т.к. может занять более 10 минут, поэтому считается простоем.
Существует два варианта обновления: простой и сложный.
Под временем простоя (downtime) подразумевается длительный промежуток времени, когда клиенты приложения не могут в полной мере пользоваться его функциями. Switchover, failover происходят относительно быстро и не считаются простоем. Перезапуск репликасета Tarantool со снапшотами по 10 GB считается долгим, т.к. может занять более 10 минут, поэтому считается простоем.
__Простой вариант__. В этом варианте обновления будут проходить с простоем на время, пока все инстансы будут обновлены, перезапущены, и затем в них запустится Tarantool, который загрузит последнее сохраненное состояние БД из файла *.snap* и применит изменения из журнала последних операций (*.xlog*). Для выполнения такого обновления нужно обновить файлы приложения и перезапустить все инстансы в любом порядке: по одному или все сразу.
__Простой вариант__. Обновления будут проходить с простоем на время, пока все инстансы будут обновлены, перезапущены, и пока в них запустится Tarantool, который загрузит последнее сохраненное состояние БД из файла *.snap* и применит изменения из журнала операций (*.xlog*). Для выполнения такого обновления нужно обновить файлы приложения и перезапустить все инстансы в любом порядке: по одному или все сразу.
__Сложный вариант__ состоит в обновлении приложения Picodata без простоя.
__Сложный вариант__ состоит в обновлении приложения без простоя.
1. Потребуется в каждом репликасете остановить все инстансы, кроме одного. Рекомендуется останавливать резервные реплики и оставлять работать активную реплику.
1. Потребуется в каждом репликасете остановить все инстансы, кроме одного. Рекомендуется останавливать резервные реплики и оставлять работать активные реплики.
1. Обновить файлы приложения на остановленных инстансах.
1. Запустить ранее остановленные инстансы.
1. Дождаться, пока Tarantool считает данные и запустится.
В данном подразделе перечислены доступные всем клиентам преимущества продукта Picodata:
* Гарантия сохранности данных;
* Горизонтальное масштабирование;
* Выполнение бизнес-логики внутри решетки данных;
* Продукт с открытым исходным кодом;
* Полностью российское программное обеспечение;
* Сопровождение клиентов и дополнительные услуги.
Продукт Picodata предоставляет платформу для "быстрых" данных и позволяет развернуть распределенный кластер СУБД без лишних затрат времени. Picodata — это надежность и удобство при поддержании работы кластера: удалении и добавлении инстансов, обеспечении отказоустойчивости и прочих процессах, характерных для высоконагруженных систем. Помимо этого, наш продукт обладает следующими достоинствами:
## Гарантия сохранности данных
Picodata реализует [ACID-подход](https://ru.wikipedia.org/wiki/ACID), при котором любые изменения данных предварительно сохраняются в журнале на диске и реплицируются на несколько серверов. При выходе из строя любой компоненты данные автоматически восстанавливаются из существующих копий, что позволяет добиться высокой отказоустойчивости. Все операции с топологией кластера и схемой данных также атомарны.
...
...
@@ -25,7 +18,7 @@ Picodata — продукт на основе Open source, а это, в сво
СУБД Picodata создана российскими разработчиками и входит в Реестр отечественного программного обеспечения. Вся поддержка и экспертиза по внедрению доступна в России и на русском языке;
## Сопровождение клиентов и дополнительные услуги
Picodata - это не тольно программное обеспечение, но и возможность приобрести обслуживание "под ключ", которое будет включать в себя необходимый уровень поддержки. Picodata предоставляет услугу DBA as a Service, что подразумевает администрирование высоконагруженных критичных систем по вашему обращению.
Picodata — это не тольно программное обеспечение, но и возможность приобрести обслуживание "под ключ", которое будет включать в себя необходимый уровень поддержки. Picodata предоставляет услугу DBA as a Service, что подразумевает администрирование высоконагруженных критичных систем по вашему обращению.
В данном подразделе приведены аргументы в пользу разработки приложений для Picodata на языке Rust. Программное обеспечение Picodata предоставляет встроенные средства для этого. Использование Rust имеет ряд преимуществ не только благодаря растущей популярности этого языка, но и за счет его богатой стандартной библиотеки, которая позволяет реализовывать многие функции, не прибегая к сторонним библиотекам, например, в отличие от Lua. Также, к числу достоинств Rust относятся:
В данном разделе приведены аргументы в пользу разработки приложений для Picodata на языке Rust.
Программное обеспечение Picodata предоставляет встроенные средства для этого. Использование 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), за счет того, что безопасность обеспечивается во время компиляции, а не исполнения;
Данный подраздел содержит общие сведения о продукте Picodata, его назначении, области применения и внутреннем устройстве.
Данный раздел содержит общие сведения о продукте Picodata, его назначении, области применения и внутреннем устройстве.
## Что такое Picodata?
Программное обеспечение Picodata — это сервер приложений со встроенной базой данных для работы в распределенных системах.
...
...
@@ -73,4 +73,4 @@ Picodata предоставляет систему хранения данных

Таким образом, каждый инстанс (экземпляр Picodata) является *частью репликасета*, а каждый репликасет — *шардом*, а шарды распределены между несколькими серверами.
\ No newline at end of file
Таким образом, каждый инстанс (экземпляр Picodata) является *частью репликасета*, а каждый репликасет — *шардом*, а шарды распределены между несколькими серверами.