hellojl
213 天前
需要解决的问题都是如何小批量的验证新功能。
灰度部署和金丝雀部署通常存在新旧或者 A/B 版本,通过逐渐放量到新版本上,验证上线、新功能是否 OK ,需要基础设施的支持。而在部署两个版本的情况下,通常对基础设施要求会更高一些,比如如何实现上述的按比例 CD 的功能。另外一个隐藏的问题是,对于流量的控制不在程序本身,一个请求访问新 or 旧版本,需要由上游的调用方确定,实际中上游可能是 Nginx 、网关或者另一个服务,需要适配的会比较多一些,对于一些请求链路比较长的服务不是很友好。
后续有一些公司尝试了名为 Dark Launching 的方案,也就是 Feature Flag 功能开关。好处是可以在一个服务内实现更细粒度的请求控制,对于上下游调用、CI/CD 也很友好,因为对于外部来看这个服务只存在一个版本,实际新旧是由服务内部类似 if/else 的逻辑控制的。缺点就是对代码有入侵,功能正式上线后可能还需要去掉 Feature Flag 相关的代码,虽然一些主流的库不去掉也机会没有性能影响。
个人使用体验来看,更倾向功能开关的方案。虽然功能开关的方案对代码有入侵,增加代码复杂度,但是整体上看增加的内容不多,而且在代码层都能控制。无论是灰度发布还是金丝雀发布,在基础设施层引入了更多的配置,实际上会增加出问题的可能性。
面试问这个没什么问题,只要涉及到新功能上线、小批量验证的需求,其实都需要考虑类似的问题,不区分前后端。