- PRC:远程过程调用,是一个计算机的通信协议,需要运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外的为整个交互过程编程。面向对象就是远程方法调用;例如http,tcp、socket都是RPC协议;
- dubbo特性
- 面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
- 服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。
- 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
- 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
- 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。
- 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。
- 注:
- 传统负载均衡:当使用nginx做负载均衡时,当大量的服务器加入集群当中时,nginx需要修改配置,加入新加入集群的服务器的ip地址,人工成本较大;
- zookeeper:当作注册中心,将所有的服务的服务器自动注册在注册中心,客户端进行负载均衡(随机,hash,轮询);
- Service mesh:不需要修改业务代码,将一些调用的功能单独出来;
- dubbo协议,基于netty实现,不同的协议适应不同的适用场景
- 服务路由:不同地区节点的流量切换;
-
- duobbo
- Provider模块:提高API,实现API,暴露(启动tomcat,nettyServer),服务本地注册,服务远程注册中心注册
- api 抽象接口
- impl 具体实现
- Provider
- 1、本地注册 {服务名:实现类}
- LocalRegister类
- 类的具体方法:
- 使用:
-
- 类的具体方法:
- LocalRegister类
- 2、远程注册 {服务名:List<URL>}---------------对应Registry模块
-
- 3、启动tomcat
-
- 1、本地注册 {服务名:实现类}
- Consumer模块:通过接口名从注册中心获取服务地址和调用服务;
- 使用动态代理增强,使用接口,直接调用其实现类的具体方法
- 使用动态代理增强,使用接口,直接调用其实现类的具体方法
- Registry模块:保存服务配置信息(服务名:List<URL>)
- RemoteMapRegister类
-
- RemoteMapRegister类
- RpcProtocol模块:基于Tomcat的HttpProtocol、基于Netty的DubboProtocol
- http
- HttpService:tomcat启动 +Servelet
- 在Tomcat中加入Servlet
- tomcat.addServlet(contextPath,"dispatcher",new DispatcherServlet())
- context.addServletMappingDecoded("/*", "dispatcher") 所有的前端请求都以了被Servlet接收到,走DispatcherServlet中的service方法,然后被HttpServerHandler.handler进行处理
- 在Tomcat中加入Servlet
- DispatcherServlet需要继承HttpServlet,重写service(HttpServletRequset req,HttpServiceletResponse resp)方法-----new HttpServerHandler().handler(req,resp)
- HttpServerHandler------handler(HttpServletRequset req,HttpServiceletResponse resp)//处理请求和返回结果
-
- HttpClient(通过http协议发送调用信息的客户端,并接受HttpServerHandler返回的数据)
-
- HttpService:tomcat启动 +Servelet
- http
- FrameWork模块:框架整合
- 代理工程类(对于接口,直接调用其实现的具体方法)
-
- 定义URL类:(schema//hostname:port)
-
- Invocation类(HttpClient需要发送的信息组合的对象)网络传输需要实现序列化接口
-
- 代理工程类(对于接口,直接调用其实现的具体方法)
- Provider模块:提高API,实现API,暴露(启动tomcat,nettyServer),服务本地注册,服务远程注册中心注册
- dubbo的协议扩展
- 将所有协议的具体方法共同方法抽象出一个接口
- 更改VM参数,使用工厂类进行自动选择创建相应的对象;
- 若要加入新的协议类型,使用java spi机制:通过ServiceLoader 加载接口对应的实现类,需要在resources中建立文件夹META-INF,建立services文件,建立接口全路径名文件 (例如framework.Protocol)去指定具体实现类;
- dubbo spi------引入的实现类需要其他接口的具体实现类(依赖注入和切面)<更加高效>-----------注册中心和协议的调用选择
Dubbo框架学习
最新推荐文章于 2024-03-10 19:26:55 发布