我在M2公司做架构之通信

一、微服务的通信方式有哪些?

  • RPC;
  • HTTP;
  • Message。

二、实现这些通信方式的框架有哪些?

1.RPC

  • Dubbo;
  • Grpc;
  • Apache Thrift;
  • Hessian;
  • RMI。

2.HTTP

  • SpringCloud Open Feign;
  • SpringMVC;
  • Okhttp;
  • SpringBoot。

3.Message

  • JMS;
  • ActiveMQ;
  • RabbitMQ;
  • Kafka。

三、分布式微服务通信过程中遇到了哪些问题?

这里我列举比较典型的2个问题:

  • 微服务通信超时;
  • 微服务通信报错。

1.微服务通信超时

A服务调B服务,B服务调C服务,而此时C服务这时突然不给B服务响应了,最终造成服务之间通信超时报错,最终将错误由B服务抛给了A服务。

2.微服务通信报错

报错的原因有很多,不一定是代码的问题,也可能与与服务器的磁盘、CPU、内存、网络以及用户访问量、调用其它微服务没有给予正常的数据反馈等有关系。

四、如何解决这样的问题呢?

最近生产环境有一个W微服务应用就出现了微服务通信超时的问题。
W微服务部署在应用服务器x中,而应用服务器x中是处于内网的情况下,相当于与外部网络隔绝,而W微服务中的某一接口每天每小时都需要接入第三方某网的数据推送,其中某网的数据推送的一个接口推送是外网图片URL数据,而这些外网图片URL数据是需要W微服务将其下载至应用服务器x中临时图片存储文件夹上,然后进行图片裁剪,最终存入到应用服务器x中的某个文件夹下。而内网中的W微服务是无法下载远程图片的(出现了通信超时问题),而此功能相对比较重要,W微服务与另外的E微服务关系紧密,相当于W微服务接入第三方某网的数据推送,将推送的数据组装处理后,转发E微服务对应的接口实现数据最终的计算入库的流程。如果贸然将W微服务迁移至外网Web服务器x上可能会对W微服务将数据转发给E微服务的流程有影响,为了避免万一,采用了一个办法,即将W微服务重新打包修改相关配置信息发布到外网Web服务器x上,然后与第三方某网人员沟通,将那个推送图片URL数据的接口改为推送到新地址上,原有其它数据接口不变,这样就能解决这个问题。当然了,这仅仅只是一个临时的办法。要想根本解决问题,就要重新梳理一些各个微服务,那些微服务是可以放在内网的,那些微服务是必须要放在外网的。

问题解决流程:
报错信息-明确问题-追踪代码-问题解决方案-执行方案-事后针对问题进行复盘。

文章目录
  1. 一、微服务的通信方式有哪些?
  2. 二、实现这些通信方式的框架有哪些?
    1. 1.RPC
    2. 2.HTTP
    3. 3.Message
  3. 三、分布式微服务通信过程中遇到了哪些问题?
    1. 1.微服务通信超时
    2. 2.微服务通信报错
  4. 四、如何解决这样的问题呢?