分布式架构之微服务通信
一、微服务的通信方式有哪些?
1.RPC;
2.HTTP;
3.Message。
二、实现这些通信方式的框架有哪些?
1.RPC
1.Dubbo;
2.Grpc;
3.Apache Thrift;
4.Hessian;
5.RMI。
2.HTTP
1.SpringCloud Open Feign;
2.SpringMVC;
3.Okhttp;
4.SpringBoot。
3.Message
1.JMS;
2.ActiveMQ;
3.RabbitMQ;
4.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微服务对应的接口实现数据最终的计算入库的流程。
当然了,这仅仅只是一个临时的办法。要想根本解决问题,就要重新梳理一些各个微服务,那些微服务是可以放在内网的,那些微服务是必须要放在外网的。
问题解决流程:
报错信息-明确问题-追踪代码-问题解决方案-执行方案-事后针对问题进行复盘。