后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

09|综合服务治理方案:怎么保证微服务应用的高可用?

具体改进措施
已有方案的缺点
影响力的局限性
业务Bug的减少
可用性的改进
规范变更流程
解耦核心业务和非核心业务的共同依赖
第三方依赖的高可用方案
服务治理措施
监控和告警
改进方案
有条理的计划
具体难点和困难的体现
项目的核心困难
回退准备和变更的合理性
变更流程的重要性
快速恢复
完备的观测和告警系统
服务依赖和共享基础设施的问题
隔离策略
软件基础设施容错
设计容错
自动故障处理
异步解耦
后续改进
取得效果
落地实施
计划方案
发现问题
需要准备的内容
面试策略
规范变更流程
快速发现和快速修复故障
限制故障影响范围
容错
高可用的定义
SLA(Service Level Aggrement)
思考题
亮点方案
基本思路
面试准备
核心要点
前置知识
综合服务治理方案:怎么保证微服务应用的高可用?

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

你好,我是大明。今天我们来聊一个综合性的话题:给你一个微服务应用,你怎么保证它的高可用?
在面试互联网相关岗位的时候,大部分公司都会看重高并发高可用大数据相关的经验。不过有没有高并发和大数据的项目经验有点儿看命。因为如果你不是在大厂的核心部门,你是很难遇到真正的高并发和大数据场景的。
高可用不一样,即便你维护的系统月活只有一万人,依旧可以把自己的系统做成高可用的。所以相比之下,高可用就可以成为我们面试的主要发力点。
当然你也需要意识到,一个类似淘宝那种量级的系统的高可用和一个简单的后台管理系统的高可用,含金量是不一样的。但还是那句话,又有几个人真的有机会接触到淘宝那种项目呢?所以如果你真的不知道怎么把自己平凡的项目说得比较有特色,那么就可以参考这节课的内容。

前置知识

