作为一名开发者,你肯定经常听到像“我们采用了可伸缩的微服务架构”、“我们正在计划切换到微服务架构”之类的话,然后你寻思着:微服务到底是什么?近日,西达尔特·马霍特拉(Sidharth Malhotra)通过真实世界的比喻解释了什么是微服务架构,重点内容如下。
大冰激凌机——单体
冰激凌机由四个部件组成——冰淇淋勺、坚果粉碎器、巧克力漏斗和草莓糖漏斗。冰淇淋勺往杯子里添加香草或芒果冰激凌,坚果粉碎器将碎坚果撒在冰激凌上,巧克力或草莓漏斗把液体糖浆倒在冰激凌上。对于顾客来说,除了冰激凌勺之外,其他都是可选的。
假设你是冰激凌店的老板,一开始你有一台小冰激凌机,这个冰激凌机配备了所有上述的四个部件。顾客很喜欢你家的冰激凌,你的生意越来越红火。那么接下来你会怎么做?你会买一台更大的冰激凌机,这样就可以在同样的时间内做出更多的冰激凌。按照这样的节奏发展下去,终有一天你会没办法再扩大规模,因为工厂生产不出更大的冰激凌机了。
在软件开发领域,这就是所谓的单体架构。一个包含了所有组件的应用程序,代码都存放在一个代码基库里。随着需求的增长,你租用了越来越大的机器,而到了某个时刻肯定会达到极限,因为你租不到比目前更大的机器了。
这时,你一定会想到通过购买更多的冰激凌机来解决这个问题。所以你放弃了购买更大的冰激凌机的想法,而是购买更多小型的冰激凌机。
这就是所谓的“克隆”,你会使用多个应用程序实例来处理用户请求。
![](https://img2018.cnblogs.com/i-beta/127185/202002/127185-20200222162622331-105177131.png)
每台机器各司其职——微服务
在刚开店时,你只聘请了一名负责维修和升级机器的师傅。但在购买了多台机器之后,你觉得有必要聘请更多的师傅,因为你不希望有机器坏了影响生意。
现在,有顾客希望你家的店能够增加不同口味的冰激凌。你决定在冰激凌勺里增加巧克力冰激凌。但因为冰激凌机的四个部件相互依赖,动了其中一个就会影响到其他部件,等维修师傅好不容易加好了新口味的冰激凌,草莓糖漏斗却坏了,
因为伸缩性受到了限制,你决定搭建新的基础设施。你要求工厂把原先冰激凌机的每个部件独立成单独的机器,变成一个冰激凌勺机,一个坚果粉碎机,两个漏斗机(一个可以流出巧克力,一个可以流出草莓糖)。并且你把维修师傅分成几组,每一组负责不同的机器。
这就是所谓的微服务架构,大单体被拆分成多个独立的模块,每个模块都是一个应用程序,负责处理不同的任务。
![](https://img2018.cnblogs.com/i-beta/127185/202002/127185-20200222162911036-1493734482.png)
单体与微服务
对于伸缩性,你可能已经注意到了,在购买了最大型的冰激凌之后,你就没办法再扩大规模了。但有了单独的部件机器(微服务)之后,你可以购买更多的部件机器。
对于可维护性,为了给冰激凌机增加新口味的冰激凌,却不小心弄坏了草莓糖漏斗,因为一个大单体系统的不同部分通常是相互依赖的,修改某个部分会影响到其他部分。而在微服务架构里,不同的机器由不同的团队负责,每个团队管好自己负责的机器,避免了冲突。这种独立的开发模式也加快了发版的速度,因为在一个大型组织里,团队内的沟通比团队间的沟通效率更高。
关于成本,你可能会想,多买几台大冰激凌机不就能解决伸缩性问题吗?但也请试想一下,如果你只想增加冰激凌口味并保持其他部分不变,你不得不为此购买整套机器。而在微服务机构中,你可以只买冰激凌勺机。这样就节约了很多成本,因为你可以根据每个服务的请求量来增加或者减少单个服务的实例数量。
关于就绪时间,大冰激凌机已经把所有的部件都集成好了,只要把它放在正确的地方,并启动它就可以了。但是,独立的部件机器在使用前需要用传送带把它们连接在一起。因此,微服务需要更多的时间和专业知识才能让它运行起来。
在测试和部署方面,大冰激凌机的测试和部署相对困难,因为所有的部件相互依赖,需要每个部件都集成好了才能测试和部署。但对于部件机器来说,因为每种机器都是独立的,所以测试和部署也相对容易。
以上就是今天的内容,你理解单体与微服务是什么了吗?