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

OSCHINA-MIRROR/dnwc-Leaf

Клонировать/Скачать
README_CN.md 7.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 09.06.2025 09:18 11917c7

Лист

В мире нет двух абсолютно одинаковых листьев.

В мире нет двух абсолютно одинаковых листьев.

— Лейбниц

Китайская документация | Английская документация

Введение

Первые требования к Leaf были связаны с необходимостью генерации идентификаторов заказов для различных бизнес-линий. В ранние дни Meituan некоторые бизнес-линии генерировали идентификаторы с помощью автоинкремента базы данных MySQL, другие использовали кэши Redis для генерации идентификаторов, а некоторые использовали UUID. Все эти методы имеют свои недостатки, поэтому было решено реализовать распределенную службу генерации идентификаторов. Подробное описание дизайна Leaf можно найти здесь: Leaf распределенная служба генерации идентификаторов Meituan

В настоящее время Leaf охватывает множество бизнес-линий Meituan, включая финансы, рестораны, доставку еды, отели и туризм, а также кинотеатры CatEye. При тестировании скорости запросов на сервере с конфигурацией 4C8G VM через внутренний протокол RPC компании QPS достигает около 50 000 запросов в секунду, а время отклика 99,9% составляет 1 мс.

Быстрый старт

Запуск Leaf с помощью аннотации starter

https://github.com/Meituan-Dianping/Leaf/blob/feature/spring-boot-starter/README_CN.md

Сервер Leaf

Мы предоставляем HTTP-сервис на основе Spring Boot для получения идентификаторов#### Описание конфигурации

Leaf предлагает два способа генерации идентификаторов (режим сегментов и режим Snowflake), которые можно использовать одновременно или выбрать один из них (по умолчанию оба режима отключены).

Конфигурация сервера Leaf находится в файле leaf-server/src/main/resources/leaf.properties

Настройка Описание Значение по умолчанию
leaf.name Имя сервиса Leaf
leaf.segment.enable Включение режима сегментов false
leaf.jdbc.url Адрес базы данных MySQL
leaf.jdbc.username Имя пользователя базы данных MySQL
leaf.jdbc.password Пароль пользователя базы данных MySQL
leaf.snowflake.enable Включение режима Snowflake false
leaf.snowflake.zk.address Адрес Zookeeper для режима Snowflake
leaf.snowflake.port Порт регистрации сервиса для режима Snowflake

Режим сегментов

Если используется режим сегментов, необходимо создать таблицу в базе данных и настроить leaf.jdbc.url, leaf.jdbc.username, leaf.jdbc.password. Если не хотите использовать этот режим, можно настроить leaf.segment.enable=false.

Создание таблицы данных
CREATE DATABASE leaf;
CREATE TABLE `leaf_alloc` (
  `biz_tag` varchar(128) NOT NULL DEFAULT '',
  `max_id` bigint(20) NOT NULL DEFAULT '1',
  `step` int(11) NOT NULL,
  `description` varchar(256) DEFAULT NULL,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`biz_tag`)
) ENGINE=InnoDB;
```insert into leaf_alloc(biz_tag, max_id, step, description) values('leaf-segment-test', 1, 2000, 'Тестовый режим сегментации Leaf')

##### Настройка связанных данных

В файле `leaf.properties` настройте параметры `leaf.jdbc.url`, `leaf.jdbc.username`, `leaf.jdbc.password`.

#### Режим Snowflake

Алгоритм взят из открытого исходного кода Twitter Snowflake.

Если не хотите использовать этот режим, можно настроить `leaf.snowflake.enable=false`.

##### Настройка адреса Zookeeper

В файле `leaf.properties` настройте параметры `leaf.snowflake.zk.address`, порт, на котором прослушивает служба Leaf, `leaf.snowflake.port`.

#### Запуск Leaf Server

##### Упаковка службы

```shell
git clone git@github.com:Meituan-Dianping/Leaf.git
# Согласно вышеуказанному режиму сегментации настройте проект
cd leaf
mvn clean install -DskipTests
cd leaf-server
Запуск службы

Внимание: сначала необходимо настроить таблицы базы данных или адрес Zookeeper.

Способ mvn
mvn spring-boot:run
Способ скрипта
sh deploy/run.sh
Тестирование
# Режим сегментации
curl http://localhost:8080/api/segment/get/leaf-segment-test
# Режим Snowflake
curl http://localhost:8080/api/snowflake/get/test
Мониторинг

Режим сегментации: http://localhost:8080/cache

Leaf Core

Конечно, для достижения более высокой производительности можно развернуть службу Leaf через RPC Server, для этого достаточно добавить пакет leaf-core, а также упаковать API генерации ID в определенный RPC-фреймворк.

Важные замечания

Важно отметить, что при использовании режима Snowflake логика получения IP-адреса берет первый сетевой интерфейс. Для служб, которые могут менять IP-адрес, это может привести к потере workId.

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

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

1
https://api.gitlife.ru/oschina-mirror/dnwc-Leaf.git
git@api.gitlife.ru:oschina-mirror/dnwc-Leaf.git
oschina-mirror
dnwc-Leaf
dnwc-Leaf
master