想象你是一座繁华都市的交通管理局局长。每天有成千上万的车辆(用户请求)在城市中穿梭,要找到正确的目的地(后端服务)。如果没有红绿灯、没有路牌、没有交警指挥,城市会怎样?车辆乱窜、堵成一锅粥、事故频发。而在微服务的世界里,各个服务之间的调用请求就像这些车辆,Service Mesh 就是那座城市的交通指挥中心——它不造车、不拉货、不改建楼房,只是在每条路口默默竖起红绿灯、挂上路牌、派出交警。今天,我们就走进这座“指挥中心”,看看路由、灰度发布、镜像流量和 A/B 测试这四位“交通警官”是如何各司其职,让整个城市的车流井然有序的。
掌握 Service Mesh 流量治理,你就掌握了微服务架构的“交通调度权”——这是云原生时代后端工程师与 SRE 的核心竞争力,也是大厂架构面试的高频考点。
可视化演示
展示VirtualService路由匹配分发、金丝雀灰度渐进扩量,以及A/B测试用户分流到对照组与实验组的数据驱动实验。
本节配有交互动效(进入视口后自动加载,约 3KB)。
VirtualService路由 按匹配条件路由到目标服务 match→route 支持HTTP/TCP/gRPC协议定义匹配与路由动作。
流量路由
交通指挥中心最基础的工作,就是在每个路口竖起清晰的路牌和红绿灯。想象你开车去一个从未去过的新商场,导航告诉你:前方路口左转、再右转、直行 500 米到达。这个导航的过程,就是“路由”——它决定了每一辆车从出发点到目的地该走哪条路。
在 Service Mesh 中,路由的逻辑被抽象成了两个核心的“交通管理文件”。第一个叫 VirtualService(虚拟服务),它像一张城市的交通导流图,定义了“什么样的车流走哪条路”。比如,我们可以规定:所有带有“VIP 用户”标签的请求,优先被导向新版本服务;而普通用户的请求,仍然走老版本。第二个叫 DestinationRule(目标规则),它像是路口的车道规划——在这个目的地服务内部,请求应该被分发到哪些具体实例上,以及这些实例之间如何做负载均衡。
路由的动态性是最迷人的地方。传统架构里,服务的调用关系是写死在代码里的“死路”,每次调整都要重新发布代码,就像城市要改一条路就得把整条街拆了重建。而 Service Mesh 的路由规则是通过配置动态下发的,数据面板上的代理(如 Envoy)几百毫秒内就能收到新规则。这就像是交通指挥中心通过广播实时调整信号灯,不需要封路,所有车辆自然就按新路线行走了。
核心概念:权重路由——将流量按百分比分配给不同版本的服务实例。比如 90% 的请求走 V1 版本,10% 走 V2 版本:
这种动态路由的威力,在“灰度发布”中体现得淋漓尽致——车辆不会一夜之间全部涌向一条新修的路,而是先派几辆“侦察车”试探路况。
- 分子
w_i表示第 i 个服务版本被赋予的权重值。权重越大,拿到流量的机会越多,就像路口给主路分配的绿灯时间更长。 - 分母求和累加把所有参与路由的服务版本的权重加总,得到权重池的总量。这相当于统计了路口所有方向绿灯时间的总和。
- 比值计算概率单个权重除以总权重,得到的就是该服务版本的分流百分比。比如 V1 权重 90、V2 权重 10,则 V1 获得 90% 流量。
灰度发布
十九世纪的英国煤矿工人下井采煤前,会先带一只金丝雀进矿洞。这种小鸟对瓦斯极其敏感,只要空气中有微量毒气,它就会停止鸣叫甚至死亡。矿工看到金丝雀状态异常,就知道危险临近,赶紧撤人。这就是“金丝雀发布”名称的由来——新版本服务就像那只金丝雀,先放少量流量进去试探,发现异常立即撤回。
灰度发布的核心思想,就是“渐进式放量”。假设你的系统有 100 个实例正在运行 V1 版本,现在要上线 V2。如果一次性全部切换,一旦 V2 有隐藏 Bug,用户体验会被瞬间击穿。而灰度发布的流程是:先部署 1 个 V2 实例,把 1% 的流量导给它;观察十几分钟,如果指标正常(错误率没涨、延迟没升),就扩大到 5%、10%、30%、50%,直到 100% 完成切换。每一段都像矿工观察金丝雀的鸣叫状态后再决定是否继续深入。
版本切换的平滑性至关重要。在传统架构中,上线一个版本往往需要停机,导致用户请求失败。而 Service Mesh 的灰度发布能做到“无缝切换”,因为流量路由是动态调整的,V1 和 V2 同时在线,新版本在替换旧版本的过程中,请求始终得到响应。同时,健康检查机制像一位尽职的哨兵,持续监测 V2 实例的健康状态——如果发现连续多次心跳检测失败,控制面会自动将流量切回 V1,这就是“自动回滚”。
核心概念:渐进式流量切换——灰度发布中,新版本的流量占比是逐步提升的,每次提升后都有一段时间用于观察系统状态:
灰度发布让我们能安全地“小步快跑”,而接下来这位“镜像流量”警官更是把安全性推向了极致——它连一点生产流量都不用“污染”,就能提前考察新版本的表现。
- 初始占比
R_0灰度开始时分配给新版本的初始流量比例,通常很小(如 1%-5%)。就像金丝雀先被放进矿洞探路。 - 放量速率
\alpha单位时间内流量的增长速度,它决定了灰度多快完成。α 越大,放量越快,风险也越高。 - 时间增量
\Delta t两次放量决策之间的间隔时间。每经过一个 Δt,流量占比就增加 α×Δt。观察充分了才继续加大油门。
镜像流量
你有没有见过医院里的“实习医生跟诊”?实习医生不直接给病人开药,而是站在主治医生旁边,看着主治医生怎么诊断、怎么开处方,自己在小本子上记下“如果是我,我会怎么处理”。整个过程不碰真正的病人,却积累了大量宝贵的临床经验。镜像流量就是这么一位“实习医生”。
镜像流量(Mirroring)的机制是:把发往生产环境服务的真实请求,复制一份发送给另一个服务(通常是新版本),但新版本的处理结果不会被返回给用户。用户始终只跟老版本交互,感受不到任何变化;而新版本则在“后台”默默处理同样的请求,产出的日志、指标、异常信息都能被记录下来,供开发和测试人员分析。这就像实习医生在旁观摩,不接手病人,但学习了一切。
这种“旁路”方式能解决生产环境排障的经典痛点。你遇到一个只在生产环境才出现的 Bug,怎么复现?在测试环境拼命造数据,怎么都复现不出来。有了镜像流量,你可以把生产请求复制到新版本或者带调试工具的服务上,让 Bug 在真实流量下“现身”。同时,镜像流量还能用于性能压测——在不影响线上用户体验的前提下,让新版本用真实流量跑一跑,看看它的极限在哪里。
核心概念:流量复制——镜像流量的核心操作,将原始请求复制一份发给目标服务:
镜像流量帮我们“不动声色”地考察新版本,但考察完之后,到底要不要采用新版本?这需要一场更严谨、更科学的实验——A/B 测试。
- 原始请求
r_{\text{original}}用户真实发起的请求,它走正常的生产链路,用户无感知。这是主路上正常行驶的车辆。 - 副本请求
r_{\text{copy}}由数据面代理(Envoy)自动复制的请求,内容与原始请求完全一致,但流向镜像服务。这是那辆默默跟随的“隐形车”。 - 分支结构一条请求变两条路,但只有原始请求的结果会返回给用户,镜像请求的结果被丢弃。体现了“旁路观测、不影响主链路”的核心思想。
A/B 测试
想象你是连锁奶茶店的老板,研发部推出了一个“新配方”,据说能让奶茶更好喝。你有两个选择:直接全部门店换新配方(风险大,万一顾客不爱喝就砸了招牌),或者先在几家门店试点(但还是不够严谨,因为门店的地段、客流量差异会干扰判断)。科学的做法是:把同一家门店的顾客随机分成两组,一组喝新配方、一组喝老配方,然后用顾客的满意度评分、复购率来对比哪个配方更胜一筹。这就是 A/B 测试。
A/B 测试与灰度发布的最大区别在于:灰度发布关注的是“系统稳定性”(新版本有没有 Bug、会不会挂),而 A/B 测试关注的是“业务效果”(新功能真的带来了更好的用户转化吗)。灰度发布的指标是技术指标(错误率、延迟、CPU 使用率),A/B 测试的指标是业务指标(点击率、转化率、留存率)。这就像一个是看“车子跑得顺不顺”,一个是看“乘客满不满意”。
在 Service Mesh 中实现 A/B 测试,核心机制还是路由。你可以告诉路由规则:把携带“实验组”标识(比如特定 Cookie 或 Header)的请求导流到 V2(新功能版本),其余流量走 V1(旧版本)。然后通过数据采集系统分别统计两个版本下的业务指标,用统计学方法判断差异是否显著。当实验组的数据显著优于对照组时,你就有底气做全量发布了。
核心概念:显著性检验——A/B 测试判断两个版本差异是否可信的核心方法,常用双样本 Z 检验:
路由、灰度、镜像、A/B 测试这四位“警官”虽然职责各异,但她们都在同一个指挥系统下协同工作。接下来我们看看这套指挥系统本身是如何搭建的。
- 均值差
\bar{x}_A - \bar{x}_B实验组和对照组业务指标的平均值之差。差值越大,说明两个版本的效果差异越明显。 - 方差除以样本量衡量每组均值估计的不确定性。样本量越大、方差越小,这个值越小,说明均值的估计越可靠。
- 整体标准化把均值差除以标准误,得到 Z 值。当 |Z| > 1.96 时,说明差异有 95% 以上的把握是真实的。
治理模型
如果说流量治理是交通指挥中心的各项业务,那么 VirtualService、DestinationRule 这些概念就是指挥中心里的各种规章制度和工具。没有这些工具,交警们只能赤手空拳上街,效率低下且混乱。
在 Istio(最流行的 Service Mesh 实现)中,流量治理模型由两个关键的配置资源构成。VirtualService 是“路由规则书”,它定义了流量在服务间如何流转。你可以把 VirtualService 想象成一张城市交通导流图,上面标注着:哪条路的车流需要分流、哪条路的车流需要绕行。DestinationRule 则是“目的地管理细则”,它定义了流量到达某个服务之后,如何进一步分配给该服务的不同实例子集。两者配合使用,就像“先看导流图决定走哪条大路,再看路口指示牌决定停在哪条车道”。
从整个架构来看,Service Mesh 分为控制面(Control Plane)和数据面(Data Plane)两层。控制面是“指挥中心的大脑”,负责管理、配置、下发各种路由规则;数据面是“路上的每一个交警”,由一组轻量级代理(如 Envoy)组成。它们部署在每个服务实例旁边(sidecar 模式),拦截所有进出的网络流量,并按照控制面下发的规则执行路由、灰度、镜像等操作。
核心概念:VirtualService 路由规则——一条典型的 VirtualService 配置,其路由匹配逻辑可以抽象为:
理解了治理模型的框架,最后我们来总结一下,真正的生产环境里,这些工具应该如何得心应手地使用。
- 请求特征
\text{header.match}路由决策的依据,可以是请求头、URL 路径、来源 IP 等。比如 "User-Agent: iPhone" 代表移动端请求。 - 匹配规则与目标子集每个条件对应一个目标子集。条件按顺序自上而下匹配,命中的条件就决定流量去向。
- 默认兜底所有条件都不满足时,流量走向默认子集,保证任何请求都有明确去处,不会“迷失”在服务网格中。
实践要点
掌握了各种流量治理的能力,就像拿到了城市交通系统的所有钥匙。但要成为一个优秀的“交通管理局局长”,还必须懂得一些实战要领——什么该做、什么不该做、什么时候该踩油门、什么时候该踩刹车。
第一条要领是“可观测性先行”。想象一下,如果你是一个交警,但你不知道哪里堵车、哪里事故、哪条路车流多大,你怎么指挥交通?管控台上一片漆黑,任何调控都是盲目的。所以,在实施任何流量治理策略之前,先确保你的系统具备完善的监控体系——请求量、错误率、延迟这些黄金指标要实时可见,链路追踪要能追到每一次调用的完整路径。有了这些“眼睛”,你才能在灰度发布时看清新版本的表现,在 A/B 测试时拿到可靠的对比数据。
第二条要领是“小流量渐进验证”。城市里新开了一个路口,正常来说绝不会立刻把所有车辆都赶过去,而是先让一小部分车试走。灰度发布和 A/B 测试都应遵循这个原则:先放 1% 的流量,观察无误后扩到 10%,再逐步到 50%、100%。每一步都比上一步有更充分的信心。同时,所有操作都要预设“回滚按钮”——一旦发现问题,能在一分钟内切回旧版本。自动化运维(如 Argo Rollouts 配合 CI/CD)能把这种渐进式发布和自动回滚固化到流水线里,避免人工操作的失误。
第三条要领是“流量治理即产品能力”。流量治理不只是运维工具,更是产品迭代的加速器。镜像流量让开发人员能安全地在生产环境复现 Bug;A/B 测试让产品经理能用数据而非直觉做决策;灰度发布让新功能小步快跑、快速试错。把这些能力沉淀为平台服务,整个研发团队的迭代效率都会有质的飞跃。
AI 应用场景
电商大促期间的流量路由与灰度发布
阶段:模型上线与 A/B 测试(需要新版本服务安全上线,对比新旧模型的业务效果)
解决的问题:电商平台在大促期间使用推荐算法模型,每次模型更新都面临巨大风险。传统方式直接全量上线新模型,一旦效果不达预期,可能导致推荐点击率骤降,直接损失 GMV。通过 Service Mesh 的灰度发布,新推荐模型先接收 1% 流量,实时对比点击率、转化率,确认正向效果后再逐步放量;通过镜像流量,可以把真实用户请求同步复制给新模型算“影子打分”,在不影响线上推荐结果的前提下验证新模型的行为是否符合预期。
具体案例:某头部电商平台将推荐模型从 V3 升级到 V4 时,先通过 Istio 配置权重路由,让 5% 的用户请求命中新模型集群;观测 30 分钟后点击率提升 2.3%、响应延迟无显著变化,于是逐步放量至 100%。全程用户无感知,其中出现过一次新模型在特定品类商品上的异常打分,健康检查发现后自动回滚,避免了亿元级损失。
金融系统的 A/B 测试与风控策略迭代
阶段:模型效果评估与决策(用 A/B 测试科学评估新模型是否优于旧模型)
解决的问题:银行的智能风控系统需要频繁更新反欺诈模型,但误杀率每提高 0.1%,就可能影响数十万正常用户的交易体验。传统评估方式在离线数据集上做评测,但离线指标与线上真实表现存在偏差。通过 Service Mesh 的 A/B 测试能力,将用户流量按实验组和对照组划分,同一笔交易同时经过新旧两个风控模型评分,对比两组的误杀率和拦截率,用统计学方法(如 Z 检验)确认新模型显著更优后才全量切换。
具体案例:某股份制银行通过 Istio 的 Header 路由,将 20% 的交易请求打上“新版模型”标签,其余 80% 走旧模型。运行一周后采集数据,新模型欺诈拦截率提升 15%,误杀率下降 8%,Z 检验 p 值小于 0.01,结论可靠后完成全量切换。
Python 演示
"""Service Mesh 流量治理模拟:路由、灰度、镜像、A/B 测试的核心逻辑。"""import randomfrom dataclasses import dataclass, field @dataclassclass Request: user_id: int path: str header: dict = field(default_factory=dict) class TrafficRouter: """模拟 Service Mesh 中的 VirtualService + DestinationRule 流量调度。""" def __init__(self): self.weights = {"v1": 90, "v2": 10} self.gray_active = False self.mirror_target = None self.mirror_ratio = 0.0 self.ab_enabled = False self.ab_ratio = 0.5 self.stats = {"v1": 0, "v2": 0} self.mirror_log = [] self.ab_results = {"control": 0, "experiment": 0} def set_gray(self, v1_weight: int, v2_weight: int) -> None: """设置灰度分流权重。""" self.weights = {"v1": v1_weight, "v2": v2_weight} def set_mirror(self, target: str, ratio: float) -> None: """设置镜像流量目标和比例。""" self.mirror_target = target self.mirror_ratio = ratio def set_ab(self, enabled: bool, ratio: float = 0.5) -> None: """开关 A/B 测试并设置实验组流量占比。""" self.ab_enabled = enabled self.ab_ratio = ratio def _pick_version(self, req: Request) -> str: """根据权重或 A/B 分组决定请求流向哪个版本。""" if self.ab_enabled: group = "experiment" if random.random() < self.ab_ratio else "control" self.ab_results[group] += 1 if group == "control": return "v1" return "v2" r = random.random() * 100 if r < self.weights["v1"]: return "v1" return "v2" def route(self, req: Request) -> str: """路由入口:分流 + 镜像策略执行。""" version = self._pick_version(req) self.stats[version] += 1 if (self.mirror_target and version == "v1" and random.random() < self.mirror_ratio): self.mirror_log.append({"request": req.user_id, "mirror_to": self.mirror_target}) return f"Request {req.user_id} -> {version}" def simulate() -> None: """模拟 1000 个请求在灰度 + 镜像 + A/B 模式下的流量分布。""" router = TrafficRouter() router.set_gray(95, 5) router.set_mirror("v2-shadow", 0.3) router.set_ab(False) for i in range(1000): req = Request(user_id=i, path="/api/recommend", header={"x-user-level": "vip" if i % 10 == 0 else "normal"}) router.route(req) print("灰度模式分布:", router.stats, "镜像次数:", len(router.mirror_log)) router2 = TrafficRouter() router2.set_ab(True, 0.3) for i in range(1000): req = Request(user_id=i, path="/api/pay") router2.route(req) print("AB 测试分组:", router2.ab_results) if __name__ == "__main__": simulate()
class TrafficRouter用路由器类模拟 Service Mesh 的控制面,统一管理权重、镜像和 A/B 配置。self.weights = {"v1": 90, "v2": 10}定义灰度分流的权重字典,V1 获得 90% 流量,V2 获得 10%。def _pick_version(self, req)核心路由决策函数,模拟 VirtualService 根据权重或实验分组选择目标版本。group = "experiment" if random.random() < self.ab_ratio else "control"用随机数实现按比例分组,模拟 A/B 测试的流量配额。if self.mirror_target and version == "v1"只有当请求流向 V1 时才可能触发镜像复制,模拟镜像流量的旁路特性。self.mirror_log.append(...)把被镜像的请求记录下来,模拟“不影响主链路、只做观测”的行为。router.set_gray(95, 5)调用方法设置灰度权重,对应生产环境中的 Istio VirtualService 权重配置。
常见误区
误区“灰度发布和 A/B 测试不是一回事吗?都是先让一部分用户用新版本,然后看效果决定要不要全量。”我总觉得这两个概念没什么本质区别。
正解它们的目的不同。灰度发布是“先试后放”的稳定性保障机制,观察的是技术指标(错误率、延迟、CPU),回答“新版本会不会挂”;A/B 测试是“科学实验”的业务决策机制,观察的是业务指标(转化率、留存、营收),回答“新版本是不是更好”。金丝雀进矿洞是为了测有没有瓦斯(安全),而 A/B 测试是让两组顾客试喝奶茶(口味),目的完全不同。
为何常见:两者都涉及“流量分割”和“小范围验证”,形式上确实很像。但如果不区分技术验证与业务实验,就无法正确设计指标,导致上线了不稳定的版本或错过了真正有效的功能。
误区“镜像流量就是把请求复制一份发给新版本,新版本处理的响应用户也能看到吧?不然这个功能有什么意义?”
正解镜像流量的关键设计恰恰是“影子响应”——镜像请求的结果会被丢弃,不返回给用户。用户全程只与原始服务交互,完全无感知。新版本只是“偷听”真实流量,把日志和指标留下来供分析。这就像实习医生只跟诊记录,绝不给病人开药。如果镜像响应也被返回,就会导致多次计费、订单重复等严重问题。
为何常见:凭直觉理解“复制请求”时,容易把复制理解成“双份完整的处理”,忽略了 Service Mesh 在数据面代理层就把镜像响应拦截丢弃了。
误区“服务出问题了,回滚不就是把代码恢复到上一个版本重新部署一次吗?”
正解在 Service Mesh 中,回滚不需要改代码、不需要重新构建镜像、不需要重新部署,只需要把路由权重改回去——将 V2 的权重从 50% 调回 0%,V1 的权重恢复到 100%。这个操作是配置层面的,秒级生效。就像交通指挥中心发现某条路修得有问题,直接改红绿灯让车流改道,不用把路拆掉重修。真正的代码级回滚(重新部署旧版本)在云原生实践中只是次优选择,配置级回滚才是常态。
为何常见:传统的发布流程中,“回滚 = 重部署旧代码”是固化思维。而 Service Mesh 将“路由”与“部署”解耦,让回滚变成了一次规则调整,这正是初学者最需要建立的架构直觉。
误区“A/B 测试结果显示 B 组点击率比 A 组高了 10%,那不用犹豫了,全量上 B 版本吧!”
正解A/B 测试的显著性不仅仅是“均值高多少”,还要看统计显著性(p 值或 Z 值)。样本量不足时,10% 的差异完全可能是随机波动。这就好比你只问了 10 个顾客,其中 6 个说新配方好喝,就断定新配方更好——样本太小,结论不可靠。正确的做法是计算 Z 检验(如前文公式),当 |Z| > 1.96 时(对应 95% 置信水平)才认为差异显著。同时还要关注业务指标的长期影响,避免被短期波动误导。
为何常见:直觉上,差异越大越可信是人之常情。但统计学告诉我们,样本量和方差同样关键。初学者容易忽略“显著性检验”这一步,直接拿均值差说话。
面试题
Q1. 在 Service Mesh 中,VirtualService 的核心职责是什么?
- A.定义目标服务的实例子集
- B.定义流量路由规则← 正确答案
- C.负责服务间的数据加密
- D.存储用户的请求日志
答案:B。VirtualService 是流量路由规则的载体,定义“什么流量走哪条路”,好比交通导流图。DestinationRule 才负责定义目标服务的子集(A),数据加密和日志存储不是 VirtualService 的功能。
Q2. 灰度发布为什么从 1% 的小流量开始?
- A.因为新版本实例资源有限,支撑不了大流量
- B.为了在真实流量下验证新版本稳定性,控制爆炸半径← 正确答案
- C.因为小流量下性能测试结果更准确
- D.为了满足网络安全法规的合规要求
答案:B。灰度发布的核心思想是用小流量试探新版本,就像矿工带金丝雀下井——先确认安全再深入。即使新版本有严重 Bug,最多影响 1% 的用户,风险可控。其他选项都不是灰度的设计初衷。
Q3. 镜像流量的响应会被返回给用户吗?
- A.会,用户会收到两份响应
- B.不会,镜像响应会被数据面代理丢弃← 正确答案
- C.会,但只有一份是随机选择的
- D.不会,但用户能感知到请求被复制的延迟
答案:B。镜像流量是“旁路观测”——原始请求照常处理并返回结果,副本请求处理后的响应被丢弃,用户完全无感知。这就像实习医生跟诊但绝不给病人开药,病人只见主治医生。
Q4. 关于灰度发布与 A/B 测试的区别,下列说法正确的是?
- A.灰度发布看业务指标,A/B 测试看技术指标
- B.二者没有区别,都是流量分割
- C.灰度发布看技术指标,A/B 测试看业务指标← 正确答案
- D.灰度发布只用于微服务,A/B 测试只用于单体应用
答案:C。灰度发布关注系统稳定性,观察错误率、延迟等技术指标;A/B 测试关注业务效果,观察转化率、留存等业务指标。金丝雀测的是“矿洞安不安全”,奶茶试喝问的是“好不好喝”,衡量标准完全不同。
Q5. 在 Service Mesh 中,将 V2 版本的权重从 50% 调回 0% 属于什么操作?
- A.代码回滚
- B.配置级回滚← 正确答案
- C.数据库迁移
- D.服务重启
答案:B。这就是配置级回滚——只改路由规则,不重新部署代码,秒级生效。好比交通指挥中心改信号灯让车流改道,不用拆路重建。这是 Service Mesh 相比传统发布的巨大优势。
Q6. 以下哪些策略属于 Service Mesh 流量治理的范畴?
- A.按请求头路由← 正确答案
- B.按权重比例分流← 正确答案
- C.镜像流量复制← 正确答案
- D.数据库读写分离
答案:ABC。按请求头路由、权重分流、镜像流量都是 Service Mesh 中 VirtualService/DestinationRule 提供的流量治理能力。数据库读写分离属于数据层的架构设计,不在 Service Mesh 流量治理的范畴内。
Q7. 关于 A/B 测试中 Z 检验的公式,下列说法正确的是?
- A.Z 值越大,说明两组均值差异越可能是真实差异← 正确答案
- B.样本量越大,Z 值越容易变得显著← 正确答案
- C.|Z| < 1.96 时,通常认为差异显著
- D.方差越大,Z 值越大
答案:AB。Z 值是均值差除以标准误,Z 越大差异越可信;样本量 n 在分母上,n 增大使标准误减小,Z 值增大,所以 B 对。|Z| > 1.96 才算显著(C 反了);方差在分子上,方差越大标准误越大,Z 值反而越小(D 反了)。
Q8. 在 Istio 的治理模型中,控制面和数据面分别承担什么职责?
- A.控制面执行请求转发,数据面下发配置
- B.控制面下发配置,数据面执行请求转发← 正确答案
- C.两者都负责请求转发,分工冗余
- D.控制面处理业务逻辑,数据面处理数据存储
答案:B。控制面是“指挥中心的大脑”——负责管理配置、下发路由规则;数据面是“路上交警”——由 Envoy 等代理组成,负责拦截和转发流量,执行控制面下发的规则。两者各司其职,构成 Service Mesh 的核心架构。
Q9. 镜像流量的典型应用场景包括哪些?
- A.在生产环境复现难以定位的 Bug← 正确答案
- B.用真实流量对新版本进行性能压测← 正确答案
- C.将用户请求结果直接返回给用户
- D.验证新版本的行为是否符合预期← 正确答案
答案:ABD。镜像流量把生产请求复制一份发给新版本,让新版本在真实流量下“实践”,用于复现 Bug、性能验证、行为比对。但镜像响应会被丢弃,绝不返回给用户(C 错误),因为它只是“实习医生”而非“主治医生”。
Q10. 灰度发布中,渐进式放量的核心目的不包括以下哪项?
- A.每阶段观察系统稳定性指标
- B.出现异常时快速回滚缩小影响面
- C.提高最终版本的运行速度← 正确答案
- D.逐步积累新版本在真实流量下的信心
答案:C。渐进式放量是为了“边放边看”,每步验证稳定性和业务指标再继续放量;一旦异常立即回滚,控制爆炸半径。灰度本身不会提高版本的运行速度(C),版本性能取决于代码质量与资源分配,与放量节奏无关。