试验两个展览价格预览

ShellBeginner
立即练习

介绍

APERTURE 希望门票包含新的语音导览。在向所有访客提供之前,先让少量合成访客体验每个预览版本。你将配置真实 Nginx 路由,按版本比较价格,停止错误预览并推广正确预览。

只需基本终端经验;本实验会介绍 HTTP 和代理配置。Workstation 提供准备好的工具;Gallery 是访客网站。所有服务运行在同一主机上。这些是训练请求,没有支付或真实访客。本课关注部分上线期间的决策,不是发布前测试门禁,也不承诺零停机。文档已本地化,网站和实际界面标签仍为英文。

将少量流量发送到预览版本

本步骤从 Gallery 开始。打开 Explore the exhibition,然后打开 Choose tickets。正常组合是两名成人和两名儿童。选择 Calculate price:成人 £18、儿童 £6,因此 £48 正确。新语音导览不得额外收费。打开 Visit 并下载参观指南,再通过 APERTURE 返回首页。

切换到 Workstation。pwd 显示当前目录;cat 显示提供的文件:

pwd
/home/labex/project/exhibit
cat price-sheet.txt

HTTP 请求向服务器请求一个 URL;响应包含状态和内容。200 表示请求成功,并不表示价格正确。代理接收公开请求,再转发给一个上游,即三个应用版本之一。127.0.0.1 表示本机;端口标识一个服务。访客通过端口 8081 访问 Nginx;9001、9002、9003 分别对应 classic、preview-a、preview-b。

只编辑 upstream.conf。每条 Nginx server 行指定一个上游。weight=4 对比 weight=1 会让预览大约收到五分之一请求,并不保证相同比例的访客。分号结束一条指令。下面的 here-document 替换整个文件;带引号的 NGINX 保持文本原样。粘贴到最后一行 NGINX 为止:

cat > upstream.conf <<'NGINX'
server 127.0.0.1:9001 weight=4;
server 127.0.0.1:9002 weight=1;
NGINX

提供的应用助手验证这些行,将其复制到原生 Nginx 配置并重新加载。sudo 授予修改此服务的权限。助手不判断价格,也不选择版本:

sudo python3 /opt/labex/exhibit/route.py

应看到 Applied native Nginx upstream: 和你写的两行。语法被拒绝时,先前路由继续生效:修正文件后重新应用。

python3 运行准备好的客户端。sample 通过端口 8081 发送 80 个独立请求,不进行重试,并按版本显示实际价格:

python3 traffic.py sample

确认存在 classic 和 preview-a,且各有至少五次响应。数量可能变化;任一版本样本过少时重新运行。每次运行有新的窗口 ID;不要跨路由变更合并窗口。HTTP 错误会直接显示。若发生错误,重新应用保存的路由并测量新窗口,不要把不完整窗口当作证据。现在少量请求已经到达预览版本,下一步将根据业务结果作决定。

停止错误价格试验

本步骤留在 Workstation,读取上一次样本。classic 返回 [48];preview-a 返回 [60],且 Wrong price 数量非零。两者的 HTTP 请求都成功了。只比较合并平均值会掩盖哪些访客被多收费。输出中的 Prices GBP 列出了每个版本实际出现过的不同总价。

业务要求是 £48,导览不加价。停止该候选。用一行替换上游列表以仅选择 classic,应用后测量新窗口:

cat > upstream.conf <<'NGINX'
server 127.0.0.1:9001 weight=1;
NGINX
sudo python3 /opt/labex/exhibit/route.py
python3 traffic.py sample

应只有 classic、80 次响应、[48],错误价格和请求错误均为零。仅保存文件不会切换流量。应用后的新窗口证明旧版本确实重新处理了请求。

切换到 Gallery,打开 Tickets 并计算家庭价格,应为 £48。在混合试验期间刷新,每次请求都可能选择另一版本;本练习没有访客粘性会话。代理禁用上游重试并关闭连接,不会悄悄用成功的 classic 响应替换失败的预览响应。真实系统需要明确设计会话和重试策略。

返回 Workstation。错误试验已停止,但永远保留 classic 无法交付新导览。接下来评估另一个预览。

推广正确的导览预览

本步骤从 Workstation 开始。在考虑推广前,让 preview-b 接受同样有限的流量:

cat > upstream.conf <<'NGINX'
server 127.0.0.1:9001 weight=4;
server 127.0.0.1:9003 weight=1;
NGINX
sudo python3 /opt/labex/exhibit/route.py
python3 traffic.py sample

两个版本必须各有至少五次响应,均显示 [48],错误价格和请求错误都为零。这个有限试验支持继续推进,但不能证明所有真实工作负载都安全。网站、导览和其他访客组合也很重要。

将正确预览设为唯一上游来推广它,然后应用并再次采样:

cat > upstream.conf <<'NGINX'
server 127.0.0.1:9003 weight=1;
NGINX
sudo python3 /opt/labex/exhibit/route.py
python3 traffic.py sample

应只有 preview-b、80 次响应和 [48]。若使用了错误端口,恢复前面的混合配置,应用并重新比较,再推广正确版本。不要修改价格或提供的程序来制造成功。

切换到 Gallery 并返回首页。打开 Explore the exhibition,现在应介绍包含在门票内的语音导览。打开 Choose tickets,先计算两成人两儿童的 £48,再计算一成人零儿童的 £18。进入 Visit 并下载真实指南。推广后必须保留完整访客体验;版本标签或绿色检查本身不够。评分读取已有请求事实和真实价格,不会替你切换路由。

推广后的预览保持家庭总价 £48

总结

你使用真实加权路由让少量请求体验预览,按版本区分业务价格,停止错误试验并推广正确预览。独立窗口和可见失败让决策依据真实流量。小规模训练样本支持本练习的决策,并不能证明生产可靠性或零停机。