mpy6a

package module
v0.0.0-...-0594d08 Latest Latest
Warning

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

Go to latest
Published: Jun 17, 2023 License: MIT Imports: 3 Imported by: 0

README

mpy6a

Или просто труба. Это распределённый WAL, т.е. Write Ahead Log, т.е. сущность предоставляющая функциональность распределённого лога с группировкой записей по сессиям, с возможностью получить записанные данные для т.н. незавершённых сессий (и, опираясь на данные, завершить сессии).

Труба является одним из субъектов взаимодействия:

  • Сама труба.
  • Клиентские приложения, создающие сессии и работающие с ними.
  • Сущности, получающие незавершённые сессии. В сущности, это те же самые клиентские приложения реализующие через стандартизованный протокол. Эти сущности не подключаются к трубе, это труба подключается к ним.

Клиентам предоставляются следующие ручки:

// Tpy6a клиент вначале создаёт сессию, чтобы работать с ней.
type Tpy6a interface{
	// New создаёт новую сессию с указанным родом клиента.
	// Род клиента нужен чтобы потом, если потребуется обработка
	// незавершённых сессий, выбирать правильный обработчик.
	New(clientKind uint32) (Session, error)
}

// Session функциональность работы с сессией.
type Session interface{
	// ID индекс сессии.
	ID() Index
	// Append добавить очередной кусок данных в сессию
	Append(record []byte) error
	// Replace очистить список накопленных в рамках сессии данных
	// и сразу же добавить туда новую запись.
	Replace(record []byte) error
	// Delete удаляет сессию, она считается завершённой после этого.
	Delete() error
	// Store закрывает запись в сессию и отправляет её на
    // повторную обработку через указанное число секунд как
	// незавершённую.
	Store(timeout uint32) error
}

Тогда как "сущности, получающие незавершённые сессии" получают пару

type RepeatData struct{
	// Records накопленные в рамках сессии данные.
	Records [][]byte
	Session Session
}

и далее работают с сессией как обычные клиенты.

Что это на самом деле.

Строго говоря, это не совсем WAL. Труба – это машина состояний для WAL-а. От пользователя требуется:

  1. Определить и реализовать протокол взаимодействия с клиентами.
  2. Определить ручки для восстанавливаемых сессий. Собственно, этот пункт и послужил причиной почему труба не является конечным продуктом. Хотя общие рекомендации есть, но всякие аутентификации/авторизации в рамках работы конкретного набора (микро)сервисов могут отличаться, поэтому это и отдано на откуп пользователю. Можно было, конечно, реализовать pubsub модель, когда сессии создаются в рамках темы, а для тем имеются подписчики, но такой подход вносил бы слишком много энтропии. Например, ситуация когда для какой-то конкретной темы нет подписчиков. Подход с автоматической раздачей, когда темы жёстко определены где-то в конфиге, представляется более железобетонным и поэтому предпочтительным.

Глоссарий.

Низкоуровневый дизайн работы системы.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Discoverer

type Discoverer func(ctx context.Context)

Discoverer абстракция поиска узлов кластера

type Logger

type Logger = state.Logger

Logger абстракция логирования со специализацией для работы в рамках системы.

type StateIndex

type StateIndex = types.Index

StateIndex состояние системы

Directories

Path Synopsis
internal
byteop
Package byteop операции над слайсами байтов.
Package byteop операции над слайсами байтов.
bytespool
Package bytespool с примитивом выделения слайсов байт.
Package bytespool с примитивом выделения слайсов байт.
dllist
Package dllist реализация двусвязного списка.
Package dllist реализация двусвязного списка.
extmocks
Package extmocks генерированные pamgen-ом моки.
Package extmocks генерированные pamgen-ом моки.
logging
Package logging определение сущности для логирования.
Package logging определение сущности для логирования.
logio
Package logio определения сущностей для работы с обоими видами логов.
Package logio определения сущностей для работы с обоими видами логов.
logop
Package logop операции записи и чтения из лога.
Package logop операции записи и чтения из лога.
mpio
Package mpio специализированные io-примитивы хранилища.
Package mpio специализированные io-примитивы хранилища.
raft
Package raft реализация алгоритма консенсуса RAFT.
Package raft реализация алгоритма консенсуса RAFT.
sbuffer
Package sbuffer (Steady Buffer) определяет буферизатор гарантирующий неделимость пакетов.
Package sbuffer (Steady Buffer) определяет буферизатор гарантирующий неделимость пакетов.
sourceio
Package sourceio содержит операции с файлами источниками.
Package sourceio содержит операции с файлами источниками.
state
Package state структуры данных и логика работы с состоянием.
Package state структуры данных и логика работы с состоянием.
staterr
Package staterr пакет ошибок машины состояния.
Package staterr пакет ошибок машины состояния.
tlog
Package testlog context aware github.com/sirkon/errors.Error logging in tests.
Package testlog context aware github.com/sirkon/errors.Error logging in tests.
types
Package types содержит определения типов используемых в работе с хранилищем и состоянием, а так же базовые операции с ними в виде функций (не методов).
Package types содержит определения типов используемых в работе с хранилищем и состоянием, а так же базовые операции с ними в виде функций (не методов).
uvarints
Package uvarints дополнительные функции для работы с uvarint-ами
Package uvarints дополнительные функции для работы с uvarint-ами
tools module

Jump to

Keyboard shortcuts

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