В мире нет двух абсолютно одинаковых листьев.
В мире нет двух абсолютно одинаковых листьев.
— Лейбниц
Китайская документация | Английская документация
Первые требования к Leaf были связаны с необходимостью генерации идентификаторов заказов для различных бизнес-линий. В ранние дни Meituan некоторые бизнес-линии генерировали идентификаторы с помощью автоинкремента базы данных MySQL, другие использовали кэши Redis для генерации идентификаторов, а некоторые использовали UUID. Все эти методы имеют свои недостатки, поэтому было решено реализовать распределенную службу генерации идентификаторов. Подробное описание дизайна Leaf можно найти здесь: Leaf распределенная служба генерации идентификаторов Meituan
В настоящее время Leaf охватывает множество бизнес-линий Meituan, включая финансы, рестораны, доставку еды, отели и туризм, а также кинотеатры CatEye. При тестировании скорости запросов на сервере с конфигурацией 4C8G VM через внутренний протокол RPC компании QPS достигает около 50 000 запросов в секунду, а время отклика 99,9% составляет 1 мс.
https://github.com/Meituan-Dianping/Leaf/blob/feature/spring-boot-starter/README_CN.md
Мы предоставляем 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 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 через RPC Server, для этого достаточно добавить пакет leaf-core
, а также упаковать API генерации ID в определенный RPC-фреймворк.
Важно отметить, что при использовании режима Snowflake логика получения IP-адреса берет первый сетевой интерфейс. Для служб, которые могут менять IP-адрес, это может привести к потере workId
.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )