微服务的一次远程调用
服务消费者与服务提供者之间的调用关系往往是通过注册中心实现的,那么服务消费者具体是怎么通过注册中心去调用服务提供者所提供的服务的呢
1.确定通信框架
我们称消费者为客户端,注册中心为服务端,客户端想要跟服务端进行通信首先要确定的就是通讯框架,现在常用的通讯框架有两种:
Http协议,通过应用层的http协议进行通信是常用的方式之一,通过传统的三次握手建立连接
Socket通信,socket通信相比http要复杂一些,但是传输效率更高,socket通信首先要确定的是一组套接字,比如tomcat的80端口,服务端首先bind端口,然后进行监听,客户端与套接字建立连接然后在服务端进行确认,当连接建立后可以send信息到服务端,然后服务端recieve到消息,这样进行数据传输
2.服务端如何处理请求
当一个请求到了服务端以后怎么处理也是一个很重要的方面,通常情况下有三种处理方式
Bio 所谓Bio即同步阻塞的方式,即每当有一个服务请求到达后服务器都会生成一个线程来处理请求,底层的实现是通过一个acceptor线程来接收客户端的请求,每当一个请求过来的时候都会在服务端新建立一个线程,这种方式的好处是实现逻辑简单,缺点是会启动大量的线程,导致服务端线程栈溢出,进而导致服务器崩溃,同时这种方式还是阻塞的,当服务端需要读取数据的时候客户端就会一直阻塞等待,所以服务的请求效率不仅跟客户端有关同时也跟服务端有关
NIO 同步非阻塞,NIO的处理方式不需要在服务器端生成多个线程,每当服务器生成请求之后都会讲请求放入buffer缓冲区域中,然后服务端会有一个select线程轮询所有请求,当有请求达到可读可写的状态时就会进行处理,从而可以实现非阻塞的处理客户端请求
3.数据如何传输
这个步骤是为了确定数据传输协议,可以是Http协议,也可以是dubbo协议,确定了传输协议之后就可以确定数据的传输格式,可以是json或者xml等