《从0开始学架构》读书笔记

229 阅读3分钟

高性能

任务分解(微服务)

简单的系统更容易高性能、更容易拓展

高可用

本质是通过冗余实现高可用(多台、多机房、多通道), 但是冗余带来了更大的复杂性. 比如任务分配器(例nginx)连接检测、管理、维护、中断处理.

常见冗余形式 1主3备、4主0备、3主1备等

思考: zookeeper属于1主多备, 而memcache集群属于全主0备, 根据具体业务场景进行选型.

最大难点: 存储高可用(有状态)

分布式环境: 某个时间点, 数据肯定不一致.

常见公式: 数据+逻辑=业务

存储高可用的难点不在于如何备份数据, 而在于如何减少或规避数据不一致对业务造成的影响.

引申 CAP 定理

不可能同时满足 一致性、可用性和分区容错性. 最多同时满足两个.

引入状态决策: 判定当前是否异常, 进行纠正.

但是又引来更复杂问题: 状态决策的高可用也是无法满足的.

常见状态决策: 独裁式(单点)、协商式(主备) 和 民主式(选举)

民主选举

每个单体作出决策, 按多数取胜, 引入新问题(脑裂).

如何解决脑裂问题: 投票节点数必须超过总节点数的一半.

但又引入新问题: 如果超过一半节点故障, 而不是脑裂, 则导致选举直接失败, 系统宕机.

可拓展性

  1. 预测变化

  2. 应对变化(变化层防腐, 稳定层) 系统拆分变化层、稳定层

  3. 观察问题理解问题角度不同 提炼抽象层、实现层, 举例: 规则引擎

  4. 低成本 低成本与高可用存在本质上的冲突. 引入新技术, 新思路节省资源.

  5. 安全 功能安全: XSS、CSRF、Sql注入 架构安全: DDOS(难以实现), 依靠运营商强大带宽、流量清洗

存储高性能

主从 -> 从提供读服务

主备 -> 备不提供服务

行式数据库和列式数据库对比:

  • mysql : 行式数据库, 查库已行为维度

  • hbase : 列式数据库

业务读取更近的多个列, 行式数据库占优. 如果只是统计某个字段, 没必要取行后再找列, 而只需要查询一列就可以了. IO将大大减少. 别且列的存储相似度高, 压缩比 比行式更有优势.

关于CAP理论

上面我们提到了CAP理论, 这里我们详细说一下

分布式系统上理论是没有 CA 的, 原因很简单, 当我们牺牲P时, 一致性就无法保证, 如果保证一致性, 就需要禁止写入, 就无法保证可用, 所以当分区故障时, 一致性和可用性是无法同时保证的.

CP: 当优先保证一致性时, 牺牲可用性.

AP: 当优先保证可用性时, 各自维护数据返回, 无一致性.

CAP细节:

  • CAP关注的是数据而不是系统

  • CAP 是理论忽略网络延迟的, 否则任务分区都不能保证一致性, 但并不意味着无法使用分布式, 分具体业务场景, 有些非常重要的信息无法忽略, 可以互相主备, 所有操作都发生在主数据库上

BASE

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

基本可用, 软状态, 最终一致性.