后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/00:00
登录|注册

29 | 高可用架构:我们为什么感觉不到淘宝应用升级时的停机?

消息队列
数据库主主复制
负载均衡
异地多活
限流降级
失败隔离
冗余备份
故障分管理
可用性指标
思考题
小结
高可用的架构
高可用的度量
为什么感觉不到淘宝应用升级时的停机
高可用架构

该思维导图由 AI 生成,仅供参考

十几年前,我参加阿里巴巴面试的时候,觉得阿里巴巴这样的网站 Web 应用开发简直小菜,因为我之前是做类似 Tomcat 这样的 Web 容器开发的,所以面试的时候信心满满。
确实,面试官前面的问题都是关于数据结构、操作系统、设计模式的,也就是我们这个专栏模块一和模块二的内容。我感觉自己回答得还不错,所以更加信心满满。这时候,面试官忽然提了一个问题:
我们的 Web 程序每个星期都会发布一个新版本,但是程序要求 7*24 小时可用,也就是说,启动新版本程序替换老程序,进行程序升级的时候,程序还在对外提供服务,用户没有感觉到停机,我们是怎么做到的呢?
应用程序升级必须要用新版本的程序包替代老版本的程序包,并重新启动程序,这段时间程序是不能对外提供服务的,用户请求一定会失败。但是阿里巴巴让这段时间的用户请求依然是成功的。打个比方,就是要在飞机飞行过程中更换发动机,还不能让乘客感觉到。这个问题当时完全不在我的知识范围之内,但是我知道这个需求场景是真实存在的,而且确实应该是可以做到的,可是我完全不知道是怎么做到的。
面试官看我瞠目结舌,笑着问我,想不想知道答案。我立刻回答说想知道,结果面试官跟我说,加入我们团队你就知道了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了互联网应用的高可用架构,以及实现高可用性的各种策略。作者首先介绍了可用性指标的计算方法和管理系统可用性的重要性。随后重点讨论了实现高可用的架构方案,包括限流、降级和异地多活。限流和降级作为保护系统高可用的手段,在高并发场景下起到关键作用。而异地多活的多机房架构策略则能够提高系统的处理能力和改善用户体验,保证系统在某一数据中心不可用时依然可用。此外,文章还提到了高可用的运维方案,如自动化测试、监控、预发布验证和灰度发布等。这些方案都是为了保证系统的高可用性和稳定性。总的来说,本文全面介绍了高可用架构的实现原理和相关技术,对于想要了解互联网应用高可用性的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • 草原上的奔跑
    预发布服务器不接受用户请求,只接受开发工程师访问请求,则对于用户来说,即使预发布有问题,因为访问不到,所以也感觉不到。 因为不能保证测试环境和生产环境配置、参数全部一样,所以一些在生产环境才有的问题,在测试无法发现,通过预发布环境来过渡,保证发布的安全。

    作者回复: √

    2020-01-29
    3
    25
  • 王沛
    李老师你好,我们的系统在升级的过程中有的版本会进行表字段的调整,如果表结构变了,阿里巴巴在升级集群过程中还能做到用户无感知吗?如果可以,是怎么做的呢?

    作者回复: 如果是修改字段名,这是可以避免的,不必要的操作。 如果是增加字段,对应用是没有影响的。 如果是删除字段,那么应该先修改代码,使所有代码都不访问该字段,再删除。

    2020-02-14
    2
    16
  • 墨^涩
    预发布的服务如果存在对数据结构的修改怎么办?线上正在使用的服务使用的数据库还是一套吧。

    作者回复: 数据库要兼容代码更新的,比如代码中删除了某个字段,数据库不应该立即删除该字段,要等发布完过一段时间再删除;而新增字段是天然兼容的。

    2022-05-14
    1
  • 旅途
    老师 关于预发布有一些问题 比如发布一个包含页面的模块 那么是不是只有访问被预发布的服务器才会有新的页面,访问别的服务器都没有?

    作者回复: 是的,这就是预发布的意义

    2020-01-31
  • 俊杰
    负载均衡服务器的配置,会把预发布的服务器剔除在外,所以正常用户访问的时候并不会路由到预发布验证的服务器上。工程师验证是需要通过修改本机hosts文件实现的。 平常遇到的需要在线上预发布环境才能验证的主要是支付或第三方对接相关的东西。
    2020-01-30
    4
  • 魏颖琪
    思考题:是否将一部分流量copy过来,用真实的数据流替代实验室模拟数据来进行测试,但其实不是生产环境,只是用了生产数据。
    2020-01-29
    2
    2
  • meta-algorithmX
    一点进一步思考: 从预发布的网络拓扑图上来看,预发布的机器是一个处在实例层的单点机器,并没有模拟 “网络” -> "DNS(负载)" -> "负载均衡" 这一段的线上情况,因此如果是这部分出了问题是预发布测试也无法发现的,因此就需要做好运维的变更管理,涉及到这部分的变更可以考虑采用在正式上线前添加金丝雀部署(canary)策略,引入一部分少量线上流量验证更新。
    2020-02-17
    1
  • mayunyong
    老师每片文章都配图很喜欢~
    2020-02-02
    1
  • 黄海峰
    这个预发布环境的作用确实困扰,之前公司也有个预发布环境,感觉多余,想想可能就是用的生产环境的配置和参数,这样可以确定是否有配置错误
    2020-01-29
    1
  • Zack
    高可用架构方案 1.冗余备份 2.限流降级 3.失败隔离 4.异地多活
    2023-02-28归属地:北京
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部