6问微服务到底靠不靠谱?

Mr.zhuMr.zhu2025-05-23 10:19:24来源:优站库 (www.uzkoo.com)阅读:28

最近看到一个新闻,说是内容是 “IBM、甲骨文、CNCF 就谷歌对 Istio 治理的处理提出抗议”。相信很多小伙伴看了以后,针对 Istio、微服务都有一丝疑虑,接下来我们用灵魂拷问的方式,来分析相关的问题。本文仅代表作者个人观点。

拷问 1:为啥要用微服务?

 

编辑搜图

请点击输入图片描述

在谈微服务靠谱靠谱之前,我们先说说微服务本质是啥?咱们不妖魔化概念,捡干的说。

微服务的“微”,是小的意思。比传统单体应用小。怎么把大的单体应用变小?拆呗。

至于怎么拆,这是门学问,后面说。

为什么拆?

容器时代之前,拆微服务的不多,拆主要是为了方便组件独立开发、升级,balabala........

在容器云时代,有的应用比较大,不拆就上不了容器云。

上不了容器云有什么问题么?

没啥问题。如果在虚拟机甚至物理机上运行,你没觉得他慢,弹性能力差,你没觉得它有问题,那就是没问题,就别拆。Oracle RAC这样式的,也没法拆,也上不了容器云(起码段时间内)。

结论:上容器云的本质目的,是由于你想利用容器云让你的应用运行弹性扩展能力增强、开发迭代速度加快,所以要把应用往容器云上挪。有的轻量级的 web 应用好挪,不用拆就能怼上去。有的应用大,直接上不去,向上就得拆,就费用微服务。

有人问,为啥非要上容器云?没有非要。当年虚拟化大流行的年代,谁没规定非要上 vSphere 啊。很简单:根据自己的需要。

拷问 2:咋听说上了微服务后,运维难度增加?微服务靠谱不?

首先,微服务这个概念,一定程度上被妖魔化、被玩坏了。好像微服务站在了一切“传统”应用的对立面,就像当面满清入关,必须剃所有应用的头发一样,所有应用必须要拆,拆的越碎越好。

现在市面上使用最多的微服务,还是以 SpringBoot 为开发框架的 SpringCloud 系,这是实时。

但是,我要说的是:SpringCloud 架构确实比较复杂,而且是代码侵入式的。大魏曾经上过一门微服务迁移的课(红帽内部一周的课),每天基本做的事情,就是改源码。需要使用 SpringCloud 的哪个治理组件,就得把对应的代码(主要是 annotation 方式 )加进去,把配置参数也加进去。大幅增加了应用开发人员的工作量。

而造成这个问题的关键点在于:SpringCloud 是站在七层(应用),解决 4-7 层的所有问题(应用之间调度,RBAC 等)。码农工作量不大才怪。

如果有要说微服务靠谱不这个话题。首先来说,SpringBoot 挺靠谱的。SpringCloud 框架庞杂,如果业务没那么多治理需求的话,建议挑少量的治理组件上,别一下都怼上。

拷问 3:微服务或者说云原生的应用开发框架,只能选 SpringBoot?

不是。

SpringBoot 是目前很流行的开发框架,起源是要解决 EJB 太重的问题,但还是重。

而微服务和云原生要求什么?pod 启动快、占用资源少。

这方便,Quarkus 有它的优势,尤其是云原生。

IDC 对比过 SpringBoot 和 Quarkus 的性能,后者高不少。但 Quarkus 也有其限制,用其所长。

详细内容参考我之前写的文章:关于云原生应用的思考

拷问 4:Istio 被吹了好几年了,它咋出来的?靠谱不?

如拷问 2 所述:SpringCloud 要求码农通过代码实现从 4-7 层的所有逻辑,显然太累,灵活性也差。这时候 google 和 IBM 出于要简化这件事的目的,联手推出了基于 K8S 的微服务治理框架 Istio(技术细节不赘述,想了解可以买我的书《OpenShift 在企业中的实践》)。

也就是说,像 RBAC,服务注册中心、微服务之间调用路由等啥啥问题,Istio 都干了。这确实是架构上的创新。

那为啥 Istio 现在生产案例不多呢?其实也有案例,国内外都有,但和 SpringCloud 相比,还是少。

