阿里巴巴技术专家李智慧
一、架构
强烈的好奇心、敏锐业务嗅觉、扎实技术基础、出色编程能力、深刻领悟主流技术产品和模式
- 基础
- 数据结构
- 操作系统
- 算法
- 设计模式
- 技术
- 缓存
- 异步
- 分布式存储
- 微服务
- 架构
- 高可用
- 高性能
- 安全
二、大型架构演进之路 & 系统处理能力提升
性能提升
- 垂直伸缩(传统企业 银行等)
- 硬件升级 费用 、硬件有物理极限、操作系统也有限制
- 水平伸缩(互联网企业)
演进之路
- 少量用户:单机系统
- 万级用户:数据库与应用分离
- 十万级用户:使用缓存改善性能应用服务集群化
- 百万级用户:使用反向代理和CDN加速响应、数据库读写分离
- 千万级用户:使用分布式文件系统和分布式数据库系统
- 亿级用户:使用搜索引擎、NOSQL、消息队列、分布式服务
三、分布式缓存
缓存特点
- 技术简单
- 性能提升显著
缓存关键指标
- 缓存键集合
- 缓存空间
- 缓存寿命
缓存类型
- 代理缓存 (通读缓存 read-through)
- 反向代理缓存(通读缓存 read-through)
- cdn缓存(通读缓存 read-through)
- 对象缓存(旁路缓存cache-aside)
分布式缓存
- 分布式缓存架构
- 分布式缓存模型
- 一致性HASH算法
缓存注意事项
- 频繁修改的数据
- 没有热点的数据
- 数据不一致
- 缓存雪崩
通读缓存:给客户端返回缓存资源,或在请求未命中缓存 时获取实际数据
旁路缓存:通常是一个独立的键值对存储 key-value
四、分布式消息队列
- 同步与异步
- 同步调用
- 异步调用(2个重要模型)
- 点对点模型
- 发布订阅模型
- 异步架构
- 异步调用实现架构
- 消息生产者:消息生产者是客户端的一部份代码,用来初始化异步处理
- 消息消费者:消息消费者,由应用开发者实现,主要职责是从消息队列中接收并处理消息。
- 分布式消息队列:消息队列是消息发送的目的地和发给消费者的缓冲。
- 点对点架构模型
- 发布订阅模型
- 消息队列异步架构好处
- 异步处理
- 易于伸缩
- 消峰填谷,使峰值变平缓
- 隔离失败机器 及自我修复
- 解耦(发布者视角、消费这视角)
- 常用消息队列产品
- RabbitMQ *
- ActiveMQ
- RocketMQ
- Kafka **
- 消息队列异步架构的反模式
- 阻塞式调用 (同步)
- 生产者消费显式依赖 耦合消息生产者和消费者
- 缺乏坏消息处理机制
- 消息队列异步架构的挑战
- 消息无序
- 消息重入队列
- 竞态条件
- 复杂度
五、分布式数据存储
- mysql复制
- 主从复制:
- 一主一从
- 一主多从:分摊负载、专机专用、便于冷备、高可用
- 主主复制
- 主从复制:
- 数据分片
- 分片原理
- 分片方案
- 分片扩容
- 数据库部署
- 单一部署:主从复制实现伸缩
- 分库:两个web服务器和两个数据库
- 分片
- 将数据集切分成较小的分片,以便 于将它们分散存储在多台服务器上,避免一台机器处理整个数据集
- 数据库之间互相独立,不共享任何信息,通过分片键定位分片
- 将数据以某种方式切分,以便每台服务器都只存储一部份数据
- 综合部署都使用以上方案
- NOSQL
- CAP原理
- A数据可用性:任何时候任何应用程序 都可以读写访问
- P分区耐受性 系统可以跨网络分区线性伸缩
- C数据一致性 数据的多个备份任何时候都是一致性的
- 最终一致性的数据存储
- CAP原理
六、微服务
- 单体系统的困难
- 编译部署困难
- 数据库连接耗尽
- 服务复用困难
- 新增业务困难
- 微服务框架
- 架构
- 服务消费者
- 服务提供者
- 注册中心
- dubbo 阿里
- spring cloud
- 架构
微服务最佳实践
- 微服务模式
- 事件溯源
- CQRS 命令与查询职责隔离
- 断路器:关闭 打开 半开 hystrix
- 超时
七、高性能系统架构
- 性能测试(主观视角 使用者体验上的快慢 ;客观视角 性能指标优劣)
- 性能指标:响应时间、并发数、性能计数器、吞吐量
- 测试方法:性能测试、负载测试、压力测试、稳定性测试
- 性能曲线:吞吐量、响应用时间性能特性
- 硬件优化
- 机房与骨干网络优化
- 异地多活的多机房架构
- 专线网络与自主CDN建设
- 服务器与硬件配置优化
- 使用SSD、网卡等
- 机房与骨干网络优化
- 中间件优化
- 操作系统优化
- 虚拟机优化:垃圾回收器
- 基础组件优化:tomcat等
- 代码优化
- 多线程:并发编程,多线程与锁
- 数据结构:数组、链表、HASH表、树、图等
- 设计模式:遵循编码规范 面向对象 避免烂代码
- 资源复用:线程池和对象池
- 架构优化
- 缓存:缓存结果为对象、优化读操作、减少数据库访问,降低存储设备负载压力
- 集群
- 异步:优化写操作,控制消费速度,合适的负载压力,即时响应,更好用户体验
八、高可用系统架构
- 可用性度量
- 可用性指标
- 年度可用性指标 =(1-不可用时间/年度总时间)*100%
- 通常用N个9来说明互联网应用可用性
- 故障分
- 事故级故障:严重故障,整体不可用:权重100
- A类故障:网站访问不顺畅或核心功能不可用:权重20
- B类故障:非核心功能不可用或核心功能少数用户不可用:权重5
- C类故障 :以上故障以外的其它故障:权重1
- 故障分 = 故障时间 * 故障权重
- 可用性指标
- 高可用架构
- 负载均衡:HTTP、DNS、反向代理、IP层、数据链路层
- 备份与失效转移
- 消息队列隔离
- 限流降级:通过对并发访问进行限流,降低并发的请求数据来保护系统;关闭部份非核心功能,降低对系统的资源消耗,保证系统在高并发的情况下仍然保持可用。
- 异地多活多机房
- 高可用运维
- 自动化部署
- 自动化监控
- 自动化测试
- 预发布测试
九、系统的安全架构
- WEB攻击
- XXS攻击
- SQL注入攻击
- CSRF攻击
- WEB防护
- 过滤消毒
- SQL参数绑定:防御SQL注入
- 验证码 :防御CSRF
- WEB防火墙:modsecurity
- 加密
- 单项散列加密:明文转密文 不可以解密的 加密是单项的
- 对称加密:密钥
- 非对称加密:公钥、私钥
- 信息过滤反垃圾
- 分类算法
- 布隆过滤器