微服务架构(六)客户端和服务端的连接建立

2022-10-17  本文已影响0人  mafa1993

远程调用RPC

需要考虑的问题: 客户端和服务端什么时候建立连接, 服务端如何处理请求, 数据传输采用什么协议, 数据的序列化和反序列化

客户端和服务端如何建立网络连接

  1. http, http基于传输层tcp协议, 一次http请求就会建立一个tcp连接
  2. socket, socket基于tcp/ip协议进行封装, 一次连接需要一对套接字, socket通信分为四个步骤: 服务器监听 客户端请求 连接确认 数据传输

服务器如何处理请求

  1. 同步阻塞(BIO): 客户端每发送一个请求, 就创建一个线程去处理, 当到达线程瓶颈, 就不会再处理了,用于请求量较小的
  2. 同步非阻塞(NIO):客户端每发送一次请求,并不是创建一个新线程去处理,而是通过IO多路复用,将多个IO的阻塞服用到同一个阻塞上,系统在单线程情况下可以处理多个客户端请求,适用于连接数多并且消耗比较少的业务
  3. 异步非阻塞(AIO):客户端发出请求后立刻返回,然后轮询处理状态,等到完成后,在发出完成信号,适用于连接数比较多,并且消耗比较大的
    可以利用socket连接,建立连接,服务器端选择上述三种方式的一种。可以使用开源的通讯框架,如netty和MINA
io模型
阻塞i/o:老李去火车站买票,排队三天买到一张退票(耗费:三天吃喝睡,其他事没干)
非阻塞i/o:老李买票,每隔12小时去车站问有没有退票,3天后买到(耗费:往返6次,路上6小时,其他时间可以做很多事)
i/p多路复用:(有个第三方的中间件)
  select/poll 老李买票,委托黄牛,每隔6小时打电话问黄牛,三天后老李打电话时得到有票的消息,去火车站交钱领票(往返车站两次,路上2小时,打电话17次,黄牛加价100)
  epoll:委托黄牛,黄牛买到票后通知老李,三天后老李去领票(往返车站2次,路上2小时,黄牛加价100,无需打电话)
信号驱动:老李买票,给售票员留电话,有票后售票员通知其去取(往返车站2次,给你个信号,然后再去拉取)
异步i/o::老李买票,给售票员留电话,有票后售票员邮寄给老李(往返车站两次,服务器主动推送)

数据传输协议

  1. 开放协议:http协议等
  2. 私有协议:Dubbo协议等

数据的序列化和反序列化

  1. 文本类:xml和json
  2. 二进制类:PB/Thrift
    需要考虑的问题\
上一篇下一篇

猜你喜欢

热点阅读