istio回归「单体应用」对我们的启发

大家好,我是Z哥。

这次分享给大家的是一篇与技术相关的文章,但是我想表达的核心观点并不仅限于技术范围。

我们中国有句古话,分久必合,合久必分。

很多事物的发展都逃不开这个规律。如今,这件事也正在分布式、微服务概念大行其道的软件开发领域里发生。

就在这个月5号,在近些年大热的Service Mesh中被热炒的istio宣布回归到单体应用架构。

可能有的人对istio不是很了解,我稍作下介绍。

istio是一种以sidecar模式为应用程序建立网络通信的技术框架,基于其搭建的通信网络具有负载均衡、服务间认证、监控等功能。这些功能都是微服务系统中必不可少的。

它亮点就在sidecar模式的无代码侵入上,配合上“黄金搭档”——docker,让它成为了近两年火热的Service Mesh概念的带头大哥之一。

这个框架的设计非常整洁,各个模块的职责清晰,被不少人视作“高内聚、低耦合”的范本。但是它的每个模块都是单独维护的,其中Mixer的模块甚至是单独一个进程来运行。

就这些简单的分离,其实也是“分布式”、“微服务”的「分治」思想的体现。

此时,作为Service Mesh的领头羊宣布回归单体应用,虽然对它自身来说只是一个架构调整而已,但间接给国内各种炒作微服务概念的人敲了一下警钟。

身边有不少人或者企业其实在盲目的追求微服务架构,觉得少了这个就不好意思说自己在互联网企业做技术一样。

并且有一些还在追求更细粒度的微服务拆分上乐此不疲。原本一个应用程序就能搞定的一件事,非得拆成4个、5个程序相互协调才能完成。这样真的划算吗?要打上一个大大的问号。

其实类似这样的事情在我们的生活中很常见,但是在生活中我们却理性得多。

想象一下,假如现在你要去倒垃圾,那么需要做以下这几件事。换上衣服、给垃圾分类、下楼走到垃圾桶前倒掉。

你会请3个人分别帮你换衣服、做垃圾分类以及下楼去倒掉吗?我想肯定不会,这不是搞笑么。

别笑,过度的服务化拆分就是这么变扭的一件事。一个叫ChangeClothesService、一个叫WasteSortingService,一个叫DumpRubbishService……

那么,如何判断当下的系统是否过度拆分?你可以试着回答以下几个问题。

  1. 各个部分是否支持单独部署和更新?如果不能,就是过度拆分。

  2. 是否可以由不同的开发人员维护不同的部分?如果不能,就是过度拆分。

  3. 是否存在不同的运维策略。比如,不同的安全策略、部署策略等。如果不存在,可能是过度拆分。

  4. 是否经常费很大劲才能确定问题的根源在哪一个服务上?如果是,可能是过度拆分。

当然,拆分的好处是显而易见的,分而治之,成就“高内聚、低耦合”的终极目标。

但其实单体应用做好模块化划分和管理,也能成就“高内聚、低耦合”这个目标,同样不会成为“Mud Ball”。

不过,为了在同一个项目里达到“高内聚、低耦合”的效果,这必然会比使用服务化的拆分方式付出更多的代码管理成本。毕竟后者对代码进行了硬性的隔离,而单体应用的模块化拆分全靠每一位参与编码的程序员是否共同遵守了一些共识。

比如,我们在编码的时候要尽可能的共同遵守以下这些原则:

  • 单一职责原则

  • 里氏替换原则

  • 依赖倒置原则

  • 迪米特法则

  • 开闭原则

  • 接口隔离原则

  • 合成复用原则

为了确保大家遵守统一的规则,对codereview的要求就会提高,所以代码管理成本是实实在在会增加的。但是这些额外的成本相比过度微服务化后增加的复杂度所带来的隐性成本,哪个划算还真得好好算算。

istio团队已经深刻认识到了这个问题,所以他们喊出了一个口号:

Complexity is the root of all evil or: How I Learned to Stop Worrying and Love the Monolith.

不知道你是怎么看待「单应用模块化」和「分布式服务化」两者的利弊的呢欢迎留言给我一起讨论哦。

推荐阅读:

  • 聊聊面试的事(应聘方)

  • 新的一年,程序员如何让自己更值钱?

原创不易,如果你觉得这篇文章还不错,就「在看」或者「分享」一下吧。鼓励我的创作 :)

如果你有关于软件架构、分布式系统、产品、运营的困惑

可以试试点击「阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 110平衡二叉树-简单

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1: 输入:root [3,9,20,null,null,15,7] 输出:t…

c语言中如何使用面向对象编程,如何使用C语言的面向对象

我们都知道,C才是面向对象的语言,但是C语言是否能使用面向对象的功能?(1)继承性typedef struct _parent{int data_parent;}Parent;typedef struct _Child{struct _parent parent;int data_child;}Child;在设计C语言继承性的时候,我…

c语言开发环境 推荐,C语言复习和VC++6.0开发环境推荐.ppt

