点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

Istio 为什么不再使用微服务?

  • 2020-07-02
  • 本文字数:2698 字

    阅读完需:约 9 分钟

Istio为什么不再使用微服务?


本文最初发布于 Christian Posta 的个人博客,经原作者授权由 InfoQ 中文站翻译并分享。


在过去五年,我投入大量精力来帮助企业踏上云原生之旅。很大程度上,对团队(最终是组织)基于软件的技术交付速度进行现代化提升受到人员、过程和最终技术决策的影响。当应用程序的架构(由于各种人员/流程/技术因素)成为修改和“加快速度”的瓶颈时,微服务方法可能会合适,但也不是唯一的方法


我曾在以前的文章中提到,许多团队都无法完美地实现它让微服务运行需要克服一些“困难”。同时,我还提到一些长远来看可能对你工作有益的技术。我甚至还写了一本关于这个主题的


开始的时候,最好是远离微服务,不过现在,许多组织已经远远过了这个阶段。

你已经走上了微服务之路

如果你真的走上了微服务之路,那么当其不奏效时,不管是对自己还是对公司都要实事求是。改变路线可能才是产品成功的正确步骤。

如果微服务不奏效,要勇于承认

尽管出发点是好的,在你出于正当的理由开始使用微服务后,返回单体架构仍然可能是正确的选择。如果你做出决策时的假设或上下文发生了变化,那么回到单体架构也“没关系”。


Istio社区(为微服务通信构建服务网格),控制平面的实现将逐渐从微服务方法转变为更趋向于单体的方法。在 2019 年 KubeConNA 的 Istio 大会上,谷歌 API 基础架构首席工程师和架构师Louis Ryan发表了演讲,详细描述了这样做的动机,并在设计文档中介绍了大致的情况。从 Istio 1.5 开始,我们应该就可以看到istiod方法的效果, 以前分配给各种微服务部署的功能将被合并到一个守护进程中。


Istio 用于帮助解决由微服务/云架构引入的应用程序网络难题,那么 Istio 本身为什么要远离微服务架构呢?最直接的答案是:


事实证明,微服务方法非常复杂,但没有提供预期的价值或目标。相反,它违背了这些目标。


对于 Istio 项目来说,单体架构似乎能更好地实现这些目标。下面,我们将做进一步地分析。

Istio 以微服务的方式实现

Istio 是一个开源的服务网格,其架构与其他服务网格的实现类似,包括一个控制平面和一个数据平面。数据平面由与每个应用程序实例共存并位于请求路径中的代理组成。控制平面位于请求路径之外,用于管理和控制数据平面的行为。



过去,Istio 的控制平面被实现为可单独部署的服务,它们的用途如下:


  • Pilot —— 核心数据平面配置(xDS)服务器

  • Galley —— 配置监控、验证、转发

  • Injector —— 负责自动注入数据平面并设置引导程序

  • Citadel —— 证书签名、Secret 生成、CA 集成

  • Telemetry —— 一种“混合器”组件,负责将遥测数据聚合到各种后端

  • Policy —— 一个请求路径“混合器”组件,负责执行策略


这些服务将根据一组操作人员定义的配置,共同提供和管理数据平面。

微服务的好处

微服务可以减少系统更改时的分歧,提升组织速度。在微服务架构中,每个服务可能都是独立运营的(每个服务都有自己的团队),并且有独立于其他服务的发布节奏/生命周期。这将使开发人员和运营人员可以并行不悖,而不需要进行锁定/同步/协调(这些可能会减慢部署和特性更改的速度),提升了更改速度。


服务可能会被进一步分解的另一个原因是它的使用模式和可伸缩性。举个简单的例子,一个具有大量读写操作的服务可以从读写操作分离中受益,因为读操作可能会消耗更多的内存(可能需要比较多的缓存空间才能提供超快的读取速度),而写操作可能会消耗更多的存储或网络。你能在可以独立伸缩的机器/配额上优化服务的读操作部分(内存更大),然后在其他具有 SSD 或经过优化的 EBS/SAN 的机器上优化服务的写操作部分。


以下是其他可能让你将应用分解成服务的原因:


  • 安全问题

  • 领域划分

  • 不同的语言优化

  • 服务的重要性


采用微服务架构的首要代价是复杂性。当你从一个东西(单体)变成一堆相互通信的小东西(针对特定问题进行了优化)时,显著增加了架构和运行这些东西所需的基础设施的复杂性。


如果你实现了微服务的好处,那么这可能是一个必要的代价。如果没有,你最好评估一下你的假设,并改变路线。这就是 Istio 现在的情况。

改变路线

首先,要了解的是谁在开发和运营你的服务架构。在 Istio 社区,项目中不同的组件由不同的社区工作组负责。另一方面,下载和操作 Istio 的人并不是这样划分的。事实上,根据到目前为止的观察,Istio 控制平面是由同一组人(甚至是一个人)操作的。在某种程度上,如果 Istio 控制平面的一组微服务作为一个较大的 SaaS 运行,那么它会工作得很好,但在目前的使用中,情况似乎并非如此。


其次,要了解的是发布是如何完成的?服务可以独立发布吗?Istio 的答案是“理论上是”,但实际上似乎不是这样。Istio 的新版本发布时,需要升级/部署所有控制面组件。


最后,在 Istio 的情况下,你可能会问,“对于各种不同的组件,难道没有不同的伸缩变量和安全考虑吗?”老实说,并没有。下面这段话节选自 Istio istiod的设计文档 :


然而,对于现在的大多数 Istio 组件来说,情况并非如此——控制平面的成本主要由一个特性(服务于 XDS)决定。相比之下,其他控制平面特性都有边际成本,因此,分离的价值不大。


出于安全考虑,控制平面的所有服务都有相同的权限等级:


现状并非如此,Mutating Webhook、Envoy Bootstrap 和 Pilot 的权限在许多方面与 Citadel 相似,因此,对它们进行攻击造成的伤害几乎相同。


正如 Istiod 设计文档的所言:“复杂性是万恶之源,否则:我怎么能学会不再忧虑并爱上单体”。


istiod是一个单体,它支持以前版本的所有功能,并且显著降低了复杂性。请注意,以前组成控制平面的服务在项目中仍然是作为子模块实现(包括边界和契约等),但操作体验得到改善。操作人员现在只需要考虑运行和升级单个二进制文件,而不再是一批二进制文件。



对于 Istio 来说,采用单体控制平面,可以大大降低复杂性,而这种复杂性之前并没有为我们带来足够的回报:


  • 只有一个服务需要部署,安装/升级变得简单了

  • 配置复杂性降低了,因为不再需要通过配置编排服务

  • 问题调式更容易了(只需要在一个地方查找问题,而不是多个地方)

  • 提高了效率,降低了数据传输开销、共享缓存,等等


想了解更多信息,请参阅Istiod的设计文档


另外,你可以观看我做的istiod方法演示,它应该会出现在 Istio 1.5 中。请注意,该演示使用了 Istio 的 super alpha 版本,所以还不是很完美。

小结

我很高兴看到 Istio 社区继续改进 Istio 的可用性和可操作性。Istio 控制平面的单体部署对这个项目很有意义。这对你的项目有意义吗?如果是这样,你会考虑吗?你是否也会像这样计算自己的微服务架构(和相关基础设施)的价值与复杂性比,从而确定变换方法的时间呢?


英文原文:


Istio as an Example of When Not to Do Microservices


2020-07-02 14:003626
用户头像

发布了 594 篇内容, 共 293.2 次阅读, 收获喜欢 1380 次。

关注

评论 4 条评论

发布
用户头像
他的这本书 Istio in Action 已经难产快一年了吧 https://www.manning.com/books/istio-in-action 希望不要胎死腹中
2020-07-06 17:06
回复
变化太快,写不下去了吧
2020-07-07 07:16
回复
用户头像
Sam NewMan的新作,从单体到微服务中也介绍到了这个topic,书里讲到有几个场景不适合微服务:不清楚业务领域时,初创企业,需要用户安装的软件等,具体可以参考:https://wangwei1237.gitee.io/monolith-to-microservices/docs/When_Might_Microservices_Be_a_Bad_Idea.html
2020-07-02 15:07
回复
good
2020-07-02 15:24
回复
没有更多了
发现更多内容

如何使用物联网低代码平台进行数据分析?

AIRIOT

物联网 低代码开发

转转统一权限系统的设计与实现(前端实现篇)

转转技术团队

前端开发 umijs 权限设计

探索质量外延 - 质量安全故事

QualityFocus

质量管理 软件质量与安全

编程技巧│浏览器 Notification 桌面推送通知

可视化 6月月更 Notification 实时通知

Neat Syntax Design of an ETL Language (Part 1)

Bright

数据开发 ETL 大数据开发 EasySQL

人才一站式服务平台开发,高层次人才管理系统

a13823115807

java程序员培训 | 10年后程序员的薪资会怎么样

@零度

JAVA开发

个推TechDay直播预告 | 6月22日,开启大数据降本提效的破局之道!

个推

大数据 分布式计算 分布式存储 标签

特定MPC问题包含哪些常见技术,有什么作用,什么场景需要用到?

Jessica@数牍

隐私计算 安全多方计算 特定mpc问题

阿里云CIPU下笔惊雷,方寸间书写中国算力故事

脑极体

2023年广州美博会-2023年春季广州美博会

Geek_0b38bb

美博会 2023年广州美博会 春季广州美博会 3月份广州美博会

java就业培训 | 面试官如何判断应聘者能力的,这一篇就够了

@零度

JAVA开发

个推CTO趣谈元宇宙:从概念、成因到核心技术

个推

数据智能 元宇宙

InfoQ 极客传媒 15 周年庆征文|跨平台应用开发进阶(二十二) :uni-app Android APP上线准备工作汇总

No Silver Bullet

前端 签名 安全检测 6月月更 InfoQ极客传媒15周年庆

华为云携手鸿蒙,培养创新型开发者

华为云开发者联盟

云计算 鸿蒙 华为云

技能速成!教你10分钟内在电脑上配置运行Hive Metastore和Presto

Alluxio

presto 技能 Alluxio hive metastore 初学者

帮助中心应该怎样设计?

小炮

易观分析《计算机视觉市场研究,2022》研究报告正式启动

易观分析

人工智能

Javascript API自动代码生成需求征集

百家饭隐私计算平台创业者

JavaScript OpenAPI axios

科创人·酷渲科技创始人华少:用双赢思维做产品、连生态,实现规模化发展

科创人

网络安全实战从0到1彻底掌握XXE

网络安全学海

黑客 网络安全 安全 渗透测试 WEB安全

BI与SaaS碰撞,让数据处理更加轻松(下)

葡萄城技术团队

数据分析 SaaS BI

多年亿级流量下的高并发经验总结,我毫无保留的写在了这本书中

冰河

并发编程 多线程 高并发 异步编程 6月月更

web前端培训如何提高React界面性能

@零度

前端开发 React

Vue-12-条件渲染(可重复元素)

Python研究所

6月月更

【6.10-6.16】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

Mysql数据库查询好慢,除了索引,还能因为什么?

C++后台开发

MySQL 数据库 中间件 后端开发 C++后台开发

【LeetCode】多个数组求交集Java题解

Albert

LeetCode 6月月更

Istio为什么不再使用微服务?_架构_Christian Posta_InfoQ精选文章