微服务治理框架-Dubbo
众所周知,服务与服务之间的远程通信是分布式架构最基本的组成部分,传统意义上的远程通信,更多的时候是解决信息孤岛及数据互联与通问题的,它主要关注的是数据的共享。随着SOA生态的不断完善以及微服务架构思想的落地,服务与服务之间的远程通信需求更多来自服务的解耦。同时,业务规模的不断增长会使得微服务数量增加,那么问题也就随之产生了,比如:
- 如何协调线上运行的服务,以及保障服务的高可用性
- 如何根据不同服务的访问情况来合理地调控服务器资源,提高机器的利用率。
- 线上出现故障时,如何动态地对故障业务做降级、流量控制等。
- 如何动态地更新服务中的配置信息,比如限流闻值、降级开关等
- 如何实现大规模服务集群所带来的服务地址的管理和服务上下线的动态感知
为了解决这些问题,就需要一个统一的服务治理框架对服务进行统一、有效的管控,从而保障服务的高效、健康运行,而Dubbo就是一个这样的框架。
一 、1如何理解Apache Dubbo
ApacheDubbo是一个分布式服务框架,主要实现多个系统之间的高性能、透明化调用,简单来说它就是个RPC框架,但是和普通的RPC框架不同的是,它提供了服务治理功能,比如服务注册、监控、路由、容错等。
促使Apache Dubbo框架产生的原因有两个:
- 在大规模服务化之后,服务越来越多,服务消费者在调用服务提供者的服务时,需要在配置文件中维护服务提供者的URL地址,当服务提供者出现故障或者动态扩容时,所有相关的服务消费者都需要更新本地配置的URL地址,这种维护成本非常高。这个时候,实现服务的上下动态线感知及服务地址的动态维护就显得非常重要了。
- 随着用户的访问量增大,后端服务为了支撑更大的访问量,会通过增加服务器来扩容。但是,哪些服务要扩容,哪些服务要缩容,需要一个判断依据,也就是说需要知道每个服务的调用量及响应时间,这个时候,就需要有一种监控手段,使用监控的数据作为容量规划的参考值,从而实现根据不同服务的访问情况来合理地调控服务器资源,提高机器的利用率。
二 、Apache Dubbo实现远程通信
创建两个普通的Maven工程,分别为order-service和user-service,代表订单服务和用户服务,这两个服务之间在实际业务场景中会存在相互依赖的情况,比如订单服务中的某个功能可能需要查询用户信息时,就需要调用用户服务指定的接口来完成。
2.1 user-service的实现流程
- 创建配置文件resources/META-INF/spring/user-providerxml,把服务发布到网络上,让其他进程可以访问。因为Dubbo采用了Spring配置的扩展来实现透明化的服务发布和服务消费,所以它的配置基本上和以往通过XML形式描述Bean差不多。
- dubbo:application用来描述提供方的应用信息,比如应用名称、维护人版本等,其中应用名称是必填项。开发者或者运维人员可以通过监控平台查看这些信息来更快速地定位和解决问题。
- dubbo:registry 配置注册中心的地址,如果不需要注册中心,可以设置为N/A。Dubbo支持多种注册中心,比如ZooKeeper、Nacos等。
- dubbo:protocol配置服务提供者的协议信息,Dubbo支持多种协议来发布服务,默认采用Dubbo协议,可选的协议有很多,比如HessianWebservice、Thrift等。这意味着如果公司之前采用的协议是Webservice,想切换到Dubbo上来,几乎没有太大的迁移成本
- dubbo:service描述需要发布的服务接口,也就是这个接口可供本网络上的其他进程访问interface表示定义的接口,ref表示这个接口的实现。
- 加载Spring的XML文件,可以通过ClassPathXmApplicationContext来完成加载启动的过程,也可以通过Mainmain(args)来启动。两者在本质上没有区别,只是Dubbo做了一层封装,简化了开发者的使用。
- 启动之后,可以在控制台的日志中看到如下信息,说明服务已经发布成功,而且还打印了Dubbo发布的地址dubbo://19216813.1:20880/comgupaoedu.bookdubboUserService,这个地址是一个远程通信地址,服务调用者可以基于该地址来访问该服务完成远程通信的流程。
2.2 order-servce的实现流程
order-service的实现流程比较简单,大部分配置是相同的
- 添加user-api和Dubbo的Maven依赖,前者是用户访问IUserService接口的方法,后者通过远程代理完成远程通信过程。
三 Spring Boot集成Apache Dubbo
Apache Dubbo不需要依赖Spring Boot也是可以实现微服务的,集成到Spring Boot的好处是可以享受到Spring Boot生态的框架和技术支持,也就是基于Spring Boot实现了标准化,并统一了开发部署、运维的形态。在2015年的时候,笔者所在公司就开始以Spring Boot集成Dubbo来实现微服务,不过,那时候整个生态没有现在这么成熟。现在,咱们可以使用Dubbo Spring Boot组件轻松集成,它整合了Spring Boot的自动装配健康检查、外部化配置等功能。接下来通过一个案例来简单演示基于Spring Boot构建的Dubbo使用过程。
3.1 服务提供者开发流程
3.2 服务调用者的开发流程
服务调用者的开发流程相对来说也很简单
- 创建一个Spring Boot项目springboot-consumer,添加Jar包依赖
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!