@ghini/kit
Version:
js practical tools to assist efficient development
65 lines (58 loc) • 1.61 kB
JavaScript
/*
SLink: StartLink
同样是分布式的实现,大致可分为三类:
1."中心化高效型" (slink):
适用场景:
- 流量统计、监控
- 配置管理、任务调度
- 审计日志、通知推送
特点:
- 主节点中心化决策,从节点轻量化
- 最终一致性,注重实时性和吞吐量
- 容易扩展,运维成本低
2.Paxos架构 - "分布式强一致型"
适用场景:
- 支付交易
- 库存预订
- 关键配置存储
特点:
- 强一致性保证
- 分布式容错
- 性能成本相对较高
3.区块链架构 - "去中心化共识型"
适用场景:
- 数字货币
- 智能合约
- 跨组织协作
特点:
- 完全去中心化
- 不可篡改性
- 共识成本高昂
slink的实现参考:
消息分类
- SyncRequest/Response: 数据同步
- StatusPing: 心跳检测带 hash
- EventNotify: 状态变更通知
- ControlCommand: 控制指令
性能优化
- 批量消息压缩
- 消息优先级区分
- 错误重试机制
- 流量控制
会话管理
- 心跳检测
- 会话恢复
- 异常处理
- 平滑重连
作者思路:
核心难点在于leader之间的会话管理:
- 心跳与同步 (用序列,如果有leader的序列掉队了,由其它没掉队的分摊它任务,正常情况应该是>=ping的序列号,else就说明异常落后)
- 异常隔离与恢复
- 运维日志
还要用到些持久化保存状态,以便重启后;
为了不那么复杂,进一步简化,因为服务器负荷并不大,主从只是为了容灾:
- leader间ping,顺位替换
- 运维日志
leader与follower的通讯特简单,发就是了,不用管理响应(最多记录有没有ok).
拓展出的h2实现的
*/