1、什么是微服务
微服务就是根据业务功能模块把一个单体的应用拆分成许多个独立的项目,每个项目完成一部分的业务功能,然后独立开发和部署。这些独立的项目就成为一个微服务。进而构成一个服务集群。
微服务个人理解就是将之前的单一服务架构,拆分成各个单独的服务,各个服务都是一个独立的服务,关键就是服务拆分。
为什么要有微服务?
单体架构时,想修改某个模块功能,需要将整个服务给停掉,导致全部功能不可用。
各个模块直接相互调用,造成耦合。
单体架构:
拆分成微服务后:
好处:降低服务之间的耦合,利于服务的维护升级。
目的:有效的拆分应用,实现敏捷开发和部署
2、什么是服务注册中心
当服务之间互相调用时,由于服务地址非常多,服务与服务之间都需要记录一套要调用的服务的ip和端口的映射,当某个服务更换地址后,就需要全部更新。这样也是耦合,也不便于维护。
这时候就需要一个注册中心,用来记录每一个服务的ip,端口,服务名称以及它能够完成的功能。这样就能够使得这些服务之间在需要互相调用的时候,不用去记录要调用服务的ip、端口,而只要到注册中心去找就可以了。
常见服务注册中心:
nacos
eureka
consul
zookeeper 等
3、微服务之间的通信
微服务之间也是需要互相调用的,那么他们之间如何通信呢?
根据通信类型可以分为两种:
1、同步通信:主要方式有HTTP REST、RPC的方式。HTTP REST方式指的是使用http协议进行数据传递,数据格式是使用json格式;RPC是一种远程过程调用,消息格式是采用二进制格式。
http rest 是属于osi七层模型中的应用层,而rpc则属于传输层,所以rpc的效率要比http rest的效率更加高效。
2、异步通信:
异步消息传递通常有两种模式,
一种是无代理模式:指的是C端直接将消息发送给P端即可不需要得到回复,当需要P端回复时由于是异步通信,C端也不会阻塞,P端处理完后再根据接收到的信息向C端回复处理结果。这种方式比较小众主要适用于一些异步通知场景。
另外一种就是:使用消息代理,这里需要借助一些消息中间件,比如RocketMQ、kafka等。这种方式的使用场景比较广泛,行业内有很多成熟方案。通过使用异步消息通信的方式能够很好的实现微服务的解耦。