Generador de ID distribuido-Meituan Leaf

¡Acostúmbrate a escribir juntos! Este es el décimo día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

imagen.png

1. Generador de identificación distribuida Meituan Leaf

Los primeros requisitos de Meituan Leaf son los requisitos de generación de ID de pedidos de cada línea de negocio. Para obtener documentos de diseño de Leaf específicos, consulte: leaf Servicio de generación de ID distribuida de Meituan . Características de la hoja:

  • Leaf se basa en la base de datos o ZK (el Snowflake implementado por ZK aquí es una mejora de la forma original de Snowflake).
  • Leaf proporciona dos modos: el modo de base de datos de segmento de hoja y el modo de copo de nieve de hoja.
  • Devolución de llamada de tiempo de copo de nieve optimizada. Problema de devolución de llamada de tiempo fijo.

2. Implementación Java de Leaf

Meituan tiene un código de implementación en Github. Sigamos el código para crear un proyecto local y ejecutarlo. Y utilízalo para ver.

Código de clonación:

git clone https://github.com/Meituan-Dianping/Leaf.git
复制代码

Configuración:

Ingrese el archivo de configuración leaf-server/src/main/resources/leaf.properties para establecer

configurar ilustrar valores predeterminados
hoja.nombre nombre del servicio de hoja
hoja.segmento.habilitar si el modo de segmento está habilitado falso
hoja.jdbc.url URL mysql
hoja.jdbc.nombre de usuario nombre de usuario mysql
hoja.jdbc.contraseña contraseña mysql
leaf.snowflake.habilitar si el modo copo de nieve está habilitado falso
leaf.snowflake.zk.dirección dirección zk en modo copo de nieve
hoja.copo.de.nieve.puerto puerto de registro de servicio en modo copo de nieve

Encendemos leaf.segment.enable=true. Y leaf.snowflake.enabledebido a la necesidad de usar zk temporalmente, no se abre. configuración de leaf.properties:

leaf.name=mxsm
leaf.segment.enable=true
leaf.jdbc.url=jdbc:mysql://192.168.43.129:3306/leaf?useUnicode=true&characterEncoding=utf-8
leaf.jdbc.username=root
leaf.jdbc.password=sys123456
复制代码

Ejecute el script:

CREATE TABLE `leaf_alloc` (
  `biz_tag` varchar(128)  NOT NULL DEFAULT '', -- your biz unique name
  `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, 'Test leaf Segment Mode Get Id')
复制代码

imagen.png

Compilar el proyecto:

cd Leaf
mvn clean install -DskipTests
复制代码

Ejecute el proyecto:

cd leaf-server
mvn spring-boot:run
复制代码

Inicio del proyecto completado:

imagen.png

Consejos: estoy usando mysql8.0, por lo que he modificado la versión del conector de mysql y la versión de druid, sin modificar el error. La versión jdk está usando 11

prueba:

#segment
curl http://localhost:8080/api/segment/get/leaf-segment-test
#snowflake
curl http://localhost:8080/api/snowflake/get/test
复制代码

prueba de hoja.gif

Totalmente utilizable.

Consejos: El código se analiza solo, generalmente el mismo. Hubo un error en el comando de compilación del código Github que se ha corregido aquí.

3. Resumen

Leaf-segmentEl esquema de la base de datos combina las ventajas de la base de datos y la generación en memoria. Es equivalente a una mejora de la implementación de Redis en el artículo anterior. Aquí, el servicio se puede proporcionar durante un breve período de tiempo después de que se produzca un error en la base de datos, pero la duración del servicio depende de step. Si el tamaño del paso es grande, el servicio se puede proporcionar durante mucho tiempo, incluso si falla la base de datos. Pero también puede conducir a una gran cantidad de residuos.

Leaf-snowflakeUtilice ZK para realizar la asignación de workId. Aborda los casos en los que se requiere especificación manual.

Soy una hormiga cargando un elefante. El artículo es útil para ti. Dale me gusta y sígueme. Si el artículo es incorrecto, deja un comentario ~ Gracias

Referencias:

Supongo que te gusta

Origin juejin.im/post/7084974110962352135
Recomendado
Clasificación