Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实测Tengine开源的Dubbo功能

实测Tengine开源的Dubbo功能

原创
作者头像
龟仙老人
修改于 2021-05-21 02:47:02
修改于 2021-05-21 02:47:02
6850
举报
文章被收录于专栏:捉虫大师捉虫大师

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 关于作者:滴滴中间件开发工程师,微信公众号"捉虫大师"作者,关注我,给你最纯粹的技术干货。

背景

  • Tengine是阿里巴巴基于Nginx开发并开源的Web服务器,它继承了Nginx所有的功能和特性,并在其基础上做了大量的扩展和增强,其中像动态模块加载,四层负载均衡,reuseport支持等能力,都逐渐被Nginx官方吸收引用。Tengine在开源以后大受欢迎,成为了Nginx最好的替代品之一,官方网站(http://tengine.taobao.org/)。
  • Dubbo是阿里巴巴开源的一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

2019年9月,Tengine 2.3.2版本发布了dubbo_pass模块,支持HTTP协议到Dubbo协议的转换。Release页面如下:

https://github.com/alibaba/tengine/releases/tag/2.3.2

意义

《Gateway技术革命 - Tengine开源Dubbo功能》对Tengine支持Dubbo协议的意义讲的比较清楚,总结有如下几点:

  • 架构优化:减少一层转发,降低系统复杂度;
  • 性能优势:文中给出数据,“Tengine直接支持Dubbo的架构在CPU消耗和RT上的表现在不同场景下,有28%-73%不等的性能优势”

实测

Tengine环境搭建

这里我用centos的基础镜像搭了一套Tengine环境,简单说明一下步骤:

  • 进入容器,创建工作目录mkdir -p /home/roshi && cd /home/roshi/wget https://github.com/alibaba/tengine/archive/2.3.2.zip unzip 2.3.2.zip && cd tengine-2.3.2/ wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz tar xvf pcre-8.43.tar.gz wget https://www.openssl.org/source/openssl-1.0.2s.tar.gz tar xvf openssl-1.0.2s.tar.gz wget http://www.zlib.net/zlib-1.2.11.tar.gz tar xvf zlib-1.2.11.tar.gzyum install gcc yum install gcc-c++ yum -y install gcc automake autoconf libtool make./configure --add-module=./modules/mod_dubbo --add-module=./modules/ngx_multi_upstream_module --add-module=./modules/mod_config --with-pcre=./pcre-8.43/ --with-openssl=./openssl-1.0.2s/ --with-zlib=./zlib-1.2.11 make && make install/usr/local/nginx/sbin/nginx
  • 下载相关源码并解压
  • 安装相关依赖
  • 编译
  • 启动

Dubbo例子

这里要提一下之前在《dubbo应用级服务发现初体验》中提到的快速搭建Dubbo调试环境的方法:

由于Tengine有限制,接口的出参和入参必须是Map<String, Object>,所以需要对例子进行修改:

  • DemoServicepublic interface DemoService { String sayHello(String name); default Map<String, Object> testTengine(Map<String, Object> args) { return null; } default CompletableFuture<String> sayHelloAsync(String name) { return CompletableFuture.completedFuture(sayHello(name)); } }public class DemoServiceImpl implements DemoService { private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class); @Override public String sayHello(String name) { logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress()); return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress(); } @Override public Map<String, Object> testTengine(Map<String, Object> args) { Map<String, Object> res = new HashMap<>(); res.put("body", "hello tengine dubbo\n"); res.put("status", "200"); System.out.println("testTengine"); return res; } @Override public CompletableFuture<String> sayHelloAsync(String name) { return null; } }为了更好的测试多个provider的情况,可以用同一份代码,在不同的端口起多个服务。
  • DemoServiceImpl.java

修改Tengine配置

  • vi /usr/local/nginx/conf/nginx.confworker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 8080; server_name localhost; #pass the Dubbo to Dubbo Provider server listening on 127.0.0.1:20880 location / { dubbo_pass_all_headers on; # dubbo_pass_set args $args; dubbo_pass_set args hello; dubbo_pass_set uri $uri; dubbo_pass_set method $request_method; dubbo_pass org.apache.dubbo.demo.DemoService 0.0.0 testTengine dubbo_backend; } } #pass the Dubbo to Dubbo Provider server listening on 127.0.0.1:20880 upstream dubbo_backend { multi 1; server host.docker.internal:20880; server host.docker.internal:20881; } }/usr/local/nginx/sbin/nginx -s reload
  • 修改配置后reload配置,使其生效

测试

使用如下命令测试

代码语言:txt
AI代码解释
复制
curl -X POST http://127.0.0.1:8080/dubbo -i -d "hello=roshi"
img25.jpg
img25.jpg

看一下传参情况

img26.jpg
img26.jpg

总结

经过测试,总结以下几点:

  • 接口的出参入参固定为Map<String, Object>,否则会报错
  • 使用body传参,到Dubbo侧是byte[],还需要解析
  • 可以控制返回的body和http状态码,其中返回的body可以是String,也可以是byte[]类型,状态码是String类型
  • 具备Tengine原生的负载均衡算法
  • 具备故障摘除,Tegine与Dubbo Provider会建立长连接,断开则摘除
  • 未实现version、group分组功能,文档中的version实测没有任何效果

最后

正如《Gateway技术革命 - Tengine开源Dubbo功能》文中所说,Tengine只是完成了作为Dubbo Consumer的协议支持,像服务发现、自定义接口、服务分组、容错降级等其他功能暂未实现,暂时还离生产有些距离。

