UNPKG

@ghini/kit

Version:

js practical tools to assist efficient development

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