首页天道酬勤dubbo服务暴露面试题,soap分别代表什么

dubbo服务暴露面试题,soap分别代表什么

张世龙 05-04 00:15 21次浏览

另一方面,什么是服务授权体系结构(soasoa ),即面向服务的体系结构。

SOA是一种粗粒度、松散耦合服务架构,服务之间通过简单、准确的定义接口进行通信,与底层编程接口和通信模式无关。

SOA可以被认为是继B/S模型、XML (标准通用标记语言子集)/web服务技术之后的自然扩展。

阿里巴巴的Dubbo是SOA的典型实现。

)1)基本特征SOA的实施有一些鲜明的基本特征。

粗粒度服务接口分级

松散耦合

可复用服务

服务接口设计管理

标准化服务接口

支持各种消息模式

准确定义的服务合同

SOA服务有一个平台独立的自描述XML文档。 Web服务描述语言(WSDL,Web S

ervices Description Language )是描述服务的标准语言。

SOA服务通过消息进行通信。 此消息通常在XML架构中定义。 也称为XSD,XML架构定义。 消费者与提供者或消费者与服务之间的交流多见于不了解提供者的环境中。 服务之间的交流也可以看作是企业内部处理的重要业务文档。

在企业中,SOA服务由充当目录列表的注册表维护。 该APP应用程序在注册表中查找并调用服务。 统一说明、定义和集成(UDDI、通用描述、定义、和集成)是服务注册的标准。

)松散耦合系统中立的接口定义(未强制绑定到特定实现)的特征称为服务间松散耦合。 松散耦合系统的好处有两个。 一是灵活性。 另一种情况是,即使构成整个APP应用程序的每个服务的内部结构和实施逐渐变化,它也可以继续存在。 相反,紧密耦合意味着APP应用程序的不同组件之间的接口与其功能和结构紧密相连,如果需要对部分或整个APP应用程序进行任何更改,则可能会显得非常脆弱。

二、Dubbo是什么? Dubbo是阿里巴巴公司开源的高性能、优秀的服务框架,使APP应用程序能够通过高性能的RPC实现服务的输出和录入功能以及SOA服务管理方案。

(1)主要核心部件:

Remoting:网络通信框架实现了同步和请求响应消息机制。

RPC:远程过程调用的抽象。 支持负载平衡、灾难恢复和群集功能

Registry:服务目录框架用于注册服务以及发布和订阅服务事件

)2)我的理解是几点

Dubbo采用Hessian协议实现,这里的高性能RPC是指Hessian协会;

Dubbo是分布式系统中远程服务呼叫的实现框架,不使用传统的web服务方式,以服务提供商和消费者的方式调用

另外,通过在注册中心注册,消费者不需要知道提供方的地址,可以在注册中心读取,可以以注册中心为中间层,在中间层实现负荷分散等

由此,不需要负荷分散硬件,实现大规模分散系统的远程服务调用

同时,注册中心瘫痪时,支持服务提供者和消费者可以直接通过地址调用,在容错方面表现出色

另外,服务提供者无需通知服务消费者,实现了顺利的删除和添加

三、Dubbo解决了什么问题透明的远程方法调用调用远程方法,就像调用本地方法一样。 只需简单配置,没有任何API入侵。 通过软负载平衡和容错机制,可以在内部网上使用它来代替F5等硬件负载分散机,从而降低成本,减少单点。 服务将自动注册并被发现。 不需要写服务提供商的地址。 注册中心可以根据接口名称查询服务提供商的IP地址,从而方便地添加或删除服务提供商。 四. Dubbo的设计结构和工作原理(1)设计结构

提供程序:

暴露服务端被称为“服务提供者”。

Consumer :

调用远程服务的一方称为“服务消费者”。

注册表:

服务注册和发现的中心目录服务称为服务注册中心。

莫妮卡:

将统计服务调用次数和调用时间的日志服务称为“服务监视中心”。

Container:

服务执行容器。

)2)调用过程

服务容器负责启动、加载和运行服务提供者。 服务提供者在启动时,在登记中心登记自己提供的服务。 服务消费者在启动时,向注册中心订阅自己需要的服务。 注册中心将服务提供商地址列表返回给消费者,如果发生更改,注册中心将根据长连接向消费者推送更改数据。 基于软负载均衡算法,服务消费者从提供商的地址列表中选择一个提供商进行调用,如果调用失败则选择另一个提供商进行调用。 消费者和提供者在内存中累计呼叫次数和呼叫时间,定时每分钟向监控中心发送统计数据。 )3) Dubbo的特性

