当前位置: 首页 > 编程日记 > 正文

腾讯“疯狂”开源

作者 | 马超

责编 | 胡巍巍

出品 | CSDN(ID:CSDNnews)

近日,腾讯自研的万亿级分布式消息中间件TubeMQ正式开源,并捐赠给Apache基金会,成为基金会官方认可的Incubator项目。

我们知道与TubeMQ功能类似的kafka是领英公司在早在10年前捐赠给Apache基金会的金牌项目,而那时的腾讯还在忙于3Q大战,公司文化也相对封闭,甚至连目前社交领域的绝对领跑者-微信都是腾讯内部竞争,获得胜出的产品,所以谁也没想到腾讯竟然有今天的转变,成为了一家全面拥抱开源的科技公司。

走向开源的腾讯

在近日举办的腾讯Techo开发者大会上,腾讯正式对外表示将改变过去“自下而上”的开源模式,向“自下而上”与“自上而下”相结合的协同式开发演进。

其开源将在内部协同共建的基础上,推动更底层、更重磅的技术对外开放,紧密参与开源社区建设,不断完善开源治理,打造开发者共建的生态。

并建立对外开源管理办公室,对开源项目进行指导和帮助,为开发者提供社区合作交流机会,建设以开源为核心的技术生态圈。

而且腾讯还真的不是只做所谓PPT开源,笔者刚刚在Github上做了一下统计,目前腾讯在Github上发布的总项目数达到90个,Star数破26万;

而且其开源项目很多都堪称重磅,如在18年腾讯将其高性能RPC开发框架TARS及其轻量化名字服务方案TSeer捐赠给Linux基金会,当时就获得了业内的广泛好评,今年以来腾讯开源势头更盛,先是开源了物联网操作系统Tencent OS Tiny,而近期开源的TubeMQ算得上是社交巨头腾讯的最核心技术了。

腾讯为何拥抱开源

笔者曾经分析过开源对于与IT技术发展的关系,此番再度思考之后笔者认为开源对于巨头们来说有如下三个战略意义:

开源之争就是标准之争:目前的开源之争就是20年前的标准与知识产权之争。比如谷歌的深度学习框架Tensorflow成为人工智能方面的行业标准,靠的就是开源用户的口口相传,可以说谁掌握了最流行的开源项目,谁就掌握了话语权,从而主导行业的发展方向。

开源之争就是入口之争:目前各大IT厂商之所以纷纷推出自己的loT操作系统、深度学习框架等开源项目,其实本质的商业逻辑还是争夺用户的入口流量,掌握入口就能在未来竞争中掌握主动。

开源之争就是全栈之争:为了保证自己的基业长青,各巨头基本要采用全技术栈不留死角的竞争策略,才能让自己保持基业长青,目前类似于腾讯这样的企业将自身从前端到后端的所有技术全部开源,供行业其它参考者模仿,就是要巩固自身在行业内部的领先优势,为自身的品牌价值及技术能力宣传造势。

所以开源实际是最高形式的竞争,整个技术社区的认可才能保证自己永不落后。

万亿交易量成就的TubeMQ

TubeMQ的诞生

