行业知识
服务器灰度部署怎么设置?
基于Openresty实现的灰度发布技术方案
系统架构基于Openresty,使用ngx_http_lua_module和ngx_stream_lua_module实现HTTP与TCP灰度功能。提供后台管理系统,可管理灰度白名单。实现功能包括HTTP协议的灰度白名单管理与验证,TCP协议的IP灰度白名单管理与验证。系统通过Lua脚本与Redis数据存储,动态控制灰度环境切换。
API网关是所有服务的唯一入口,它不仅能够实现系统层面的限流熔断、服务发现、负载均衡、协议转换、流量管理、黑白名单、反爬策略、身份验证、灰度发布、监控、缓存等功能,还能够统一实现安全、限流、日志、缓存等方案,降低各个服务的成本。
逻辑处理代码根据openresty的处理阶段分门别类,只需在相应的函数中添加自定义业务逻辑。接下来,以开发一个用于灰度发布的流量分发插件为例,演示整个开发流程。此插件功能简单,通过检查HTTP请求头中的Authorization值,实现流量分发至不同后端服务器。
- **安全增强**:实现 SSL 加密、证书管理、会话验证、授权、数据校验,以及对恶意攻击的防护,确保系统安全。- **API 功能**:灰度发布、API 聚合、API 编排,提供更灵活的 API 管理与调用方式。
APISIX 是一款基于 OpenResty 和 etcd 开发的高性能、可扩展的微服务 API 网关,适合云原生环境使用。它提供了丰富的功能,如动态负载均衡、身份验证、限流限速、监控报警、服务可观测性等,对于微服务架构来说,这些都是关键特性。
微服务架构下路由、多活、灰度、限流的探索与挑战
1、大会中的微服务与中间件专场,聚焦微服务开发与运维,分享了如何避免弯路,优化路由、多活、灰度和限流,助力企业创新。微服务架构的核心在于企业架构的演进,从单体架构到微服务架构,涉及资源层的云化、容器化和无服务器技术。
2、微服务架构的分析涉及到多个方面,包括优势与挑战,核心组件,以及服务治理与监控等。接下来,我们将重点探讨微服务的优势与挑战,核心组件,服务治理和监控,以及服务追踪。首先,微服务架构具有多项优势。每个服务都遵循单一职责原则,形成高内聚、低耦合的单元,包括数据库和数据模型。
3、微服务架构下,服务拆分与独立部署带来了敏捷性和灵活性的提升,但同时也引入了新的挑战,如服务间的可见性、连接性和安全性问题。全链路灰度技术应运而生,旨在解决服务新版本升级过程中的一系列问题。从单体架构到微服务架构,服务发布策略也经历了变革。
什么是蓝绿部署、滚动发布和灰度发布?
在发布服务器端应用时,存在服务中断和升级失败后回滚复杂的问题。为解决这些问题,人们研究出了多种发布策略,包括蓝绿部署、滚动发布和灰度发布。蓝绿部署 蓝绿部署策略中,同时运行两个应用版本。新版本部署后,通过流量切换到新版本,无需停止老版本服务。
滚动部署是应用新版本逐步替代旧版本的过程,实际部署在一段时间内进行,新旧版本共存,不影响功能和用户体验,便于回滚和解决不兼容问题。如下图所示,旧版本为蓝色,新版本为绿色,同时部署在集群服务器上。
蓝绿发布:这是一种将流量平滑切换到新版本的方法,维护两个环境(蓝绿),在验证无误后逐步将流量转移。例如,首先将一半流量从负载均衡切换到新部署的绿环境,然后升级旧版本到蓝环境。 红黑发布:与蓝绿相似,通过两个环境完成升级,一次切换到新环境(黑)并释放旧环境资源。
蓝绿发布:双管齐下,确保平稳过渡蓝绿发布是一种创新的升级策略,它将服务分为两个环境——蓝环境作为生产环境,绿环境用于部署新版本。在验证无误后,逐步切换流量,确保用户几乎感觉不到服务中断。
灰度发布、蓝绿部署和金丝雀发布都是软件部署策略,旨在确保新版本的稳定上线。滚动部署是一种渐进式方式,逐步替换旧版本,期间新旧版本共存,便于问题排查。蓝绿部署则提供了零宕机的部署流程,确保新版本经过测试后再切换流量,具有高可用性和回滚能力。
滚动发布则是在金丝雀发布基础上的进一步优化,采用自动化程度较高的方式,提供更平滑的服务升级体验。这种方式更加系统化地实现了服务升级,减少了人为干预,提高了发布流程的效率和可靠性。在实践过程中,企业版的Zadig工具提供了这些发布策略的实施框架,包括蓝绿发布、金丝雀发布和分批次灰度发布。
蓝绿发布、红黑发布、灰度发布和滚动发布
常见的发布策略包括:蓝绿发布:这是一种将流量平滑切换到新版本的方法,维护两个环境(蓝绿),在验证无误后逐步将流量转移。例如,首先将一半流量从负载均衡切换到新部署的绿环境,然后升级旧版本到蓝环境。 红黑发布:与蓝绿相似,通过两个环境完成升级,一次切换到新环境(黑)并释放旧环境资源。
蓝绿/红黑发布要求工作负载需满足特定条件,如Deployment类型,并通过工作流配置任务进行部署和验证。金丝雀发布则需要人工审核,并支持分批灰度发布,根据流量监控进行逐步升级。探索Zadig的企业版,让发布策略更加智能,让每一次升级都充满信心。
红黑发布的实现类似蓝绿发布,同样通过红环境和黑环境的切换来更新服务版本。但其优势在于更好地利用了云计算的弹性伸缩能力,使得在新版本部署完成后,能够快速一次性将生产流量转向黑环境,同时及时释放红环境资源,以提高资源利用率。
如果是K8S平台,滚动更新是现成的方案,建议先直接使用。蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。红黑发布: 申请新环境,删除老版本 灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。滚动发布:按批次停止老版本实例,启动新版本实例。
滚动发布 滚动发布策略旨在减少硬件需求。通过逐步升级,仅需额外一台服务器,避免了蓝绿部署的硬件压力。但此过程中,新版本可能不稳定,难以区分问题来源。灰度发布 灰度发布策略借鉴金丝雀测试方法,初期启动少量新版本应用进行测试。逐步引入用户流量,观察应用运行状态,收集数据,进行A/B测试。
灰度发布与金丝雀发布 灰度发布是安全上线迭代软件产品的重要手段,金丝雀发布是其中一种方式,通过逐步引入新版本确保系统稳定。A/B测试 A/B测试与蓝绿发布、滚动发布、金丝雀发布不同,是效果测试,不同版本服务实际效果对比,关注转化率、订单情况等。