假设你经营一家“AI推理餐厅”:顾客扫码下单,后厨的大模型厨师必须在几十毫秒内把“洞察”端上桌。为了不让客人掀桌,你会挂出一块承诺牌——“30秒出菜,99.9%时间营业,否则免单”。这块承诺牌就是服务等级协议(SLA)。但承诺容易,兑现难。你需要把牌上的每一条数字拆成可执行的目标(SLO),再用后厨的计时器和温度计去实测(SLI);为了让承诺持续成立,还要设计出餐流水线(架构)、调度炉灶(资源)、定期演习(运维),最后根据账单复盘(管理优化)。本文用这家推理餐厅的日常,带你一步步搭起AI推理服务的SLA架构。

岗位关联

作为AI服务工程师,把SLA从一句口号变成可测量、可保障的工程体系,是赢得客户信任和团队话语权的核心能力。

目录
  1. 可视化演示
  2. SLA基础概念
  3. SLA层级划分
  4. SLO指标设定
  5. SLI监控实现
  6. 架构保障机制
  7. 资源弹性管理
  8. 运维实践方法
  9. SLA管理与优化
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

SLA基础概念

想象你开了一家“AI推理餐厅”,招牌上写着“我们承诺:5秒内上菜,全年营业时间99.9%”。这行字不是装饰,而是和客人之间的契约。客人冲着承诺下单,你则要为做不到的时刻负责。这样的契约,在AI服务里叫SLA。

SLA全称Service Level Agreement,是服务提供方与用户之间的一份正式“服务质量契约”。它写清楚三件事:我们承诺什么(指标)、怎么证明(测量)、做不到怎么办(赔偿)。对AI推理服务来说,最常见的承诺包括推理延迟、可用性、吞吐量,以及模型输出质量。

契约里角色要明确:甲方是使用推理能力的业务方或终端用户,乙方是提供推理服务的平台或云厂商。乙方承诺“有效服务时间占总时间比例”,这就是可用性SLA。公式:

有了这张承诺牌,后厨才知道标准在哪,客人投诉也有依据。这也是后面所有SLA工作的“龙头”。

SLA可用性=T可用T总×100%\displaystyle SLA_{可用性} = \frac{T_{可用}}{T_{总}} \times 100\%
通俗地说:一年365天,如果承诺99.9%,就允许约8.76小时处于不可用状态;超出即违约。
  1. 总时间T_总统计周期内的全部时间,通常取一个月或一年,单位保持一致(小时或分钟)。
    T总=24×365\displaystyle T_{总} = 24 \times 365
  2. 可用时间T_可用统计周期内服务能正常响应推理请求的时间,计划内维护通常按约定排除。
    T可用=T总−T不可用\displaystyle T_{可用} = T_{总} - T_{不可用}
  3. 除法与百分比用可用时间除以总时间,再乘以100%,得到服务可用的比例。
    8760−8.768760×100%≈99.9%\displaystyle \frac{8760 - 8.76}{8760} \times 100\% \approx 99.9\%

SLA层级划分

餐厅集团会在总部手册里写“全球门店均提供高品质餐食”,这是业务级承诺;单店则挂出“30分钟上齐所有菜”,这是服务级承诺;后厨的烤箱则记录“95%时间正常运转”,这是设备级承诺。层层承诺,缺一不可。

AI推理服务的SLA也会分层。业务级SLA面向最终用户,描述端到端体验,如“客服机器人回答可用率99.99%”;服务级SLA面向推理服务本身,定义延迟、吞吐、模型质量;基础设施级SLA面向GPU、网络、存储,一般由云厂商承诺。

端到端的可用性不是简单取最差,而是各层有效性的乘积。假设业务层可用99.99%,服务层99.9%,基础设施99.95%,那么整体大概是99.84%。公式:

设计时不能只盯着单店招牌,而要同时检查总部、门店和后厨设备的承诺,才能让顾客体验稳定。

SLA端到端=SLA业务×SLA服务×SLA基础设施\displaystyle SLA_{端到端} = SLA_{业务} \times SLA_{服务} \times SLA_{基础设施}
每一层都不到100%,乘起来只会更低。反过来,要为整体SLA补洞,就得先找出最薄弱的一层。
  1. 业务层SLA衡量用户真实感受到的端到端可用概率。
    SLA业务=99.99%\displaystyle SLA_{业务} = 99.99\%
  2. 服务层SLA衡量AI推理服务自身能正常提供响应的概率。
    SLA服务=99.9%\displaystyle SLA_{服务} = 99.9\%
  3. 基础设施层SLA衡量下层GPU、网络、存储的正常运行概率。
    SLA基础设施=99.95%\displaystyle SLA_{基础设施} = 99.95\%
  4. 连乘多层串联等效可用性等于各层概率相乘。
    0.9999×0.999×0.9995≈0.9984\displaystyle 0.9999 \times 0.999 \times 0.9995 \approx 0.9984

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分钟内上菜”翻译成后厨的百分位目标,厨师们才知道该按什么节奏走。

