当前位置: 首页 > news >正文

微服务治理框架的选择:对比Spring Cloud和Istio

3b88895907b205b38cd4d901dc3dabe0.gif

导读:目前主流的微服务治理框架主要是Spring Cloud。而Istio作为新一代微服务框架,越来越受到关注。在本文中,我们分享如何选择这两种微服务框架。

275b48027209b008c7eac85c3cd084a8.png

Istio被引入的主要原因是传统微服务存在以下问题。

  • 多语言技术栈不统一:C++、Java、PHP、Go。Spring Cloud无法提出非Java语言的微服务治理。

  • 服务治理周期长:微服务治理框架与业务耦合,上线周期长,策略调整周期长。

  • 产品能力弱:Spring Cloud缺乏平台化和产品化的能力,可视化能力弱。

那么,是不是说企业一定需要使用Istio?不是。表2-2是对Spring Cloud与Istio的简单对比。

▼表2-2 Spring Cloud与Istio的对比与选择

acc1051cbe150e7da6a3336918e13a63.png

也就是说,如果企业的开源语言主要是Java、更新升级不频繁、无过多高级治理功能需求、业务规模不是非常大,使用Spring Cloud是比较合适的。

如果企业要引入Istio,引入成本有多高?具体分三种情况,如表2-3所示。

▼表2-3 企业引入Istio的成本

2368fe9dacd86496a48d83b991ed7280.png

接下来,我们对在OpenShift上通过Spring Cloud和Istio实现的企业微服务治理进行对比,如表2-4所示。

▼表2-4 Spring Cloud与Istio的实现对比

ea1306783dea186d42ee141b058983f3.png

94a0d33c5b68e332e4af0839a7132ae6.png

从开放性以及先进性角度来说,建议将服务网格Istio作为首选微服务应用框架。接下来我们介绍Istio在实践中的使用建议。

Istio运维方面的建议包括版本选择、备用环境、评估范围、配置生效、功能健壮性参考、入口流量选择。当然,这些建议只是基于目前我们在测试过程中得到的数据总结的。随着Istio使用越来越广泛,相信最佳实践将会越来越丰富。

1. 版本选择

Istio是一个迭代很快的开源项目。截止到2021年5月,社区最新的Istio版本为1.9。

频繁的版本迭代会给企业带来一些困扰:是坚持使用目前已经测试过的版本,还是使用社区的最新版本?

在前文中我们已经提到,红帽针对Istio有自己的企业版,通过Operator进行部署和管理。出于安全性和稳定性的考虑,红帽Istio往往比社区要晚两个小版本左右。因此建议使用红帽Istio的最新版本。目前看,社区的最新版本的Istio的稳定性往往不尽如人意。

98bfa1ae06467be84e703140c3955b88.png

2. 备用环境

针对相同的应用,在OpenShift环境中部署一套不被Istio管理的环境。比如文中的三层微服务,独立启动一套不被Istio管理的应用,使用OpenShift原本的访问方式即可。

这样做的好处是,每当进行Istio升级或者部分参数调整时都可以提前进行主从切换,让流量切换到没有被Istio管理的环境中,将Istio升级调整验证完毕后再将流量切换回来。

3. 评估范围

由于Istio对微服务的管理是非代码侵入式的。因此通常情况下,业务服务需要进行微服务治理,需要被Istio纳管。而对于没有微服务治理要求的非业务容器,不必强行纳管在Istio中。当非业务容器需要承载业务时,被Istio纳管也不需要修改源代码,重新在OpenShift上注入Sidecar部署即可。

4. 配置生效

如果系统中已经有相关对象的配置,我们需要使用oc replace -f指定配置文件来替换之前配置的对象。Istio中有的配置策略能够较快生效,有的配置需要一段时间才能生效,如限流、熔断等。新创建策略(oc create -f)的生效速度要高于替换性策略(oc replace -f)。因此在不影响业务的前提下,可以在应用新策略之前,先删除旧策略。

此外,Istio的配置生效,大多是针对微服务所在的项目,但也有一些配置是针对Istio系统。因此,在配置应用时,要注意指定对应的项目。

在OpenShift中,Virtual Service和Destination Rules都是针对项目生效,因此配置应用时需要指定项目。

5. 功能健壮性参考

从笔者大量的测试效果看,健壮性较强的功能有基于目标端的蓝绿、灰度发布,基于源端的蓝绿、灰度发布,灰度上线,服务推广,延迟和重试,错误注入,mTLS,黑白名单。

健壮性有待提升的功能有限流和熔断。

所以,从整体上看,Istio的功能虽日趋完善,但仍有待提升。

6. 入口流量方式选择

在创建Ingress网关的时候,会自动在OpenShift的Router上创建相应的路由。Ingress网关能够暴露的端口要多于Router。所以,我们可以根据需要选择通过哪条路径来访问应用。

在Istio体系中的应用不使用Router也可以正常访问微服务。但是PaaS上运行的应用未必都是Istio体系下的,其他非微服务或者非Istio体系下的服务还是要通过Router访问。此外,Istio本身的监控系统和Kiali的界面都是通过Router访问的。

相比Spring Cloud,Istio较好地实现了微服务的路由管理。但在实际生产中,仅有微服务的路由管理是不够的,还需要诸如不同微服务之间的业务系统集成管理、微服务的API管理、微服务中的规则流程管理等。

本文摘编自《金融级IT架构与运维:云原生、分布式与安全》,经出版方授权发布。(ISBN:978-7-111-69829-6)

eb38f4db94b27176d07262edfad9c157.png

《金融级IT架构与运维:云原生、分布式与安全》

推荐语:3位资深专家撰写,8位IT负责人推荐,从架构、云原生、分布式、安全、运维为金融企业提供解决方案,案例丰富。


RECOMMEND

更多推荐

68eb9c4c4371933576c6f57703f6c91f.png

01

d5036bc6a5bc8f1550324a1f59c13233.png

《微服务架构设计模式》

作者:[美] 克里斯·理查森(Chris Richardson)

译者:喻勇 

推荐理由

本书由世界十大软件架构师之一、微服务架构的先驱、Java开发者社区的意见领袖Chris Richardson亲笔撰写,旨在帮助架构师和程序员学会使用微服务架构成功开发应用程序。本书并不是鼓吹微服务架构的宣言,作者既介绍了微服务的原理、原则,又详细讲解了实际落地中的架构设计模式,将使你理解微服务架构、它的好处和弊端,以及应该何时使用微服务架构。本书将帮助你建立微服务的全局视野,并学会在纷繁复杂的情况下做出正确的架构选择和取舍。

fa2f92ccda1d37113a5dc7a7f5d5d9d1.png

02

21f50e3b983d1da0fb766a1b1e2431db.png

《OpenShift 在企业中的实践》

(第 2 版)

作者:魏新宇 郭跃军

推荐理由

经典畅销书再次升级!红帽首席解决方案架构师联合撰写,20 位全球知名企业 IT 负责人推荐,基于 OpenShift v4,详述 PaaS、DevOps、云原生、微服务治理。完整描绘企业数字化转型路线,为企业通过 OpenShift 实现 IT 转型给出具体建议和参考架构。

cc7f1674bb7be42d9dac19556d339b60.gif

刷刷视频👇

43f7f54fbe856ea1ddb974bdb576963b.gif

更多精彩回顾

干货 |Java到底能干什么?有哪些实际用途?

书单 | 成为优秀Java开发者,我看了这几本书

上新 |《Core Java》作者亲授视频免费看,学习Java更轻松

资讯 |云原生时代,阿里如何让Java冷启动提速两个数量级?

资讯 | Python迎来31岁生日,蝉联年度编程语言排行榜冠军

干货 |一文带你掌握计算机体系结构核心内容

书讯 | 2月书讯(下)| 新年到,新书到!

书讯 | 2月书讯 (上)| 新年到,新书到!

e84638c4ba95d1bce9ffb04f3285c0c8.gif

ad00839e6d5dc2f73c91a05e46e91588.gif

点击阅读全文购买

相关文章:

  • C++都有哪些就业方向?是否应该学习C++?
  • 实战案例,手把手教你构建电商用户画像 | 附代码
  • 两大图灵奖得主力作:计算机架构的新黄金时代
  • 首次公开,用了三年的 pandas 速查表!
  • 提升研发效能:抵制无效加班文化
  • 云边协同下的数据处理模式有何不同?
  • 如何在ClickHouse中使用EmbeddedRocksDB表引擎
  • 机器人与人工智能的关系,终于有人讲明白了
  • Web代码安全漏洞深度剖析
  • 金三银四求职季,十道腾讯算法真题解析!
  • 终于有人把辛普森悖论讲明白了
  • 一文带你理解算法策略
  • AI 是否拥有意识?从意识的定义说起
  • 百万在线:大型游戏服务端开发
  • ​什么是bug?bug的源头在哪里?
  • [译]CSS 居中(Center)方法大合集
  • flutter的key在widget list的作用以及必要性
  • Java到底能干嘛?
  • jQuery(一)
  • k个最大的数及变种小结
  • mysql innodb 索引使用指南
  • V4L2视频输入框架概述
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 电商搜索引擎的架构设计和性能优化
  • 服务器之间,相同帐号,实现免密钥登录
  • 高程读书笔记 第六章 面向对象程序设计
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 简单数学运算程序(不定期更新)
  • 强力优化Rancher k8s中国区的使用体验
  • 使用 @font-face
  • 微信小程序:实现悬浮返回和分享按钮
  • 我建了一个叫Hello World的项目
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • !$boo在php中什么意思,php前戏
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (02)vite环境变量配置
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (多级缓存)多级缓存
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (力扣题库)跳跃游戏II(c++)
  • (三分钟)速览传统边缘检测算子
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .cn根服务器被攻击之后
  • .htaccess配置常用技巧
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET实现之(自动更新)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @javax.ws.rs Webservice注解