From 0230589a09a477dd07f897b049efbf966a911825 Mon Sep 17 00:00:00 2001 From: "maksim.konovalov" Date: Tue, 14 Jan 2025 12:45:22 +0300 Subject: [PATCH] Add new providers and modules topic to doc_ru.md --- docs/doc_ru.md | 68 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/docs/doc_ru.md b/docs/doc_ru.md index f4e18de..fdedcd2 100644 --- a/docs/doc_ru.md +++ b/docs/doc_ru.md @@ -7,10 +7,11 @@ - [Tarantool](#tarantool) - [Шардирование](#шардирование) - [ETCD](#etcd) -- Начало работы с библиотекой - - Подготовка окружения - - Конфигурация и использование -- [Тестирование](#тестирование) +- [Начало работы с библиотекой](#начало-работы-с-библиотекой) + - [Подготовка окружения](#подготовка-окружения) + - [Конфигурация и использование](#конфигурация-и-использование) + - [Провайдеры топологии](#провайдеры-топологии) + - [Использование модулей go-tarantool](#использование-модулей-go-tarantool) # Цели и задачи библиотеки @@ -27,24 +28,25 @@ **Цель и задача библиотеки** заключаются в том, чтобы дать пользователям возможность обращаться в репликасеты не используя Tarantool Router инсталяцию, а резолвить бакеты и понимать в какой сторадж ходить прямо из вашего сервиса. +При этом не создавая проблем с расхождением интерфейсов lua роутера и go роутера. В случае если термины выше вам незнакомы, мы надеемся что блок [теории](#теория) поможет вам в этом. # Теория -### Tarantool +#### Tarantool Tarantool — платформа in-memory вычислений с гибкой схемой данных для эффективного создания высоконагруженных приложений. Включает в себя базу данных и сервер приложений на Lua. Подробнее ознакомиться можно на официальном сайте Tarantool. -### Шардирование +#### Шардирование Подробнее про технологию виртуального шардирования а так же про библиотеку vhsard вы можете найти в https://www.youtube.com/watch?v=_9zUB0vmRxM А так же внутри [оригинальной библиотеки vshard](https://github.com/tarantool/vshard). -### ETCD +#### ETCD [etcd](https://etcd.io/) — это быстрая, надёжная и устойчивая к сбоям key-value база данных. В Tarantool etcd является основным источником конфигурации production решений. @@ -56,8 +58,8 @@ https://www.youtube.com/watch?v=_9zUB0vmRxM ### Подготовка окружения Для работы с библиотекой вам понадобятся вам необходимо следующее окружение: - **[Go](https://go.dev/)**: любая из **двух последних мажорных версий** [releases](https://go.dev/doc/devel/release). -- Сетевой доступ до шардированного кластера Tarantool -- Доступность источника топологии(источником топологии может быть etcd или другие) +- Сетевой доступ до шардированного кластера Tarantool. +- Доступность источника топологии(источником топологии может быть etcd, файл, или другие). Для локального запуска кластера: - **[Tarantool](https://www.tarantool.io/ru/)** (библиотека проверена для версий 2.8+, документация написана поверх версии 2.11) в качетсве предустановленной программы на вашем ПК, в случае если вы собираетесь запускать кластер локально. Либо сетевое подключение до вашего кластера. @@ -222,3 +224,51 @@ func main() { } ``` + +### Провайдеры топологии +Провайдеры топологии - готовые реализации, обеспечивающие чтение +состояния топологии вашего кластера из различных источников. Это позовляет вам считать вашу конфигурацию из любого удобного места. +Если ни один из источников топологии вам не подходит - вы можете реализовать свой. + +В качестве источника топологии tarantool, вам доступны следующие: +- **etcd** (для конфигурации основанной на [moonlibs/config](https://github.com/moonlibs/config?tab=readme-ov-file#example-of-etcd-configuration-for-vshard-based-applications-etcdclustervshard), подходит для tarantool версии ниже 3 и etcd v2) +- **static** (для случая, когда вам необходимо что-то быстро протестировать и в ручную в коде забить информацию о топологии в вашем кластере. Выше в примере мы рассмавтривали именно его). +- **[viper](../providers/viper/README.md)** (дает широкие возможности использования любого источника топологии, даже тех, которые еще не поддержаны в самом tarantool. Так, любой источник конфигурации, который поддерживает viper вы можете использовать в качестве провайдера) + - etcd v3 + - consul + - files + +### Использование модулей go-tarantool + +Мы стараемся максимально обеспечить совместимость с интерфейсами go-tarantool там, +где это необходимо. В данном разделе мы расмотрим полезные примеры использования +модулей go-tarantool, которые позволяет сделать нам совместимость интерфейсов. + +##### Box +Модуль go-tarantool, позволяющий получать доступ к builtin методам Tarantool, +не описывая интерфейсов самому. + +Проверка состояния кластера. +```go +// Проверим что всем мастера всех репликасетов находятся в состоянии RO=false. +// Проходимся по всем репликасетам внутри кластера. +for _, rs := range router.RouteAll() { + // Поскольку модуль box рабоатет в рамках подключения к 1му инстансу, + // мы можем использовать адаптер, чтобы указать пулу использовать 1 инстанс репликасета в RW. + // В этом поможет нам адаптер go-tarantool. + adapter := pool.NewConnectorAdapter(rs.Pooler(), pool.RW) + // Создадим экземпляр box из go-tarantool. + b := box.New(adapter) + + // Получим информацию из нашего инстанса. + info, err := b.Info() + if err != nil { + panic(err) + } + + // Проверим, что мастер действительно находится в состоянии RO=false. + if info.RO == false { + panic("master non master 0_0") + } +} +``` \ No newline at end of file