微服务学习笔记-Double框架中的微服务

一、服务发布与引用

服务发布与引用的三种常用方式:RESTful、XML配置以及IDL文件。Double主要采用XML配置方式。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.sp
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="hello-world-app" />
<!-- 使用 multicast 广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 用 dubbo 协议在 20880 端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
<!-- 和本地 bean 一样实现服务 -->
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
</beans>

服务提供者的XML配置:

  • "dubbo:service"开头的配置项声明了服务提供者要发布的接口 
  • “dubbo:protocol”开头的配置项声明了服务提供者要发布的接口的协议以及端口号

Dubbo会把以上配置解析成URL格式:

dubbo://host-ip:20880/com.alibaba.dubbo.demo.DemoService

然后基于扩展点自适应机制,通过 URL 的“dubbo://”协议头识别,就会调用DubboProtocol 的 export() 方法,打开服务端口20880,就可以把服务 demoService 暴露到 20880 端口了。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.sp
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer-of-helloworld-app" />
<!-- 使用 multicast 广播注册中心暴露发现服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 生成远程服务代理,可以和本地 bean 一样使用 demoService -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />
</beans>

服务消费者的XML配置L:

"dubbo:reference"开头的配置项声明了服务消费者要引用的服务,Dubbo 会解析成URL格式

dubbo://com.alibaba.dubbo.demo.DemoService

然后基于扩展点自适应机制,通过URL的“dubbo://”协议头识别,就会调用DubboProtocol 的 refer() 方法,得到服务 demoService 引用,完成服务引用过程。

二、服务注册与发现

 服务提供者注册服务的过程,继续以前面服务提供者的 XML 配置为例,其中“dubbo://registry”开头的配置项声明了注册中心的地址,Dubbo 会把以上配置项解析成下面的 URL 格式:

registry://multicast://224.5.6.7:1234/com.alibaba.dubbo.registry.RegistryService?export=

基于扩展点自适应机制,通过URL的"registry://"协议头识别,就会调用RegistryProtocol的export()方法,将export参数中的提供者URL,注册到注册中心。

服务消费者发现服务的过程,以前面服务消费者的XML配置为例,其中"dubbo://registry"开头的配置项声明了注册中心的地址,跟服务注册的原理类似,Dubbo会把以上配置解析成下面的URL格式:

registry://multicast://224.5.6.7:1234/com.alibaba.dubbo.registry.RegistryService?refer=U

 基于扩展点自适应机制,通过URL的"registry://"协议头识别,调用RegistryProtocol的refer()方法,基于refer参数中的条件,查询服务demoService的地址。

三、服务调用

Dubbo支持多种通信框架,比如Netty4,需要在服务端和客户端的XML配置中添加下面的配置项。

服务端:

<dubbo:protocol server="netty4" />

 客户端:

<dubbo:consumer client="netty4" />

基于扩展点自适应机制,客户端和服务端之间的调用会通过Netty4框架来建立连接,丙炔服务端采用NIO方式来处理客户端的请求。

Dubbo不仅采用Dubbo协议,还支持其他协议比如Hessian、RMI、HTTP、Web Service、Thrift等。

 

于数据序列化和反序列方面,Dubbo 同样也支持多种序列化格式,比如 Dubbo、Hession 2.0、JSON、Java、Kryo 以及 FST 等,可以通过在 XML 配置中添加下面的配置项。

<dubbo:protocol name="dubbo" serialization="kryo"/>

四、服务监控

主要包括四个流程:数据采集、数据传输、数据处理和数据展示,其中服务框架的作用是进行埋点数据采集,然后上报给监控系统。 

在 Dubbo 框架中,无论是服务提供者还是服务消费者,在执行服务调用的时候,都会经过Filter 调用链拦截,来完成一些特定功能,比如监控数据埋点就是通过在 Filter 调用链上装备了 MonitorFilter 来实现的,详细的代码实现你可以参考这里。  

五、服务治理

包括节点管理、负载均衡、服务路由、服务容错等。

 

Dubbo框架服务的具体实现,Invoker是对服务提供者节点的抽象,Invoker封装了服务提供者的地址以及接口信息。

  • 节点管理:DIrectory负责从注册中心获取服务节点列表,并封装成多个Invoker,可以把它看床"List<Invoker>",它的值可能是动态变化的,比如注册中心推送变更时需要更新。
  • 负载均衡:LoadBalance负责从多个Invoker中选出某一个用于发起调用,选择时可以才以哦那个多种负载均衡算法,比如Random、RoundRobin、LeastActive等。
  • 服务路由:Router负责从多个Invoker中按路由规则选出子集,比如读写分离、机房隔离等。
  • 服务容错:Cluster将Directory中的多个Invoker伪装成一个Invoker,对上层透明,伪装过程包含了容错逻辑,比如采用Failover策略的话,调用失败后,会选择另一个Invoker,重试请求。

六、一次服务调用的流程

  • 服务发布与引用:对应实现是图例的Proxy服务代理层,Proxy根据客户端和服务端的接口描述,生成接口对应的客户端和服务端的Stub,使得客户端调用服务端就像本地调用一样。
  • 服务注册与发现:对应实现是图例的Registry注册中心层,Registry根据客户端和服务端的接口描述,解析成服务的URL格式,然后调用注册中心的API,完成服务的注册和发现。
  • 服务调用:对应实现是Protocol远程调用层,Protocol把客户端的本地请求转换成RPC请求。然后通过Transporter层来实现通信,Codec层来实现协议封装,Serialization层来实现数据序列化和反序列化。
  • 服务监控:对应实现曾是Filter调用链层,通过在Filter调用链层中加入MonitorFilter,实现对每一侧调用的拦截,在调用前后进行埋点数据采集,上传给监控系统。
  • 服务治理:对应实现层是Cluster层,负责服务节点管理、负载均衡、服务路由以及服务容错。

Dubbo框架一次服务调用过程,

客户端发起调用的过程:

  • 首先根据接口定义,通过Proxy层封装好的透明化接口代理,发起调用。
  • 然后再通过Registry层封装好的服务发现功能,获取所有可用的服务提供者节点列表。
  • 再根据Cluster层的负载均衡算法从可用的服务节点列表中选取一个节点发起服务调用,如果调用失败,根据Cluster层提供的服务容错手段进行处理。
  • 同时通过Filter层拦截调用,实现客户端的监控统计。
  • 最后在Protocol层,封装成Dubbo RPC请求,发给服务端节点。

客户端的请求就从一个本地调用转化成一个远程 RPC 调用,经过服务调用框架的处理,通过网络传输到达服务端。其中服务调用框架包括通信协框架 Transporter、通信协议 Codec、序列化 Serialization 三层处理。

服务端从网络中接收到请求后的处理过程:

  • 首先在 Protocol 层,把网络上的请求解析成 Dubbo RPC 请求。
  • 然后通过 Filter 拦截调用,实现服务端的监控统计。
  • 最后通过 Proxy 层的处理,把 Dubbo RPC 请求转化为接口的具体实现,执行调用。

Dubbo官方文档源码

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值