Bootstrap

【架构面试】三、高可用高性能架构设计

高可用高性能架构设计

  1. 面试要点引入:架构原理、分布式技术等是面试必考领域,高可用高性能需求考察频繁。面试常通过询问系统架构设计来考察能力,讲解架构设计过程就是证明系统高可用的过程,其中涉及SLA指标。
  2. SLA指标详解
    • 定义与衡量方式:SLA是服务可用性重要衡量指标,业界常用几个九的服务等级衡量互联网应用可用性,如京东的四个九(99.99%),即一年约52.6分钟不可用。可通过公式计算不同SLA指标下的年度不可用时长。
    • 阈值设置:不同SLA指标阈值对应不同的可用性水平和年度不可用时间。电商平台多采用四个九的SLA,面试时需了解其概念和主流设置阈值。
  3. 高可用度量方式:单纯用时间指标度量系统可用性不够科学,基于一段时间内停机影响的请求量占比评估更合理,可评估业务在不同时期停机的损失。回答系统高可用指标时,应先说明两种度量方式,再结合业务体现后者的科学性,立足业务价值回答问题。
  4. 监控系统设计:证明系统高可用需回答如何评估、监控和保证。监控系统包含基础设施、系统应用、存储服务监控报警三个核心部分。
    • 基础设施监控:涵盖系统和网络要素指标,常用工具能监控关键指标,报警策略由时间维度、报警级别和阈值设定组成。
    • 系统应用监控:关注流量、耗时等核心指标,有多种监控工具。
    • 存储服务监控:除基础指标外还有特有指标。面试时要展现全局监控视角,根据业务场景裁剪指标细节。
  5. 故障处理:线上服务稳定性至关重要,面试官常追问线上告警时核心研发的处理方式。故障处理能力是面试官看重的能力之一,面试者应形成体系化的故障处理知识框架 。

系统高可用

  1. 高可用面试题引入:给出电商平台系统架构面试题,商品操作涉及多系统调用,流量高峰时商品系统易扩容,但依赖的促销和积分系统响应不及时,导致线程阻塞,引出如何处理该问题的思考,此问题涉及高可用架构设计。
  2. 雪崩现象与解决思路:分析商品调用链条,指出积分系统响应时间变长会使整体请求响应时间变长甚至宕机,这就是雪崩现象,即局部故障导致全局故障。解决系统可用性可从评估、检测和保证三方面着手,进而引出降级和熔断机制。面试官常通过询问熔断和降级设计及项目实现情况来考察候选者。
  3. 熔断机制原理与实现:服务熔断机制参考保险丝原理,当服务调用失败次数超过阈值,后续请求不再调用该服务。在微服务架构中,服务调用方为每个调用的服务维护有限状态机,包含关闭、半关闭和打开三种状态。关闭状态下正常调用,失败次数累计到阈值切换到打开;打开状态下启动超时计时器,超时后切换到半打开;半打开状态下请求可打到后端服务,成功次数达标后切换到关闭。实际工作中常使用Netflix的开源项目实现熔断功能,但面试中可能考察不借助开源组件实现断路器功能的能力。
  4. 降级设计原理与策略:降级设计是在资源和访问量矛盾时,放弃部分非核心功能或服务以保证系统可用性,熔断是降级的一种手段。降级设计可从服务和功能两方面考虑。服务降级分读操作和写操作降级,读操作降级到缓存,无数据则返回默认值;写操作先写缓存再异步写数据库。功能降级通过降级开关控制,简化产品功能,且降级设计一般通过参数化配置存储在配置中心,高并发时开启开关实现系统降级。
  5. 总结与思考题:总结雪崩原因、服务熔断实现方式和降级策略。服务熔断是有限状态机,关键在于状态转换;服务降级是做取舍,解决资源不足和访问量过大问题,可降低系统一致性、裁剪非核心服务和简化产品功能。在架构设计涉及服务调用时要考虑熔断和降级方案,同时还有服务冗余、负载均衡等多种高可用设计方案。布置思考题,要求结合项目经历阐述降级策略。

在这里插入图片描述

