0. 引言

随着网络建设的丰富和技术发展的增强,传统的单机架构已经不能满足日益递增的用户需求。学习微服务开发也成了当今java后端开发必须掌握的技术。

接下来的日子我们一起来学习微服务开发。在真正开始学习之前,我们要先理解几个基础概念

1. 基础概念

1.1 分布式

想象一下,如果一台单机的服务最多只能支持400的访问量,但是因为用户量但,同时有600的访问量打进来那么,服务肯定支撑不住。但是如果我们的服务拓展到3个,那么600的访问量均匀的拓展到3个服务中,那么每个服务只用承担200访问量,对于一个服务来说完全能够承担了

img

我们把这种拓展服务的方式称之为分布式,或者说横向拓展。说的简单点,就是一个不够,两个来凑。所以分布式强调的是部署方式。

1.2 网关

但是本身也引申出来一个问题,用户访问的时候肯定是一个网址,也就是说是一个入口进来,用户本身不会因为服务1满了,我就去手动访问服务2,这个可能在游戏服务中有切换服务器的做法,但是作为一个网站或者应用软件来说的话,不可能要求用户去切换网址的。

所以从一个统一的入口进来后,我们就需要一个东西来帮助我们将这些请求,按照预设的算法(可以是均匀分发,也可以是按顺序分发)来帮助我们把用户的请求分发到不同的服务上,以此来分解单个服务器的压力。我们把这个帮助我们分发请求的东西称之为网关。这里我们就简单的提一提它的作用,后续再做详细拓展
img

1.3 微服务

有了分布式有了网关,我们的问题就解决了吗?

想象一下以下几个场景:
1、服务中有订单模块,商品模块,现在我的订单模块产生了报错,导致了服务崩溃,那么连带着商品模块也跟着崩溃了。如果某个请求只需要调用到商品模块,因为订单模块的崩溃,导致访问商品模块的也出现了404无法访问

2、服务中的商品模块的请求量是400,订单模块的请求量是200,服务能够承担的请求量是200,那么因为要满足商品模块的400请求,导致我们必须要扩展到2个服务,但是实际订单只需要1个服务即可满足,是不是产生了一定的资源浪费呢?

那么如何去解决以上几个问题呢?

我们把服务拆分以下,比如我们把订单服务,商品服务单独拆分出来作为两个独立的服务。这样我们就可以对这两个服务再分别定制分布式了。而且当订单服务崩溃后,因为两个服务的独立性,商品服务仍然可以正常运行。
img

所以,这种把大服务,细致化拆分成小服务的做法,就是微服务。但是根据什么样的规则去拆分微服务,就要根据公司或者业务的需求,以及一定的开发经验来判定了。一般我们是按照业务属性来进行拆分。因此微服务强调的是架构方式

1.4 注册中心

上面我们说到可以按照预设的算法来帮助我们把用户的请求分发到不同的服务上,这个分发的算法我们称之为负载均衡算法,负载均衡算法有很多种,除了上述说到的平均分发、按序分发,还有根据ip计算hash值分法、权重分法等等

但是不管怎么分发,我们都需要知道有哪些服务可以给我们的网关来进行分发,也就是说网关要进行分发的前提是,它得先知道现在有多少个服务,哪些是用户服务、哪些是订单服务、哪些是商品服务,每种服务又各有多少种。只有这样网关才能对请求进行正确的分发。

我们就可以想象,网关中一张表格,记录了当前的服务列表。但是又存在一个问题啦,为了保持列表是最新的,如果有服务宕机了,那么列表中应该把它删除,如果有新增服务进来,同时列表中也应该要添加上。为了保持这个实时性,就需要各个服务定时给维护这张列表的服务发送请求,告诉它“我还活着,别把我删掉”,这个维持服务在长期没有接收到某个服务的请求后,就会认为它已经宕机了从而将其剔除掉,如果有请求在列表中没有,那么就会认为它是新加入的,会将其添加到列表中。

综上所述,维护这个列表的服务要做的活也不少,我们也单独地将其抽离出来,形成了一个服务,这个服务就是注册中心。

img
联想一下,为什么不把这个维护列表的工作放到网关中呢?注册中心又是如何把服务列表发送给网关的呢?

1、微服务的核心理念是服务专业化,网关要充当总入口,要负责的事情已经很多了,还让它负责注册中心的工作,那么微服务的概念是不是又回退回去了呢?

2、网关会定时从注册中心拉取服务列表,然后更新到本地,请求分发时是访问的本地的服务列表

1.5 集群

集群是一组相互独立的、通过高速网络互联的计算机或者服务。比如说我们的微服务集群,或者我们的数据库集群、redis集群等等

2. 如何学习微服务

学习微服务的第一步是要理解它产生的原因和起到的作用,相信通过上述的描述,对于这点,大家应该有一些了解了。更加深刻的理解,实际上要靠你自己去实际体验一下,通过并发量的增加、报错的产生来体会区别。

其次是要了解分布式微服务涉及哪些技术点,需要哪些组件才能搭建起来一个微服务框架。了解了这个整体之后,我们才能开始一个点一个点的开始学习。

那么微服务涉及哪些技术点、哪些组件这就是我们下一篇要来探讨的了。

建议订阅专栏,后续会持续更新系列文章

从零开始学习微服务