从技术角度看:

  1. Istio 是个迭代的比兔子跑的还快的开源项目。小版本迭代甚至以周记。Istio 迭代后,有时候架构,API 都会有一些变化,平滑升级不顺畅(例如直接从 Istio 1.1 升级到 1.2)。
  2. Istio 本身就是个微服务的框架,组件太多,自身运行也比较消耗资源,比如 mixer 组件。Istio 到了 1.5,引入了 Istiod,架构有所精简。具体的效果大魏还没测试。
  3. Istio 采用 sidecar 的方式,在每个 pod 中业务容器旁边塞一个代理。pod 流量出栈入栈都会先经过这个代理。这个代理增加了应用访问的时间。如果说个时间的话,不少于 10ms。当应用规模大、微服务之间相互调用太多时,这个延迟就会有指数级增长。
  4. Istio 本身还是站在运维角度去考虑问题的,运维人员觉得不错,但 Istio 没有和应用开发框架有深度的集成。但写应用的是开发人员,他们对这些未必关心。SpringCloud 想对接受的广,本质上是因为 SringBoot 的开发友好型。

那么,Istio 到底靠谱不。从长远看,靠谱。因为毕竟 Istio 是基于 K8S 的框架对微服务的架构性创新,随着 Istio 版本的迭代,性能和稳定性的提升,案例会越来越多。

拷问 5:我的应用现在 vm 上使用的 SpringCloud,怎么向 K8S/OCP(OpenShift) 迁移?

这有两种方法:

(1)将所有 SpringCloud 和应用一起容器化,然后挪到 OCP 上。

这种方法的好处是:不用改 SpringCloud 框架,上来基本就能用。缺点是让让本就复杂的 SpringCloud 更加复杂。

(2)将 SpringCloud 迁移的时候,按照 K8S 的特点,对组件进行改造。K8S 层有的就用 K8S 的。如下表所示。

这种需要点工作量改造需需要点工作量,好处是后续微服务架构就能一定晨读上调用 K8S,效率高一些,后续运维也会方便。比如写应用的时候,直接用 K8S的 service name。

 

编辑搜图

请点击输入图片描述

 

编辑搜图

请点击输入图片描述

拷问 6:我现在用的是 K8S+SpringCloud,怎么向 OCP+Istio 迁移?

这种方法比拷问 5 中的第二种稍微激进一些,但未来是这个方向。这种做法的好处是业务逻辑用 Spring Boot 实现,其他功能实现都交给交给 Openshift+Istio。

这种方法的大致步骤是:

  1. 在 pom.xml 中注销 SpringCloud 组件的的 Maven 依赖,如:Eureka 。
  2. 删除代码中 SpringCloud 的 annotation,如 @EnableDiscoveryClient
  3. 集中的配置文件回到各个项目中
  4. 用 jar 包构建镜像。也就应用容器化,可以使用 OCP 的 S2I builderimage。
  5. 创建 ConfigMap 用于注入环境变量。
  6. 在 OCP 上部署应用,部署的时候,记住要注入 sidecar。

转载来源:OSChin.net原文标题:灵魂拷问 x6:微服务到底靠谱不?原文链接:https://my.oschina.net/u/4567873/blog/4400010

猜你想看

高速上刹车突然失灵,能拉电子手刹吗?有很多地方需要注意
新能源汽车板块接下来大概率会有大行情
电动车电池寿命到底有多长?怎么用才会让寿命变长?
为何你穿大衣很丑?不懂它的“三点一线穿搭法”,身材再好也白搭
事关社保缴纳!最新提醒
全国哪的面粉最好吃?经过评比,这4种面粉比较出名,快来看看吧
麦积山石窟游客少,知名度低,但这里是真正的奇观
常见葡萄区别和口感
美食精选:蒜蓉剁椒蒸排骨、香辣木耳虾、香菇小炒肉的做法
荔枝吃多了会上火?这些谣言都不可信
什么是普朗克常数?为什么宇宙都要依赖它?
游泳溺水自救方法有哪些?
普吉岛5大顶级骗局,自由行最容易被骗到
分享3种简单易学的居家减肥操
去北京必吃的3道美食,京味十足,美味无比,你吃过几样呢?
萝卜丸子是这样做的,焦香香脆,一口吃不够
开车上道牙,掌握这9个经验技巧,起码降低一半的伤害
嘴不对心、把口是心非演绎最到位的星座,个个“表里不一”?
从0开始教你玩个人网盘NAS,跟手机电脑存储不够说拜拜
北京7万新能源指标最终去往何方?新能源轿车怎么选?

推荐站点