最后吐槽一下Tengine官网的文档

img27.jpg
img27.jpg

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx/Tengine 云锁自编译方案
在第十二步之后Nginx1.8.0 以上和 Tengine 2.1.2 则需要修改objs/Makefile文件来支持post过滤,在Makefile文件中的CFLAGS=...-Werror -g后追加宏定义 -DHIGHERTHAN8 vi objs/Makefile 按Insert后找到-Werror -g 添加 -DHIGHERTHAN8 ,添加之后按ESC:wq 再进行make。
字节星球Henry
2021/08/09
1K0
【Nginx】如何使用Nginx搭建流媒体服务器实现直播?看完这篇我会了!!(文末有福利)
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
2K0
【Nginx】如何使用Nginx搭建流媒体服务器实现直播?看完这篇我会了!!(文末有福利)
艾编程教程:Linux 环境下 Nginx 安装
yum -y install gcc automake autoconf libtool make
艾编程
2020/06/12
1.2K0
俯瞰Dubbo全局,阅读源码前必须掌握这些!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2021/01/12
3630
俯瞰Dubbo全局,阅读源码前必须掌握这些!!
【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
Bug开发工程师
2020/07/24
8490
【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
Linux非root用户安装及配置Nginx[吊打某度95%以上的教程]
这里我没研究非root用户安装(因为太麻烦了),后面我会单独出一篇文章,讲解非root用户安装gcc编译器。
华创信息技术
2019/12/18
11.4K0
搭建简单的Dubbo生产者与消费者
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Melody132
2020/03/10
1K0
Ubuntu安装Nginx-源码编译方式
1.77.1 http://nginx.org/download/nginx-1.17.1.tar.gz
DH镔
2019/12/19
7450
Nginx 的编译和安装
编译 nginx, 需要 zlib 包, pcre 包, --with-http_ssl_module 模块, 需要 openssl 包
北漂的我
2021/04/01
7860
Nginx 的编译和安装
Linux下对Nginx手动打包教程
编译之后nginx将会被安装到“/root/nginx”路径下,Nginx的二进制文件在sbin目录下,配置文件在conf目录下。
子润先生
2021/06/14
8160
CentOS7 下 Nginx 安装部署和配置
1、什么是Nginx Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器,在高连接并发的情况下Nginx是Apache服务器不错的替代品.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、腾讯,另外知名的微网志Plurk也使用nginx。 Nginx作为负载均衡服务器,既可以在内部直接支持Rails和PHP程序对外进行服务,也可以支持作为HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好很多。 Nginx作为邮件代理服务器,是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。 Nginx是一个安装非常简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器;Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级。
星哥玩云
2022/07/14
1K0
CentOS7 下 Nginx 安装部署和配置
Tengine/Nginx自编译开启云锁Web防护
云锁支持原生Nginx自动安装Web防护,可省去自编译安装。 如果包含以下模块,则必须自编译
4xx.me
2022/06/09
9450
Tengine/Nginx自编译开启云锁Web防护
轻量应用服务器编译安装Tengine并设置开机启动
Tengine是Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
幻影龙王
2021/10/17
1.2K0
tengine、nginx配置正向代理,其他内网机器通过代理访问外网,支持https
PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx rewrite 依赖于 PCRE 库,所以在安装 Tengine 前一定要先安装 PCRE。
joshua317
2022/03/29
3K0
tengine、nginx配置正向代理,其他内网机器通过代理访问外网,支持https
憧憬博客Nginx到Tengine的迁移
Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。据说 Tengine 的 IO 性能比 Nginx 提升了几十倍、淘宝流量高峰全靠 Tengine 应对。 一直在网上听说 Tengine 优秀的性能,淘宝自家都使用的 web server,其稳定性和性能已经在淘宝网,天猫商城等得到了很好的检验。这个时候博主好奇心就来了,非得把博客的 Nginx 迁移到 Tengine 不可,小小体验一下 Tengine。
憧憬博客
2020/07/21
8240
Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
百度百科: 流媒体指以流方式在网络中传送音频、视频和多媒体文件的媒体形式。相对于下载后观看的网络播放形式而言,流媒体的典型特征是把连续的音频和视频信息压缩后放到网络服务器上,用户边下载边观看,而不必等待整个文件下载完毕。由于流媒体技术的优越性,该技术广泛应用于视频点播、视频会议、远程教育、远程医疗和在线直播系统中。作为新一代互联网应用的标志,流媒体技术在近几年得到了飞速的发展。
DS小龙哥
2022/01/12
4.9K0
Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
【Nginx】如何实现Nginx的高可用负载均衡?肝了这篇我也会了!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
5470
【Nginx】如何实现Nginx的高可用负载均衡?肝了这篇我也会了!!
Ubuntu安装nginx_服务器安装Ubuntu
进入到 /usr/local 目录下执行下面1 2 3 4,此处路劲与之后安装nginx对应,需要注意*
全栈程序员站长
2022/10/02
1.8K0
Ubuntu安装nginx_服务器安装Ubuntu
用FFmpeg+nginx+rtmp搭建环境实现推流
链接:https://pan.baidu.com/s/1c2LmIHHw-dwLOlRN6iTIMg 提取码:g7sj 2、解压文件:
JQ实验室
2022/02/09
1.4K0
Dubbo的基本使用与高级应用
先启动Zookeeper,再启动provider的启动类,最后启动consumer的启动类
花落花相惜
2021/11/24
5620
推荐阅读
相关推荐
Nginx/Tengine 云锁自编译方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档