一般衡量可用性,我们都是用 SLA(Service Level Aggrement)指标,通常用 N 个九来说明。例如,当我们说微服务的可用性是三个九,是指系统在一段时间内(一般是一年)正常提供服务的时间超过了 99.9%。
那么高可用究竟有多高?一般是指可用性需要达到三个九。当然有些人会认为需要达到四个九,这并没有硬性的标准。那么怎么做到高可用呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何保证微服务应用的高可用性,包括高可用性的定义、核心要点和面试准备。高可用性指系统可用性达到三个九,需要通过容错、限制故障影响范围、快速发现和修复故障、规范变更流程等核心要点来实现。在面试准备方面,建议准备一个全方位的高可用方案,并重点关注前端接口限流、第三方组件的高可用方案、服务的负载均衡算法等。文章内容详实,适合技术人员快速了解微服务应用的高可用性方案。 文章还介绍了异步解耦和自动故障处理两种提高微服务应用高可用性的方案。异步解耦可以将核心业务的逻辑分成同步执行和异步执行的部分,从而减少同步执行的步骤,提高可用性。自动故障处理包括熔断、限流、降级以及自动扩容等机制,能够降低出现故障的概率和提高反应速度,进一步提升可用性。 在面试准备方面,建议根据实际经验调整高可用方案,重点掌握几种方案,并在面试中注重引导和把控面试节奏,将面试内容限制在所了解的方案上。此外,还提出了两个思考题,引发读者思考和讨论。 总的来说,本文内容丰富,涵盖了微服务应用高可用性的关键要点和面试准备建议,适合技术人员快速了解微服务应用的高可用性方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 我好像一点都不像程序员
    1、每个公司对不可用时长的标准似乎不同,像我们搞sass的,标准是某个功能达到一定量的租户反馈有问题,则可算进SLA的不可用时长内。说句大实话,随着服务的增多(目前已经有上千个微服务了),几十个产品,业务的增多,人员的变动,人员能力的参差不齐,线上事故肯定还是会有的,但是我们有完善的复盘机制,也有奖罚机制,每次出问题QA都要拉人复盘,给出各种后续措施,还要全公司通报,因此管理层对服务的稳定性是十分看重,我们目前的目标也是3个9,其实只要有一个组拖后腿,这个目标就很难达成。我们目前用的很多东西都是阿里云的,没有自己搞机房,所以运维基本也都是靠阿里云的工程师来协助处理。2、其他高可用方案:多环境验证(开发、测试、予发布、生产),灰度环境验证(G0、G1、G2),代码灰度上线(根据租户力度),配置项或者数据库的执行需要管理层审核,测试来执行,服务支持跨云部署(阿里云、华为云),南北流量分发,开发流程规范,代码CR,发布回滚机制,数据库监控告警,网关流量告警,服务自动扩容,业务error日志监控告警,数据库按服务拆库隔离,按租户分库,SQL慢日志监控等等。

    作者回复: 大佬!还是说实话的大佬。哈哈哈,其实可用性这个东西就是出去吹牛逼的时候就会拼命吹,但是私底下自己搞的时候就知道,三个九都难,有任何一个环节掉链子就直接寄了。 所以,我也觉得,追求高可用的时候,管理难度大于技术难度;与其说是技术问题,不如说是组织问题。

    2023-07-05归属地:广东
    3
    9
  • sheep
    话说,由业务问题尝试的错误数据,有啥自定故障处理措施咩。好像大部分都是事后bug修复完后,写维护接口来发版更新

    作者回复: 这种就是业务手动修复了,你没办法解决。只有那种非业务错误,系统错误是比较容易自动修复的,比如说同步数据部分失败。

    2023-09-25归属地:广东
    1
  • ZhiguoXue_IT
    高可用一直是微服务比较热门的词,双十一业务高峰期的时候,首先就是根据预估的量进行全链路压测,机器扩容,其次对一些核心接口进行梳理,降级

    作者回复: 赞!

    2023-08-04归属地:北京
    1
  • nadream
    文章中一直没有说怎么搭建监控服务,这块可以详细说下吗

    作者回复: 其实就是现实中大厂用的那些技术,什么 otel, prometheus, ELK 之类的往上怼就可以了,全是苦力活。

    2024-01-17归属地:浙江
  • LargeOrange
    这些三个九四个九是设计完就能得到结论还是系统运行一段时间后得到的结论?

    作者回复: 正常来说,嗯,理论上来说,这个是设计的时候要给出的系统运行指标。而后在系统设计与实现的过程就要达成这个指标。 现实中是,随便评估的。 不是我乱说,是很多公司的评定就是乱说,PPT 上随便写。现在还没有准确的方法来评估这个可用性。

    2023-11-14归属地:北京
  • 浩仔是程序员
    1. 想要达到4个9还是非常难的 2. 老师提到的高可用措施已经涵盖大部分了,在做高可用改造时,第一步就是要梳理完整的调用链路,如LVS-RS-KONG-后端服务-数据库,缓存,消息中间件,第三方服务等,每个组件都必须是高可用的。另外,可能还要考虑多机房部署,一个机房挂了,其他机房还可以正常提供服务,甚至是多大区部署。 在实际落地中,比如缓存组件,依赖于基础组件团队提供集群,在客户端需要熔断的机制,对服务进行健康的探测,自动摘除不可用的实例,通常就是一个定时任务不断的探测,及时摘除。

    作者回复: 赞!

    2023-07-27归属地:广东
  • 老师,请教一下,服务正常提供服务的时间,是指完全正常,比如很多个接口,其中每个接口部分请求出现异常,这种算是正常提供服务吗

    作者回复: 哈哈,难倒我了,我个人是倾向于认为只要用户没有感知,就算正常提供服务,个人。 所以比如说即便触发降级了,但是用户感觉不到,那么你也可以站在整个系统的角度认为服务是正常的。

    2023-07-06归属地:北京
  • penbox
    我觉得四个九还是很难的,必须所有模块都达到高可用状态才行。任何一个模块拖了后腿,没有及时恢复都做不到四个九了。故障率要低,恢复时间也必须要快。 即便是单个模块内,高可用方案涉及到申请资源(花钱),调整制度,在团队里面没有一定的话语权也很难进行推动。

    作者回复: 确实,我个人甚至觉得三个九就不是一个人能解决的问题,就需要上下游的团队都通力合作。

    2023-07-06归属地:四川
  • peter
    请教老师几个问题: Q1:“混沌工程”指什么? Q2:“故障演练”具体是怎么做的? Q3:自动扩容,是由系统的一个控制中心完成的吗? Q4:一个微服务一个数据库吗?即微服务的数据库是自己私有的吗?

    作者回复: 1. 混沌工程你可以读这个系列的文章 https://www.infoq.cn/article/jjp0c2bR4*Ulld0wb88r。简单说就是主动、故意注入一些故障,并且是随机的故障,然后看系统的反应。 2. 故障演练这个说起来就很复杂了,一般来说其实就是要针对被测试的系统,你认为搞出来一些故障。比如业界多活的演练,就是直接把一个机房干趴下,看多活有没有生效。 3. 一般都是有一个控制中心,它需要采集各种数据,然后判断要不要扩容,并且写法扩容质量, 4. 是的,别的服务不允许直接访问数据库,只能通过这个服务来访问。

    2023-07-05归属地:北京
  • 木几丶
    回答问题: 1、3个9代表8.76小时,4个9代表52.6分钟,5个9代表5.26分钟。我自己做过高可用的系统,在我的系统里可用性是3个9到4个9之间接近4个9,从我的实际落地看,要达到4个9还是很有挑战的,不可用的来源主要是几个方面:程序bug、线上变更失误或方案考虑不周、机器宕机、网络故障、机房故障,前两个属于人为,后几个属于非人为,理论上说,非人为不可用自动恢复的速度是比较快的,只要机器网络不是特别烂,4个9比较容易达成,但前提是没有人为引起不可用,可实际这是很难的。 2、其他高可用方案:机房自动切换,异地多活,规范流程(虽然文中提到了,但是还是想说,太重要了)

    作者回复: 规范流程:我想到一个梗,变更不规范,同事两行泪。 我很赞同你说的,都是卡在人这一个环节里面,机器能解决的问题都好解决。

    2023-07-05归属地:福建
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部