高性能系统证明方法

  1. 证明系统高性能的方法:高性能与业务紧密相关,不同业务场景高性能的标准不同,如游戏、直播、电商服务器支持的在线人数不同。在实际业务场景中,需关注业务相关指标,明确业务场景后,要关注系统性能指标。
  2. 性能指标
    • 延迟和吞吐量:是衡量软件系统常用指标。吞吐量反映单位时间处理请求能力,延迟是客户端发送请求到接收响应的时间,二者既互斥又不绝对互斥。通过性能压测绘制曲线,系统优化要找延迟趋向最低、吞吐量趋向最高的点。
    • TP指标:指请求中99%的请求能达到的性能,如TP99 = 10ms表示99%的请求在10ms内可得到响应。计算时将请求响应时间从小到大排序,取99%对应的响应时间。TP指标相比性能均值,更能反映系统真实情况,避免异常值干扰。
  3. 全链路性能指标之请求链路详解
    • DNS解析:用户输入URL后,浏览器通过DNS域名解析查找IP地址,对应性能指标是DNS解析时间。可通过DNS缓存、预解析,增大域名TTL值提升解析性能。
    • 建立TCP连接:HTTP基于TCP协议传输数据,用TCP连接时间衡量浏览器与外部服务器建立请求连接的时间。
    • 服务器响应:包含基础设施、数据库、系统应用性能指标。基础设施指标有CPU利用率、磁盘I/O、网络带宽、内存利用率等;数据库指标有SQL查询时间、并发数、连接数、缓存命中率等;系统应用指标与业务有关,不同业务场景架构设计不同,如To C系统常用同步RPC调用,To B系统可用异步事件驱动模式,后者吞吐量更高。
    • 白屏时间:从用户输入URL到看到网页第一个视觉标签的时间,可作为性能衡量指标,优化手段包括减少文件加载体积、调整用户界面浏览行为。
    • 首屏时间:用户输入URL后看到当前窗口完整页面的时间,是重要衡量指标,白屏时间和首屏时间越短,用户体验越好。
  4. 查找系统瓶颈的步骤
    • 设计阶段:定义系统性能目标,不同性能目标影响系统架构设计和成本,设计阶段后调整架构成本高。
    • 开发阶段:走查代码和业务流程,评审应用程序源代码、环境参数、配置程序等整个调用流程和处理逻辑。
    • 测试阶段:上线前进行全方面压力测试,绘制吞吐量和延迟曲线,找到最佳性能点并限流。若吞吐量未达预期,定义延迟问题需端到端排查,可使用相关命令和工具;定位吞吐量问题要结合CPU使用率。
  5. 系统性能评估:回答系统高性能问题,初级和中级研发工程师可从吞吐量、延迟、TP99三个指标出发;高级研发工程师还需了解全链路性能指标,实际生产环境还有网络工程层面的性能优化指标,可课下学习。要在脑海中建立请求链路蓝图,熟悉各环节性能损耗。

在这里插入图片描述

  1. 高性能架构设计概述:延续上一讲,讲解如何设计高性能架构,强调从前端请求到后端服务的全链路视角进行考量,且初中级和高级研发工程师面试回答思路存在差异。
  2. 前端优化环节
    • 减少请求次数:包括增加缓存控制,让浏览器访问本地资源副本;减少图像请求次数,将多张图片拼成一张后用CSS定位显示;减少脚本请求次数,通过压缩文件减少传输大小和请求数。
    • 页面静态化:将页面元素缓存到CDN节点,如商品详情页静态化可减轻后端服务器压力。
    • 边缘计算:因大数据处理需求,大厂将计算能力置于靠近用户的CDN节点,使其具备定制化计算能力,涉及无服务器架构等概念,面试中掌握可加分。
  3. 后端性能考量角度:后端性能问题可从基础设施、网络、架构三个层面考量,如网络层的网络专线、CDN优化,架构层的动静分离、集群优化、数据隔离等多种方案。
  4. 高级研发工程师的思考
    • 明确系统指标:设计高性能架构要清楚系统硬件性能指标,例如在限定并发用户数(如100万内)的情况下保证系统tp99(99%的请求响应时间)为两秒。
    • 系统设计步骤:架构师至少要有明确指标、保护系统(并发数超限时保护系统并拒绝多余请求)、提供优雅体验(如服务器排队机制和提示信息)、快速扩容(出现流量压力时能快速增加承载能力)这四个系统设计思考步骤。
  5. 高性能架构落地技术点
    • 系统限流:通过流量控制保证系统稳定性,当并发压力超设计指标时拒绝新请求,让用户排队。
    • 快速扩容:存储额外计算资源用于应急,同时要考虑IT成本和扩容速度,确保在规定时间内完成扩容并达到性能指标。
    • 系统优化:运用前后端优化技术点对系统进行持续优化,性能设计要贯穿系统建设的需求、设计、研发、测试、上线、运行等各个阶段。
  6. 性能设计与面试思路
    • 性能设计贯穿始终:性能设计在系统建设各阶段都要考虑,以便随时调整优化,如今高性能架构设计已成为标准化应对流程。
    • 面试解答思路:面试时先结合业务场景识别关键服务,进行性能设计和测试;再为非关键服务提供降级和熔断方案,同时要注重培养思维能力,学会拆解复杂问题。

