replica

package module
v0.0.0-...-33cd862 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2017 License: MIT Imports: 7 Imported by: 0

README

Smart Redis Replication

Software License

Это библиотека для подключения к redis-серверу в качестве slave и разбора всех данных репликации.

В компании Avito использовалась для синронизации новой версии сервиса, с помощью неё было перелито порядка N ключей из старого кластера в новый сервис.

Направление данных:

users requests -> old service -> redis cluster

redis cluster -> smart-redis-replication -> service -> redis cluster

В процессе переноса были:

1. модифицированы ключи

2. отсеяны более не требующиеся данные

3. заново сгенерированы дополнительные данные (на уровне нового сервиса)

Схема переноса данных не потребовала остановки обслуживания клиентов и позволила поддерживать два сервиса в синхронном состоянии достаточное количество времени, что бы провести тесты и подготовиться к переключению пользовательских запросов в новый сервис.

Библиотека имеет встроенный Backlog, благодаря которому можно обновлять сервис будучи в синхронном состоянии без потери синхронизации. Данные накапливаются в backlog и отправляются в сервис как только тот будет перезапущен, а благодаря rolling update в kubernetes это происходит и вовсе незаметно для пользователей.

Поддерживаются форматы:

rdb - описание формата https://rdb.fnordig.de/file_format.html

resp - описание формата https://redis.io/topics/protocol

Поддерживаются типы ключей:

Sorted Set

Integer Set

Set

Map

List

String

Поддерживаются типы данных:

0 = String Encoding

1 = List Encoding

2 = Set Encoding

3 = Sorted Set Encoding

4 = Hash Encoding

9 = Zipmap Encoding

10 = Ziplist Encoding

11 = Intset Encoding

12 = Sorted Set in Ziplist Encoding

13 = Hashmap in Ziplist Encoding (Introduced in RDB version 4)

14 = List in Quicklist encoding (Introduced in RDB version 7)

Installation

$ go get github.com/avito-tech/smart-redis-replication

Examples

$ ls ./example

Author

Oleg Shevelev

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client interface {
	// NewReplica возвращает клиент для чтения логической репликации
	NewReplica() (replica.Replica, error)

	// Send отправляет простые команды на сервер
	Send(commandName string, args ...interface{}) error

	// Close закрывает сетевое соединение
	Close() error
}

Client это интерфейс соединения с redis сервером

type Conn

type Conn struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Conn это постоянное соединение с redis сервером

func NewConn

func NewConn(conn io.ReadWriteCloser) (*Conn, error)

NewConn возвращает новый Conn

func NewConnect

func NewConnect(host string, port int, db int) (*Conn, error)

NewConnect возвращает новый Conn

func (*Conn) Close

func (c *Conn) Close() error

Close закрывает соединение

func (*Conn) NewReplica

func (c *Conn) NewReplica(config replica.Config) (replica.Replica, error)

NewReplica возвращает новый Replica, не переводит коннект в режим репликации

func (*Conn) Send

func (c *Conn) Send(commandName string, args ...interface{}) error

Send отправляет комманду и не читает ответ

type Replica

type Replica interface {
	replica.Replica
}

Replica это проброс интерфейса Replica из подпакета на уровень выше

Directories

Path Synopsis
Package main это пример приложения для бесшовной миграции данных
Package main это пример приложения для бесшовной миграции данных
Package rdb это пакет для decode/encode rdb файлов Описание формата http://rdb.fnordig.de/file_format.html Типы данных: String List Set Sorted Set Hash ZipMap ZipList IntSet Sorted Set in Ziplist HashMap in Ziplist (добавлен в RDB version 4) List in QuickList (добавлен в RDB version 7)
Package rdb это пакет для decode/encode rdb файлов Описание формата http://rdb.fnordig.de/file_format.html Типы данных: String List Set Sorted Set Hash ZipMap ZipList IntSet Sorted Set in Ziplist HashMap in Ziplist (добавлен в RDB version 4) List in QuickList (добавлен в RDB version 7)
Package resp это пакет для реализации RESP (REdis Serialization Protocol) https://redis.io/topics/protocol
Package resp это пакет для реализации RESP (REdis Serialization Protocol) https://redis.io/topics/protocol

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL