一、热烈的会议
"世界互联网大会·微服务分会场"正在如火如荼的进行着,技术主编王小五在现场听的津津有味,时而点头表示赞同,时而鼓掌表示兴奋。
一天很快结束了,作为会场嘉宾的C哥也结束了一天的活动。王小五赶紧跑到C哥跟前,准备开始今天的采访活动。
二、采访开始
小五:C哥,我们又见面了,感谢您百忙之中接受采访啊!
C哥:哈哈,没事,我们不是已经定好今天继续了嘛,那就开始吧。
小五:好的。上次说到你们后续进行了微服务的改造,很多网友没有听够,想让您再多讲讲微服务改造适用的场景。
C哥:好,那我就系统的讲一下微服务所针对的问题吧。
三、为何需要微服务
1、越来越庞大的单体应用
C哥:小五,你知不知道什么是单体应用?
小五:是说所有的服务都放在一台机器中吗?
C哥:对,差不多这个意思。单体应用是相对于微服务来说的。单体应用,即所有的服务都会在一个进程空间内执行,不会跨进程调用。对于绝大多数公司来说,前期的技术架构应该都是单体应用。
小五:是的。就像您昨天说的,单体LNMP能够满足绝大部分创业公司的需求了。
C哥:对,但是随着系统的功能越来越多,这个单体应用就会越来越大,有时候甚至牵一发动全身。
小五:那C哥您能举个例子说明下这个问题吗?
C哥:就拿呱呱乐公司来说吧。呱呱乐发展到第5年的时候,系统还是单体应用,架构可以用一张图表示。
C哥:如你所见,每台机器都部署了一个Application。但每个Application内包含了公司所有的服务。我们还是画张图简单表示下每个Application的构成。
小五:哇塞,好庞大的系统啊!
C哥:是的,随着业务越来越复杂,这个单体应用也会越来越大。
2、牵一发而动全身
小五:C哥,我好像闻到了"坏味道",这样的架构是不是经常出问题啊?
C哥:你说的没错,因为所有的服务都在一个应用内,一个服务出错,整个应用都会挂掉。
小五:也就是这个应用耦合性太高了。
C哥:是,同样的,一个服务升级,整个Application也必须全部跟着一起升级发布。可以说牵一发而动全身。
3、无法小步快跑
C哥:我们都知道,互联网产品的一个特点就是"快",快速试水,快速改进,也就是所说的小步快跑。但是,系统太庞大了,很多服务耦合在一起,共用DB、共用Cache、到处Copy-Paste的代码。我们每改一个功能,好多团队都需要作出改动,并且需要大量的测试才可以。
小五:是,那这样小步快跑的原则根本无法实现了啊。
C哥:说出来你可能不信,有一次我们要加一个用户提醒的小功能,竟然一个月才搞定上线。
小五:哈哈,那这样的架构,的确急需改变,要不然产品太没竞争力了。
4、单个服务的水平扩展
C哥:服务的水平扩展也是一个问题。比如我们的订单服务,每天需要处理大量的数据,也就是订单服务需要更多的计算资源。但我们无法针对订单服务进行水平扩展。如果订单服务支撑不过来了,我们只能水平的扩展整个Application。
小五:是啊,那这样就浪费了很多的计算资源,同时也不能很好的解决订单服务的性能瓶颈。
5、团队分工的混乱
C哥:我们可以看出来,系统很耦合混乱。与之相对的,系统的混乱导致了团队分工的混乱。因为系统的各个服务没有很好的边界,所以团队中的人做的事情很杂,造成有的人很闲,有的人很忙。
小五:嗯嗯,这个很多人应该都有体会,没有专人做专事,分工不明确。
6、代码不敢重构
C哥:看到烂代码,你是否敢去重构呢?
小五:我反正不敢重构,哈哈,牵一发而动全身。
C哥:是啊,我也不敢去重构,在一个庞大的单体应用中,重构后说不定就把哪个服务搞挂了。
7、服务的复用
C哥:我昨天还提到一个问题,就是服务的复用。比如订单服务、账单服务,我们很多业务(理财、分期、现金贷)都会用到,如果没有做服务的拆分的话,各个系统间只能是copy-paste相同服务的代码。
小五:是啊,那这样的话,我们就需要维护n套相同的代码,稍有不慎就会翻车。
C哥:对,但我们将服务拆封出来后,这个问题就不复存在了。
四、微服务的好处
小五:C哥,听你这么一说,庞大的单体应用确实带来了很多问题。
C哥:是的,刚才我说的所有问题,都是呱呱乐实际经历过的。而这些问题,使用微服务都能够解决。微服务是松耦合的,同时,人员架构的合理调整也会带来效率的提升。
五、跃跃欲试
小五:C哥,听你这么一讲,微服务简直太好了!我恨不得想马上尝试一下了,哈哈。
C哥:哈哈,先别激动。很多事情都是一把双刃剑,微服务也会带来很多问题。
小五:哦?会带来哪些问题呢?
C哥:其实带来的问题还是很多的,如果这些问题解决不了,上来就搞微服务其实就是耍流氓。
小五:对对,得寻找适合自己的方案。
C哥:好了,至于缺点,我们明天再讲吧,今天就到这吧。
小五:好的C哥,明天见!
后记:任何事物的产生,都是为了针对某些场景解决某些问题。所以,脱离业务,或者脱离场景的技术,都是耍流氓。
微服务要解决的问题还是很多的:其中,数据一致性是一个大问题,还有涉及到的RPC、Docker、服务发现等,都需要考虑。
此系列文章旨在让大家对微服务有一个全貌的了解,改天我们再聊聊微服务的问题以及微服务的实现,周末快乐^_^。