本文来自微信公众号“开源云中文社区”。
转向基于API的架构的一个好处是,可以快速迭代并将新的更改部署到服务中。还有通过API网关建立流量和路由的概念,该概念是为架构的现代化建立的。API网关提供了多个阶段,允许你在同一网关后面部署多个API,并且能够在不停机的情况下进行就地更新。通过使用API网关,你可以利用服务的众多API管理功能,如身份验证、速率限制、可观察性、多API版本控制和阶段部署管理(在开发、测试、阶段和生产等多个阶段部署API)。
开源API网关(Apache APISIX和Traefik)和服务网格(Istio和Linkerd)解决方案能够进行流量分割并实现金丝雀发布和蓝绿部署等功能。通过金丝雀测试,你只需选择一小部分用户就可以对API的新版本进行严格检查。
金丝雀发布是什么?
金丝雀发布引入了新版本的API,并将一小部分流量流到金丝雀。在API网关中,流量分割使得可以逐渐将流量从目标服务的一个版本转移或迁移到另一个版本。例如,服务的新版本v1.1可以与原始版本v1.0一起部署。流量转移使你能够首先只将一小部分用户流量(例如1%)路由到v1.1,然后将所有流量随时间推移转移到新服务,完成金丝雀测试或发布新服务。
这允许你监控新服务,查找技术问题,如延迟增加或错误率,并查找所需的业务影响。这包括检查关键绩效指标(如客户转化率或平均购物结账值)的增加。通过在服务的多个版本之间划分目标服务的流量,流量分割使你能够运行A/B或多变量测试。例如,你可以将目标服务的v1.0和v1.1的流量分成50/50,并查看在特定时间段内哪个性能更好。
在有些时候,金丝雀发布是一个很好的选择,因为暴露在金丝雀中的流量百分比受到高度控制。权衡是,系统必须有良好的监控,以便能够快速识别问题并在必要时回滚(这可以是自动化的)。
流量镜像
除了使用流量分割来运行试验之外,还可以使用流量镜像来拷贝或复制流量。你可以将其发送到其他位置或一系列位置。对于流量镜像,重复请求的结果通常不会返回给调用服务或最终用户。相反,在带外评估响应的正确性。例如,它比较重构的服务和现有服务生成的结果。
使用流量镜像使你能够“暗发布”服务,用户对新版本一无所知,但你可以在内部观察所需的效果。
近年来,在系统边缘实施流量镜像已变得越来越流行。APISIX提供了代理镜像插件来镜像客户端请求。它将真实的在线流量复制到镜像服务,并能够在不中断在线服务的情况下对在线流量或请求内容进行特定分析。
什么是蓝绿部署?
蓝绿部署通常在使用路由器、网关或负载均衡器的架构中的某个点实现。这背后是一个完整的蓝色环境和绿色环境。当前的蓝色环境表示当前的活动环境,绿色环境表示堆栈的下一个版本。在切换到实时流量之前,检查绿色环境。当它上线时,流量从蓝色转换为绿色。蓝色环境已关闭,但如果发现问题,则回滚很快。下一个变化是从绿色变为蓝色,从第一个版本开始振荡。
蓝绿部署由于其简单性而运行良好,是耦合服务的更好部署选项之一。管理持久化服务也更容易,但在回滚时仍需要小心。它还需要双倍的资源才能与当前活动环境并行冷运行。
Argo Rollouts的流量管理
以上所讨论的策略增加了很多价值,但推出本身是一项你不想手动管理的任务。这就是Argo Rollouts等工具对演示所讨论的一些问题的价值所在。
使用Argo,可以定义一个Rollout CRD,它代表了你可以采取的策略,以推出API的新金丝雀。自定义资源定义(CRD)允许Argo扩展Kubernetes API以支持部署行为。CRD是Kubernetes的流行模式。它们允许用户使用扩展与一个API交互,以支持不同的功能。
通过Argo Rollouts,你可以使用Apache APISIX和Apache APISIX入口控制器进行流量管理。
总结
分离服务的部署和发布(以及相应的API)是一种强大的技术,特别是随着渐进式交付方法的兴起。金丝雀发布服务可以利用API网关流量分割和镜像功能,并提供竞争优势。这有助于企业降低不良发布的风险,并了解客户的需求。
原文链接:
https://opensource.com/article/23/2/api-gateway