TubeMQ(Github地址:https://github.com/Tencent/TubeMQ)是2013年腾讯开始自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输。经过近7年日均25万亿的天量数据的打磨,较之于其它竞品TubeMQ绝对堪称是千锤百炼,在海量实践应用场景下绝对无人能出其右。

TubeMQ的适用场景

与一般的MQ类似,TubeMQ也比较适合及流式数据的处理场景,如用户的使用日志,实时广告的推荐等场景。

TubeMQ与其它MQ的比较:可以说TubeMQ最核心的优势就是历经考验了,我们可以看到其它的TubeMQ的竞品,几乎都有不同策略的数据副本同步机制,而只要存在这种策略,并一定要有一致性的保证机制,从而造成一定的性能消耗,TubeMQ则放弃了数据同步的策略,以尽可能的提升效率,并且加入了消息的服务端过滤功能。

比较项

TubeMQ

Hippo

Kafka

Pulsar

数据时延

10毫秒

20毫秒级

250毫秒

10毫秒

请求TPS

单机14W+/s

不适用

单机10W+/s

10W+/s (大压力下不稳定)

过滤消费

支持服务端过滤

客户端过滤,不支持服务端过滤

客户端过滤,不支持服务端过滤

客户端过滤,不支持服务端过滤

数据副本同步策略

无,通过RAID10磁盘备份+低时延消费解决

类Paxos算法保障

多机异步备份

多机异步备份

数据可靠性

无数据同步策略,故单机故障未消费的数据存在丢失风险

一般,master未同步的数据存在丢失风险

一般,master未同步的数据存在丢失风险

系统稳定性

高,日均25万亿交易量, 稳定运行5年

无TubeMQ类似的运营场景

无TubeMQ类似的运营场景

无TubeMQ类似的运营场景

易用性

一般,只提供Java和C++的Lib

一般,只提供Java和C++的Lib

高,有很多配套插件使用

高,有很多配套插件使用

TubeMQ的技术架构

Portal:包括API和Web两块,API对接集群之外的管理系统,Web是在API基础上对日常运维功能做的页面封装;

Control:由1个或多个Master节点组成,Master HA通过Master节点间心跳保活、实时热备切换完成(这是大家使用TubeMQ的Lib时需要填写对应集群所有Master节点地址的原因),主Master负责管理整个集群的状态、资源调度、权限检查、元数据查询等;

Store:由相互之间独立的Broker节点组成,每个Broker节点对本节点内的Topic集合进行管理,包括Topic的增、删、改、查,Topic内的消息存储、消费、老化、分区扩容、数据消费的offset记录等,集群对外能力,包括Topic数目、吞吐量、容量等,通过水平扩展Broker节点来完成;

Client:以Lib形式对外提供,大家用得最多的是消费端,相比之前,消费端现支持Push、Pull两种数据拉取模式,数据消费行为支持顺序和过滤消费两种。对于Pull消费模式,支持业务通过客户端重置精确offset以支持业务extractly-once消费,同时,消费端新推出跨集群切换免重启的BidConsumer客户端;

Zookeerper:仅做offset的持久化存储,考虑到接下来的多节点副本功能该模块暂时保留。

总的来说,Kafka按照顺序写顺序块读的模式实现,单实例下性能数据很强,但随着实例数增多,它的性能就呈现不稳定下降状态;TubeMQ采用 顺序写 + 随机读的模式,即使在最大限制下系统仍可以做到长期稳定的1G以上的入流量,同时,结合服务端过滤,过滤消费非常顺畅。

与kafka的技术方案相比

在TubeMQ的最大不同在于以下几个方面

1、TubeMQ使用Java语言开发,kafka则使用相对小众的scala语言,再二次开发的难度TubeMQ占据优势

2、 使用内嵌数据库存储元数据:与Kafka的Zookeeper模块管理元数据的策略不同,TubeMQ系统的主节点通过采用内嵌数据库BDB完成集群内元数据的存储、更新以及HA热切功能,负责TubeMQ集群的运行管控和配置管理操作,对外提供接口,从而减轻维护复杂度

3、 服务端的消息过滤:TubeMQ支持服务端的消息过滤及负载均衡的方案,更便于均衡算法升级;

4、 引入行级锁防重复:TubeMQ的Broker在中间状态的并发操作采用行级锁的策略,避免重复问题。

后记

IT业与传统行业最大的不同,就是其背后还隐藏着侠义与江湖的影子,技术社区就是江湖上的武林大会,而开源则是武林高手下场比武,而在这种不断交流切磋的过程中,必将提高各门派的武功水准。

所以在此笔者也由衷希望腾讯今后能够开源更多更优质的项目以飨整个国内IT业,推动行业良性发展。

【End】

(*本文为AI科技大本营转载文章,转载请联系原作者)

精彩推荐

开幕倒计时5天|2019 中国大数据技术大会(BDTC)即将震撼来袭!豪华主席阵容及百位技术专家齐聚,十余场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读。6.6 折票限时特惠(立减1400元)倒计时 2 天,学生票仅 599 元!

推荐阅读

  • 阿里正式开源通用算法平台Alink,“双11”将天猫推荐点击率提升4%

  • 最新单步目标检测框架,引入双向网络,精度和速度均达到不错效果

  • 拒绝成为比尔·盖茨的“万维网之父”,又要干大事!

  • 测试小白必读!从0基础做到「大厂测试」,要掌握什么技能?

  • 科技公司最爱的50款开源工具,你都用过吗?

  • OceanBase 的前世今生

  • 骚操作!程序员将简历做成游戏,边看边玩还能通关!HR……

  • 如何判断一家互联网公司要倒闭了?

  • 把700元的单片机改造成以太坊节点, 9步get起新技能!

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

[Android]开发摇一摇分歧表决器过程

心血来潮,走进Android,准备开发一个摇一摇分歧表决器(PS:这个想法源自去年看的一个都市剧《约会专家》中主人公杭杭开发的分歧表决器APP)。简述:摇一摇分歧表决器是一款Android App,通过将传统的…

C和C++安全编码笔记:整数安全

5.1 整数安全导论:整数由包括0的自然数(0, 1, 2, 3, …)和非零自然数的负数(-1, -2, -3, …)构成。 5.2 整数数据类型:整数类型提供了整数数学集合的一个有限子集的模型。一个具有整数类型的对象的值是附着在这个对象上的数学值。一个具有整数类型的对象…

8.3折特惠票仅剩3天!「2019 嵌入式智能国际大会」全日程大公开!

8.3折特惠票仅剩3天立即抢购:https://t.csdnimg.cn/otBk还有5天,大伙期待的「2019嵌入式智能国际大会」正式开幕了!2019年12月6日-7日,我们在深圳市人才研修院见!大会以“万物互联泛在智能”为主题,邀请30位…

iOS点击空白收回键盘

//点击空白收回键盘 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; }

第一个net-mvc程序

结构 视图层 <% Page Language"C#" Inherits"System.Web.Mvc.ViewPage<dynamic>" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">…

iOS 储存用户信息设置封装 直接调用即可(部分是代码片段)

、、、、、、、、、、、、、、、、、、首先 定义 UserInfo #import <Foundation/Foundation.h> interface UserInfo : NSObject //用户id property (nonatomic, strong) NSString *userID; //用户名 property (nonatomic, strong) NSString *userName; //密码 propert…

ASN.1简介及OpenSSL中ASN.1接口使用举例

ASN.1(Abstract Syntax Notation One)是一套标准&#xff0c;是描述数据的表示、编码传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。OpenSSL的编码方法就是基于该标准。ASN.1是一种结构化的数字对象描述语言&#xff0c…

谁是当今最顶级的技术?SQL、Java、Python、C++ 皆上榜!

【12月公开课预告】&#xff0c;入群直接获取报名地址12月11日晚8点直播主题&#xff1a;人工智能消化道病理辅助诊断平台——从方法到落地12月12日晚8点直播&#xff1a;利用容器技术打造AI公司技术中台12月17日晚8点直播主题&#xff1a;可重构计算&#xff1a;能效比、通用性…

将表里的数据批量生成INSERT语句的存储过程 增强版

原文:将表里的数据批量生成INSERT语句的存储过程 增强版将表里的数据批量生成INSERT语句的存储过程 增强版 有时候&#xff0c;我们需要将某个表里的数据全部或者根据查询条件导出来&#xff0c;迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件来生…

通过OpenSSL的接口实现Base64编解码

对openssl genrsa产生的rsa私钥pem文件&#xff0c;使用普通的base64解码会有问题&#xff0c;如使用https://blog.csdn.net/fengbingchun/article/details/85218653 中介绍的方法&#xff0c;一是有可能不能从返回的结果中直接使用strlen来获得最终字符的大小&#xff0c;因为…

激辩:机器究竟能否理解常识?

【12月公开课预告】&#xff0c;入群直接获取报名地址12月11日晚8点直播主题&#xff1a;人工智能消化道病理辅助诊断平台——从方法到落地12月12日晚8点直播&#xff1a;利用容器技术打造AI公司技术中台12月17日晚8点直播主题&#xff1a;可重构计算&#xff1a;能效比、通用性…

Mac OS X 下Node.js开发环境的搭建

1.安装Xcode2.安装Homebrew 谷歌搜索Homebrew 复制命令行 打开终端 粘贴命令行 点击回车 安装 输入密码等2.安装Nodejs利用Homebrew安装nodejs打开终端 输入 &#xff1a;brew install nodejs 回车查询nodejs版本&#xff1a;node --version3.安装文档数据库 MongoDB打开终…

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper 參考演示样例代码&#xff0c;例如以下所看到的&#xff1a; /// <summary>/// MySql 数据库操作类/// </summary>public class MySqlHelper{/// <summary>/// MysqlConnection/// </summ…

Instagram个性化推荐工程中三个关键技术是什么?

作者 | Ivan Medvedev&#xff0c;Haotian Wu&#xff0c;Taylor Gordon译者 | 陆离编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09; 【导语】近期&#xff0c;Facebook 在博客上分享了第一篇详细介绍 Explore 系统关键技术&#xff0c;以及 I…

iOS UIbutton 点击无反应的几种情况

1、UIButton不能点击情况的第一种是&#xff0c;你将button添加到一个不能响应点击事件的View里。如你将button添加到UIImageView中&#xff0c;解决办法只需将UIImageView的 userInteractionEnabled设为YES即可。 例如&#xff1a; self.headImgV [[UIImageView alloc] ini…

C和C++安全编码笔记:格式化输出

C标准中定义了一些可以接受可变数量参数的格式化输出参数&#xff0c;参数中包括一个格式字符串。printf()和sprintf()都是格式化输出函数的例子。格式化输出函数是由一个格式字符串和可变数目的参数构成的。在效果上&#xff0c;格式化字符串提供了一组可以由格式化输出函数解…

谈谈UI架构设计的演化

谈谈UI架构设计的演化 经典MVC 在1979年&#xff0c;经典MVC模式被提出。 在当时&#xff0c;人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来&#xff0c;而Trygve Reenskaug在跟一些人的讨论中&#xff0c;逐渐剥离出一系列的概念&#xff0c;最初是T…

JWT(JSON Web Token)简介及实现

JWT(JSON Web Token)&#xff1a;是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间作为Json对象安全地传输信息。由于此信息是经过数字签名的&#xff0c;因此可以被验证和信任。可以使用HMAC SHA256或RSA等对JWT进行签名。 JW…

iOS UIImageView 加载含有汉字的url处理方法

NSString *url [model.pic stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; [self.headImgView sd_setImageWithURL:[NSURL URLWithString:url]];

《评人工智能如何走向新阶段》后记

由AI科技大本营下载自视觉中国自《评人工智能如何走向新阶段》一文发表&#xff08;在内部&#xff09;后&#xff0c;引来了中外专家、草根们的广泛议论&#xff0c;有深有浅&#xff0c;其中似有一些思考价值&#xff0c;故录入本文后记&#xff1a; 中外专家、草根们23条议…

用XCA(X Certificate and key management)可视化程序管理SSL 证书(3)--创建自己定义的凭证管理中心(Certificate Authority)...

在第“用XCA&#xff08;X Certificate and key management&#xff09;可视化程序管理SSL 证书&#xff08;2&#xff09;---创建证书请求”章节中&#xff0c;我们介绍了怎样用XCA创建SSL证书请求&#xff08;Certificate Request&#xff09;&#xff0c;在一章节中&#xf…

C和C++安全编码笔记:并发

并发是一种系统属性&#xff0c;它是指系统中几个计算同时执行&#xff0c;并可能彼此交互。一个并发程序通常使用顺序线程和(或)进程的一些组合来执行计算&#xff0c;其中每个线程和进程执行可以在逻辑上并行执行的计算。这些进程和(或)线程可以在单处理器系统上使用分时抢占…

《评人工智能如何走向新阶段》后记(再续1)

由AI科技大本营下载自视觉中国中外专家、草根对《评人工智能如何走向新阶段》一文进行广泛议论&#xff0c;已在《后记》中发表原创&#xff08;未加修改&#xff09;的23条议论&#xff0c;现再续发24-30条如下&#xff1a; 24.最近半年来&#xff0c;人工智能的发展重心逐渐…

iOS UITextView 随键盘弹出界面上移

- (void)textViewDidBeginEditing:(UITextView *)textView { CGRect frame textView.frame; int offSet frame.origin.y 70 - (self.view.frame.size.height - 216.0); //iphone键盘高度为216.iped键盘高度为352 [UIView beginAnimations:"ResizeForKeyboard" co…

H3C 交换机命名规则

例&#xff1a;H3C-S5500-28C-EIH3C&#xff1a;为固定值&#xff0c;就是“H3C”这个品牌S的位置&#xff1a;代表产品系列『S 代表交换机SR 代表业务路由器』第一个5的位置:代表产品子系列号『3系为千兆上行,百兆下行的合适交换机 例:S3600 S31005系为全千兆的盒式交换机 …

iOS 时间选择器封装(含三种模式)

#import <UIKit/UIKit.h> typedef enum : NSUInteger { DatePickerViewDateTimeMode,//年月日,时分 DatePickerViewDateMode,//年月日 DatePickerViewTimeMode//时分 } DatePickerViewMode; protocol DateTimePickerViewDelegate <NSObject> optional /** * 确定按…

C和C++安全编码笔记:总结

《C和C安全编码》(原书第2版)这本书是2013年出版的。 这里是基于之前所有笔记的简单总结&#xff0c;笔记列表如下&#xff1a; 字符串&#xff1a;https://blog.csdn.net/fengbingchun/article/details/105325508 指针诡计&#xff1a;https://blog.csdn.net/fengbingchun/…

《评人工智能如何走向新阶段》后记(再续2)

由AI科技大本营下载自视觉中国从朋友那里获知&#xff0c;有一块供大家自由议论人工智能的园地&#xff08;内部的&#xff09;&#xff0c;我通过有关关系进入后&#xff0c;一览之余&#xff0c;果然生动活泼&#xff0c;没有学究气&#xff0c;从已发表的30条议论来看。有原…

Dokku和Docker的完美配合

看到一篇不错的文章&#xff0c;收藏一下&#xff1a; 【编者的话】本文作者介绍了如何在单机上将Dokku和Docker结合。Dokku是一个小型的PaaS平台&#xff0c;只需使用Git将代码push到对应的仓库上就能自动触发部署&#xff0c;构建过程非常简单。但是Dokku对于用户来说&#x…

iOS封装分页效果

#import <UIKit/UIKit.h> interface WPageTitleView : UIView property (nonatomic,assign) NSInteger selectedIndex; //添加参数数组 property (nonatomic,strong) NSArray *titles; property (nonatomic,copy) void (^buttonSelected)(NSInteger index); end #impo…