假设你经营一家“AI推理餐厅”:顾客扫码下单,后厨的大模型厨师必须在几十毫秒内把“洞察”端上桌。为了不让客人掀桌,你会挂出一块承诺牌——“30秒出菜,99.9%时间营业,否则免单”。这块承诺牌就是服务等级协议(SLA)。但承诺容易,兑现难。你需要把牌上的每一条数字拆成可执行的目标(SLO),再用后厨的计时器和温度计去实测(SLI);为了让承诺持续成立,还要设计出餐流水线(架构)、调度炉灶(资源)、定期演习(运维),最后根据账单复盘(管理优化)。本文用这家推理餐厅的日常,带你一步步搭起AI推理服务的SLA架构。
作为AI服务工程师,把SLA从一句口号变成可测量、可保障的工程体系,是赢得客户信任和团队话语权的核心能力。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
SLA基础概念
想象你开了一家“AI推理餐厅”,招牌上写着“我们承诺:5秒内上菜,全年营业时间99.9%”。这行字不是装饰,而是和客人之间的契约。客人冲着承诺下单,你则要为做不到的时刻负责。这样的契约,在AI服务里叫SLA。
SLA全称Service Level Agreement,是服务提供方与用户之间的一份正式“服务质量契约”。它写清楚三件事:我们承诺什么(指标)、怎么证明(测量)、做不到怎么办(赔偿)。对AI推理服务来说,最常见的承诺包括推理延迟、可用性、吞吐量,以及模型输出质量。
契约里角色要明确:甲方是使用推理能力的业务方或终端用户,乙方是提供推理服务的平台或云厂商。乙方承诺“有效服务时间占总时间比例”,这就是可用性SLA。公式:
有了这张承诺牌,后厨才知道标准在哪,客人投诉也有依据。这也是后面所有SLA工作的“龙头”。
- 总时间T_总统计周期内的全部时间,通常取一个月或一年,单位保持一致(小时或分钟)。
- 可用时间T_可用统计周期内服务能正常响应推理请求的时间,计划内维护通常按约定排除。
- 除法与百分比用可用时间除以总时间,再乘以100%,得到服务可用的比例。
SLA层级划分
餐厅集团会在总部手册里写“全球门店均提供高品质餐食”,这是业务级承诺;单店则挂出“30分钟上齐所有菜”,这是服务级承诺;后厨的烤箱则记录“95%时间正常运转”,这是设备级承诺。层层承诺,缺一不可。
AI推理服务的SLA也会分层。业务级SLA面向最终用户,描述端到端体验,如“客服机器人回答可用率99.99%”;服务级SLA面向推理服务本身,定义延迟、吞吐、模型质量;基础设施级SLA面向GPU、网络、存储,一般由云厂商承诺。
端到端的可用性不是简单取最差,而是各层有效性的乘积。假设业务层可用99.99%,服务层99.9%,基础设施99.95%,那么整体大概是99.84%。公式:
设计时不能只盯着单店招牌,而要同时检查总部、门店和后厨设备的承诺,才能让顾客体验稳定。
- 业务层SLA衡量用户真实感受到的端到端可用概率。
- 服务层SLA衡量AI推理服务自身能正常提供响应的概率。
- 基础设施层SLA衡量下层GPU、网络、存储的正常运行概率。
- 连乘多层串联等效可用性等于各层概率相乘。
SLO指标设定
承诺牌写“30分钟上菜”还不够,后厨每个人需要更细的目标:切菜25秒、炒菜90秒、传菜30秒。这些内部可执行、可量化的目标,就是SLO(Service Level Objective)。
SLO是SLA拆解下来的“内部KPI”。比如SLA承诺“推理服务可用性99.9%”,SLO设为“月度可用性≥99.95%”;SLA承诺“体验流畅”,SLO则用延迟百分位约束:“P99延迟≤250ms”。
指标设定要覆盖四个维度:可用性SLO、延迟SLO、吞吐量SLO、误差容忍度。延迟尤其不能只用平均值,因为平均值为0.1秒的接口,可能在高峰时有5%的请求超过2秒。所以业界常用百分位。公式:
菜单上的“25分钟内上菜”翻译成后厨的百分位目标,厨师们才知道该按什么节奏走。
- L(随机延迟)把一个请求的端到端推理延迟看作随机变量,每次取值不同。
- 250ms(阈值)SLO中约定的最大可接受延迟,超过即视为“慢请求”。
- P(……)括号内事件发生的概率。
- ≥99%要求99%的请求落在这个阈值内,剩下的1%允许慢或失败。
SLI监控实现
承诺和目标是纸上的,得有一支温度计插进锅里——SLI(Service Level Indicator)就是这支温度计。它把真实服务行为变成数字,比如每次请求耗时、成功还是失败。
SLI监控实现分三步:采集、聚合、报警。采集阶段在推理服务入口埋点,记录每个请求的返回码、耗时和模型质量;聚合阶段把原始数据按时间窗口(1分钟/5分钟)汇总成可用性、延迟百分位;报警阶段对照SLO和错误预算,触发告警。
最核心的SLI之一是“请求成功率”。公式:
温度计持续读数,后厨才不会等客人投诉才知道菜凉了。
- 成功请求数在时间窗口内完成推理且结果符合业务预期的请求数。
- 总请求数同一时间窗口内进入系统的全部请求,包括超时和失败。
- 乘100%把比值变成百分比,便于对照SLO的小数点目标。
- 窗口聚合按固定时间窗滚动计算,及时反映突发。
架构保障机制
即使有了目标和监控,餐厅也怕厨师突然请假、灶台起火。所以后厨要设计防御机制:多窗口排队、备用厨师、紧急撤菜——对应架构上的负载均衡、超时重试、熔断降级。
负载均衡把请求分散到多个模型副本,避免单点过载;超时与重试给每次推理设置截止时间,超时后换副本重试,但绝不无限重试;熔断与降级在错误率超过阈值时快速失败或返回兜底结果,防止整条链路雪崩。
这些机制可以用“重试成功率”来量化。假设单次调用成功率是p,允许重试n次,整体成功率是:
就像厨房里多备一口锅,主厨失手时副手能立刻顶上,出餐节奏才不会乱。
- p(单次成功率)一次推理调用按SLI定义成功的概率。
- 1-p(单次失败率)一次调用失败的概率。
- n次尝试取补集连续n次都失败的概率是失败率的n次方。
- 整体成功率至少一次成功的概率就是1减去连续失败的概率。
资源弹性管理
餐厅饭点客流是脉冲式的。如果按最高峰常备20口锅,闲时就太浪费;如果只按平均客流备锅,高峰期必然超时。因此要根据实时客流调度炉灶和备菜。
在AI推理服务中,资源弹性管理包括三件事:GPU资源调度,把推理实例调度到最合适的加速卡上;自动扩缩容,根据QPS、队列深度和延迟自动增删副本;缓存与队列,缓存热结果减少重复计算,队列缓冲短时突发流量。
决定扩多少个副本,可以用容量估算公式:
弹性管理就是让后厨在高峰多开灶、低峰关灶,既保SLO又不烧钱。
- QPS每秒到达的推理请求数,是容量规划的“客流”。
- T_avg单个请求平均处理时间,相当于每桌客人的用餐时长。
- U_max × C_per一个副本最多贡献的处理能力。
- 向上取整副本数必须是整数,多一点冗余比少一点好。
运维实践方法
承诺再好的餐厅,也要定期打扫、消防演习、检查冰箱温度。AI推理服务的SLA同样要靠运维实践支撑:容量规划、压测演练、告警响应。
容量规划根据历史峰值、业务增长预测未来资源需求;压测演练在测试环境模拟秒级数十万请求,验证SLO的最坏情况;告警响应建立分级响应机制,严重告警5分钟介入,并做事后复盘。
容量规划的核心是给峰值留出冗余。公式:
压测演习就是让厨师在非饭点练习“单手颠锅”,真正遇到爆单才不慌。
- QPS_peak预测或观测到的峰值每秒请求数。
- T_latency请求在系统内平均占用的处理时长。
- 1+β在理想容量基础上额外增加的比例。
- 结果需要预备的处理容量,低于它会破SLO,高于它会浪费成本。
SLA管理与优化
餐厅老板每月会看三张表:出菜时间记录、顾客投诉数量、免单金额。对应SLA报告、错误预算和赔偿机制,目的是找出承诺和现实之间的差距,持续优化。
SLA报告定期汇总SLO达成率;错误预算可视化地告诉团队“这个月还能容忍多少次失败”;若突破SLA,则触发赔偿机制。更重要的是,内部据此调整SLO、架构或资源策略,形成闭环。
错误预算消耗是优化的重要输入。公式:
承诺不是一成不变的菜单,每月复盘后既敢承诺更实的SLA,也能把厨房经营得更好。
- 1-SLI_实际实际不可用或失败比例,越小越好。
- 1-SLO_目标SLO允许的最大失败比例,是“错误预算”。
- 相除看已经用了多少预算。
- 阈值达到100%就是赤字,需采取措施。
AI 应用场景
智能客服系统在线推理SLA保障
阶段:监控与告警、资源弹性管理
解决的问题:传统客服系统靠人工排队,无法对响应时间做出可靠承诺。AI客服上线后,客户要求“P99延迟≤300ms、可用性≥99.9%”,否则每天按比例减免账单。只有把SLA落地成SLO和SLI,才能让商务敢签合同。
具体案例:某电商平台大促前对客服机器人做压测,发现GPU副本不足导致P99飙到800ms。团队用SLI采集延迟并设置队列深度告警,触发自动扩缩容后2分钟内增加3倍副本,同时引入FAQ缓存,P99降到250ms,大促期间SLO全部达标。
医疗影像辅助诊断推理服务
阶段:架构保障、容量规划
解决的问题:医疗场景下延迟抖动会造成医生误判,可用性中断则可能延误诊断。系统需要把SLA分层拆解:影像上传链路、推理服务、GPU基础设施逐层保障,任何一层故障都不能波及核心诊断。
具体案例:某医院影像推理服务与PACS系统集成,要求端到端可用性99.95%。架构上采用双集群负载均衡、超时重试3次、错误率超过5%自动熔断并降级到备用模型。月度SLA报告发现跨地域网络偶尔超时,随后新增容灾切换策略,连续3个月达成SLO。
Python 演示
import randomfrom collections import deque class SlaMonitor: """模拟AI推理服务的SLA监控器""" def __init__(self, window_size=60, slo_threshold=200): self.window_lat = deque(maxlen=window_size) self.slo_threshold = slo_threshold def record(self, latency_ms): self.window_lat.append(latency_ms) def success_rate(self): if not self.window_lat: return 0.0 ok = sum(1 for lat in self.window_lat if lat <= self.slo_threshold) return ok / len(self.window_lat) * 100 def p99(self): if not self.window_lat: return 0.0 n = max(1, int(len(self.window_lat) * 0.99)) sorted_lat = sorted(self.window_lat)[:n] return sorted_lat[-1] def run(self, steps=100): for _ in range(steps): self.record(random.gauss(180, 60)) return { "samples": len(self.window_lat), "success_rate": round(self.success_rate(), 2), "p99": round(self.p99(), 1), } if __name__ == "__main__": monitor = SlaMonitor() print(monitor.run())
self.window_lat = deque(maxlen=window_size)固定容量滑窗,自动丢弃最旧记录。self.slo_threshold = slo_threshold保存SLO延迟阈值,用于判断请求是否达标。ok = sum(1 for lat in self.window_lat if lat <= self.slo_threshold)统计窗口内不超过阈值的请求数。n = max(1, int(len(self.window_lat) * 0.99))计算样本数量的99%位置索引。return ok / len(self.window_lat) * 100将达标比例换算成百分率。self.record(random.gauss(180, 60))生成模拟延迟数据,均值180ms、标准差60ms。if __name__ == "__main__":直接运行则执行Demo入口。
常见误区
误区SLA和SLO都是服务承诺数字,没必要分那么细,我都叫SLA,反正监控达标就行。
正解SLA是与客户签订的完整契约,SLO是内部拆解出的量化目标,SLI是实测指标。SLO达标不代表SLA履约,因为SLA还有测量口径、赔偿规则、除外情况。比喻:菜单承诺“30分钟上齐”(SLA),后厨按“每道菜25分钟出”(SLO),用秒表记录(SLI)。
为何常见:三个词都带S,且数值会一致,容易混用。
误区只要平均响应时间低于目标,SLA就稳了,日常监控看平均值就够了。
正解平均值会被少量极快请求拉低,掩盖长尾。例如99%的请求只要100ms,1%的请求要5s,平均约150ms看似达标,但体验极差。应使用P99/P95等百分位和错误预算。
为何常见:均值通俗易懂,很多监控面板默认展示平均值,容易形成惯性。
误区SLO设得越严格用户越满意,哪怕成本高也要做到五个9,99.999%才显得专业。
正解从99.9%到99.99%通常需要更多副本、跨可用区容灾,成本可能翻倍。过度严格会导致告警疲劳和频繁发布冻结。SLO应结合用户感知和商业收益设定。
为何常见:“更安全、更可靠”听起来总是对的,但忽略了成本函数和边际收益。
误区调用失败就多试几次,重试越多次成功率越高,不会影响SLA,所以不用限制次数。
正解重试会占用网络、GPU和下游资源。若所有客户端同时无限重试,会放大流量,造成雪崩。应设置有限重试(如3次)并加入退避抖动,让系统有时间恢复。
为何常见:从单次请求视角是对的,但从全局排队视角是灾难,容易让人忽略系统级影响。
面试题
Q1. SLA中字母A代表什么?
- A.Agreement← 正确答案
- B.Architecture
- C.Application
- D.Automation
答案:A。SLA全称Service Level Agreement,A代表Agreement(协议)。SLA是服务提供方与用户之间的正式契约,定义质量承诺、测量方式和赔偿条款。
Q2. 以下哪项最适合衡量AI推理服务的延迟体验?
- A.平均延迟
- B.P99延迟← 正确答案
- C.最小延迟
- D.标准差
答案:B。平均延迟会被少量极快请求拉低,掩盖长尾。P99表示99%请求都低于该值,能反映最差情况中的可接受边界,更适合SLO设定。
Q3. 错误预算的主要作用是什么?
- A.控制发布节奏← 正确答案
- B.增加缓存
- C.决定模型参数
- D.计算赔偿金
答案:A。错误预算=1-SLO,它告诉团队“还能容忍多少失败”。预算耗尽时应暂停高风险变更,优先恢复稳定性,因此主要用于控制发布与变更节奏。
Q4. 若SLO要求99.9%可用性,30天内允许的不可用时间约为?
- A.43分钟← 正确答案
- B.4.3小时
- C.8.6小时
- D.17.2小时
答案:A。30天共43200分钟,99.9%可用意味着最多不可用0.1%,即43200×0.001≈43.2分钟。这道题考察把百分比换算成真实时间的技能。
Q5. 多副本加负载均衡最直接保障哪个SLO维度?
- A.可用性← 正确答案
- B.精确率
- C.召回率
- D.训练速度
答案:A。多副本和负载均衡通过分散流量、避免单点故障,提升系统整体可用性。精确率、召回率是模型质量指标,训练速度与在线推理SLO无关。
Q6. 推理服务的原始SLI数据通常来自哪里?
- A.服务端请求日志← 正确答案
- B.用户访谈记录
- C.产品需求文档
- D.销售预测模型
答案:A。SLI是对真实服务行为的测量,数据来源是服务端埋点和请求日志,记录每次调用的耗时、状态码和返回结果,而不是访谈或文档。
Q7. 某服务SLO为99.9%,当前SLI为99.95%,错误预算消耗比例约?
- A.50%← 正确答案
- B.25%
- C.10%
- D.5%
答案:A。错误预算消耗=(1-SLI)/(1-SLO)=(0.05%)/(0.1%)=50%。说明这个月已经用掉一半允许的失败额度,剩余预算不多了。
Q8. 哪些手段可以有效降低AI推理服务的延迟SLO?
- A.模型量化压缩← 正确答案
- B.增加缓存命中← 正确答案
- C.无限次重试
- D.批处理加速← 正确答案
答案:ABD。模型量化能减少计算量,缓存命中避免重复推理,批处理提升GPU利用率,三者都能降低延迟。无限次重试会放大流量、加剧拥塞,反而破坏SLO。
Q9. 在SLA层级划分中,下列哪些层级会被纳入整体SLA计算?
- A.业务层← 正确答案
- B.服务层← 正确答案
- C.宣传层
- D.基础设施层← 正确答案
答案:ABD。端到端SLA由业务层、服务层、基础设施层串联决定,每层可用性相乘得到整体值。宣传层不是技术SLA概念,不应纳入计算。
Q10. 关于SLO、SLI和错误预算,下列说法正确的有?
- A.只要SLI达标即代表SLA履约
- B.错误预算耗尽后应暂停高风险变更← 正确答案
- C.P99达标不代表所有请求延迟达标← 正确答案
- D.SLO越严格成本越低
答案:BC。SLI达标是SLA履约的必要条件,但不是充分条件,还需满足测量口径和赔偿条款。错误预算耗尽说明风险过高应冻结变更。P99只约束99%请求,剩余1%可能很慢。SLO越严格通常成本越高,D错误。