连接性:

注册中心负责服务地址的注册和检索,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力小的监控中心统计各服务呼叫次数、呼叫时间等,并

一次发送到监控中心服务器,并以报表展示服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

健状性:

监控中心宕掉不影响使用,只是丢失部分采样数据数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务注册中心对等集群,任意一台宕掉后,将自动切换到另一台注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯服务提供者无状态,任意一台宕掉后,不影响使用服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

伸缩性:

注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者五、Dubbo的集群容错机制

当服务调用失败时(比如响应超时),根据我们的业务不同,可以使用不同的策略来应对这种失败。

比如我们调用的服务是一个查询服务,不会修改数据库,那么可以给该服务设置容错方式为failover , 当调用失败时,自动切换到其他服务提供者去调用,当失败次数超过指定重试次数,那么就抛出错误;
如果服务是更新数据的服务,那就不能使用失败重试的方式了, 因为这样可能产生数据重复修改的问题,比如调用提供者A的插入用户方法,但是该方法业务逻辑复杂,执行过程很慢,导致响应超时, 那么此时如果再去调用另外一个服务提供者的插入用户方法,将会又重复插入同一个用户。 对于这种类型的服务,可以使用容错方式为failfast,如果第一次调用失败,立即报错,不需要重试;

另外还有下面几种容错类型:
failsafe 出现错误,直接忽略,不重试也不报错
failback 失败后不报错,会将该失败请求,定时重发,适合消息通知类型的服务
forking 并行调用多个服务器,只要在某一台提供者上面成功,那么方法返回, 适合实时性要求较高的查询服务, 但是要牺牲性能。因为每台服务器会做同一个操作
broadcast 广播调用所有服务提供者,逐个调用,任意一台报错则报错。 适合与更新每台提供者上面的缓存这种类型的服务。

六、Dubbo使用的多协议

dubbo提供了多种协议给用户选择, 如dubbo、hessian、rmi 。 并可为每个服务指定不同的传输协议,粒度可以细化到方法, 不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议。

七、可以替代Dubbo的组件

Hessian、spring httpinvoke等。

八、Dubbo的特性

相比其他同类组件,Dubbo有自己的一些优势:

(1)服务注册中心
相比Hessian类RPC框架,Dubbo有自己的服务中心, 写好的服务可以注册到服务中心, 客户端从服务中心寻找服务,然后再到相应的服务提供者机器获取服务
通过服务中心可以实现集群、负载均衡、高可用(容错) 等重要功能。

服务中心一般使用zookeeper实现, 也有redis和其他一些方式 。 以使用zookeeper作为服务中心为例, 服务提供者启动后会在zookeeper的 /dubbo节点下创建提供的服务节点,包含服务提供者ip、port等信息。 服务提供者关闭时会从zookeeper中移除对应的服务。

服务使用者会从注册中心zookeeper中寻找服务,同一个服务可能会有多个提供者, Dubbo会帮我们找到合适的服务提供者,也就是针对服务提供者的负载均衡。

(2)负载均衡
当同一个服务有多个提供者在提供服务时, 客户端如何正确的选择提供者实现负载均衡dubbo也给我们提供了几种方案:
random 随机选提供者,并可以给提供者设置权重
roundrobin 轮询选择提供者
leastactive 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
consistenthash 一致性hash,相同参数的请求发到同一台机器上

(3)简化测试,允许直连提供者
在开发阶段为了方便测试,通常系统客户端能指定调用某个服务提供者,那么可以在引用服务时加一个url参数去指定服务提供者

1

2

<dubbo:reference

id="xxxService"interface="com.alibaba.xxx.XxxService"url="dubbo://localhost:20890"/>

(4)服务版本,服务分组
在Dubbo配置文件中可以通过制定版本实现连接制定提供者,
也就是通过服务版本可以控制服务的不兼容升级;
当同一个服务有多种实现时,可以使用服务分组进行区分。

 

参考论坛、官网文档等 

Dubbo开发者指南

dubbo常见面试题,dubbo和zkeper的面试题