微服务·理论篇(二)

1,712 阅读6分钟

传送门:微服务·理论篇(一)


一、热烈的会议

"世界互联网大会·微服务分会场"正在如火如荼的进行着,技术主编王小五在现场听的津津有味,时而点头表示赞同,时而鼓掌表示兴奋。

一天很快结束了,作为会场嘉宾的C哥也结束了一天的活动。王小五赶紧跑到C哥跟前,准备开始今天的采访活动。

二、采访开始

小五:C哥,我们又见面了,感谢您百忙之中接受采访啊!

C哥:哈哈,没事,我们不是已经定好今天继续了嘛,那就开始吧。

小五:好的。上次说到你们后续进行了微服务的改造,很多网友没有听够,想让您再多讲讲微服务改造适用的场景。

C哥:好,那我就系统的讲一下微服务所针对的问题吧。

三、为何需要微服务

1、越来越庞大的单体应用

C哥:小五,你知不知道什么是单体应用?

小五:是说所有的服务都放在一台机器中吗?

C哥:对,差不多这个意思。单体应用是相对于微服务来说的。单体应用,即所有的服务都会在一个进程空间内执行,不会跨进程调用。对于绝大多数公司来说,前期的技术架构应该都是单体应用。

小五:是的。就像您昨天说的,单体LNMP能够满足绝大部分创业公司的需求了。

C哥:对,但是随着系统的功能越来越多,这个单体应用就会越来越大,有时候甚至牵一发动全身。

小五:那C哥您能举个例子说明下这个问题吗?

C哥:就拿呱呱乐公司来说吧。呱呱乐发展到第5年的时候,系统还是单体应用,架构可以用一张图表示。

image_1c5apk9re14e1jfhp6d1n9bb539.png-32.8kB

C哥:如你所见,每台机器都部署了一个Application。但每个Application内包含了公司所有的服务。我们还是画张图简单表示下每个Application的构成。

image_1c5aqbco71g4mjeg112s77gcsam.png-42.3kB

小五:哇塞,好庞大的系统啊!

C哥:是的,随着业务越来越复杂,这个单体应用也会越来越大。

2、牵一发而动全身

小五:C哥,我好像闻到了"坏味道",这样的架构是不是经常出问题啊?

C哥:你说的没错,因为所有的服务都在一个应用内,一个服务出错,整个应用都会挂掉。

小五:也就是这个应用耦合性太高了。

C哥:是,同样的,一个服务升级,整个Application也必须全部跟着一起升级发布。可以说牵一发而动全身。

3、无法小步快跑

C哥:我们都知道,互联网产品的一个特点就是"快",快速试水,快速改进,也就是所说的小步快跑。但是,系统太庞大了,很多服务耦合在一起,共用DB、共用Cache、到处Copy-Paste的代码。我们每改一个功能,好多团队都需要作出改动,并且需要大量的测试才可以。

小五:是,那这样小步快跑的原则根本无法实现了啊。

C哥:说出来你可能不信,有一次我们要加一个用户提醒的小功能,竟然一个月才搞定上线。

小五:哈哈,那这样的架构,的确急需改变,要不然产品太没竞争力了。

4、单个服务的水平扩展

C哥:服务的水平扩展也是一个问题。比如我们的订单服务,每天需要处理大量的数据,也就是订单服务需要更多的计算资源。但我们无法针对订单服务进行水平扩展。如果订单服务支撑不过来了,我们只能水平的扩展整个Application。

小五:是啊,那这样就浪费了很多的计算资源,同时也不能很好的解决订单服务的性能瓶颈。

5、团队分工的混乱

C哥:我们可以看出来,系统很耦合混乱。与之相对的,系统的混乱导致了团队分工的混乱。因为系统的各个服务没有很好的边界,所以团队中的人做的事情很杂,造成有的人很闲,有的人很忙。

小五:嗯嗯,这个很多人应该都有体会,没有专人做专事,分工不明确。

6、代码不敢重构

C哥:看到烂代码,你是否敢去重构呢?

小五:我反正不敢重构,哈哈,牵一发而动全身。

C哥:是啊,我也不敢去重构,在一个庞大的单体应用中,重构后说不定就把哪个服务搞挂了。

1.gif-364.3kB

2.gif-558.5kB

3.gif-846.1kB

7、服务的复用

C哥:我昨天还提到一个问题,就是服务的复用。比如订单服务、账单服务,我们很多业务(理财、分期、现金贷)都会用到,如果没有做服务的拆分的话,各个系统间只能是copy-paste相同服务的代码。

小五:是啊,那这样的话,我们就需要维护n套相同的代码,稍有不慎就会翻车。

C哥:对,但我们将服务拆封出来后,这个问题就不复存在了。

image_1c5av5gog4q8cf8bbc6h31mc92r.png-55.9kB

四、微服务的好处

小五:C哥,听你这么一说,庞大的单体应用确实带来了很多问题。

C哥:是的,刚才我说的所有问题,都是呱呱乐实际经历过的。而这些问题,使用微服务都能够解决。微服务是松耦合的,同时,人员架构的合理调整也会带来效率的提升。

五、跃跃欲试

小五:C哥,听你这么一讲,微服务简直太好了!我恨不得想马上尝试一下了,哈哈。

C哥:哈哈,先别激动。很多事情都是一把双刃剑,微服务也会带来很多问题。

小五:哦?会带来哪些问题呢?

C哥:其实带来的问题还是很多的,如果这些问题解决不了,上来就搞微服务其实就是耍流氓。

小五:对对,得寻找适合自己的方案。

C哥:好了,至于缺点,我们明天再讲吧,今天就到这吧。

小五:好的C哥,明天见!


后记:任何事物的产生,都是为了针对某些场景解决某些问题。所以,脱离业务,或者脱离场景的技术,都是耍流氓。

微服务要解决的问题还是很多的:其中,数据一致性是一个大问题,还有涉及到的RPC、Docker、服务发现等,都需要考虑。

此系列文章旨在让大家对微服务有一个全貌的了解,改天我们再聊聊微服务的问题以及微服务的实现,周末快乐^_^。


image_1c5582vev1mql1lrpbm3198i1pkop.png-127.1kB