看到一个rpc的图画的很好
rpc进行网络通信一般用的netty
rpc的泛化调用:
在微服务架构下,我们针对某个 RPC 接口,我们一般有两个角色。
-
服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程
-
服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程
服务消费者想要调提供者的接口,那么一般需要引提供者的jar包,然后像调用本地方法一样调用提供者的方法即可,而如果我不想引jar包,还想调提供者的接口,这里就需要泛化调用了,主要的使用场景主要有如下两个:
1、网关服务,因为网关服务需要作为所有rpc服务的调用者,但是又不可能引所有rpc服务的jar包(这样一旦有新的服务发布,就需要修改网关的代码)
2、测试平台
使用:使用GenericService的invoke方法,传入服务提供类的路径,接口名以及入参即可
原理:通过消费端和服务端的filter,来实现泛化调用的传递,在服务端再通过反射构造成对应的方法调用
-
org.apache.dubbo.rpc.filter.GenericFilter
-
org.apache.dubbo.rpc.filter.GenericImplFilter
Kafka使用场景:调用链路太长,对实时性要求不高的请求就可以用队列异步处理,异步带来的不一致问题,可以用job重试保证调用成功
削峰填谷,增加系统的抗压能力。系统解耦,可以拆分成多个微服务
kafka原理介绍(数据存储形式,数据流程,特点,何如保证数据的高可用)
Kafka基于发布订阅模式,通过消费组的形式实现了消费