17、微服务模式与部署策略

微服务模式与部署策略

1. 微服务模式

1.1 舱壁模式

通过为每个服务创建连接池,可避免整个系统因某个服务故障而崩溃,仅影响单一功能。例如在足球管理应用中,为每个服务分配专用连接池,并为每个服务使用不同的数据库,展示了微服务和提供异构运行时的PaaS平台下,无需追求工具的同质性。

1.2 断路器模式

此模式源于电子电路领域,目的与舱壁模式相同,但方法不同。当一个服务调用无响应或响应缓慢的服务时,可能会降低整个系统的性能。此外,实现断路器还可避免持续调用已知故障或无法访问的服务。

1.2.1 工作原理
  • 打开状态 :假设服务A调用服务B,若服务B宕机,服务A应阻止这种集成,返回超时错误或缓存数据,此时电路处于打开状态,两点间无连接。
  • 关闭状态 :断路器应定期轮询服务B的健康状况。当服务B恢复正常时,断路器应重置流程,让服务A再次调用服务B,此时电路处于关闭状态。
1.2.2 常见实现
  • Netflix Hystrix:曾是最知名的实现,但已停止积极开发,进入维护模式。
  • 替代方案:Resilience4j、Sentinel和Istio等。其中,Istio被Red Hat支持的PaaS平台OpenShift使用。

1.3 Istio

Istio旨在解决开发人员和运维人员在单体应用向分布式微服务架构过渡时面临的挑战。随着微服务架构复杂性的增加,依赖诸如断路器、负载均衡、限流等弹性模式变得至关重要。

1.3.1 配置示例
metadata:
  name: circuit-breaker-policy
  namespace: default
spec:
  destination:
    name: circuit-breaker
    labels:
      version: v1
  circuitBreaker:
    simple-circuit-breaker:
      maxConnections: 100
      httpMaxRequests: 1000
      httpMaxRequestsPerConnection: 10
      httpConsecutiveErrors: 7
      sleepWindow: 15m
      httpDetectionInterval: 5m
1.3.2 功能作用

服务网格在应用层(网络术语中的L7)发挥作用,实现重试、超时、断路器、舱壁和路由控制等功能。

1.4 边车模式

边车在软件领域可类比为摩托车上的副驾驶舱,是一个可与主应用插拔的组件,需与主应用隔离,以免出现问题时影响主应用。常见应用场景包括监控、日志记录、指标收集等。

1.4.1 特点
  • 可配置性:边车容器应可配置,以便能插入任何应用。
  • 与容器适配:最佳匹配是容器,应用容器可与边车容器组合成容器组,在Kubernetes和OpenShift中称为Pod。
1.4.2 常见实现

Istio是最流行的边车实现,它将代理作为边车部署到服务中。所有服务请求都先到达Envoy代理,代理根据配置设置请求到达服务的策略。

1.4.3 优缺点

优点是可轻松控制服务和服务网格,添加各种功能而无需修改原始应用;缺点是实现存在一定开销,对于小型软件可能过于复杂。

2. 部署策略

2.1 持续集成和持续交付

持续集成(CI)和持续交付(CD)(最终可能是部署)用于构建、打包和部署应用。

2.1.1 流程
graph LR
    A[开发团队提交代码到版本控制系统] --> B[CI工具拉取最新代码并构建应用]
    B --> C[进行单元测试和集成测试]
    C --> D[代码质量检查]
    D --> E[测试通过后发布到开发/测试环境]
    E --> F[逐步推广到预生产环境]
    F --> G{是否手动推广到生产环境}
    G -- 是 --> H[手动批准后部署到生产环境]
    G -- 否 --> I[自动部署到生产环境]
2.1.2 各阶段区别
  • CI :应用构建、测试和打包阶段,常用工具是Jenkins。
  • 第一个CD(持续交付) :将最终工件交付到环境的阶段,需手动批准才能部署到生产环境。
  • 第二个CD(持续部署) :与持续交付类似,但工件构建后自动从第一阶段环境部署到生产环境。
2.1.3 部署规则
  • 仅构建一次最终工件:从一个环境部署到另一个环境的内容必须完全相同,OpenShift借助Jenkins实现此目标。
  • 保持部署方式一致:每个环境的部署方式应相同,减少配置,提高自动化程度,降低风险。
  • 持续测试:测试是CI和CD的关键,必须成为部署过程的一部分。
  • 环境相似:环境仅在可用资源方面有所不同,所有软件栈层应相同,以确保系统稳定和配置安全。

2.2 蓝绿部署

蓝绿部署是一种减少应用新版本部署停机时间的技术。该技术确保有两个尽可能相同的生产环境,任何时候只有一个环境(如蓝色环境)处于运行状态。准备新软件版本时,在绿色环境中进行最终测试。当软件在绿色环境中正常工作后,切换路由器,使所有传入请求指向绿色环境,蓝色环境变为空闲。

2.2.1 优缺点
  • 优点:零停机时间,有现成的回滚环境。
  • 缺点:新环境会使所有用户会话丢失,可通过将应用设置为只读模式或等待所有会话结束来缓解。
