互联网分布式架构设计课程
课程天数:2天
课程介绍
本课程从最简单的业务设计入手,讨论在架构设计时如何保证业务的高可靠性和高可扩展性,这里面涉及了数据库、缓存、队列、代理等系统的实现原理和使用技巧,也涉及了移动端、前端的常用优化技巧。
课程收益
通过本课程,学员可以掌握互联网系统的架构设计技巧,并且掌握如果保证业务数据完整性、如果面对秒杀活动、如果进行业务降级等方法和技巧,有效的提高学员在设计互联网系统时的能力。
培训对象
未来或目前从事开发经理工作的高级程序员、开发团队中的设计人员、系统分析人员,开发主管或项目经理等。
课程大纲
第一单元:高扩展高可靠业务架构基本原理
• 网站基本架构
• DNS+HA+Runtime
• CAP原理
• 两步提交+三步提交原理
• 讨论:以一个最简单的业务入手,讨论各个环节的高可靠、高扩展的最简单设计,包括DNS代理Web服务器环节。
第二单元:路由层可靠性
• DNS可靠性
• 四层路由、七层路由(nginx)
• 路由的扩展性、可靠性
• 健康检查
• redispatch
• 无状态路由 vs 有状态路由
• XFF
• 讨论:从nginx基本原理epoll进行nginx调优,设计nginx配置文件调优+nginx模块简单编写。
第三单元:缓存系统设计
• 一致性hash
• 非阻塞+阻塞
• LRU
• 过期时间
• 多级缓存
• 数据一致性
• CDN原理及使用
• 讨论1:瞬时导致微博长微博系统出现问题,进而引起雪球效果,导致微博整站无法访问,突发的无可预知的类似人工DDOS问题,如何处理?
• 讨论2:众所周知,CDN常用于静态资源加速,那么动态资源可否使用CDN?
• 讨论3:memcached和redis实现原理,及作为cache系统的异同
第四单元:WebServer设计
• 无状态设计
• 动静分离
• 隔离技术
• 并发控制
• 智能路由
• L1 cache
• 实践:压力测试工具进行压测
• 讨论:如何防范网络CC攻击
第五单元:队列系统
• 顺序队列 vs 并发队列
• 数据持久性
• 防止队列阻塞
• 队列系统设计
• 队列监控
• 实践:秒杀是互联网业务最有挑战的需求,从技术上满足秒杀需求的最重要的环节就是变同步为异步,那么这个环节中队列起到什么作用,如何设计一个秒杀系统?
第六单元:关系型数据库
• 冷备+热备
• 异地容灾
• 主从分离
• partition(分库分表的基本原则)
• trigger
• SSD为数据库技术带来的影响
• 讨论1:在合适的场景选型关系型数据库和非关系型数据库
• 实践2:利用MySQL explain进行数据库优化实战
第七单元:非关系型数据库
• 列存储
• hash型 vs B tree型
• 对等结构 vs 非对等结构
• meta一致性原则
• 分布式系统PAXOS算法
• 重平衡机制
• 讨论1:面对关系型、非关系型、缓存型数据存储,业务如何选型?
• 讨论2:异构数据同步,如何实现?
第八单元:分布式计算
• MPI & MapReduce
• MapReduce和Hadoop的关系
• 流式分布式计算的原理
• 计算密集型和IO密集型
• 实践:利用MapReduce解决实际的词频统计问题
第九单元:前端和API设计
• 合理设计API的原则
• 页面压缩与缓存
• 图片展现加速
• HTML5
• 响应式设计原则
第十单元:保证业务流畅的技巧
• 合理的设计cache
• 合理的“假”显示
• 异步工作流+回调
• 功能降级、分流
• 尽可能做业务冗余
• 讨论1:用户抱怨访问慢,顺着这个线索,怎么排查?
• 讨论2:速度是第一用户体验,根据学员的实际问题,来讨论怎么发现业务瓶颈、怎么解决业务瓶颈
第十一单元:运维体系
• App监控和反馈
• 运维体系架构
• 灰度发布技巧vs 开发测试环节
• 怎么通过运维提高服务可靠性
• 怎么通过运维提高服务质量
• 怎么通过运维降低服务成本
• 讨论:小A负责运维,每次接到变更需求他都小心翼翼上线,上线后刷新业务页面进行确认,这样得上线流程是否可靠?怎么改进?