在微服务中,有几个必不可少的组成成分:
- 服务网关
- 服务注册和发现
- 后端通用服务
- 前端通用服务
1、为什么分布式需要服务注册和发现
这篇主要是介绍微服务中服务注册和发现,我们知道微服务是分布式的,那么分布式为什么需要服务注册和发现?
现在有一台服务器A和一台服务器B,当A服务器需要调用B服务器的时候,应该怎么调用呢?可能很多人觉得直接将调用地址写成服务器B不就好了。
但是分布式是多节点的,当A服务器拥有多台,B服务器也拥有多台的时候,这个方法就不可取了,而且每个节点的部署方案很有可能是动态的,加之服务器也有宕机的情况,这个时候我们就需要一个服务注册中心了。
当B服务器每增加一台,都会向注册中心进行上报,当A服务器需要调用的时候,直接找注册中心就可以了,而注册中心就是分布式最重要的基础部分。
2、客户端发现
上面说到,当A服务器需要向B服务器进行调用的时候,需要找注册中心要B服务器的地址,那注册中心会怎么做呢?
注册中心会把一堆的服务器B的信息都给A服务器,A服务器会通过某种机制挑选出一个地址进行调用,这种机制可能是轮询、随机、哈希等等,也就是我们所说的负载均衡策略,而这种方式被称为客户端发现。
3、服务端发现
除了客户端发现,还有没有其他的方式呢?当然有,就是服务端发现,服务端发现会出现一个代理,这个代理会从众多的服务器B中挑选一台提供给服务器A,而不用服务器A自己做选择。
4、服务发现的两种方式
不管是客户端发现,还是服务端发现,他们要做的都是提供一个调用地址,那么应该选择哪种呢?二者的利弊是什么呢?
客户端发现优点:
- 简单直接,不需要代理的出现
- 知道所有可用的实际地址
客户端发现缺点:
- 需要自己实现逻辑挑出一个地址
服务端发现优点:
- 由于代理的介入,服务器A对服务器B是透明而不可见的
5、二者的实现方式:
客户端发现:
- Eureka
- ···
服务端发现:
- Nginx
- Zookeeper
- Kubernetes
- ···
最后还要知道一个微服务的特点:异构,不同的节点可以是不同的语言或者使用不同的数据库,SpringCloud是纯JAVA的,他提供Rest接口给其他的语言进行调用。