Featured image of post 持续演进的Cloud Native (读书笔记04)

持续演进的Cloud Native (读书笔记04)

可扩展性设计 性能设计 一致性设计可扩展性设计横向扩展横向扩展(scale out)也叫水平扩展,指用更多

可扩展性设计 性能设计 一致性设计

可扩展性设计

横向扩展

  • 横向扩展(scale out)也叫水平扩展,指用更多的节点支撑更大量的请求。例如如果1台机器支撑10 000TPS,那么两台机器是否能支撑20 000TPS?

  • 纵向扩展(scale up)也叫垂直扩展,扩展一个点的能力支撑更大的请求,它通常通过提升硬件实现,例如把磁盘升级为SSD。

如何扩展数据库

  • 主从复制集群

  • 分库、垂直分表

  • 分片(sharding)

  • 区间法(Range-Based)

  • 轮流法(Round-Robin)

  • 一致性哈希法(Consistent Hash)

如何扩展数据中心

  • 两地三中心

  • 同城多活

  • 异地多活

性能设计

比较常见的性能问题如下

  • 内存泄漏——导致内存耗尽。

  • 过载——突发流量,大量超时重试。

  • 网络瓶颈——需要加载的内容太多

  • 阻塞——无尽的等待。

  • 锁——通过限制。

  • IO繁忙——大量的读写、分布式

  • CPU繁忙——计算型常见问题。

  • 长请求拥塞——连接耗尽。

性能指标

  • 响应时间(Latency),就是发送请求和返回结果的耗时。

  • 吞吐量(Throughput),就是单位时间内的响应次数。

树立目标

寻找平衡点

  • 我们可以通过一组压力测试数据找到拐点。

定位瓶颈点

  • 压力测试

  • 日志分析

  • 监控工具

服务通信优化

  • 同步转异步

  • 阻塞转非阻塞

  • 序列化优化

通过消息中间件提升写性能

通过缓存提升读性能

  • 缓存的常用模式

  • Read Through模式

  • Write Through模式

  • Write Behind Caching模式

  • Cache-Aside模式

  • Cache-As-SoR模式

  • 为缓存数据设置合理的过期时间

  • 为缓存设置回收策略

  • 先预热数据

数据库优化

  • 通过执行计划分析瓶颈点

  • 为搜索字段创建索引

  • 通过慢查询日志分析瓶颈点

  • 通过提升硬件能力优化数据库

  • 目前各大互联网公司的数据库均使用SSD硬盘或者PCIE-FLASH,据说2012年的时候微博使用PCIE-FLASH支撑了Feed系统在春晚时的3.5万QPS。

简化设计

  • 转移复杂度

  • 从业务角度优化

一致性设计

事务

  • 原子性(Atomicity)

  • 一致性(Consistency)

  • 隔离性(Isolation)

  • 未提交读(Read uncommitted)

  • 提交读(Read committed)

  • 可重复读(Repeatable reads)

  • 可序列化(Serializable)

  • 隔离级别

  • 持久性(Durability)

CAP定理

  • 一致性(Consistence)

  • 可用性(Availability)

  • 分区容错性(Partition tolerance)

分布式系统的一致性分类

  • 以数据为中心的一致性模型

  • 1.严格一致性(Strict Consistency

  • 2.顺序一致性(Sequential Consistency)

  • 3.因果一致性(Causal Consistency)

  • 4.FIFO一致性(FIFO Consistency)

  • 以用户为中心的一致性模型

  • 1.单调读一致性(Monotonic-read Consistency)

  • 2.单调写一致性(Monotonic-write Consistency)

  • 3.写后读一致性(Read-your-writes Consistency)

  • 4.读后写一致性(Writes-follow-reads Consistency)

  • 业界常用的一致性模型

  • 弱一致性

  • 最终一致性(Eventual Consistency)

  • 强一致性(Strong Consistency)

  • 如何实现强一致性

  • 两阶段提交

  • 三阶段提交(3PC)

  • 如何实现最终一致性

  • 重试机制

  • 本地记录日志

  • 可靠事件模式

  • Saga事务模型

  • TCC事务模型

  • 分布式锁

  • 基于数据库实现悲观锁和乐观锁

  • 基于ZooKeeper的分布式锁

  • 基于Redis实现分布式锁

  • 如何保证幂等性

  • 幂等令牌(Idempotency Key)

  • 在数据库中实现幂等性

Image

关注公众号 获取更多精彩内容

位旅人路过 次翻阅 初次见面