1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/sunney-bamboo-leaf

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 13.03.2025 07:38 96306c4

Bamboo-Leaf简介

Bamboo-Leaf — это система генерации распределённых идентификаторов, написанная на Java. Алгоритм Leaf-Segment основан на оптимизации и расширении базового номерного алгоритма (Segment). Алгоритм Leaf-Snowflake основан на оптимизации и расширении базового снежинкового (Snowflake) алгоритма. В нём переопределены размеры различных частей снежинки, что позволило решить проблемы ограничения узлов WorkerID и повторения последовательностей при откате времени. Это также повысило количество создаваемых идентификаторов за миллисекунду.

Распределённые последовательности Bamboo-Leaf подходят для большего количества сценариев, обеспечивая высокую пропускную способность и надёжность, а также удобство внедрения.

При этом Bamboo-Leaf предоставляет клиентскую библиотеку Bamboo-Leaf-Client (SDK), которая позволяет локально генерировать идентификаторы, повышая производительность и надёжность системы. Все эти возможности доступны через Bamboo-Leaf-Client, позволяя системе каждый день генерировать миллиарды уникальных идентификаторов. Подробнее в документации

Bamboo-Leaf архитектурный чертеж

Архитектурный чертеж

Bamboo-Leaf структура кода

bamboo-leaf

  • ---bamboo-leaf-server
  • ---bamboo-leaf-client
  • ---bamboo-leaf-core
  • ---bamboo-leaf-autoconfigure
  • ---bamboo-leaf-demo# bamboo-leaf список API

1. Список API для алгоритма Snowflake

Класс API: BambooLeafSnowflakeClient

Номер Интерфейс Название Описание
1 public long snowflakeId(String namespace); Снежинка Возвращает значение типа Long
2 public String snowflakeId16(String namespace); Снежинка + случайное число Возвращает 16-значное поле:
13 цифр (перевод стандартного снежинкового алгоритма в 36-ричная система),
3 цифры (случайное число переведено в 36-ричная система)
3 public String snowflakeId20(String namespace); Снежинка + namespace + случайное число Возвращает 20-значное поле:
13 цифр (стандартный снежинковый алгоритм переведен в 36-ричная система),
3 цифры (namespace переведен в 36-ричная система),
3 цифры (случайное число переведено в 36-ричная система)

2. Интерфейсы алгоритма SegmentИнтерфейсный класс: BambooLeafSnowflakeClient| Номер | Интерфейс | Название | Описание функциональности |

| ---- | ---- | ---- | ------ | | 1 | public Long segmentId(String namespace); | Возвращает число от 1 до Long.MAX_VALUE | Возвращает значение типа Long | | 2 | public Long dateSegmentId(String namespace); | Возвращает последовательность long с датой, состоящую из 19 цифр
Формат: 8 цифр yyyyMMdd + 11 цифр последовательности | Например: 202101010000000001
После достижения значения 99999999999 последовательность сбрасывается.
Этот алгоритм позволяет создавать до 99999999999 уникальных номеров в день | | 3 | public String dateSegmentId(String namespace, String prefix); | Возвращает последовательность строки с префиксом и датой, состоящую из 19 цифр
Формат: префикс + 8 цифр yyyyMMdd + 11 цифр последовательности | Например: P202101010000000001
После достижения значения 99999999999 последовательность сбрасывается.
Этот алгоритм позволяет создавать до 99999999999 уникальных номеров в день | | 4 | public Long timeSegmentId(String namespace); | Возвращает последовательность времени, состоящую из 19 цифр
Формат: 12 цифр yyMMddHHmmss + 7 цифр последовательности | Например: 2101010101010000001
После достижения значения 9999999 последовательность сбрасывается.
Этот алгоритм позволяет создавать до 9999999 уникальных номеров в секунду || 5 | public String timeSegmentId(String namespace, String prefix); | Возвращает строку, состоящую из префикса и времени, которая состоит из 19 цифр
Формат: префикс + 12 цифр yyMMddHHmmss + 7 цифр последовательности | Например: P2101010101010000001
После достижения значения 9999999 последовательность сбрасывается.
Этот алгоритм позволяет создавать до 9999999 уникальных номеров в секунду |# Пропуская способность и доступность

Высокая производительность

  1. Для одного узла leaf-segment пропускная способность может достигать 200 000 запросов в секунду (в зависимости от шага и производительности сервера).
  2. Для одного узла leaf-snowflake максимальная пропускная способность составляет 262 143 запроса в секунду.Примечание: Пропускная способность всего кластера = пропускная способность одного узла * количество узлов.

Доступность

  1. leaf-segment Взаимозависимость с базой данных (DB): при недоступности DB клиент продолжает использовать последний полученный ID благодаря кэшированию (в зависимости от шага и скорости генерации последовательностей). Поддерживает несколько баз данных (необходимо обеспечивать согласованность данных между ними).
  2. leaf-snowflake При запуске требуется получить WorkerID из базы данных; ранее недоступность базы данных не влияла на работу.

Заключение: Распределенная модель работы локального клиента обеспечивает высокую доступность, позволяющую работать даже при недоступности централизованной службы bamboo-server.

Характеристики Bamboo

  1. Глобально уникальный long тип ID.
  2. Устойчивое увеличение значений, общее непрерывное значение.
  3. Предоставляет централизованную модель работы с удалённым сервером и распределённую модель работы с локальным клиентом.
  4. Поддерживает расширяемые алгоритмы на основе двух основных алгоритмов: segment и snowflake.
  5. leaf-segment поддерживает различные механизмы генерации номеров для различных IDC (например, A: 1, 3, 5..., B: 2, 4, 6...).
  6. leaf-snowflake решает проблемы ограничения узлов WorkerID и повторения последовательностей при возврате времени.
  7. Обеспечивает механизмы защиты для высоких нагрузок и высокой доступности.# Практические применения

Подходящие случаи:

  1. Чистые цифровые последовательности (например, ID записей в журнале).
  2. Последовательности с бизнес-атрибутами (например, номер заказа: P2101010101010000001).
  3. Полностью случайные строки (например, QR-код: 023eqt01pd6o001a04ui).
  4. Разделённые таблицы и базы данных, развернутые в нескольких дата-центрах, каждая таблица имеет свою последовательность ID.

Неподходящие случаи:

  1. Случаи, где требуется строгое следование порядка.

Зависимости

JDK 1.8+, Maven, MySQL, текущий Java клиент зависит только от JDK.

Контактная информация

WeChat

После добавления в WeChat вас добавят в групповой чат.

WeChat

Присоединиться к QQ обсуждению

QQ

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/sunney-bamboo-leaf.git
git@api.gitlife.ru:oschina-mirror/sunney-bamboo-leaf.git
oschina-mirror
sunney-bamboo-leaf
sunney-bamboo-leaf
master