P(延迟 L≤250 ms)≥99%\displaystyle P(延迟 \, L \le 250\,ms) \ge 99\%
含义是:随机抽取一个推理请求,它的延迟小于等于250毫秒的概率不低于99%。
  1. L(随机延迟)把一个请求的端到端推理延迟看作随机变量,每次取值不同。
    L∼任意分布\displaystyle L \sim 任意分布
  2. 250ms(阈值)SLO中约定的最大可接受延迟,超过即视为“慢请求”。
    阈值=250 ms\displaystyle 阈值 = 250\,ms
  3. P(……)括号内事件发生的概率。
    P(L≤250 ms)\displaystyle P(L \le 250\,ms)
  4. ≥99%要求99%的请求落在这个阈值内,剩下的1%允许慢或失败。
    P(L≤250 ms)≥0.99\displaystyle P(L \le 250\,ms) \ge 0.99

SLI监控实现

承诺和目标是纸上的,得有一支温度计插进锅里——SLI(Service Level Indicator)就是这支温度计。它把真实服务行为变成数字,比如每次请求耗时、成功还是失败。

SLI监控实现分三步:采集、聚合、报警。采集阶段在推理服务入口埋点,记录每个请求的返回码、耗时和模型质量;聚合阶段把原始数据按时间窗口(1分钟/5分钟)汇总成可用性、延迟百分位;报警阶段对照SLO和错误预算,触发告警。

最核心的SLI之一是“请求成功率”。公式:

温度计持续读数,后厨才不会等客人投诉才知道菜凉了。

SLI可用性=成功请求数总请求数×100%\displaystyle SLI_{可用性} = \frac{成功请求数}{总请求数} \times 100\%
注意这里的成功不是“HTTP 200”,而是业务上完整返回有效推理结果。
  1. 成功请求数在时间窗口内完成推理且结果符合业务预期的请求数。
    N成功\displaystyle N_{成功}
  2. 总请求数同一时间窗口内进入系统的全部请求,包括超时和失败。
    N总\displaystyle N_{总}
  3. 乘100%把比值变成百分比,便于对照SLO的小数点目标。
    N成功N总×100%\displaystyle \frac{N_{成功}}{N_{总}} \times 100\%
  4. 窗口聚合按固定时间窗滚动计算,及时反映突发。
    SLI可用性(t)=成功(t)总(t)\displaystyle SLI_{可用性}(t) = \frac{成功(t)}{总(t)}

架构保障机制

即使有了目标和监控,餐厅也怕厨师突然请假、灶台起火。所以后厨要设计防御机制:多窗口排队、备用厨师、紧急撤菜——对应架构上的负载均衡、超时重试、熔断降级。

负载均衡把请求分散到多个模型副本,避免单点过载;超时与重试给每次推理设置截止时间,超时后换副本重试,但绝不无限重试;熔断与降级在错误率超过阈值时快速失败或返回兜底结果,防止整条链路雪崩。

这些机制可以用“重试成功率”来量化。假设单次调用成功率是p,允许重试n次,整体成功率是:

就像厨房里多备一口锅,主厨失手时副手能立刻顶上,出餐节奏才不会乱。

P整体=1−(1−p)n\displaystyle P_{整体} = 1 - (1 - p)^n
重试次数并非越多越好,因为每次重试都在消耗资源和时间。
  1. p(单次成功率)一次推理调用按SLI定义成功的概率。
    p=0.9\displaystyle p = 0.9
  2. 1-p(单次失败率)一次调用失败的概率。
    1−p=0.1\displaystyle 1 - p = 0.1
  3. n次尝试取补集连续n次都失败的概率是失败率的n次方。
    (1−p)n\displaystyle (1 - p)^n
  4. 整体成功率至少一次成功的概率就是1减去连续失败的概率。
    P整体=1−0.13=0.999\displaystyle P_{整体} = 1 - 0.1^3 = 0.999

资源弹性管理

餐厅饭点客流是脉冲式的。如果按最高峰常备20口锅,闲时就太浪费;如果只按平均客流备锅,高峰期必然超时。因此要根据实时客流调度炉灶和备菜。