在这里插入图片描述

设计完整架构

  1. 课程引入与场景概述:回顾过往面试思路,引出用电商预约抢购场景串联知识点进行架构设计题解答。以京东1499元抢购飞天茅台活动为例,梳理出抢购系统的商品预约、等待抢购、商品抢购、订单支付四个阶段。
  2. 商品预约阶段:主要考察高并发场景下抢购资格的发放,可基于Redis实现分布式锁。加锁时用SET命令设置键值和过期时间,解锁时通过Lua脚本依据唯一标识判断客户端是否正确,保证解锁操作原子性。但单机Redis实例存在故障风险,需掌握基于Redis集群实现分布式锁以保证锁的可靠性。
  3. 等待抢购阶段:因用户频繁刷新商品详情页导致读请求量剧增,若未做好流量控制易成系统性能瓶颈。解决思路包括页面静态化,提前生成静态页面并存储于CDN节点,使浏览器缓存页面资源;服务端限流,在商品详细页后端系统入口层对动态请求接口设置最大并发访问数量,基于Nginx配置限流算法,如限制单位时间内所有IP或单个IP的请求数量,这需要提前掌握限流策略原理,如令牌桶算法。
  4. 商品抢购阶段:用户提交订单时系统校验库存,库存足够则扣减并生成订单。由于瞬时流量高,采用消息队列暂存请求、提示排队,后端异步处理。库存校验和扣减可基于数据库或缓存实现,但数据库在高流量下性能不佳,若用数据库需借助分布式锁优化并发操作,且对锁的可靠性要求高,故多选择基于缓存扣减库存,但要考虑缓存单点问题和引入锁策略保证数据一致性。该阶段架构设计涉及流量消峰、扣减库存和分库分表三个技术考点。流量消峰通过消息队列异步化处理提单请求;扣减库存要解决Redis单点及数据不一致问题;分库分表通过对用户ID哈希取模将订单分配到多个存储节点,提高并发能力。此外,还需考虑抢购入口请求量大导致的带宽问题,可从网络工程角度通过单独子域名绑定独立网络服务器解决,涉及DNS设计和优化。
  5. 订单支付阶段:用户支付完成后,支付平台回调系统接口更新订单状态,架构系统通过异步通知处理非核心业务,如积分累积、消息通知等,可基于MQ实现异步操作。但要考虑服务异常导致的请求数据丢失问题,借助可靠消息投递机制,先本地存储消息,再通过异步重试补偿,如支付回调更新订单状态时插入消息,再异步推送至其他系统。
  6. 总结与思考:总结各阶段注意点,强调在商品预约阶段基于Redis实现分布式锁获取抢购资格;等待抢购阶段进行页面静态化和服务端限流;商品抢购阶段利用MQ同步转异步处理流量,并解决消息队列及库存扣减相关问题;订单支付阶段基于MQ通知并保证消息可靠性。同时,留下思考问题:面对用户只抢购不支付的恶意行为,如何优化架构设计。

在这里插入图片描述

研发工程师成长路线与架构师目标

  • 研发工程师成长路线:从初级研发工程师进阶为中高级研发工程师,再提升至架构师并寻求更高突破。多数研发工程师以成为架构师为目标,但很多人在工作中缺乏参与架构设计的机会,公司也不主动培养,导致成长困难。
  • 架构师成长途径:架构师多是在参与大项目、解决问题过程中形成知识体系和能力。若没有这种机会,可先掌握架构师知识体系,再通过实践检验,逐步成为架构师。

