程序员如何通俗易懂的给老婆解释什么是微服务?

程序员有了老婆之后就是累,上次好不容易给她解释了什么是Restful,这不,麻烦又来了…

一个周日的清晨,阳光洒在我的脸上,慢慢把我唤醒。我翻过身,感觉好像少了些什么东西,缓缓地睁开眼睛,“咦,老婆呢?”

突然,我发现床上多了张纸条:

看到这封信时,我已经在回娘家的路上,原因我相信你懂的。如果你不懂,请将信翻到背面。

我一脸懵逼,将纸翻了过来:

哼,你怎么可能不知道原因,你翻过来看就是想确认我发现的是不是你那个秘密而已,那我就告诉你吧。

在你的书桌上,有一本叫 《微服务设计》 的书,我虽然是女生,但也知道“服务”是个什么勾当,没想到你放着好好的程序员不做,居然做起了“服务”,你和旧时代的老鸨有什么区别?

书我翻了一下,想看看你的这种“微服务”是怎么个“微”法,哼,你们程序员挺精明的,看的书都加密过的?别以为我不知道那些是代码,是你们程序员的通用语言。鬼知道里面讲了什么东西。

不管怎样,既然你选择了这条路,也就别怪我不仁不义,再见。不,再也不见。 —— 对你很失望的静香

我渐渐地缓过神来,百感交集,思绪万千,冥想了一会,拿起手机,给她发了信息:

“下午四点,老地方,给你解释什么是微服务。”

沃尔兹百货超市

我提前十五分钟来到了咖啡厅。临近四点,我开始望着门口,59分49秒,一个熟悉的身影走了进来,戴着墨镜,披着纱巾,是她。

“服务员,一个芝士蛋糕,两杯拿铁,谢谢”,我对服务员说。

“说吧,你有什么要解释的?”

“嗯,首先,我向你保证,我在看的“微服务”,绝对不是你想的那种“服务””

“那是什么?”

“这个解释起来要花点时间,我们先吃点蛋糕,待会再慢慢和你解释”

过了一会,蛋糕吃的差不多了。“看到对面那家沃尔兹百货超市了么?”,我指着窗外面的沃尔兹超市,对老婆说。

我渐渐地缓过神来,百感交集,思绪万千,冥想了一会,拿起手机,给她发了信息:

“下午四点,老地方,给你解释什么是微服务。”

沃尔兹百货超市

我提前十五分钟来到了咖啡厅。临近四点,我开始望着门口,59分49秒,一个熟悉的身影走了进来,戴着墨镜,披着纱巾,是她。

“服务员,一个芝士蛋糕,两杯拿铁,谢谢”,我对服务员说。

“说吧,你有什么要解释的?”

“嗯,首先,我向你保证,我在看的“微服务”,绝对不是你想的那种“服务””

“那是什么?”

“这个解释起来要花点时间,我们先吃点蛋糕,待会再慢慢和你解释”

过了一会,蛋糕吃的差不多了。“看到对面那家沃尔兹百货超市了么?”,我指着窗外面的沃尔兹超市,对老婆说。

“嗯?”

“那里面什么都有,衣服、食品、文具、家私、电器,应有尽有,而且不管你去到哪一家连锁店,店里的格局都是一模一样的。也正因为如此,这才带来了问题。”

“有什么问题呢?我觉得这样挺好呀,顾客去了那里,想买什么都找得着。”

“首先,这些卖不同物品的 隔间之间会互相影响 。你看,一楼是珠宝店和电器店,假如珠宝店想进行装修,装修时的噪声和灰尘,势必会影响到电器店;还有,假如由于电器店一名员工的疏忽,引发了火灾,旁边的珠宝店是不是也会受到牵连?”

“你这乌鸦嘴…”

“哈哈,都说是假如啦。除了这点,还有一个问题,我考考你,我们这个城市里有几家沃尔兹超市?”

“我想想,好像就这一家?”

“没错,只在西区这里开了一家店。这时候市场总监发现,住在东区的多是上层阶级,他们对珠宝的需求量比较大,这时候要怎么办?”

“那就在东区也开一家沃尔兹百货超市罗。”

“嗯,只能是这样了,可是东区的居民对其他东西的需求并不多,而沃尔兹超市又想让每家分店卖的东西都是一样的,所以他们不得不在东区开一家分店,不仅卖珠宝,也卖食品、衣服还有其他东西”

“这挺浪费的呀, 为了满足人们对珠宝的需求,又开了一个百货超市 。”,老婆若有所思。

“的确,什么都有、什么都卖的百货超市实在是太 笨重 了,这才有了「微服务」”

“哦?终于要讲微服务了?哼哼。”

沃尔兹小店

“你看,假如我们把沃尔兹百货超市, 拆成很多个卖不同商品的小店 ,比如卖珠宝的沃尔福、卖家私的沃尔家、卖食品的沃尔良还有卖衣服的沃尔衣,这些提供不同服务的店,分布在城市的各个地方,这样他们之间就不会互相影响了。东区二巷的沃尔家搞装修,三巷的沃尔福不会受到影响;三巷的沃尔福发生火灾了,二巷的沃尔家也安然无恙。”

“Soga,原来是这种微服务”,老婆笑着说。

“不仅如此,现在,我们发现东区的居民对珠宝的需求量大,那我们就在东区 多开几家沃尔福,而在西区,中产阶级较多的地方,我们就多开几家沃尔良。”

“哇塞,这样看来,微服务让沃尔兹变得 轻巧 了许多! 哪个地方对某种服务的需求大,就在对应的地方多开几家卖那种服务的小店就好了 。”

沃尔兹网店

“看来微服务就是把一个百货店变成各个小店嘛,讲这个东西至于用那么厚一本书么?”,老婆是个好奇心很强的女生。

“哈,微服务当然不只是这些,我们现在只是把一个百货店拆成各个小店,但是对于 如何管理这些小店 ,我们还没做好准备”

“哦?这里面还有什么门道?”

“当然,别忘了,沃尔兹可是有网店的。以前还是百货超市的时候,要是有顾客从网上买了一件衣服,那直接从百货超市的仓库里取出这件衣服,给顾客寄过去就好了;现在呢,每一家卖衣服的沃尔衣都有自己的仓库,顾客下单后, 工作人员要怎么知道顾客所在区域有哪几家沃尔衣?要从哪家沃尔衣发货呢? ”

“哟西,还有这个问题。那 沃尔兹总店肯定知道他们在哪个地方开有什么分店吧 ?”

“没错,这时候网店工作人员会从总店那里查出,顾客收货地址所在区域有哪些家沃尔衣,接下来就是从这些沃尔衣店里,选一家,给顾客寄快递过去。”

“就选离顾客最近那一家就好啦。”

“哈,那万一东区有两家沃尔衣,一家靠近居民区,一家靠近商业区,而顾客通常写的收获地址都是写自己家呢?”

“这样… 那靠近居民区的沃尔衣就会收到很多订单,经常要不断的进货,而靠近商业区的那家,就没什么订单了,是吧?”,老婆睁大双眼看着我。

“对!这就是问题,所以网店工作人员会对在一个区域内的沃尔衣,进行 轮流发货 的操作,比如这一次是靠近居民区的这家发货,那下一次,就让靠近商业区的沃尔衣发货。”

“Soga!”

“用计算机术语来说,就是 LoadBalancing ,负载均衡”

“呵呵,少扯这些术语,我只知道New Balance”

“哈哈,怎么样,微服务不是你想象的那样吧,当然,在经济学领域,要考虑的因素还有很多,现实生活中的沃尔兹依然是一个大百货超市,自然是有它的道理的。微服务的应用主要是在更为纯粹的计算机领域,也就是你看到的那些代码”

“得了,看到那些头就大,走,带我去娘家拿行李”

“……”

对程序员的话

用了大白话,给老婆讲明白了微服务的来龙去脉,当然,我还是有些话想说的,还是怕老婆听完一脸懵逼,没给她说:

1、讲微服务,就不得不从 单体应用 (Monolithic )讲起。

所谓单体应用,就像一开始的沃尔兹百货超市一样,把所有业务的代码都放在一起。这对于小型项目来说自然是很合适的,可是项目一旦大了起来,业务一多,这个单体也就 膨胀 了,膨胀后的单体应用主要有以下两个缺点:

牵一发而动全身 。我改了一个业务的一行代码,需要重启整个单体应用,这显然不不合理的。就像珠宝店装修时影响了旁边的电器店,电器店着火时殃及珠宝店一样。

只能水平扩展,不能纵向扩展 。对于单体应用,如果发现某一业务的请求量非常大,那么是无法单独扩展该业务的,只能拷贝整个单体应用,再部署一套环境,来实现集群。

正因为单体应用有着这些缺陷,才有了微服务。微服务和单体应用的区别,可以用Martin Fowler的这张图来解释:

2、微服务虽然带来了架构上的优势,但同时也引入了 复杂性 。我们不得使用一些组件,来解决技术复杂性提高之后带来的问题:

服务注册中心 :一个服务可以有多个 实例 ,那么我们在向一个服务发出请求的时候,怎么知道这个服务有哪些实例呢?为了减少手工维护的麻烦,我们需要服务注册中心。每个服务实例在启动时,向注册中心注册自己的IP地址等信息。这样,服务在调用别的服务的接口时,就可以通过注册中心,查询到其他服务的实例,向实例发起请求。沃尔兹总店就是起到注册中心的作用。