C语言复习和VC6.0开发环境推荐* * * * * * * * * F10-单步调试 F11-进入函数内部调试 ShiftF11-从函数内部回到调用函数(如main) CtrlF10-运行到光标处. ShiftF5-终止调试过程. * 是一个重要概念,可以有效地表示复杂的数据结构; 能动态分配内存&#xff…

LeetCode 112路径总和-简单

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,…

ASP.NET MVC升级到ASP.NET Core MVC踩坑小结

写在前面ASP.NET Core是微软新推出的支持跨平台、高性能、开源的开发框架,它的优势不必多说,因为已经说得太多了。当然,现在依然有着数量庞大的系统运行于.NET Framework上,由于有大量的Break Changes,很多项目项目团队…

用函数求C15的值C语言,南开19春学期(1503、1509、1603、1609、1703)《C语言程序设计》在线作业-1辅导资料.docx...

南开19春学期(1503、1509、1603、1609、1703)《C语言程序设计》在线作业-1辅导资料.docx 南开19春学期(1503、1509、1603、1609、1703)C语言程序设计在线作业-11、D 2、B 3、C 4、A 5、D 一、单选题共40题,80分1、以下对一维整型数组 a 的正确说明是 Aint a10 ;Bint…

LeetCode 563二叉树的坡度-简单

给定一个二叉树,计算 整个树 的坡度 。 一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。 整个树…

c语言简单快速排序原理,C语言之简单快速排序

快速排序是一种对冒泡排序的改进,运用了二分的思想,提高了效率,元素的交换是跳跃式的,更适合用在数组这样方便随机读取的顺序结构,平均时间复杂度NlogN。#include #include /*快速排序*/void input(int*,int);void out…

LeetCode 501二叉搜索树中的众数-简单

给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值…

CIO/CTO都应该掌握和了解的EA(企业架构)

我们已进入数字化技术推动的第四次工业革命,是以工业互联网建设为标志。单纯从IT的视角管理信息化系统让许多企业深陷管理困境,解决问题也是按下葫芦浮起瓢。实际上,IT的服务对象是企业的战略、组织、管理、流程等一系列的要素,因…

c语言火车票管理系统源代码2000行,C语言教务管理系统[2000行代码].doc

专业资料精心整理C语言教务管理系统一、程序结构图二、程序运行截图1. 个人信息简介2. 修改颜色3. 注册界面4. 信息保存至文件5. 登录界面6. 管理员录入信息7. 学生信息录入8. 学生成绩录入9. 学生课程表录入10. 学生信息查询界面11学生信息查询12. 学生成绩查询13. 学生课表查…

LeetCode 530二叉搜索树的最小绝对值差-简单

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 输入: 1\3/2输出: 1 解释: 最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3&#xf…

扛并发主力军,引入应用层缓存

1.背景缓存的使用一定是今后开发中100%会用到的技术,尤其是Redis相关的问题,如果面试官不问我我几个缓存相关的问题,那我觉得我可能是去了个假的互联网公司。这里考虑到有些初学者刚刚出校园或者自学中,准许我多费口舌介绍下关于缓…

c语言筛法求一个范围内的素数,运用埃拉托色尼筛法求解一定范围内的素数.docx...

#includetypedef struct Node{int data;struct Node *link;}LinkList;void buildList(int max,LinkList *&head){//构建链表函数LinkList *l,*p;int i;head(LinkList*)malloc(sizeof(LinkList));head->linkNULL;lhead;for(i2;i<max;i){p(LinkList*)malloc(sizeof(Lin…

LeetCode 783二叉搜索树节点最小距离-简单

给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1 示例 2&#xff1a; 输入&#xff1a;root [1,0,48,null,null,12,49] 输出&#xff1a;1 提示&…

二级c语言作答文件不存在,全国计算机等级考试二级C语言上机考试题库及答案...

希望对有需要的人有帮助第1套 一、填空给定函数的功能是调用fun函数建立班级通讯录。通讯录记录每位学生的编号&#xff0c;姓名和电话号码。班级的人数和学生的信息从键盘读入&#xff0c;每个人的信息作为一个数据块写到名为答案yfile5.dat的二进制文件中。答案:1. STYPE 2. …

使用 VMware + win10 + vs2019 从零搭建双机内核调试环境

我在前面的文章——《使用 VMware win10 VirtualKD windbg 从零搭建双机内核调试环境》分享了使用 windbg 进行双机内核调试的环境搭建的步骤。有小伙伴儿留言说&#xff1a;在使用 vs 进行双机内核调试的时候&#xff0c;总是连不上。希望能发一篇使用 vs 进行双机内核调试…

LeetCode 617合并二叉树-简单

给定两个二叉树&#xff0c;想象当你将它们中的一个覆盖到另一个上时&#xff0c;两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠&#xff0c;那么将他们的值相加作为节点合并后的新值&#xff0c;否则不为 NULL 的节点将直…

配合理lcd的c语言小游戏,C语言源程序LCD.doc

C语言源程序LCDC语言源程序//******** 小波电子工作室 All rights reserved******//******** 个人主页&#xff1a;/niejinbo **//******** 文 件 名&#xff1a; lcd_0712.c **************//******** 功能概要&#xff1a; LCD液晶显示字符 ***********//******** MCU: STC89…