在AI推理服务中,资源弹性管理包括三件事:GPU资源调度,把推理实例调度到最合适的加速卡上;自动扩缩容,根据QPS、队列深度和延迟自动增删副本;缓存与队列,缓存热结果减少重复计算,队列缓冲短时突发流量。

决定扩多少个副本,可以用容量估算公式:

弹性管理就是让后厨在高峰多开灶、低峰关灶,既保SLO又不烧钱。

N=⌈QPS×TavgUmax×Cper⌉\displaystyle N = \left\lceil \frac{QPS \times T_{avg}}{U_{max} \times C_{per}} \right\rceil
意思是:想要每秒处理QPS个请求,每个请求平均耗时T_avg,每个副本目标利用率不超过U_max、单副本容量C_per,就需要至少N个副本。
  1. QPS每秒到达的推理请求数,是容量规划的“客流”。
    QPS=1000\displaystyle QPS = 1000
  2. T_avg单个请求平均处理时间,相当于每桌客人的用餐时长。
    Tavg=50 ms\displaystyle T_{avg} = 50\,ms
  3. U_max × C_per一个副本最多贡献的处理能力。
    Umax×Cper=0.7×100\displaystyle U_{max} \times C_{per} = 0.7 \times 100
  4. 向上取整副本数必须是整数,多一点冗余比少一点好。
    N=⌈7.14⌉=8\displaystyle N = \lceil 7.14 \rceil = 8

运维实践方法

承诺再好的餐厅,也要定期打扫、消防演习、检查冰箱温度。AI推理服务的SLA同样要靠运维实践支撑:容量规划、压测演练、告警响应。

容量规划根据历史峰值、业务增长预测未来资源需求;压测演练在测试环境模拟秒级数十万请求,验证SLO的最坏情况;告警响应建立分级响应机制,严重告警5分钟介入,并做事后复盘。

容量规划的核心是给峰值留出冗余。公式:

压测演习就是让厨师在非饭点练习“单手颠锅”,真正遇到爆单才不慌。

Creq=QPSpeak×Tlatency×(1+β)\displaystyle C_{req} = QPS_{peak} \times T_{latency} \times (1 + \beta)
β是冗余系数,通常取20%~50%,用来吸收预测误差和瞬时尖刺。
  1. QPS_peak预测或观测到的峰值每秒请求数。
    QPSpeak=5000\displaystyle QPS_{peak} = 5000
  2. T_latency请求在系统内平均占用的处理时长。
    Tlatency=80 ms\displaystyle T_{latency} = 80\,ms
  3. 1+β在理想容量基础上额外增加的比例。
    1+β=1.3\displaystyle 1 + \beta = 1.3
  4. 结果需要预备的处理容量,低于它会破SLO,高于它会浪费成本。
    Creq=5000×0.08×1.3=520\displaystyle C_{req} = 5000 \times 0.08 \times 1.3 = 520

SLA管理与优化

餐厅老板每月会看三张表:出菜时间记录、顾客投诉数量、免单金额。对应SLA报告、错误预算和赔偿机制,目的是找出承诺和现实之间的差距,持续优化。

SLA报告定期汇总SLO达成率;错误预算可视化地告诉团队“这个月还能容忍多少次失败”;若突破SLA,则触发赔偿机制。更重要的是,内部据此调整SLO、架构或资源策略,形成闭环。

错误预算消耗是优化的重要输入。公式:

承诺不是一成不变的菜单,每月复盘后既敢承诺更实的SLA,也能把厨房经营得更好。

EB消耗=1−SLI实际1−SLO目标\displaystyle EB_{消耗} = \frac{1 - SLI_{实际}}{1 - SLO_{目标}}
比值超过100%,说明错误预算已耗尽,应冻结高风险变更、优先恢复稳定性。
  1. 1-SLI_实际实际不可用或失败比例,越小越好。
    1−0.9995=0.0005\displaystyle 1 - 0.9995 = 0.0005
  2. 1-SLO_目标SLO允许的最大失败比例,是“错误预算”。
    1−0.999=0.001\displaystyle 1 - 0.999 = 0.001
  3. 相除看已经用了多少预算。
    0.00050.001=0.5\displaystyle \frac{0.0005}{0.001} = 0.5
  4. 阈值达到100%就是赤字,需采取措施。
    EB消耗<1⇒预算充足\displaystyle EB_{消耗} < 1 \Rightarrow 预算充足

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 演示

