Go 技术专家训练营课程大纲
平台类服务:通知平台
项目整体介绍
项目目标
通过构建一个平台类服务的模板项目,解决实际工作中遇到的多业务方接入、需求多样化、高可用性保障以及高并发性能优化等核心问题。该项目将涵盖多业务方对接、高性能架构设计、多渠道支持、事务机制等关键功能模块,并结合缓存策略、事务回查、服务治理等技术手段,全面提升系统的灵活性、可用性和性能。通过本项目的学习,学员将掌握平台类服务的核心设计思路与最佳实践,并提升其在复杂业务场景下的方案落地能力,使其能够从容应对以下典型业务场景:
- 需求多样化与多业务方对接场景:
- 场景描述:在业务方数量众多且需求差异显著的情况下,如何设计一个灵活且通用的平台服务,满足各类业务方的不同需求。
- 应对策略:
- 设计通用标准接口:设计满足不同业务方共性需求的标准化接口,确保接口的一致性、易用性与可扩展性。
- 设计高扩展性接口:采用模块化和可配置化的设计方法,支持业务方需求的快速迭代与功能扩展,确保平台能够适应不断变化的业务需求。
- 设计业务方接入控制方案:建立完善的接入管理机制,包括身份验证、权限控制和流量管理,确保平台能够安全、高效地管理多业务方的接入流程。
- 高可用性要求场景:
- 场景描述:在平台对稳定性和可用性有较高要求的情况下,如何设计和实施高可用架构方案,保障服务的持续运行。
- 应对策略:
- 设计复杂服务治理方案:掌握复杂服务治理方案设计思路及技巧,如负载均衡、自动故障转移、冗余部署和分布式架构设计,确保系统具备高可用性。
- 设计复杂容错策略:掌握复杂容错策略的设计思路及技巧,包括服务降级、熔断机制、重试策略和数据备份,确保系统在遭遇内部或外部依赖故障时依然能够正常运行。
- 读写高并发场景:
- 场景描述:在平台面临读写请求均为高并发的情况下,如何设计系统架构以保证性能与可用性,满足大规模用户访问需求。
- 应对策略:
- 设计高性能的数据处理方案:掌握高并发读写优化技术,如数据库分片、缓存策略、异步处理和消息队列的应用,提升系统的吞吐量和响应速度。
- 识别并解决性能瓶颈:运用性能分析工具,识别系统中的性能瓶颈,针对性地优化代码、数据库查询和资源配置,确保系统在高并发场景下依然保持稳定运行。
- 实施有效的负载管理:应用限流、熔断和降级等策略,合理分配和管理系统资源,防止过载导致的服务崩溃,确保系统在高负载下的稳定性和可用性。
第一周:通知平台需求分析与架构设计
教学目标
- 掌握平台类系统需求分析的技巧,能够识别核心业务需求和非功能性需求
- 设计多业务方对接的高扩展性通知平台架构
- 理解多业务方对接的平台类系统的设计和实现要素,例如接口设计、权限控制、数据隔离等
- 掌握使用 DeepSeek 协助进行场景分析、竞品分析和类似产品分析的技巧
- 掌握系统分析和架构设计的技巧,能够设计出高扩展、高可用、高性能的系统架构
- 掌握使用 DeepSeek 协助进行架构设计、评估设计方案的技巧
- 通过对话式交互验证架构可行性
- 自动生成架构图PlantUML代码
- 提供事务状态机设计建议
- 掌握使用 DeepSeek 协助进行架构设计、评估设计方案的技巧
- 理解多渠道、多调度场景下的复杂业务需求,并转化为技术方案。
- 完成通知平台的需求分析和总体设计,产出清晰的需求文档和架构设计文档
- 在 DeepSeek 的协助下快速撰写文档的技巧
- 掌握通知平台的核心功能设计和实现
详细内容
- 通知平台的业务场景分析
-
使用 DeepSeek 协助进行业务场景、竞品分析和类似产品分析
-
通知的唯一性保证
-
多渠道支持:综合考虑短信、邮件、站内信、电话拨号等
- 渠道类型:短信、邮件、站内信、电话拨号、App 推送、微信公众号等
- 渠道特性分析:成本、到达率、时效性、可靠性
- 渠道选择策略:智能路由、降级策略、成本优化、用户自定义选择策略支持方案
- 渠道扩展机制:插件化设计、标准化接口
-
业务方发送策略:立刻发送、固定时间点发送、截止时间发送
-
事务机制:保证通知的可靠性,实现事务通知和回查机制
- 事务通知与回查机制的设计
- 超时未确认的自动取消。
- 事务状态机:状态定义与转换、异常处理机制
- 多渠道接口设计与实现
-
接口适配层:屏蔽底层渠道差异,实现通用接口到专属接口的转换
-
渠道专属接口与通用接口的抽象设计与实现。
-
抽象层设计:通用接口定义、扩展点设计、SPI 机制实现
-
适配层实现:渠道适配器、错误码标准化、重试策略
- 业务方发送策略设计与实现
- 固定时间发送
- 截止时间发送
- 提供给业务方的多形态接口 :
-
同步接口:gRPC 接口设计、超时控制、重试机制
-
异步接口:gRPC 异步接口、MQ 解耦设计、消息幂等性、顺序保证
-
批量接口
- 事务机制
-
事务设计:预发送、确认发送、取消发送、超时未确认取消
-
回查统一接口与业务方接入方式:回查 HTTP 接口、回查 gRPC 接口、重试策略
-
异步通知机制:通过 MQ 通知事务消息发送结果、业务方提供 HTTP 或者 gRPC 等回调接口
-
事务模型:预发送、确认发送、取消发送、超时处理
第二周:通知平台业务方接入方案、安全保障和资源控制
教学目标
- 设计和实现灵活的业务方接入方案,满足不同业务方的需求
- 掌握资源控制策略,例如容量规划、限流等
- 掌握业务配置与动态生效的设计与实现能力
- 掌握识别观测重点的技巧、设计监控方案、识别告警点并且定义合适的告警规则
- 掌握借助 DeepSeek 进行容量估计、规划的方法
- 掌握借助 AI 工具完成前端界面生成的方法,保持对类似工具的关注
详细内容
- 通知平台附属管理后台分析
- 业务申请资源与审批流程
- 附属管理功能:查看结果、重试等功能
- 使用 AI 工具生成前端界面:前后端适配的关键点、界面微调
- 业务配置与动态修改
- 实时生效解决方案
- 资源控制
- 容量规划与限制设计:系统容量评估方法、各类资源使用上限设计
- 利用 DeepSeek 估算容量:根据历史数据预测 QPS/TPS、生成资源估算公式
- 接入计费功能
- 安全策略
- API 调用的鉴权
- 永久有效的 Token
- 实时申请的 Token
- 长短 Token 结合的设计
- 接口版本控制:设计向后兼容的接口,确保新版本发布不影响现有业务。
- 向后兼容性设计
- 新旧版本接口共存的演进策略
- 版本兼容策略:向后兼容设计、版本号管理、平滑升级方案
- 接口演进:字段扩展机制、接口废弃流程、版本切换机制
- 可观测性:接入 metrics 日志和 trace,重点监控和告警设置
- 在系统中识别业务关键点的技巧
- 在业务关键点中接入合适的可观测性数据
第三周:通知平台高可用性设计与实现
教学目标
-
掌握复杂的通知平台的服务治理方案,例如服务发现、负载均衡、熔断限流等
-
掌握高可用性保障措施,例如容错、容灾、自动扩缩容等
- 掌握防止高并发环境下资源耗尽的方法
- 掌握针对系统本身组件崩溃的容错方法
- 掌握针对各种外部依赖的崩溃的容错方法
- 掌握使用 DeepSeek 识别可用性瓶颈的方法
- 掌握使用 DeepSeek 设计可用性保障措施的方法
-
从通知平台可用性保障中抽象出一般的、通用的服务治理方案设计的方法论
详细内容
- 可用性保障的关键
- 使用 DeepSeek 识别关键点,并提供改进建议
- 服务治理方案
- 针对内外组件的容错方案
- 多活机制
- 故障机制
- 复杂的服务治理方案
- 掌握利用 DeepSeek 设计服务治理方案的方法,并且要求 DeepSeek 提供关键设计和实现
- 服务注册与发现的容错:多注册中心
- 负载均衡
- 隔离
- 进程内隔离机制:如线程池、连接池
- 进程间隔离机制设计
- 分组/路由
- 基于业务特征的分组策略
- 基于系统特征/负载的分组策略
- 熔断/限流/降级
- 智能限流策略
- 基于业务重要性的降级策略
- 跨服务的降级机制
- 重试:重试策略设计重试次数与成功率
- 超时控制:超时时间评估、超时与业务中断问题
- 自动扩缩容的一般设计机制
- 服务治理的统一理论
- 容错方案
- 第三方崩溃/基础组件崩溃的容错方案
- 异常隔离与降级服务设计
-
可用性测试与容灾演练
第四周:通知平台高并发设计与实现
教学目标
- 深入理解高并发场景下的性能瓶颈及优化方法。
- 掌握接口调用的性能优化技巧,如批量接口、pipeline 和 stream 接口等
- 掌握设计复杂缓存方案的技巧,熟练运用多级缓存并解决一致性问题
- 掌握内存使用优化方案和常见手段
- 掌握设计分库分表方案的技巧
- 掌握使用 DeepSeek 设计分库分表方案的技巧
- 利用 DeepSeek 来生成完整的分库分表实施方案,并且进行修改调整
- 掌握协程池的使用与优化方案
详细内容
- 性能优化
- pipeline/stream 接口
- 消息优先级队列:重要消息优先发送
- MQ 单个转批量/合并发送
- 智能批量策略:自适应批量大小
- 缓存方案:
- 多级缓存方案:数据一致性问题、可用性保障
- 预热
- 内存使用优化:引入对象池
- 引入协程池与协程池优化
- 高性能通知发送策略
- 基于时间的发送策略:分时段发送、业务低峰期发送
- 基于优先级的发送策略:多级优先级设计、动态优先级调整、饥饿避免机制
- 自适应发送策略
- 基于系统负载的自适应发送策略
- 基于渠道成本的智能发送策略
- 基于到达率的自适应发送策略
- 通知存储的分库分表方案
- 在 DeepSeek 的帮助下制定分库分表方案和实施方案
- 分库分表后的复杂查询支持
- 分库分表设计
- 分片策略
- 路由规则
- 扩容方案
- 查询优化
- 索引设计
- 查询重写
- 缓存策略
- 性能测试与性能瓶颈分析
通用权限类服务:权限系统
项目整体介绍
项目目标
通过构建一个通用权限类服务的模板项目,解决实践中遇到的权限控制和鉴权问题,尤其是在高并发、数据一致性要求高的场景下,确保权限数据的一致性与及时生效,平衡缓存与实时性的需求。该模板项目将涵盖RBAC、ABAC 等核心模型,并结合缓存、CQRS 等技术手段,实现高性能和高可用。使学员能解决绝大多数实践中遇到的权限控制、鉴权等问题,从容应对以下典型业务场景:
1. 高并发高性能与数据一致性场景
- 场景描述:在需要同时满足高并发、高性能和数据一致性的场景下,如何设计一个高效且可靠的权限系统。
- 应对策略:
- 设计高性能权限校验机制:采用分布式缓存存储权限数据,减少数据库的直接访问,提升权限校验的响应速度。
- 保障数据一致性:通过分布式锁或事务机制,确保权限数据在并发更新时的一致性。
- 实施读写分离与分库分表:针对高并发场景,设计读写分离架构,并结合分库分表策略,分散数据库压力,提升系统整体性能。
2. 读高并发场景
- 场景描述:在权限系统的读请求远高于写请求的场景下,如何优化系统架构以应对高并发读取需求。
- 应对策略:
- 设计多级缓存方案:采用本地缓存与分布式缓存相结合的多级缓存方案,减少高并发读取对数据库的压力。
- 预加载权限数据:在系统启动或权限变更时,提前将权限数据加载到缓存中,避免高并发场景下的缓存穿透问题。
- 实施限流与降级策略:针对高并发读取场景,设计限流策略和降级机制,确保系统在极端情况下仍能稳定运行。
3. 高可用性与容错场景
- 场景描述:在权限系统对可用性要求极高的场景下,如何设计高可用架构并实施容错措施。
- 应对策略:
-
设计容错与自动恢复机制:实现熔断机制和重试策略,在依赖服务故障时自动降级或恢复,保障系统的稳定性。
-
搭建监控与告警体系:建立全面的监控体系,实时跟踪权限系统的健康状态,并配置自动告警机制,及时发现并处理潜在问题。
-
第五周:权限系统需求分析与架构设计1:基于角色的权限控制(RBAC)
教学目标
- 掌握理解 RBAC 模型的核心概念和应用场景,掌握高扩展的 RBAC 模型的设计与实现方法
- 在 RBAC 的基础上,掌握复杂权限控制方案,包括权限时效性、多级继承等
- 在 DeepSeek 的帮助下,设计完备、高可扩展性的权限控制方案
- 学会将 RBAC 与个人权限混合控制机制结合使用
详细内容
- RBAC 设计与实现
- 用户、角色、权限、资源之间的关系建模
- 利用 DeepSeek 识别业务中的角色、权限和资源,生成 RBAC 的 UML 类图
- RBAC 数据表结构设计与实现
- 角色定义与管理
- 权限分配与撤销机制
- 权限验证与鉴权流程
- 权限模型扩展性设计
- 如何动态添加新的权限类型或规则
- 预留扩展字段,方便未来添加新的权限属性
- 支持自定义权限类型,满足不同业务场景的需求
- 借助 DeepSeek 评估权限模型的扩展性,以及权限建模的局限性
- RBAC 进阶模型设计与实现
- 临时授权体系:支持短期授权、自动失效机制
- 权限继承关系:多级继承支持
- 权限与资源版本控制:版本化权限管理,支持权限变更的回滚与追踪
- RBAC 与个人权限混合的控制机制
-
用户专属权限与角色权限的优先级控制
-
混合机制的实现与冲突处理
-
结合 RBAC 与用户个性化权限,实现灵活的权限控制
第六周:权限系统需求分析与架构设计2:基于属性的权限控制(ABAC)
教学目标
- 掌握理解 ABAC 模型的核心概念和应用场景,掌握高扩展的 ABAC 模型的设计与实现方案
- 在 DeepSeek 帮助下识别关键树形、控制策略,并且完成 ABAC 的建模
- 掌握 ABAC 中实现条件组合权限控制的设计与实现方案
- 学习 RBAC 与 ABAC 的混合使用场景及实现方式,用统一模型描述 RBAC 和 ABAC
- 设计统一的权限控制接口,支持灵活的权限查询与集成,掌握与中间件的集成方式
- 在 DeepSeek 的帮助下完成接口设计
- 在 DeepSeek 的帮助下集成各个中间件
详细内容
- ABAC 模型简介
- 核心概念:主体(Subject)、客体(Object)、环境(Environment)、动作(Action)
- 策略定义和规则引擎
- 动态规则匹配:基于属性值与规则的动态权限校验
- 条件组合权限:多条件复杂判断,支持 AND、OR、NOT 等逻辑组合
- 属性列表定制:如何根据业务需要灵活定义属性
- 复杂权限场景的解决方案
- 地域限制、设备限制等特殊场景的权限校验
- ABAC 设计与实现
- 在 DeepSeek 的协助下识别属性和权限控制策略
- 属性定义和存储
- 属性存储结构:可在关系型数据库、文档型数据库或分布式 KV 系统中灵活实现
- 动态策略解析:基于属性与策略规则实时执行鉴权逻辑
- ABAC 和 RBAC 的混合解决方案
- 混合模型的优先级与冲突处理。
- 使用 RBAC 处理大范围适用的通用权限,用 ABAC 细化个别特殊场景
- 统一权限模型:用一个基本模型统一描述 ABAC 和 RBAC
- 抽象出通用的权限模型,兼容 RBAC 和 ABAC
- 构建兼容 RBAC 和 ABAC 的统一元数据结构,减少重复开发、提升系统一致性
- 统一的权限控制接口
- 利用 DeepSeek 完成接口设计
- 在 DeepSeek 的帮助下完成与中间件的集成:如和 ORM、Web 等框架的集成
6 权限控制在具体业务中的应用
- 控制 HTTP/RPC 接口权限
- 控制数据访问权限
7 可观测性:接入 metrics 日志 和 trace,重点监控和告警设置
第七周:权限系统安全性、高可用性设计与实现
教学目标
- 学习高可用权限服务的设计与实现,包括容错、容灾与灰度发布
- 在 DeepSeek 的协助下,制定可用的容错、容灾方案
- 实现关键组件的容错机制,确保权限服务在关键组件故障时依旧稳定运行
- 掌握权限服务的综合服务治理策略,提升系统的整体可用性
- 设计完善的权限审计与追踪系统,提升系统的安全性与可维护性,构建全面的安全防护体系,防止越权和各种攻击
详细内容
-
综合全面的服务治理
-
关键组件崩溃的容错
- 数据库崩溃的容错策略:例如使用数据库集群或主从复制
- 缓存崩溃的容错策略:例如使用缓存集群或多级缓存
-
权限服务本身崩溃之后的鉴权问题
-
权限审计与追踪
- 操作审计日志:记录用户的操作行为
- 权限变更追踪:记录权限的变更历史
- 审计数据分析:分析审计数据,发现潜在的安全风险
- 灾备方案
- 让 DeepSeek 提供可用的灾备方案,并且进行详细分析
- 多活部署方案:提高可用性和容灾能力。在多个数据中心部署权限服务,确保单点故障不影响整体服务
- 故障转移机制:自动切换到备用节点。实现自动故障转移,确保在主节点故障时,备节点能够快速接管服务
- 多数据中心同步:跨 Region、跨可用区的数据一致性保障
- 设计多活方案的一般性理论:
- 多处部署
- 数据同步与一致性问题
- 流量切换
- 利用 DeepSeek 设计多活方案的方法
- 生成多活架构部署拓扑
- 设计跨机房数据同步方案
- 输出故障切换演练checklist
- 数据备份与恢复:
- 设计完善的数据备份策略,确保权限数据的安全存储
- 实现高效的数据恢复机制,确保在数据丢失或损坏时能够快速恢复服务
- 热备、冷备方案结合,缩短恢复时间(RTO)和数据丢失(RPO)范围
-
可用性测试和故障演练
第八周:权限系统高性能、高并发鉴权方案设计与实现
教学目标
- 学习权限服务在高并发场景下的性能优化策略
- 实现权限缓存、批量校验、CQRS 模式等高性能方案
- 设计并实现高效的数据同步和访问方案,确保系统的高可用性和一致性
- 在 DeepSeek 的协助下设计并实现 SDK 形态的权限操作接口,并在 SDK 中实施反范式的性能优化策略,知晓 SDK 设计与版本管理的核心方法
- 学习权限存储的分库分表设计与实现
详细内容
- 权限的缓存方案
- 常用权限缓存方案
- 缓存与权限变更生效问题:轮询权限变更、实时监听权限变更、反向通知业务方/前端
- 多渠道通知方式:
- 消息队列:基于 MQ 的权限变更通知
- 回调接口:主动推送权限变更
- CQRS 与部署方案
- 读写分离的权限服务架构
- CQRS 模式的实现与部署
- 批量权限检查:支持批量权限校验,提升高并发场景下的性能
- 权限信息前置
- 写入到 JWT token
- 写入到 Session
- 反范式设计:提供 SDK
- 在 DeepSeek 的协助下设计并实现 SDK
- 版本管理机制
- 打包编译的时候通过 CI/CD 来进行版本管理
- plugin 机制统一管理版本
- 集成分布式的本地缓存
- 直接访问 Redis
- ABAC 的性能优化
-
属性与规则的存储与查询优化。
-
动态规则匹配的优化方法(如预编译规则)
网关类服务:WebSocket 网关
项目整体介绍
项目目标
通过构建一个网关类服务的模板项目,帮助学员掌握WebSocket网关的核心设计思路与应对策略,并提升其在复杂业务场景下的方案落地能力。本项目旨在解决与网关相关的重点难点问题,包括长连接管理、高并发支持以及网关的高效设计与实现,使学员能够应对以下典型业务场景:
1. 海量长连接场景
- 场景描述:在需要维持大量客户端长连接的场景下,如何设计高效、稳定的长连接管理机制。
- 应对策略:
- 设计连接心跳机制:实现心跳检测机制,定期检查客户端连接状态,及时清理无效连接,避免资源浪费。
- 优化连接管理:采用连接池技术,高效管理客户端连接,支持快速查找和操作连接状态。
- 实现断线重连机制:设计自动重连逻辑,确保客户端在网络波动或异常断开后能够快速恢复连接。
2. 自研网关场景
- 场景描述:在需要支持高并发、低延迟的场景下,如何设计一个高性能的网关。
- 应对策略:
- 设计高并发架构:采用异步非阻塞模型实现网关核心通信层,支持高并发连接和消息处理。
- 实现消息路由与负载均衡:设计消息路由机制,支持将客户端请求分发到后端服务,并结合负载均衡策略,确保后端服务的稳定性。
- 优化数据传输性能:采用二进制协议(如 Protobuf)或高效压缩算法,减少数据传输量,提升网关的吞吐量和响应速度。
- 读写高并发场景
- 场景描述:网关需要同时处理大量的客户端连接(读高并发)和实时消息转发(写高并发),如何设计系统架构以保证性能与可用性,满足大规模用户访问需求。
- 应对策略:
- 设计高性能读写分离机制:将连接管理与消息处理分离,采用多线程或协程模型,分别优化读写性能。
- 实现消息队列缓冲:在高并发写入场景下,引入消息队列作为缓冲层,避免消息处理过载。
- 优化资源分配:根据读写负载动态分配系统资源,确保读写操作的高效执行。
- 高可用性与容错场景
- 场景描述:在网关对可用性要求极高的场景下,如何设计高可用架构并实施容错措施。
- 应对策略:
- 构建分布式网关集群:设计分布式网关架构,支持水平扩展,避免单点故障,提升系统的整体可用性。
- 实现故障自动转移:设计故障检测与自动转移机制,确保在某个网关节点故障时,流量能够快速切换到其他可用节点。
- 搭建监控与告警体系:建立全面的监控体系,实时跟踪网关的健康状态,并配置自动告警机制,及时发现并处理潜在问题。
第九周:WebSocket 网关需求分析和架构设计
教学目标
- 掌握 WebSocket 网关的核心需求分析与架构设计方法
- 掌握利用 DeepSeek 完成网关类系统的需求分析和架构设计方案
- 学会设计通用的消息协议与插件化架构,适配多业务线场景
- 学会进行网关的总体架构设计,包括分层架构和插件化设计
- 理解多业务场景下的协议设计要点
- 学习插件化架构的设计与实现
详细内容
- 多业务线场景分析
- 利用 DeepSeek 来分析场景
- 系统管理消息
- WebSocket 管理消息:支持客户端连接迁移
- 多端踢人消息:实现多设备登录冲突处理
- 推送消息
- IM
- 站内私聊
- AI 机器人/客服支持
- 撰写技术文档的技巧
- 利用 DeepSeek 撰写技术文档:生成骨架、填充细节、修改润色
- 网关架构设计
- 分层架构设计:层次划分的基本原则
- 接入层:负责客户端连接的建立与管理
- 协议层:处理消息的编解码与协议转换
- 业务层:执行业务逻辑,如消息路由、处理与转发
- 存储层:管理持久化数据,如会话信息和消息历史
- 插件化架构设计
- 插件的接入策略
- 插件接口设计
- 业务方接入接口设计
- 具体插件实现:
- 认证插件:实现多种认证机制(如 Token、OAuth),确保连接安全
- 可观测性插件:接入日志、metrics 和 trace
- 业务插件:根据不同业务需求定制化处理逻辑
- 安全架构设计
- 接入认证:确保连接合法性
- 传输加密:使用 TLS/SSL 等技术保障数据安全
- 攻击防护:防止恶意攻击
- WebSocket 消息协议设计
-
在 DeepSeek 的协助下参考不同协议设计方案,制定自己的协议格式
-
协议格式设计:定义消息的结构、字段及其含义,确保统一性与可解析性
-
业务方对接方式:定义业务方与网关的交互方式,包括连接建立、消息发送与接收
-
协议版本管理:实现向下兼容机制,保障协议更新过程中旧版本的持续可用性
-
协议扩展字段:协议插件机制,支持根据不同业务需求动态扩展协议功能
-
消息优先级:支持多级别消息优先级,确保关键消息的及时传输
-
消息可靠性:完善的消息确认机制,保障消息传输的可靠性
第十周:WebSocket 网关核心难点
教学目标
- 掌握利用 DeepSeek 分析系统难点的方法,在 DeepSeek 的帮助下制定完整的消息可靠传输、会话管理、连接管理方案
- 掌握 WebSocket 网关消息可靠传输机制,包括消息确认、重传、顺序和幂等性处理
- 实现会话管理功能,包括会话创建、销毁、保持、恢复和迁移
- 设计连接管理模块,实现连接监控、智能重连、连接复用和连接池管理
- 学习如何设计通用网关,支持多协议转换和适配,提升网关的灵活性与可扩展性
详细内容
- 消息可靠传输
- 消息可靠性保证与借助 DeepSeek 制定消息可靠传输方案
- 消息确认机制:客户端确认消息接收,服务端记录状态
- 消息重传策略:支持超时重传与失败重试
- 消息幂等性:确保重复消息不会导致业务逻辑异常
- 消息去重
- 离线消息推送:支持客户端离线时的消息存储与推送
- 存储策略
- 推送机制
- 消息顺序问题:消息失序与处理策略
- 消息加密与签名:对传输的消息进行加密与签名,防止数据被篡改或窃取
- 会话管理
- 利用 DeepSeek 制定会话管理方案,识别难点和提供实施建议
- 会话创建与销毁:高效管理会话生命周期
- 分布式会话管理
- 使用分布式存储来管理会话信息,实现多节点共享
- 会话数据同步:保证多节点间会话数据的一致性,支持高可用性与容错性
- 安全性增强
- 访问控制:基于用户身份与权限控制消息的发送与接收,保障系统安全
- 会话保持:通过心跳机制维持会话活跃状态
- 会话恢复:支持断线重连后的会话数据恢复
- 数据恢复
- 状态恢复
- 会话迁移:支持客户端在不同节点之间的会话迁移
- 跨节点迁移
- 数据同步
- 心跳机制
- 连接管理
- 利用 DeepSeek 设计连接管理方案
- 连接监控:实时监控连接状态,统计在线用户数
- 智能重连:使用退避算法优化重连策略
- 连接复用:支持多路复用,减少连接资源占用
- 连接池管理:高效管理连接资源,避免资源浪费
- 连接状态机设计:清晰定义连接的各个状态及其转换规则
- 异常连接检测:及时发现并清理无效或恶意连接
- 通用网关设计
- 协议转换网关
- HTTP/WebSocket 双向转换
- TCP/WebSocket 双向转换
- 协议适配器设计 协议适配器设计:支持多种协议的灵活适配
- 可观测性:接入 metrics 日志和 trace,重点监控和告警设置
第十一周:WebSocket 网关高可用设计与实现
教学目标
- 掌握 WebSocket 网关高可用架构设计的核心原则和技术方案,构建具备高可用性和容灾能力的 Websocket 网关,保证服务的持续可用与稳定运行
- 理解如何通过水平扩展、负载均衡、优雅上下线和消息队列隔离等技术提升网关的可用性
- 掌握利用 DeepSeek 设计网关高可用保障方案的技巧,并且在 DeepSeek 的帮助下实施
- 学习综合的服务治理方案,实现网关的水平扩展与智能调度,提升系统的整体可靠性
- 掌握 WebSocket 网关在实际生产环境中的高可用与容灾方案
详细内容
- 综合的服务治理方案
- 熔断、限流、降级:参考第一个项目的内容,根据 WebSocket 网关的特点进行适配
- 参考第一个项目的内容,结合 Websocket 网关的特点,设计适用于网关服务的服务治理方案
- 包括熔断、限流、负载均衡、降级等治理手段,提升系统的整体可靠性与稳定性
- Websocket 网关水平扩展
- 弹性伸缩(动态扩缩容)
- 实现基于实时流量与负载监控的自动扩缩容机制,动态调整网关实例数量
- 智能负载均衡:基于连接数、CPU 使用率等指标分配流量
- 再均衡策略:在节点扩容或缩容时重新分配连接
- 负载均衡与再均衡
- 智能负载均衡:基于负载的动态调度、基于地理位置的调度、基于网络质量的调度
- 再均衡策略:将连接从过载节点迁移到空闲节点
- 容量规划
- 连接数估算:根据业务需求预估最大连接数
- 资源占用评估:评估 CPU、内存等资源需求
- WebSocket 网关节点优雅上线下线(和会话管理高度相关)
- 在不中断现有连接的情况下完成节点的上线或下线
- 新节点上线:预热连接,逐步接管流量
- 节点下线:通知客户端重连到其他节点,避免连接中断
- WebSocket 连接优雅迁移(和会话管理高度相关)
- 连接迁移:将客户端连接从一个网关节点迁移到另一个节点
- 节点维护或升级:无损迁移/状态保持
- 流量切换:渐进式切换/回滚机制
- 消息队列隔离与分组
- 根据业务类型对消息队列进行隔离,避免互相干扰
- 将不同业务的消息路由到不同的消息队列,避免业务之间相互干扰
- 客户端容错:提供断线重连与备用节点切换机制,提升客户端体验
- 实现客户端的容错机制,如自动重连、连接备份等,提升客户端在网络不稳定环境下的使用体验
- 业务资源控制
- 消息频率限制:防止恶意用户频繁发送消息
- 连接数限制:限制单用户的最大连接数
- 网关监控体系
- 性能指标定义:明确网关服务的关键性能指标(KPI),如连接数、消息吞吐量、延迟、错误率等,作为性能优化与监控的依据
- 连接监控:实时统计在线连接数与连接状态
- 消息监控:监控消息发送与接收的延迟与错误率
- 性能监控:监控 CPU、内存、网络等资源使用情况
- 流量控制:限制单用户或单业务的最大流量。限制特定客户端或 IP 的连接数和消息频率
- 黑名单机制:屏蔽恶意用户或 IP
- 利用 DeepSeek 解读监控数据
第十二周:WebSocket 网关高性能、高并发设计与实现
教学目标
- 掌握 WebSocket 网关性能优化的关键技术,包括传输优化、内存优化和 TCP 优化
- 理解如何通过批量传输、连接复用和连接预热等技术提升网关并发处理能力
- 熟悉资源控制、连接池优化等实现高性能与高弹性伸缩
- 利用 DeepSeek 设计压测方案,并且要求 DeepSeek 解读压测数据,识别性能瓶颈,给出优化建议
详细内容
- 性能监控与分析
- 使用 Prometheus、Grafana 等工具监控网关性能指标,例如连接数、消息吞吐量、延迟等
- 分析性能瓶颈,并针对性地进行优化
- 性能测试
- 在 DeepSeek 帮助下设计测试方案,并且分析测试结果,给出优化建议
- 传输优化
- WebSocket 消息压缩:使用 gzip 或 deflate 算法压缩消息体积
- 编解码优化:使用高效的序列化工具(如 protobuf)等
- 连接池优化:限制最大连接数,避免资源耗尽
- 连接复用:使用多路复用技术,对后端服务或组件保持少量长连接
- 连接预热:在流量高峰前自动建立连接
- 批量传输技术:合并小消息,减少网络交互次数
- 消息合并
- 智能分批
- 心跳优化
- 频率自适应:如减少心跳
- 数据精简
- 传输延迟优化
- 内存优化
- 池化技术:通过对象池减少 GC 压力
- 零拷贝技术:避免数据在内存中的多次拷贝
- Buffer Pool:使用基于 Arena 的内存分配优化
- 操作系统优化
- TCP 优化:调整 TCP 参数(如窗口大小、拥塞控制算法)
- 系统资源控制
-
文件描述符管理:限制最大连接数,避免资源耗尽
-
内存使用控制:设置内存使用上限,防止 OOM
-
调度与编排类服务:分布式任务调度系统
项目整体介绍
项目目标
通过构建一个调度与编排类服务的模板项目,帮助学员掌握分布式任务调度系统的核心设计思路与应对策略,并提升其在复杂业务场景下的方案落地能力。本项目旨在解决任务调度中的重点难点问题,包括规则引擎设计、自定义 DSL 实现以及大规模、高并发、高可用的定时任务调度需求等,使学员能够应对以下典型业务场景:
- 设计规则引擎与自定义DSL实现的场景
- 场景描述:在需要灵活定义和管理任务调度规则的场景下,如何设计规则引擎并实现自定义领域特定语言(DSL),以满足复杂任务编排需求。
- 应对策略:
- 设计规则引擎核心架构:构建可扩展的规则引擎,支持动态加载、解析和执行任务调度规则。
- 实现自定义 DSL:设计并实现一套简洁、易用的 DSL,允许用户通过自然语言或类 SQL 语法定义复杂的调度规则。
- 优化规则解析与执行性能:采用高效的解析算法(如 ANTLR)和缓存机制,提升规则解析与执行效率。
- 检测规则依赖的循环问题:设计基于 DAG 模型的循环依赖检测机制,确保规则的正确性与执行顺序。
2. 设计大规模、高并发、高可用的定时任务解决方案的场景
- 场景描述:在需要支持大规模任务调度、高并发执行以及高可用性的场景下,如何设计一个能够动态扩展的分布式任务调度系统。
- 应对策略:
- 设计分布式任务调度架构:采用分布式架构(如基于 ZooKeeper 或 Etcd 的协调服务),支持任务的分片调度与负载均衡。
- 实现高并发任务执行引擎:设计基于多线程或协程的任务执行模型,优化任务执行性能,支持百万级任务处理。
- 保障系统高可用性:设计故障检测与自动恢复机制,确保在节点故障时任务能够自动迁移并继续执行。
- 支持动态扩缩容:实现任务调度节点和执行节点的动态扩缩容能力,满足业务高峰期的资源需求。
- 读写高并发场景
- 场景描述:分布式任务调度系统需要同时处理大量的任务调度请求(写高并发)和任务状态查询请求(读高并发),属于典型的读写高并发场景。
- 应对策略:
- 设计高性能任务存储方案:采用分布式数据库或 NoSQL 存储,支持高并发的任务元数据存储与查询。
- 实现任务状态缓存:引入分布式缓存,缓存任务状态信息,减少数据库的直接访问压力。
- 优化任务调度算法:设计高效的任务调度算法(如时间轮算法或延迟队列),确保任务能够按时触发并执行。
- 分库分表策略:针对任务存储设计分库分表方案,提升数据库的并发处理能力。
- 设计复杂任务编排与依赖管理的场景
- 场景描述:在需要处理复杂任务依赖关系(如前置任务、后置任务、条件分支、并行执行等)的场景下,如何设计灵活的任务编排机制并支持动态调整。
- 应对策略:
- 支持复杂任务依赖管理:设计任务依赖的前置、后置关系,确保任务按依赖顺序执行。
- 实现高级编排特性:支持条件分支、并行执行、循环执行、超时控制等高级任务编排需求。
- 任务动态调整:支持任务依赖关系、优先级的动态调整,满足运行时的灵活需求。
- 任务编排可视化:提供任务编排的图形化界面,便于用户直观配置任务依赖关系。
5. 优化任务的调度场景
- 场景描述:在需要支持海量任务的调度系统中,如何优化任务调度的性能,提升任务执行的吞吐量和系统资源利用率。
- 应对策略:
-
实现批量任务调度:通过合并小任务为批量任务,减少调度开销,提升调度效率。
-
优化任务分片与调度:设计智能分片策略,根据任务类型与数据量动态分片,并优先分配空闲节点执行。
-
提升调度器性能:优化调度器的任务分发逻辑,减少调度延迟,提升任务吞吐量。
-
优化任务执行器性能:设计任务执行器的并发模型,充分利用多核 CPU 与高性能网络资源。
-
存储优化:结合分布式缓存与分库分表策略,提升任务存储的读写性能。
-
第十三周:分布式任务调度需求分析和架构设计
教学目标
- 理解分布式任务调度的复杂场景,利用 DeepSeek 分析业务场景
- 掌握分布式任务调度系统的核心架构设计,在 DeepSeek 的帮助下产出设计文档,能设计并落地核心组件
- 理解复杂调度策略,在 DeepSeek 的帮助下设计并落地具体的调度策略
- 学习任务依赖管理、生命周期管理、监控和运维方面的基本要点
详细内容
- 整体架构设计
- 利用 DeepSeek 完成架构设计
- 调度系统架构设计
- 分层架构
- 调度层:负责任务分发与调度逻辑
- 编排层:处理任务依赖与规则编排
- 执行层:任务的实际执行与状态反馈
- 存储层:任务元数据与执行结果的持久化
- 核心组件设计
- 调度器:实现任务分发、优先级调度、资源感知调度
- 执行器:负责任务的实际执行与状态上报
- 任务队列:支持高并发任务的队列化处理
- 分层架构
- 多形态:
- SDK 接入:业务方使用SDK接入,任务存储在业务方数据库
- 集中式调度:任务由调度系统统一管理,业务方提供任务实现
- 业务方接口
- 实时注册接口
- 任务查询接口
- 任务调度接口
- 复杂调度策略
- 利用 DeepSeek 分析可用的调度策略,以及调度策略设计的要点
- 生成时间轮算法实现代码
- 多维度调度算法:基于时间、资源、优先级等多维度调度
- 优先级调度:支持多级优先级任务的动态调整
- 资源感知调度:根据节点资源使用情况动态分配任务
- 调度预测:基于历史数据预测任务负载,提前分配资源
- 任务管理
- 长任务支持
- 进度追踪
- 状态同步
- 提供任务中断与恢复机制
- 任务分片:将大任务拆分为多个小任务并行执行
- 分片策略:按数据范围、任务类型等维度分片
- 动态分片
- 均衡分配
- DeepSeek 推荐任务分片策略
- 管理后台
- 任务生命周期管理:从创建到完成的完整状态管理
- 任务监控:实时监控任务执行状态与性能
- 任务运维工具:支持任务的暂停、重试、终止等操作
- 可观测性:接入 metrics 日志 和 trace,重点监控和告警设置
第十四周:分布式任务调度的任务编排与规则引擎设计
教学目标
- 掌握任务编排的核心技术与实现方法,掌握前置、后置、并行与条件分支等高阶特性
- 在 DeepSeek 的帮助下完成任务编排和规则引擎的设计
- 学习规则引擎的设计与实现,掌握高扩展的 DSL 设计方法,以应对复杂的业务需求
- 在 DeepSeek 的帮助下设计一个 DSL
- 掌握复杂任务依赖与执行规则的实现
详细内容
- 自定义 DSL 设计
- 语言设计原则
- 简洁性与可读性
- 扩展性与灵活性
- 语法设计与实现
- 关键字与语法规则
- DeepSeek 生成完整语法规格说明
- DSL 与业务逻辑的集成
- 如何将自定义 DSL 转换为可执行的任务编排逻辑
- 测试与调试自定义 DSL
- 任务编排与自定义规则
- 利用 DeepSeek 识别任务编排难点,以及设计规则
- 前置任务:指定任务 A 执行完成后,再执行任务 B
- 后置任务:任务 A 执行后自动触发下一任务 C 或多任务并行
- 高级编排特性
- 条件分支:根据执行结果或外部输入决定下一个任务
- 并行执行:多个任务一起启动,提高整体效率
- 循环执行:定时轮询或循环检查,直到达到终止条件
- 超时控制:防止单个任务阻塞整体流程
- 任务编排可视化:提供任务编排的图形化界面,便于配置与管理
- 规则引擎
- 解析规则
- 基于 ANTLR 的 DSL 解析器设计
- DAG 模型设计:任务依赖关系的有向无环图表示
- 循环依赖检测:自动检测并处理任务依赖中的循环问题
- 执行规则
- 结果汇总: 收集任务执行结果
- 扩展为通用规则引擎(以讲解思路为主)
- 设计思路:将任务调度规则引擎扩展为通用规则引擎
- 支持多种规则类型(业务规则、数据规则等)
- 抽象规则引擎核心功能
- 提供可扩展的接口
- 支持不同类型的规则
第十五周:分布式任务调度高可用设计与实现
教学目标
- 掌握分布式任务调度系统的高可用设计,保障任务调度、任务执行和汇总结果等全过程的高可用
- 在 DeepSeek 的协助下制定高可用保障方案
- 掌握调度节点、任务执行节点故障恢复、超时控制、重试与容错策略
- 掌握任务中断与重调度的实现方法
详细内容
-
在 DeepSeek 的帮助下制定负载均衡、重调度、容错等方案设计
-
负载均衡和再均衡(和前面的会有所不同)
- 基于节点负载动态调度:实时监测节点运行状况,对新任务或重试任务进行最优分配
- 负载感知
- 实时调整
- 再均衡策略:长时间运行后,节点间出现不均衡时进行任务迁移或动态拆分
- 触发条件
- 执行策略
- 任务中断与重调度
- 状态迁移问题:任务中断后的状态恢复
- 重调度策略
- 同一节点重调度
- 不同节点重调度
- 任务状态管理
- 容错机制
- 调度节点不可用的容错:自动切换到备用节点
- 执行节点不可用的容错:任务自动迁移到其他节点
- 任务执行超时控制
- 超时检测与超时中断
- 超时任务的状态回滚
- 任务执行优雅启动/退出
- 启动时的资源预热
- 退出时的状态保存与清理
- 保证任务在被终止时能保存关键中间状态,不影响后续重启
- 重试策略
- 任意步骤开始重试:支持指定失败节点起点,从而省去已完成任务的重复执行。
- 整体任务重试:在编排层统一触发重新执行整个流程
- 指数退避:减少无效重试带来的系统额外负担
- 优先级调整:多次重试后可动态提升任务优先级,减少队列等待时间
- 可观测性
-
全链路追踪:记录任务的完整执行路径
-
调度性能分析:分析调度器的性能瓶颈
-
资源监控:实时监控节点资源使用情况
-
调度可视化:提供调度过程的图形化展示
第十六周:分布式任务调度高性能设计与实现
教学目标
- 掌握分布式任务调度系统的性能优化方法,在 DeepSeek 的帮助下设计性能优化方案,解读性能优化各个参数的含义以及调整方向
- 学习高并发场景下的批量调度与分片策略,深入了解调度的可扩展性
- 掌握心跳优化及长任务状态合并上报的解决方案
- 掌握分库分表策略与数据拆分的技术要点,为海量数据提供稳定支持
详细内容
-
批量任务调度
-
基于节点负载和资源的动态调度策略
- 实时监控节点资源和负载
- 动态调整任务分配
- 资源优先
- 低负载优先
- 长任务状态查询与心跳优化
- 合并状态上报:减少心跳频率
- 状态查询优化:支持批量查询
- 动态心跳机制,根据任务执行阶段自动调整心跳间隔
- 任务分片
- 智能分片策略:基于任务本身的数据量或执行时长,自动确定分片大小
- 分片智能调度:将分片分配给不同节点并行处理,加快整体执行速度
- DeepSeek 生成智能分片算法代码
- 存储优化
- 分库分表
- 分片策略
- 路由规则
- 利用 DeepSeek 生成分库分表方案
- 数据清理
- 归档策略
- 清理规则