当前位置: 首页 > 科技观察

如何统一服务调用框架?

时间:2023-03-16 00:51:33 科技观察

目前SpringCloud和Dubbo系统的开发都比较成熟,很多客户已经采用了他们开发的一些系统。一个好的微服务开发平台需要同时支持这两个系统。在统一开发体验、降低开发复杂度的同时,保留了两个系统各自的优势。现有企业IT架构服务调用场景IT企业根据不同的系统有着不同的现状和技术发展路线。对于新系统,使用常用的SpringCoud应用调用SpringCloud应用或者Dubbo应用调用Dubbo应用。但是,对于现有系统的结构调整和改造,即如果系统A是一个SpringCloud系统,你想增加或改造一些服务到Dubbo的形式,反之,就会有2和4混合服务调用场景。主要是通过兼容性来保证平滑的升级过渡。根据使用场景,原系统可能是SpringCloud或者Dubbo,所以服务注册中心需要支持Eureka和Zookeeper,调用协议需要支持Http(Restful)或者RPC协议。运行逻辑分为以下几个部分:服务提供者可以根据配置项提供SpringCloud(Restful)和Dubbo(RPC)协议的具体服务。服务提供者根据提供的服务协议类型将它们转换成相应的服务。契约,注册到Eureka和Zookeeper服务消费者从Eureka和Zookeeper获取服务注册信息,根据服务契约解析更方便人员开发应用,调用实现以服务类型区分。分别使用Feign,Dubbo使用自己的实现,可以有效支持已有的系统调用,降低学习成本。独立的注解可以统一和规范开发,控制平台调用规则处理需要提供和消费的接口。服务类型控制应用是服务提供者还是服务消费者,可以在同一个应用中支持双服务系统和双消费系统。灵活配置业务系统规则,方便根据需要调整业务系统。比如整体应用是SpringCloud,新增的提供和消费服务都是Dubbo,那么这些新增的服务可以作为Dubbo系统规则在原来的配置中添加。在定义期间,针对具体的服务类型判断运行进程服务类型是SpringCloud(Restful)服务还是Dubbo(RPC)服务,并提供相应的服务契约(完整的服务描述Swagger)。注册中心类型是根据启动依赖和配置项来判断要连接的注册中心是Eureka还是Zookeeper,并提供相应的服务发布格式(注册中心存储的服务格式)。服务类型决定了应用、包、接口类型定义的优先级从小到大的顺序,即如果所有配置都存在,则以接口配置为准。服务类型的切换可以通过修改配置文件来调整,无需调整代码。服务提供和服务调用的关键逻辑:1.根据配置,扫描EOSService接口。2、确定提供服务的类型,包括多级优先级判断,确定提供服务的类型。a)Dubbo类型:遵循Dubbo自身服务发布的形式,注册Dubbobean实例b)SpringCloud类型:根据协议发布对应的Restful服务(因为声明式调用是为了方便开发,平台协议等如需要url,type等规则)3.判断服务调用类型,包括多级优先级判断,判断服务调用方式。a)Dubbo类型:按照Dubbo自身服务发布的形式,注册Dubbobean实例b)SpringCloud类型:按照约定注册Feignbean。调用时,通过Feign调用服务。registry是根据上面的依赖决定的,启动bean的加载是不同的。不同注册管理机构保留的服务的发布时间和格式不同。同一系统的注册中心需要对接已有系统,所以服务发布格式继续使用相同的系统内容,比如SpringCloud服务发布到Eureka,Dubbo服务发布到Zookeeper的服务格式与原系统的其他服务相同。特别待遇。服务发布和服务获取的关键逻辑:1.根据依赖关系启动不同注册中心的初始化过程。2、判断注册中心类型,更换服务注册实例。a)Zookeeper类型:启动Zookeeper注册和监控实例,根据服务提供类型组织服务发布格式到Zookeeper节点(具体格式后面有示例)。b)Eureka类型:SpringCloud和原来一样,异步扫描Dubbo服务,放入对应的扩展属性中。3、判断注册中心类型,更换服务实例获取方式。a)Zookeeper类型:启动Zookeeper注册和监控实例,根据提供的服务类型从Zookeeper节点获取并解析服务格式(具体格式后面有示例)。b)Eureka类型:SpringCloud和原来一样,Dubbo服务监听Eureka扩展属性。SpringCloud服务的发布格式如上图存储在Zookeeper中,在Zookeeper中增加/spring-cloud-service目录,用于记录SpringCloud服务访问所需的元素。<元数据>["dubbo://172.20.10.7:20882/com.primeton.eos.demo.sdk.server.core.api.DubboService?anyhost=true&application=provider&bean.name=ServiceBean:dubboServiceController:com.primeton.eos.demo.sdk.server.core.api.DubboService&default.deprecated=false&default.dynamic=false&default.register=true&default.timeout=1000&deprecated=false&dubbo=2.0.2&dynamic=false&generic=false&interface=com.primeton.eos.demo。sdk.server.core.api.DubboService&methods=addUserPost,addUser&pid=46073®ister=true&release=2.7.1&side=provider×tamp=1573006719825"]900261441(左右滑动查看所有代码)Dubbo服务的发布格式如上图存储在Eureka中,一个完整的Dubbo服务所需要的所有元素都存储在metadata中.开发使用示例的实际运行过程、按键序列处理链接示例、服务和注册中心的具体配置项都有相应的区别。【总结】统一调用框架就是如何支持各种混合服务调用场景,统一一个开发经验,根据需要灵活调整实际服务类型。该框架解决的问题是开发期统一简单,运营期灵活多变,保证服务稳定。实现时需要约束服务类型规则和注册中心依赖形式,同时定义配套提供和调用规则。比如定义SpringCloud的服务地址规则。[后记]方案实施中遇到了以下几类问题:因为具体问题涉及到SpringCloud、Dubbo和第三方的具体jar版本,只能针对具体问题解决。jar版本冲突一般采用调整或锁定jar版本。Bean冲突一般是修改Bean的配置或名称。配置项冲突需要自定义配置项处理,通过参数或启动脚本设置。