刚刚毕业第一份工作,没接触过分布式微服务相关的知识,后来换工作才了解到这些,面试官看了我简历里写了分布式相关,就开始揪住这个问题问,虽然一知半解地说了点,但是面试官明显不满意,没抓住要点,因此关于理论概念,还是要好好掌握总结的。
划重点:
问题分析:
各种分布式框架层出不穷,Spring Cloud,阿里的 Dubbo,无论使用哪一个,原理都相同,考察下基本概念掌握的如何。
我:
什么是分布式系统:
为了解决传统单体服务架构带来的各种问题,代码数量庞大,迭代测试维护困难,可能因为一处改动测试不到位造成整个服务瘫痪等问题,分布式系统就是将一个大的服务拆分成几十个甚至上百个微小的服务。如果把单体架构服务器比做篮子,那代码就是鸡蛋,不要让所有鸡蛋别装在一个篮子里,也方便大家分工开发,代码不在一个项目里,也不会冲突,最主要的是项目自己维护,多好。
比如阿里的 Dubbo,还有 Spring 全家桶里的 Spring Cloud,都是解决分布式微服务架构的优秀框架。
问题分析:
优点是显而易见的,面试官主要是想看看意识到有哪些缺点和问题,不过好的方面还是要简单带过。
我:
优点很多呀,使用分布式不就是为了解决传统架构各种问题嘛,多人在一个下开发维护难,也不好控制容错能力。拆分成微服务问题就好办多了。主要从 4 个方面简单说下。
传统的集中式计算或集中式存储在遇见单点故障时很容易造成整个服务不可用,分布式下的服务体系,单台机器有故障,不致于造成整个服务不可用。
比如双 11 活动,平时订单少 50 台机器就够了,到了 11 订单量剧增,服务器增加到 100 台,每台机器之间相互独立,互不影响。
(手里有笔,能给面试官随便画画)
同一组服务分别部署在北京上海杭州,杭州的机房突发断电或者火灾,杭州机房的流量会被自动分发到北京和上海的机房,不影响用户使用。
面试官:嗯,基本覆盖全面了,继续说说缺点。
凡事具有两面性,分布式服务带来很多好处的同时肯定还会带来麻烦,主要从 3 方面考虑。
面试官:嗯,最主要的第三点意识到了。(面试官心理:如果能意识到 CAP 问题那就好办多了,提到 CAP,那可以继续聊聊)
成功给自己挖坑,关于 CAP,下一节单独讲解
(图片来源:https://medium.com/)
关于分布式系统,通俗点讲就把整个业务系统拆分成很多的服务,每个服务责任到人,服务之间代码都没有冲突,服务可以自治,每个服务到技术也可以自己选型,只要遵循统一的服务调用协议就可以了。每次发布如果就改动一个服务那就上线一个服务,不用所有人一起联调,这样每次发布牵扯到的改动影响也是可控的。不像传统单体架构服务,动辄几百万行代码融在一起。
这个概念是 Jim Waldo 在 1994 年发表的题为 “ A Note on Distributed Systems ” 的论文中提出的,感兴趣的读者可以看看英文原文。
百度百科是这样解释的:
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
分布式系统并不是某一门具体的技术,也不是具体的框架。用大白话理解就是将计算能力和数据存储能力分散在不同服务器上,通过网络连接组成的一个整体的服务,不同服务器可能是物理机,也可能是虚拟机,分布式的概念可以理解成一种解决方案。
分布式系统总结来说是将数据存储能力和计算能力分布到不同的服务器上,作为一个整体对外服务。目的在于解决单台机器的故障问题,单机计算和 IO 性能问题,以及单机存储空间不足的问题。虽然单机故障的概率比较小,但是随着集群规模大了之后,集群宕机和磁盘损坏基本上是常态,分布式系统主要解决的是各种故障带来的问题。
比如,美团外卖,用户角度去看这就是一个能叫外卖的 APP,选商品,提单付款,等待配送后订单完成,如果从系统开发工程师角度去看,这个小小的 APP 后面却是一个非常庞大的系统,你点一次外卖,后台会经过几十次上百次服务调用才能完成整个流程。从大的角度去看,包括商品管理系统,订单系统,支付系统,结算系统,商家系统,配送系统,风控系统等等。每一个子系统又能分成若干个微服务,各个系统逻辑上构成一个整体统一对外服务。
关于分布式系统和微服务,两者都只是一种概念。如果你采用微服务,就意味着系统一定是分布式的,分布式系统具有的优缺点在微服务理都会体现,个人理解微服务是分布式系统的一种具体落地方案。
随着互联网的发达,传统单体项目已经完全不能适应现在互联网用户量需求,2010 刚刚毕业的时候只会 SSH/SSM 就能找到工作,不了解分布式,也没听说过,很多软件公司也是一套框架打天下。如今这个时代已经过去了,经常有读者问我初学者学什么语言好找工作。如果想收到大公司面试机会,拿到 offer,编程语言只是基础,对于分布式系统基础也很重要,光靠学一门语言就想找到一份工作应该很难,所有大一点的互联网公司系统都是分布式的,公司希望招到的人也都很了解分布式相关的知识。
分布式系统的优点:
分布式系统缺点: