背景

目前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进程是否存活

  • 错误排查定位由于多了一层调用,更为复杂

  • 可能存在的单机性能问题

Nodejs“实现”Dubbo Provider的更多相关文章

  1. dubbo.provider和dubbo.consumer配置

    Configure service provider <?xml version="1.0" encoding="UTF-8"?> <bean ...

  2. Apache Dubbo Provider默认反序列漏洞复现(CVE-2020-1948)

    Apache Dubbo Provider默认反序列漏洞(CVE-2020-1948) 0x01 搭建漏洞环境 漏洞介绍 2020年06月23日, 360CERT监测发现Apache Dubbo 官方 ...

  3. dubbo provider如何对invoker进行export

    如何把provider的invoker export出去:1)为原始对象加wrapper,生成invoker:2)给invoker加各种filter,启动监听服务:3)注册服务地址 以HelloSer ...

  4. 【CVE-2020-1948】Apache Dubbo Provider反序列化漏洞复现

    一.实验简介 实验所属系列: 系统安全 实验对象:本科/专科信息安全专业 相关课程及专业: 计算机网络 实验时数(学分):2 学时 实验类别: 实践实验类 二.实验目的 Apache Dubbo是一款 ...

  5. Node EE方案 -- Rockerjs在微店的建设与发展

    本文是根据2019.4.13日参加 "Node-Party"论坛使用的PPT,加上笔者新的思考与沉淀而来.在此再次感谢贝贝网前端部门和芋头君以及相关与会人员的支持! -- 微店杨力 ...

  6. 【dubbo】dubbo项目基本结构及provider构建

    dubbo项目基本结构如下,分别部署于不同服务器: 1.provider(接口API 实现) 2.consumer(web) 3.zookeeper 4.DB provider构建 1.api构建 i ...

  7. dubbo服务提供与消费

    一.前言 项目中用到了Dubbo,临时抱大腿,学习了dubbo的简单实用方法.现在就来总结一下dubbo如何提供服务,如何消费服务,并做了一个简单的demo作为参考. 二.Dubbo是什么 Dubbo ...

  8. Dubbo学习小记

    前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是 ...

  9. dubbo 配置解析

    1.dubbo 常用配置 <dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心.eg.<dub ...

随机推荐

  1. 微信小程序页面带参数跳转

    页面传递参数的方式 data-para js获取参数

  2. 【动态规划dp】青蛙的烦恼

    青蛙的烦恼(frog) 原文:https://blog.csdn.net/xyc1719/article/details/79844952 [题目描述] 池塘中有 n 片荷叶恰好围成了一个凸多边形,有 ...

  3. python升级pip和Django安装

    1.centos7默认python版本为2.7.5,现升级到3.6.0 2.wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz ...

  4. Express全系列教程之(二):Express的路由以及动态路由

    一.Express路由简介 路由表示应用程序端点 (URI) 的定义以及响应客户端请求的方式.它包含一个请求方时(methods).路径(path)和路由匹配时的函数(callback); app.m ...

  5. session and cookie

    cookie cookie是由W3C组织提出,最早由Netscape社区发展的一种机制.目前Cookie已经成为标准,所有的主流浏览器如IE.Netscape.Firefox.Opera等都支持Coo ...

  6. C#递归复习

    static void Main(string[] args) {  Console.WriteLine("请输入你要的数字:");  long flag = Convert.To ...

  7. MySQL建表 TIMESTAMP 类型字段问题

    Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT ...

  8. 实验一 C运行环境与最简单程序设计

    #include<stdio.h> int main(){ int a,b,sum; a=123; b=456; sum=a+b; printf("sum is %d\n&quo ...

  9. AWS 移动推送到iOS设备,Amazon Pinpoint

    前言 第一次对接aws,遇到的坑是真多.现在记录一下.本文主要用到的是[Amazon Pinpoint]推送. 开发人员的指南:https://docs.aws.amazon.com/zh_cn/pi ...

  10. 深入了解webpack前,可以了解的小知识点。

    阅读前:文章大概是写,简单用过webpack,想继续深入了解webpack前需要了解的知识.但文章内容跟webpack使用关系并不大. 文章概要: Object.defineProperty call ...