架构师能力模型

  • 能力组成:由基础技术架构(非功能性技术范畴)、业务架构(业务场景下对业务需求的抽象)、开发技能(落地架构的能力)构成。
  • 能力要求:在系统开发的需求分析阶段,架构师要给出合理的业务架构需求分析抽象模型;架构设计和选型阶段,要考虑技术合理性制定方案;架构落地阶段,要指导研发并推进项目执行,做好系统开发各环节的技术把控。
  • 能力对标:以互联网大厂能力模型对标,架构师需能覆盖领域子方向,作为系统技术负责人,把握系统的规划设计、落地和演进,独当一面。

互联网分布式架构师知识体系

  • 分布式存储
    • 数据分片:为解决数据水平扩展,将数据分布到多个节点实现负载均衡,常见分片规则有范围分片和哈希分片,涉及不同分配算法。
    • 数据复制与副本:数据复制存在同步和异步复制,会产生副本保证数据可靠性和可用性,但多个副本同步会产生一致性问题,如强一致性、弱一致性、最终一致性等,解决一致性问题涉及多种协议。
    • 主选举与分布式锁:多个副本带来主选举和分布式锁问题,解决锁的容错性(如双主问题)会用到租约机制。
    • 基础理论:为衡量副本可用性和一致性,引出分布式系统的基础理论,如CP、BASE以及PACELC 。
  • 分布式计算:涉及并行计算(如多线程、服务集群)、分布式计算(将任务分割到多个服务器并行计算)、云计算(分布式技术加虚拟化技术统称,开发者利用云API开发应用并托管到云上)三个概念。架构师要了解分布式领域计算模式,如Hadoop中MapReduce设计思想,以及Storm、Spark、Flink等流式计算框架的架构设计方案。面试系统架构师了解相关知识体系即可,计算框架设计理念有参考价值。
  • 输入输出:系统架构中的输入输出指系统间通信技术,涉及网络通讯基础协议(如TCP、UDP协议)、网络IO模型,以及连接复用、序列化、反序列化、RPC、MQ消息队列等应用知识。架构师要理解高性能原理,掌握流量流转过程及应对方案,包括网络设备、操作系统、应用系统、系统线程处理流量时涉及的技术和设计模式,掌握分布式通信系统核心技术RBC和MQ。
  • 控制器:可理解为系统架构中的调度系统,包括流量调度和资源调度。流量调度涉及负载均衡、路由、熔断、降级、限流等流量控制方案策略;资源调度是将流量调度迁移到服务器计算、存储、容器等资源上的调度,架构师至少要掌握常用系统调度设计、调度算法和负载策略。

学习架构设计知识的思路

  • 从熟知领域出发,梳理核心知识脉络形成结构图,将零散知识点补充到知识网络图谱上,形成核心知识和扩展知识。
  • 养成对基础的判断力,针对同一问题从不同方法、维度、角度分析对比,提升工作中对技术的领悟力。

  1. 职场建议 - 面向职场老人
    • 思考能力:培养敏感的思考能力,通过敏感驱动思考、学习和总结,逐渐达到敏锐,这需要大量练习。
    • 表达能力:具备良好表达能力,沟通时要会表达、敢表达且表达准确,表达建立在充分思考基础上,可学习结构化思维提升表达能力。
    • 经验积累:做有价值的事要惊艳到自己,超出他人预期,以此拉开与他人差距。
    • 避免老油条心态:不要成为职场老油条,以免影响判断力,要对格局、方法论等抽象概念有明确认知。
    • 面试认知:以解释“什么是架构设计”为例,面对不同面试官要有不同层次的回答,体现对架构设计概念的深入理解。
  2. 职场建议 - 面向职场新人
    • 规划与积累:要有计划、有积累,在追求公司价值的同时规划自身未来价值,学习时间管理,重视重要不紧急的事情。
    • 自我定位:学会自我定位,不要依赖他人定位,同时善于归纳总结和思考。
    • 职业发展阶段:了解技术人职场发展的三个阶段,即“坐下不坐上”“坐下也坐上”“坐上不坐下” ,并争取有新的感悟。

[本章完]

;