Tabla de división de la biblioteca de división de bases de datos (2) Análisis de Twitter-Snowflake (algoritmo de ID distribuido de 64 bits) e implementación de JAVA
El fondo de generación del algoritmo Twitter-Snowflake es bastante simple. Para cumplir con la solicitud de Twitter de decenas de miles de mensajes por segundo, a cada mensaje se le debe asignar una identificación única. en un cierto orden aproximado (con Para facilitar la clasificación de los clientes), y las ID generadas por diferentes máquinas en un sistema distribuido deben ser diferentes. Para obtener una comparación de varias estrategias de generación de ID de clave maestra, consulte Estrategias comunes de generación de ID de clave maestra distribuida.
Combine un prefijo de tiempo de 41 bits, un identificador de nodo de 10 bits y una secuencia de 12 bits.
A excepción del bit más alto, que está marcado como no disponible, los tres grupos de ocupación de bits restantes pueden flotar, según los requisitos comerciales específicos. De forma predeterminada, una marca de tiempo de 41 bits de 1970 admite hasta 2038 algoritmos, una ID de máquina de trabajo de 10 bits admite 1024 máquinas y un número de secuencia admite 4096 ID de secuencia de incremento automático en 1 milisegundo.
Snowflake es un conjunto de estrategias de generación de claves maestras escritas por Twitter en Scala en 2010. Utiliza Thrift para publicar el servicio de generación de claves maestras externamente. Este servicio se basa en la infraestructura interna de Twitter. El servidor reemplaza a Snowflake, que ya no se actualiza desde 2012. Consulte la dirección del proyecto Twitter-Snowflake (Etiquetas: snowflake-2010)
Anteriormente, escribí una implementación de Java, adaptada de una versión en Internet: Análisis de la implementación de Snowflake del ID de incremento automático distribuido de Twitter. algoritmo y sus versiones Java, Php y Python. Más tarde, vi que el middleware de tabla dividida de repositorio dividido Sharding-JDBC de Dangdang ha implementado este algoritmo. (Implementación, Documentación)
Se agregaron 3 implementaciones de IdGenerator.
Probado en una computadora portátil (i7-3632QM 2,2 GHz de cuatro núcleos y 8 subprocesos), se generan 4,09 millones por segundo (pico teórico) y el uso de la CPU es del 18,5 %.