Netflix 的异地多活设计: Active-Active for Multi-Regional Resiliency

Tags: 系统设计 

目录

说明

《Active-Active for Multi-Regional Resiliency》是 2013 年的资料。从时间上来看资料比较老,那时候应该处于 IaaS 形式的云计算普及阶段,kubernetes、云原生等概念还在孕育中,从技术理念来说不过时,异地多活需要考虑的问题还是那么多,没有随着时间发展而消失。

这里是我的阅读摘要。

Target

A failure of any kind in one region should not affect services running in another.

A networking partitioning event should not affect quality of services in either region.

Implement Target

  1. Services must be stateless, all data/state replication needs to handled in data tier
  2. Must access resources locally in-Region
  3. There should not be any cross-regional calls on user’s call path
  4. Data replication should be asynchronous

简单来说就是在每个区域都部署一整套服务,每个区域的系统能够独立运行,服务都是无状态的,数据层在不同区域之间的进行数据同步。

Technical Challenges

Effective tooling for directing traffic to the correct Region:

  • DNS
  • AWS Route53

Traffic shaping and load shedding, to handling thundering herd event:

  • zuul:服务框架支持熔断、限流
    • Ability to identify and handle mis-routed requests. (user request is defined as mis-routed if it does not conform to our geo directional records)
    • Ability to declare a region in failover mode
    • Ability to define a maximum traffic level at any point in time, so that any additional requests will be automatically shed, in order to protect downstream services against a thundering herd of requests.

State/Data asynchronous cross-regional replication:

  • Cassandra:使用 cassandra 的 multi-region 模式,生产负载下实测500ms完成数据同步
    • Wrote 1 million records in one region of a multi-region cluster, 500ms later, initiated a reading of the records that were just written in the initial region in the other region, while keeping a production level of load on the cluster.
  • EvCache:一个 memcache client,Netflix没有用缓存的多主部署而是用远程失效的方式处理,远程 region 中的缓存被清除后,在后续请求中触发重新加载
    • Whenever there is a write in one region, EvCache client will send a message to another region(via SQS) to invalidate the corresponding entry
  • 后面在 split-brain 中提到即使数据同步过程阻塞了,也要正常服务:
    • We were looking to demonstrate that services in each Region continued to function normally, even though some of the data replication was getting queued up. Over the course of the Active-Active project we ran Split-brain exercise many times, and found and fixed many issues

此外,还实现了支持多区域的自动部署工具方便系统数据,设计了各种 Monkeys 检验系统的可靠性。

Monkeys:

  • Chaos Gorilla:taks out a whole Availability Zone
  • Split-brain:servered the connectivity between Regions
  • Chaos Kong:模拟 Region 失败进行流量迁移,为了避免损害用户体验,这个 monkey 执行的时候流量迁移会更平滑、同时不会向用户返回错误。

参考

  1. 李佶澳的博客
  2. Active-Active for Multi-Regional Resiliency
  3. Netflix 开源的相关工具

系统设计

  1. Netflix 的异地多活设计: Active-Active for Multi-Regional Resiliency
  2. Facebook 的缓存系统实践经验《Scaling Memcache at Facebook》
  3. 多机数据系统的正确性与一致性
  4. 《大型网站技术架构: 核心原理与案例分析》阅读摘录
  5. 《分布式金融架构课》阅读笔记2: 线性一致的分布式数据系统的实现过程
  6. 《分布式金融架构课》阅读笔记1: 单机&多机并发/多副本读写正确性和一致性
  7. 《消息队列高手课》阅读笔记: Rabbit/Rocket/Kafka/模型/消息事务/保序等
  8. 《消息队列高手课》阅读笔记: Rabbit/Rocket/Kafka/模型/消息事务/保序等
  9. 《Redis核心技术与实践》阅读笔记: 数据类型/存储开销/Rehash/案例等
  10. 《Redis核心技术与实践》阅读笔记: 数据类型/存储开销/Rehash/案例等
  11. 《高并发系统设计40问》阅读笔记: 数据库/缓存/消息队列/分布式服务
  12. 《高并发系统设计40问》阅读笔记: 数据库/缓存/消息队列/分布式服务
  13. 《MySQL实战45讲》阅读笔记: 索引类型/数据可靠性/事务/间隙锁/临时表等
  14. 系统性能分析方法论: 统计图谱工具
  15. 张磊《深入剖析Kubernetes》专栏的阅读笔记
  16. 代理服务软件haproxy、nginx、envoy对比,以及开源的API网关项目对比
  17. 蓝绿部署、金丝雀发布(灰度发布)、A/B测试的准确定义
  18. 阿里巴巴的应用限流和服务降级是怎样实现的?|如何打造平台稳定能力
  19. 陈皓《左耳听风》专栏的阅读笔记(持续更新)
  20. 好雨云帮,一款不错的国产开源PaaS
  21. 怎样为软件的不同版本命名?
  22. 怎样选择开源项目的license?
  23. Glusterfs的架构
  24. 怎样设计一个企业级的PaaS平台?
  25. 几种常见的LDAP系统
  26. DNS SRV介绍(一种用DNS做服务发现的方法)
  27. DNS,DNS-Domain Name System
  28. 思科的网络设备
  29. 虚拟化技术汇总
  30. 认证与授权系统的汇总
  31. 高可用实现方法汇总
  32. 编译器汇总
  33. Linux系统的优化方法
  34. CentOS7的一些变化
  35. 分布式系统的一些知识
  36. 计算机编程语言的特性汇总
  37. 网络通信的一些基础知识
  38. PCIE总线的一些知识
  39. 操作系统的API
  40. 网卡的一些知识
  41. Linux系统的构建过程
  42. 数据结构与算法
  43. CPU的相关知识

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球