大数据 -- 分布式系统

SLA

  1. SLA:Service-level Agreement,服务等级协议
    • 指的是系统服务提供者(Provider)对客户(Customer)的一个服务承诺
  2. SLA是衡量一个大型分布式系统是否健康的常用方法
  3. SLA是一种服务承诺,指标可以多种多样,常见的有:可用性准确性系统容量延迟

可用性 – Availability

  1. 可用性指的是系统服务能正常运行所占的时间百分比
  2. 不存在可用性100%的系统服务,即使是AWS也出现过服务中断的情况
  3. 对于许多系统而言,99.99%的可用性即可被认为是高可用,一天只能中断8.64秒

准确性 – Accuracy

  1. 准确性指的是系统服务是否允许数据是不准确的或者是丢失的,如果允许,用户可以接受的百分比是多少
  2. 错误率 = 导致系统产生内部错误的有效请求数 / 期间的有效请求总数
  3. 可以用错误率来定义准确性
    • Google Cloud Platform:每个月系统的错误率超过5%的时间要少于0.1%,时间单位为分钟
    • AWS:以每5分钟为单位,错误率不会超过0.1%
  4. 评估系统准确性的方法:性能测试查看系统日志

系统容量 – Capacity

  1. 在数据处理中,系统容量通常指的是系统能够支持的预期负载量是多少,一般会以QPS或RPS来表示
  2. 例如,Twitter系统可以响应30W的QPS来读取Twitter Timelines
  3. 给系统定义准确QPS的方式
    • 限流:假设每台服务器都定义了每秒最多处理N个请求的限流器,那M台机器在最理想的情况下,QPS可以达到N*M
    • 性能测试:特别需要考虑命中缓存的情况
    • 分析系统日志:这种方式不一定可以得到系统可以承载的最大QPS

延迟 – Latency

  1. 延迟指的是系统收到用户请求到响应这个请求之间的时间间隔
  2. 常见指标p95和p99,p95=1S表示95%请求的响应时间都少于1S
  3. 场景
    • 为了降低系统延迟,会将数据库内容放进缓存,以此来减少数据库的读取时间
    • 系统运行一段时间后,可以得到缓存命中率为90%,此时p95或p99恰好衡量了系统的最长时间,即数据库读取时间
    • 可以通过优化数据库的Schema或者索引来降低p95或p99

可扩展性 – Scalability

  1. 分布式系统的核心是可扩展性,扩展方式:水平扩展(Horizontal Scaling)、垂直扩展(Vertical Scaling)
  2. 水平扩展:在现有的系统中增加新的机器节点
    • 适用范围更广,操作更简单,提升系统的可用性
    • 无节制地增加机器数量:机器的管理、调度、通信会变得更加复杂,出错概率加大,数据一致性更难保证
  3. 垂直扩展:在不改变系统机器数量的情况下,升级现有机器的性能
    • 并没有让整个系统变得更加复杂,控制系统的代码也不需要做任何调整
    • 单个机器的性能提升非常有限,而且受制于摩尔定律,提高机器的性能往往比购买新的机器更加昂贵
  4. 数据存储系统
    • 传统的关系型数据库如MySQL,因为表与表之间的数据有关联,经常需要进行Join操作
      • 所有数据都要存放在一个单机系统中,很难支持水平扩展
    • NoSQL数据库如BigTable、MongoDB和Redis等,天生支持水平扩展,所以应用越来越广
  5. 构成分布式系统的机器节点的可用性低于系统的可用性
    • 如果要构建一个可用性为99.999%的分布式系统,可以使用可用性为99.9%的机器节点

一致性 – Consistency

  1. 一致性模型:强一致性(Strong Consistency)、弱一致性(Weak Consistency)、最终一致性(Eventual Consistency)
  2. 强一致性
    • 系统中的某个数据被成功更新后,后续任何对该数据的读取操作都将得到更新后的值
    • 在任意时刻,同一系统所有节点中的数据是一样的
    • 强一致性会牺牲部分延迟性,而且对于全局时钟的要求很高
    • Google Spanner:具备强一致性的全球分布式企业级数据库服务
  3. 弱一致性
    • 系统中的某个数据被成功更新后,后续对该数据的读取可能得到更新后的值,也可能是更新前的值
    • 但经过“不一致时间窗口”后,后续对该数据的读取都是更新后的值
  4. 最终一致性
    • 最终一致性是弱一致性的特殊形式,存储系统保证,在没有新的更新条件下,最终所有的访问都是最后更新的值
    • 最终一致性系统支持异步读取延迟较小
    • AWS DynamoDB:支持最终一致性的数据读取
  5. 在实际应用系统中,强一致性是很难实现的,应用最广的是最终一致性

持久性 – Durability

  1. 数据持久性:数据一旦被成功存储就可以一直使用,即使系统中的节点下线、宕机或者数据损坏
  2. 持久性级别:节点级别、集群级别
  3. 提高持久性的通用做法:数据复制,把同一份数据存储在不同的节点上
  4. 消息持久性(消息不丢失
    • 当消息服务的节点发生错误,对于已经发送的消息仍然会在错误解决之后被处理
    • 如果一个消息队列声明了持久性,那么即使队列在消息发送之后掉线,仍然会在重新上线之后收到这条消息
0%