python40 行
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())
目的:用滑动窗口实时计算AI推理服务的SLO达标率与P99延迟,帮助工程师快速判断SLA是否处于健康状态。
  1. self.window_lat = deque(maxlen=window_size)固定容量滑窗,自动丢弃最旧记录。
  2. self.slo_threshold = slo_threshold保存SLO延迟阈值,用于判断请求是否达标。
  3. ok = sum(1 for lat in self.window_lat if lat <= self.slo_threshold)统计窗口内不超过阈值的请求数。
  4. n = max(1, int(len(self.window_lat) * 0.99))计算样本数量的99%位置索引。
  5. return ok / len(self.window_lat) * 100将达标比例换算成百分率。
  6. self.record(random.gauss(180, 60))生成模拟延迟数据,均值180ms、标准差60ms。
  7. 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代表什么?

单选题 · easy

  • A.Agreement← 正确答案
  • B.Architecture
  • C.Application
  • D.Automation

答案:A。SLA全称Service Level Agreement,A代表Agreement(协议)。SLA是服务提供方与用户之间的正式契约,定义质量承诺、测量方式和赔偿条款。

Q2. 以下哪项最适合衡量AI推理服务的延迟体验?

单选题 · easy

  • A.平均延迟
  • B.P99延迟← 正确答案
  • C.最小延迟
  • D.标准差

答案:B。平均延迟会被少量极快请求拉低,掩盖长尾。P99表示99%请求都低于该值,能反映最差情况中的可接受边界,更适合SLO设定。

Q3. 错误预算的主要作用是什么?

单选题 · easy

  • A.控制发布节奏← 正确答案
  • B.增加缓存
  • C.决定模型参数
  • D.计算赔偿金

答案:A。错误预算=1-SLO,它告诉团队“还能容忍多少失败”。预算耗尽时应暂停高风险变更,优先恢复稳定性,因此主要用于控制发布与变更节奏。

Q4. 若SLO要求99.9%可用性,30天内允许的不可用时间约为?

单选题 · mid

  • 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维度?

单选题 · mid

  • A.可用性← 正确答案
  • B.精确率
  • C.召回率
  • D.训练速度

答案:A。多副本和负载均衡通过分散流量、避免单点故障,提升系统整体可用性。精确率、召回率是模型质量指标,训练速度与在线推理SLO无关。

Q6. 推理服务的原始SLI数据通常来自哪里?

单选题 · mid

  • A.服务端请求日志← 正确答案
  • B.用户访谈记录
  • C.产品需求文档
  • D.销售预测模型

答案:A。SLI是对真实服务行为的测量,数据来源是服务端埋点和请求日志,记录每次调用的耗时、状态码和返回结果,而不是访谈或文档。

Q7. 某服务SLO为99.9%,当前SLI为99.95%,错误预算消耗比例约?

单选题 · hard

  • A.50%← 正确答案
  • B.25%
  • C.10%
  • D.5%

答案:A。错误预算消耗=(1-SLI)/(1-SLO)=(0.05%)/(0.1%)=50%。说明这个月已经用掉一半允许的失败额度,剩余预算不多了。

Q8. 哪些手段可以有效降低AI推理服务的延迟SLO?

多选题 · mid

  • A.模型量化压缩← 正确答案
  • B.增加缓存命中← 正确答案
  • C.无限次重试
  • D.批处理加速← 正确答案

答案:ABD。模型量化能减少计算量,缓存命中避免重复推理,批处理提升GPU利用率,三者都能降低延迟。无限次重试会放大流量、加剧拥塞,反而破坏SLO。

Q9. 在SLA层级划分中,下列哪些层级会被纳入整体SLA计算?

多选题 · hard

  • A.业务层← 正确答案
  • B.服务层← 正确答案
  • C.宣传层
  • D.基础设施层← 正确答案

答案:ABD。端到端SLA由业务层、服务层、基础设施层串联决定,每层可用性相乘得到整体值。宣传层不是技术SLA概念,不应纳入计算。

Q10. 关于SLO、SLI和错误预算,下列说法正确的有?

多选题 · extreme

  • A.只要SLI达标即代表SLA履约
  • B.错误预算耗尽后应暂停高风险变更← 正确答案
  • C.P99达标不代表所有请求延迟达标← 正确答案
  • D.SLO越严格成本越低

答案:BC。SLI达标是SLA履约的必要条件,但不是充分条件,还需满足测量口径和赔偿条款。错误预算耗尽说明风险过高应冻结变更。P99只约束99%请求,剩余1%可能很慢。SLO越严格通常成本越高,D错误。