1. 状态机
集群中的节点状态
2. 雪花(生成全局唯一id)
2.1 类 snowflake 算法
1 bit,41 bit 时间戳,10 bit workerID,12 bit 序列号
2.2 美团 leaf-snowflake 算法
当服务节点数量少时,可手动配置 workerID,当节点数量多时,利用 zk 的持久顺序节点特性,获取 workerID。通过定时上报时钟,当机器发生时钟回拨时,置服务为不可用。
3. hash 时间轮
用于定时任务。netty 中使用
4. java SPI 机制
java.util.ServiceLoader 框架常用
5. disruptor
无锁队列
<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.1</version> </dependency>
6. guava cache 常用缓存
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>guava</artifactId> <version>2.6.1</version> </dependency>
7. curator recipes 和 zkclient
zk 客户端
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency>
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>3.3.0</version> </dependency>
8. mock 测试
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.13.0</version> <scope>test</scope> </dependency>
9. metrics
统计程序内部数据,如 TPS 等
<dependency> <groupId>io.dropwizard.metrics</groupId> <artifactId>metrics-core</artifactId> <version>3.2.6</version> </dependency>
10. maven 版本控制
<dependencyManagement>
11. 程序不断输出异常,打爆磁盘
log 控制文件大小,避免打爆磁盘
12. 自动化部署
Ansible
13. 程序之间的网络通信,必然涉及到对象的序列化和反序列化
ProtobufUtil