摘要:背景目前应用越来越广泛,但和的体系接入困难,所以我们需要实现端的逻辑。使用实现一个可用的完全没有问题,最简单的实现则是在对应集群注册接口与机器的映射关系,便可以访问对应接口。在评估了各种实现方案后,决定放弃开发端,使用的模式。
背景
目前nodejs应用越来越广泛,但和java的dubbo体系接入困难,所以我们需要实现node端的dubbo provider逻辑。java的dubbo provider是和consumer在一个jar中,提供了服务配置、注册、集群与负载均衡、监控和多种协议。使用nodejs实现一个可用的dubbo provider SDK完全没有问题,最简单的实现则是在对应ZK集群注册接口与机器IP的映射关系,consumer便可以访问对应rpc接口。可是,在可用基础上,仍然需要提供相关配套设施如配置、注册和监控等,达到商业上的高可用。在评估了各种实现方案后,决定放弃开发node provider端sdk,使用node+agent的proxy模式。
agent是一个可与node服务交互通信的,并提供dubbo provider功能的java服务。agent部署在nodejs服务机器上,扮演dubbo服务的入口角色,同时node服务返回的数据类型由agent进行转换映射,如 object(node) -> Map(Java), 具体转换规则则由node接口提供方提供调用接口jar包,consumer使用jar包进行调用即可。
整体架构其中 vitamin为基于数据库的统一配置平台,解耦各个系统的强依赖。
Node中间件Node中间件提供dubbo接口上报和服务提供功能。上报http接口要暴露的Dubbo服务配置信息(interface+version+method)即映射关系,node的提供rpc服务以HTTP形式存在(兼容之前业务),由agent进行调用,数据类型为JSON。
Agent根据Vitamin的实时配置向zookeeper注册dubbo服务(泛化)
泛化服务每个method会根据Vitamin中的映射关系找到对应的http本地接口(localhost)进行调用
-入参和返回值进行json和Java类型的转换
Node业务方Node提供普通的HTTP+JSON服务,可复用历史接口
提供一个对应dubbo接口的jar包,需保证http接口json和jar中的model转换关系可行
上游业务拿到jar包依赖之后,像普通dubbo服务一样调用即可
类型转换Dubbo方法入参转换成NodeJs的http调用参数:强类型转弱类型,可直接转换
NodeJs服务返回的json转Dubbo方法返回值:弱类型转强类型
解决方案:Dubbo泛化服务返回Map,consumer端拿到这个Map会自动根据client.jar的方法返回值类型(支持泛型)进行相应的字段注入
agent不会在调用nodejs服务进行熔断,即nodejs服务大量超时可能会让agent连接池或线程池占满
agent进程的生命周期由node进程维护,通过基于配置中心的心跳机制检测agent进程是否存活
错误排查定位由于多了一层调用,更为复杂
可能存在的单机性能问题
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/96408.html
摘要:背景目前应用越来越广泛,但和的体系接入困难,所以我们需要实现端的逻辑。使用实现一个可用的完全没有问题,最简单的实现则是在对应集群注册接口与机器的映射关系,便可以访问对应接口。在评估了各种实现方案后,决定放弃开发端,使用的模式。 背景 目前nodejs应用越来越广泛,但和java的dubbo体系接入困难,所以我们需要实现node端的dubbo provider逻辑。java的dubbo ...
摘要:续上篇所需技术等说明本编讲解一个分布式架构的整个流程,首先对上编中的工程作一些小小的改动,以支持接下来的实验。本篇中,定义了服务提供者,注册中心及客户端消费者三者关系。一服务提供者这里首先对服务端进行改造。 (续上篇) 所需技术:spring、mybatis、druid、flyway、logback、nodejs,zookeeper,dubbo,dubbo-admin等;说明:本编讲解...
摘要:是的默认负载均衡策略。一致性哈希负载均衡。所以负载均衡是分布式系统架构设计中必须考虑的因素之一。考虑主要是如何让下游接收到的请求是均匀分布的第层客户端层反向代理层的负载均衡。通过轮询第层反向代理层层的负载均衡。 一、 什么是负载均衡? 什么是负载均衡? 记得第一次接触 Nginx 是在实验室,那时候在服务器部署网站需要用 Nginx 。Nginx 是一个服务组件,用来反向代理、负载平衡...
摘要:学习笔记的设计目的动态注册发现服务,软负载均衡和服务降级。一下是整个工程的内容公共定义一般和共享的接口应该单独一个包进行定义,方便双方的共享。暴露的服务实现如下入口类的实现如下实现其文件和类似其配置如下,声明了对服务的引用。 Dubbo学习笔记 Dubbo的设计目的 动态注册、发现服务,软负载均衡和服务降级。 描述服务依赖关系,描述整体服务架构。 统计服务负载,按需扩展容量。 简单...
摘要:一前言框架对于开发来说并不陌生,通常新增一个接口,我们可以直接用测试。但是工作中有时遇到一些接口的实现会获取上下文中的信息,如果需要测试的话就只能另外编写代码设置上下文,调用接口实现,相对来说会比较麻烦。 一、前言 dubbo框架对于java开发来说并不陌生,通常新增一个dubbo接口,我们可以直接用telnet测试。但是工作中有时遇到一些dubbo接口的实现会获取上下文中的信息,如果...
阅读 2771·2023-04-25 23:08
阅读 1561·2021-11-23 09:51
阅读 1539·2021-10-27 14:18
阅读 3099·2019-08-29 13:25
阅读 2799·2019-08-29 13:14
阅读 2856·2019-08-26 18:36
阅读 2180·2019-08-26 12:11
阅读 781·2019-08-26 11:29