2.2.2 操作步骤
  1. 启动OpenShift平台: oc cluster up
  2. 打开浏览器,访问 https://127.0.0.1:8443/console/
  3. 以开发者身份登录,点击浏览目录中的Nginx图标
  4. 在弹出向导中点击下一步,填写表单
  5. 平台确认应用创建并开始部署
  6. 点击“继续到项目概述”链接查看应用概述和进度
  7. 应用部署成功后,点击路由 http://blue-green-app-myproject.127.0.0.1.nip.io ,页面应显示蓝色文本
  8. 模拟新版本应用,返回目录选择Nginx图标,点击下一步
  9. 点击“高级选项”链接,填写表单,设置应用名为 blue-green-app-2 ,指向Git仓库的 green 分支,禁用自动创建路由
  10. 应用部署完成后,测试新环境
  11. 点击左侧垂直菜单“应用程序”|“路由”,选择 blue-green-app 路由
  12. 点击右上角“操作”下拉菜单,选择“编辑”
  13. 修改路由设置,切换到绿色环境,点击保存
  14. 刷新应用页面,应显示绿色文本

2.3 金丝雀部署

金丝雀部署是一种逐步增加新版本应用负载的技术。通过缓慢增加负载,可以在生产环境中对新版本进行容量测试,并在发现问题时安全回滚。

2.3.1 操作步骤
  1. 若未完成蓝绿部署,请先完成。
  2. 在“我的项目”中,点击左侧侧边栏“应用程序”|“路由”,选择 blue-green-app 路由
  3. 点击页面右上角“操作”下拉菜单,选择“编辑”
  4. 滚动到页面底部,启用“在替代服务中拆分流量”复选框
  5. 设置服务为 blue-green-app ,服务权重为10%的负载到 blue-green-app-2 ,90%的负载到 blue-green-app ,点击保存
  6. 尝试刷新页面10次,若看到一次绿色文本页面,则金丝雀部署成功
  7. 当审计和监控工具满足组织需求时,逐渐增加负载,直到完全切换到绿色版本。

2.4 A/B 测试部署

A/B 测试部署是一种将不同版本的应用提供给不同用户群体,以评估哪个版本表现更好的技术。通过收集用户行为数据和反馈,可以了解不同版本对用户体验和业务指标的影响。

2.4.1 操作步骤
  1. 定义测试目标 :明确要测试的内容和期望达到的目标,例如提高转化率、增加用户参与度等。
  2. 创建版本 :开发两个或多个不同版本的应用,每个版本在某些方面有所差异,如界面设计、功能特性等。
  3. 划分用户群体 :根据一定的规则将用户划分为不同的组,分别将不同版本的应用提供给这些组。可以基于用户的地理位置、年龄、性别等因素进行划分。
  4. 收集数据 :在测试期间,收集用户与应用交互的数据,如点击次数、停留时间、转化率等。
  5. 分析结果 :根据收集到的数据,分析不同版本的表现,确定哪个版本更符合测试目标。
  6. 做出决策 :根据分析结果,决定是否将某个版本全面推广,或者继续进行优化和测试。

2.5 滚动部署

滚动部署是一种逐步替换应用实例的部署方式,通过逐个更新应用的实例,确保在部署过程中服务的可用性。

2.5.1 操作步骤
  1. 准备新版本 :开发并测试新版本的应用。
  2. 逐步替换实例 :一次只更新一个或几个应用实例,等待这些实例正常运行后,再更新下一批实例。
  3. 监控服务 :在部署过程中,密切监控服务的性能和可用性,确保没有出现问题。
  4. 完成部署 :当所有实例都更新为新版本后,部署完成。

3. 部署策略对比

部署策略 优点 缺点 适用场景
持续集成和持续交付 自动化程度高,可快速迭代;确保软件质量 需要一定的技术和工具支持 适合快速迭代的项目
蓝绿部署 零停机时间,回滚方便 需要额外的资源;可能丢失用户会话 适合对停机时间敏感的应用
金丝雀部署 可在生产环境中测试新版本;风险可控 部署过程较长 适合对新功能有一定风险担忧的情况
A/B 测试部署 可根据用户反馈优化应用 需要大量用户数据;测试周期长 适合优化用户体验和业务指标的场景
滚动部署 服务可用性高;对业务影响小 部署时间长 适合对服务可用性要求高的应用

4. 总结

在微服务架构中,选择合适的模式和部署策略至关重要。舱壁模式、断路器模式、Istio 和边车模式等微服务模式可以提高系统的弹性和可维护性;而持续集成和持续交付、蓝绿部署、金丝雀部署、A/B 测试部署和滚动部署等部署策略可以根据不同的需求和场景,确保应用的高效部署和稳定运行。在实际应用中,需要根据项目的特点和要求,综合考虑各种因素,选择最适合的模式和策略。同时,要不断监控和优化系统,以适应不断变化的业务需求。

希望通过本文的介绍,能帮助大家更好地理解微服务模式和部署策略,在实际项目中做出更明智的选择。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值