Leaf
Leaf是美团开源的一款的唯一ID生成器,具体可以参考https://github.com/Meituan-Dianping/Leaf的介绍,文档写的很好,大家一定能够明白软件背后想要解决的问题。我们还是来简单总结下唯一ID系统的目标,帮助大家更好的了解接下来的内容介绍。
系统方面
- 高可用。系统能保障99.999%的可用时长
- 高性能。支持高并发、低延迟
- 可伸缩。可以通过水平扩容来生成更多的ID
功能方面
- ID是全局唯一的
- ID满足趋势递增(非严格递增)
- ID生成能够满足不规则的需求,以防止数据安全问题的产生,比如竞争对手根据两个ID号来推算出一天的订单量
服务的启动
deploy/run.sh
中可以查阅到服务的启动的main class。
MAIN_CLASS="com.sankuai.inf.leaf.server.LeafServerApplication"`
那么,我们接下来就从这个类的启动开始说起,系统全面的介绍下整个Leaf框架。
@SpringBootApplication
public class LeafServerApplication {
public static void main(String[] args) {
//启动spring boot服务
SpringApplication.run(LeafServerApplication.class, args);
}
}
Controller层对外提供了两种类型的ID的接口:
- 基于DB的分段模型ID生成
- 基于雪花模型的ID生成
@RestController
public class LeafController {
private Logger logger = LoggerFactory.getLogger(LeafController.class);
@Autowired
SegmentService segmentService;
@Autowired
SnowflakeService snowflakeService;
@RequestMapping(value = "/api/segment/get/{key}")
public String getSegmentID(@PathVariable("key") String key) {
return get(key, segmentService.getId(key));
}
@RequestMapping(value = "/api/snowflake/get/{