SOA(service oriented architecture)面向服务架构 作用:数据访问控制,代码复用
几种常用服务:dubbo,webservice,dubbox,HTTPclient(调用其他项目控制器)
RPC(remote procedure call Protocol )远程过程调用协议,只调用,不知道实现,数据安全性
Dubbo框架的意义:
1)Dubbo是一个分布式服务框架,以及SOA治理方案,还是一种高性能和透明化的RPC远程服务调用方案。其核心部分包含:
a.:远程通讯(提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式)
b:集群容错(提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。)
c:自动发现(基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器)。
名词解释:
1,分布式,就是在不同的机器上运行的程序,共同去完成一定的功能。
2,透明:就是封装好了,不知不觉的实现的。
3,集群:就是多台机器实现完全一样的功能,保证一台宕机,不影响功能。同时可以提高负载能力。
1.简介:
dubbo是一个远程服务调用的分布式框架
透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置。 软负载均衡及容错机制。
服务自动注册与发现,不需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Dubbo,一个分布式,高性能,透明化的RPC服务框架,提供服务自动注册,自动发现等高效服务治理方案
2.RPC 像调用本地方法一样调用远程函数。(动态代理,序列化,NIO,注册中心)
客户端:一般利用动态代理生成一个接口的实现类,在这个实现类里通过网络把接口名称,参数,方法序列化后传出去,然后控制同步调用还是异步调用,异步调用需要设置一个回调函数,客户端还需要维护负载均衡,超时处理,连接池管理等,连接池维护了和多个server的连接,靠此做负载均衡,当某个服务器宕机后去除该连接。请求上下文维护了请求ID和回调函数,超时的请求当回复报文到达后由于找不到请求上下文就会丢弃。
服务端:维护连接,网络收到请求后反序列化获得方法名称,接口名称,参数名称后通过反射进行调用,然后将结果在传回客户端。
3.特点
①默认使用的是Netty(NIO)通信框架, 还可选择mina.
②服务调用默认是阻塞的,可以异步调用,没有返回值的可以这么做。
③Dubbo支持的注册中心:Zookeeper(支持集群), Redis, Multicast, Simple(单机版)
④默认使用 Hessian 序列化(基于http-post方式),还有 Duddo、FastJson、Java 自带序列化。hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。
⑤服务提供者能实现服务失效踢出基于 zookeeper 的临时节点原理。
⑥dubbo 在安全机制:通过 token 令牌防止用户绕过注册中心直连,然后在注册中心管理授权,dubbo 提供了黑白名单,控制服务所允许的调用方。
⑦集群容错:读操作建议使用 Failover 失败自动切换,默认重试两次其他服务器。写操作建议使用 Failfast 快速失败,发一次调用失败就立即报错。
⑧集群的负载均衡策略:
Random: 随机选取提供者策略,调用次数越多,分布越均匀;
RoundRobin: 轮循选取提供者策略,平均分布,但是存在请求累积的问题;
LeastActive: 最少活跃调用策略,解决慢提供者接收更少的请求;
Constant Hash: 一致性 Hash 策略,使相同参数请求总是发到同一提供者
⑨dubbo在调用服务不成功时,默认是会重试两次。服务端的处理时间超过了设定的超时时间时,就会有重复请求,对于核心的服务中心,去除dubbo超时重试机制,并重新评估设置超时时间
4.支持的协议
Dubbo支持的协议:默认Dubbo协议,(NIO和线程池处理), RMI:远程方法调用, Hession:基于TCP协议,二进制传输
1.Dubbo.( 适合大并发小数据量的服务调用,传输协议 TCP,异步,Hessian 序列化)
- Dubbo官方推荐的协议.
- 本质:使用NIO和线程池进行处理
- 缺点:大文件传输时可能出现文件传输失败问题.(NIO不适合大数据传输)
2.RMI(使用 java 标准序列化机制,多个短连接,TCP 协议传输,同步传输)
- JDK提供的协议,远程方法调用协议.
- 缺点:偶尔连接失败.
- 优点:JDK原生,不需要进行额外配置(导入jar)
3.Hession
- 优点:基于http协议,http请求支持.
- 缺点:需要额外导入jar,并在短连接时性能低(用于传大参数)
5:应用之间如何通讯?
这是RPC要解决的问题,RPC就是远程过程调用(Remote Procedure Call)的意思。Dubbo其实是优于EJB、WebService、RMI等远程调用技术的高性能和透明化的RPC远程服务调用框架。它的原理,就是tcp层的长连接技术,通过对java对象进行序列化,通过tcp的socket通讯传输,在并发处理上采用NIO框架(NIO就是新IO—new IO,它的原理就是轮询线程,哪个线程的IO阻塞完成了,就去获取这个线程的数据。从而节省了等待阻塞IO的时间.Netty等框架实现了对NIO技术的封装-------所谓封装,就是隐藏了实现的细节,优化了性能,方便调用)技术进行优化。也就是实现了不同应用之间,通过网络互相调用(互相通讯)。(Dubbo远程通讯,可优化的点,主要在序列化的效率、多线程优化等方面,但这些我们不用关心)
6:应用之间的调用如何规划和监控?
dubbo解决的是SOA的治理方案。SOA是面向服务架构(Service-Oriented Architecture)的意思。它体现了一种解耦的思想,和分布式架构方案。SOA的治理方案主要包括服务的注册和发现,服务的监控,服务的负载均衡,服务的安全访问,服务的路由等。
这些问题,也就是随着很多小的服务性的应用分层部署、互相调用、并发访问高时,如何管理的问题。
(dubbo的分层设计,一般是这样考虑:最底层是公共基础服务,比如大家都需要的公共工具;再上一层是基础业务,比如用户管理、商品管理;再上一次层是一般业务,比如用户下订单;最后可以是一个完整的功能模块的服务。各个层的服务之间可互相通讯)