负载均衡 :由于一个服务可以有多个实例,所以不管是来自外部客户端的请求,还是微服务系统内部服务之间发起的请求,都需要引入负载均衡的机制,来发挥多实例集群的作用。有的书也称这两种负载均衡为 服务器端负载均衡 和 客户端负载均衡 ,各自具有代表性意义的实现分别是Nginx和Ribbon。

API Gateway :一个外部请求过来之后,我们需要知道这个请求是发给哪个服务的,也就是我们需要一个 请求路由 的功能,比如/cm/*的请求,要发给客户管理服务,/om/*的请求,要发给订单管理服务。另外,不是所有请求都可以被我们系统处理的,我们需要判断这个请求是否携带一些必要的鉴权信息,并对其进行鉴权,也就是 请求过滤 的功能。而API Gateway,就是起到了这两个功能,它就像 整个微服务系统的门面 ,所有请求,都要先经过它的处理,才会转发到对应的服务。

……

微服务系统的衍生组件还有很多,比如对各个服务进行的配置管理的分布式配置中心、各个服务之间进行消息通讯的消息总线和消息驱动机制(上图中的Message Queue)等,这里就不一一列举了。这篇文章只是想用一种比较有趣的方式,让大家对微服务有一个初步的了解。就像学设计模式,如果直接去看四人帮的《设计模式——可复用面向对象软件的基础》,也许很多人学到一半就学不下去了,而如果先去看《Head First设计模式》,再去看前面那本书,也许就会发现轻松很多。

大家如果想对微服务有进一步的理解,我这边推荐一个交流学习群:685167672  里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多:

对微服务的来源有更深入的了解,知道微服务这种设计模式,和Unix以及 康威定律 的关系;

看到微服务是如何影响软件开发的 组织结构 的,其实也就是康威定律;

看到Martin Fowler总结的设计微服务系统的几个原则;

架构这种东西,和设计模式非常相像,两者都是针对某一类问题的解决方案。和设计模式一样,每种架构都有其优点,当然也会有缺点。只有弄清楚为什么要用这种架构,不用会怎样,用了又会怎样,知其然知其所以然,才能对架构进行灵活运用,在实际项目中发挥架构的优势。

原文链接:https://blog.csdn.net/hang1995/article/details/80844483

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维咖啡吧

python如何帮我在投资中获取更高收益

有一部分用户(行话叫牛)就靠平台活动或高息的时候借钱加杠杆投资,需要还钱的时候通过债权转让平台转让标还借款,通过买入和卖出时的利率差获得额外收益。这中间比较关键...

843
来自专栏FreeBuf

没时间了,赶紧上车!教你如何在一小时之内加密你的整个数字生活

写在前面的话 Andy Grove曾经担任过英特尔公司的首席执行官,他参与了英特尔公司的创建并主导了公司在1980年-2000年间的成功发展。他是一位匈牙利出生...

3259
来自专栏FreeBuf

车真的那么容易偷吗?汽车无线钥匙通信安全的一点科普

不久前在HackPWN的启动仪式上,安全人员仅用2分钟就通过无线钥匙破解了一辆奔驰汽车,看起来黑客要偷走一辆汽车很容易。真的这么简单吗?作为无线安全研究者,在这...

2675
来自专栏Java架构师进阶

作为开发者犯过的两次愚蠢的错误 一定切记切记

上周我和同事们简单地聊了聊我们工作中搞砸的那些事儿。如今早已不再犯那些错了,所以想起过去就觉得很好笑。但是笑归笑,其实当时犯的这些错让我们受益颇深。

942
来自专栏张叔叔讲互联网

【一文读懂】什么是网络爬虫,每天都在忙乎什么?

先自我介绍一下,我是一只网络爬虫,出生在计算机中,操作系统就是我的爸爸妈妈,现在都活了2000毫秒了,这个放到我们生活的世界来说,已经属于比较长寿了。我出生之后...

1312
来自专栏资深Tester

一个致命的bug--自负

2748
来自专栏逸鹏说道

携程:关于反爬虫,看这一篇就够了

编者:本文来自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,以下为整理的内容概要。墙裂建议点击视频回放(http://v.qq.com/pag...

51310
来自专栏PHP在线

PHP 开发者的 Docker 之旅

用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的。这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言。「P...

3769
来自专栏BestSDK

GNU/Linux与开源文化的那些人和事

image.png 一、计算机的发明 世上本无路,走的人多了,就有了路。世上本无计算机,琢磨的人多了……没有计算机,一切无从谈起。 三个人对计算机的发明功不可没...

27210
来自专栏blackheart的专栏

[解读REST] 2.REST用来干什么的?

衔接上文[解读REST] 1.REST的起源,介绍了REST的诞生背景。每当笔者遇到一个新事物的想去了解的时候,总是会问上自己第一个问题,这个新事物是干什么用的...

1986

扫码关注云+社区