Big Data - Distributed System
SLA
Service-Level Agreement - 系统服务提供者对客户的一个服务承诺
Availabilty
- 可用性指的是系统服务能正常运行所占的时间百分比
- 对许多系统来说,99.99% 可以被认为高可用性 - 中断时间≈ 50 分钟/年
Accuracy
- 是否允许某些数据不准确或者丢失,如果允许发生,用户可以接受的概率
- 不同系统平台会用不同的指标去定义准确性,常用的是 Error Rate
$$
错误率=\frac{导致系统产生内部错误的有效请求数}{期间的有效请求总数}
$$
Case
- 以分钟为单位,每个月的 Error Rate 超过 5% 的时间少于 0.1%
- 以 5 分钟为单位,Error Rate 不会超过 0.1%
评估系统准确性
- 性能测试
- 查看系统日志
Capacity
- 系统容量通常指的是系统能够支持的预期负载量是多少,一般会以每秒的请求数为单位来表示
- QPS - Queries Per Second
- RPS - Requests Per Second
- 定义 Capacity 的方式 - Throttling / Performance Test / Log
Latency
- 延迟指的是系统在收到用户的请求到响应这个请求之间的时间间隔
- p95 / p99 - percentile
Scalability
Horizontal Scaling + Vertical Scaling
Scaling | Desc |
---|---|
Horizontal | 在现有的系统中增加新的机器节点 |
Vertical | 升级现有机器的性能 |
- 在大数据时代,数据规模越来越大,对数据存储系统的扩展性要求也越来越高
- 传统的关系型数据库
- 表与表之间的数据有关联,经常要进行 Join 操作
- 所有数据要存放在单机系统中,很难支持水平扩展
- NoSQL 型数据库
- 天生支持水平扩展 - MongoDB / Redis
Consistency
- 构成分布式系统的机器节点的可用性要低于系统的可用性
- 如何保证系统中不同的机器节点在同一时间,接收到和输出的数据是一致的
- 要保证分布式系统内的机器节点具有相同的信息,需要机器节点之间定期同步(可能失败)
一致性模型 - 强一致性很难实现,最终一致性应用最广
- 强一致性 - Google Cloud Spanner
- 系统中的某个数据被成功更新后,后续任何对该数据的读取操作都将得到更新后的值
- 在任意时刻,同一系统所有节点中的数据是一样的
- 只要某个数据的值发生更新,该数据的副本都要进行同步,保证该更新被传播到所有备份数据库中
- 在该同步过程结束后,才允许读取该数据
- 一般会牺牲一部分延迟性,并且对全局时钟的要求很高
- 弱一致性
- 系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更新前的值
- 但经过一段时间后,后续对该数据的读取都是更新后的值
- 最终一致性 - AWS DynamoDB
- 是弱一致性的特殊形式
- 存储系统保证,在没有新的更新的条件下,最终所有的访问都是更新后的值
- 无需等到数据更新被所有节点同步就可以读取
- 尽管不同的进程读同一数据可能会读到不同的结果
- 最终所有的更新会按时间顺序同步到所有节点
- 支持异步读取,延迟比较小
Durability
数据持久性
- 数据持久性意味着数据一旦被成功存储,就可以一直使用,即使系统中的节点下线、宕机或者数据损坏
- 不同的分布式数据库拥有不同级别的持久性 - 节点级别 / 集群级别
- 提高数据持久性的常规做法 - 数据复制
消息持久性
- 在分布式系统中,节点之间需要互相发送消息去同步以保证一致性
- 对于重要的系统而言,通常不允许任何消息的丢失
- 分布式系统中的消息通讯通常由分布式消息服务完成 - Kafka
- 当消息服务的节点发生了错误,已经发送的消息仍然会在错误解决之后被处理
- 如果一个消息队列声明了持久性,那么即使队列在消息发送之后掉线,仍然会在重新上线后收到该消息
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.