2

有人说:开源软件是一项划时代的创举,它撕开了私有软件大环境下的深重膈膜,为IT技术发展注入了新的活力和空间。据Linux基金会的统计报告,现有软件中只有10%不到的代码是由开发者纯手写,而90%以上是和各种开源软件的源码组合而成。开源技术发展至今,社区不断发展壮大,各种新技术层出不穷,应用也越来越广,开源技术的影响力正在渗透到我们日常生活的方方面面。

2020年10月23日~11月2日,腾讯云官方开发者社区—云+社区主办的以「开源之道」为主题的系列沙龙活动已圆满谢幕。此次在线沙龙邀请到11位开源技术圈大咖演讲,和大家深度探讨如何贡献开源、成就自身等话题,以及分享腾讯开源第一线背后的技术奥秘,帮助大家在这条路上走得更好。

优秀程序员,如何贡献开源?

开源的本质是什么?说到这个话题,开源社理事长暨联合创始人 & ASF Member 刘天栋首先发表了自己的看法。他认为开源的本质有四个点最关键:

  1. 开源是开放的,要有开放的心态来做这件事,公开透明是良好协作的基石。
  2. 分享,乐于分享是一切善举的开端,而不是闭门造车。
  3. 平等,大家都有平等的追求,这是开源社区健康的基础。
  4. 是协作,透过开放式的协作能逐步形成凝聚共识,是开源社区繁荣的秘诀。

开放原子基金会TOC副主席谭中意认为,开源本质就是源码开放基础设施上的多人协作模式,为了让这种协作能够长期健康的进行,产生了各种各样的附加层面。

比如为了让代码上下游可以工作得更好,就产生了开源社区;为了更好支持开源社区又产生各种各样的基金会,基金会后面又有各种各样的商业公司支持,又催生了新的商业模式.......回归到本质,就是大家在开放的源码上一起来写代码。

开源中国社区负责人王永和对此也有补充,他认为开源不仅仅是代码开源,项目的背后还有社区、委员会、以及相关的法律。由此他告诫开发者:在使用一款开源软件之前,务必对该项目的整个体系和组成部分有全面的了解,这样能避免很多的坑。

此外在开发者如何贡献开源的话题讨论中,三位老师也发表了自己的看法,他们一致认同:贡献开源,绝不仅仅只有程序员可以参与。除了贡献源码以外,翻译文档、给文档纠错,又或是分享优秀的开源项目给身边朋友,这些看似微不足道的行为,也会为社区的壮大带来巨大的益处。在此过程中,也能为自身带来很多意想不到的收获。

企业级云原生:TKEStack 腾讯云原生开源实践之路

TKEStack是腾讯开源的一款集强壮性和易用性于一身的企业级容器编排引擎,是开放原子开源基金会的孵化项目之一。TKEStack的开源思路是寻找云原生的蓝海,腾讯认为在未来,多云以及硬件异构和硬件平台异构是一个方向。

首先是硬件异构,目前绝大部分的使用场景是基于 X86 的硬件,但国内有一个很重要的诉求:就是支持 ARM。腾讯会做到X86 和 ARM 可以在同一个集群内部署。GPU 方面除了有自己传统的比较有优势的 GPU 虚拟化能力以外,也把英特尔 GPU 能力和寒武纪和华为的 GPU 相关产品 在 TKEStack 里面做适配,让上层用户可以无感的使用。

基础架构异构就是混合云,TKEStack 架构设计上是拿一个集群管其他的集群,天然可以做到混合云,把别的集群,自建集群注册到 TKEStack 里面来,利用 TKEStack 提供的镜像仓库、认证、日志、权限、监控,在一个 TKEStack 界面来可以管理多个 K8S 集群。

腾讯积累了一批云原生应用相关的技术方案,两个比较为人熟知的是有状态应用的 TAPP 和英伟达 GPU 虚拟化,还有一些大数据套件也在做集成。腾讯希望把内部的优势开源组件一步一步往 TKEStack 里面集成,让用户可以在TKEStack上使用。

除此以外还有一个比较重要的点就是松耦合,TKEStack 一方面支持自研业务,另一方面也支持商业化产品,最终呈现给用户态的不止一个产品。面对这样的诉求,就要求 TKEStack做到可插拔、积木式组装。A 产品要用日志,B 产品不用日志,自己可以选择可以随意的组合,TKEStack 就具备这样的松耦合能力。

跨国合作:Serverless Components 在腾讯云的落地和实践

Serverless Framework 是⼀个开源命令⾏⼯具,为开发和部署 Serverless 架构提供脚⼿架,⾃动化⼯作流以及最佳实践。并且它⽀持通过丰富的插件进⾏功能扩展。

Serverless Components 是 Serverless Framework 推出的最新解决⽅案,具有基础设施编排能⼒,开发者通过使⽤ Serverless Components,可以灵活构建、组合和部署 Serverless 应⽤。

通过 CLI 的命令进行部署的时候,会把用户代码压缩之后上传。首先压缩指定的代码目录,上传到一个公共的 COS 里面。然后新建或者更新组件的状态,同时会在服务端把代码下载下来,并注入 Proxy 代码。

Proxy 代码都实现了什么能力呢?因为云函数主要的适用场景是事件驱动型的,对于 http 请求的实现是通过 API 网关触发器转发的。网关接收到的 http request 会转换为云函数需要的参数对象,在函数执行包装后的 web 框架,执行完后再把 http response 转换成 API Gateway 需要的结构返回给网关,网关再把 response 转换成标准的 http response 返回,这样就实现了整个 HTTP 的访问。

而用户不需要关注这部分的实现,按照正常的开发就可以。Components 部署的时候会自动注入这部分转换逻辑的代码。服务端在注入完 Proxy 代码后会把代码上传到用户 COS 里面,然后创建或更新云函数,同时会再创建或者更新 API 网关的配置。

这个时候再把整个创建的过程以及创建的状态保存到服务端,控制台再输出整个组件最终需要给用户看到的一些云上资源的信息,比如 SCF 的信息、API 网关的信息、CDN 的数据和数据库信息等,整个部署就算是完成了。 应用部署完后会返回 API 网关公用的二级域名的一个访问地址,跟正常的函数与自己组装资源去访问应用方式是一样的。

通过这个过程抹平了一些云函数和正常服务器差异化的实现,抹平后通过 Serverless Components 可以不用关心这些特殊的逻辑逻辑,也不需要关心其他的云上的资源。

国产开源数据库:腾讯云TBase在分布式HTAP领域的探索与实践

数据库作为计算层和存储层的基石,其开源的重要性不言自明。TBase是腾讯TEG数据平台团队在开源PostgreSQL的基础上研发的企业级分布式HTAP数据库系统,可在同一数据库集群中同时为客户提供强一致高并发的分布式在线事务能力以及高性能的数据在线分析能力,已经为腾讯内外部包括政务、银行、保险、证券、微信支付等多个行业提供底层数据库支撑。

2019年11月7日,TBase正式开源到GitHub ,开源以来受到了欧洲航天局的“ESA Gaia mission”(https://sci.esa.int/web/gaia)等多个外部项目的青睐。

TBase 在分布式事务上的能力做了较大改进。首先对 GTM 集群做了优化,从原始的全局 XID 改成了分配全局时间戳GlobalTimeStamp(GTS),GTS 是单调递增的,腾讯基于 GTS 设计了一套全新的 MVCC 可见性判断协议,包括 vacuum 等机制。

这样的设计可以把提交协议从 GTM 的单点瓶颈下放到每一个节点上,减轻压力,同时通过时间戳日志复制的方式实现 GTM 节点主备高可用。这种协议下 GTM 只需要去分配全局的 GTS,这样的话单点压力就会被解决得比较明显。根据推算, 滕叙 TS85 服务器每秒大概能处理 1200 万 TPS,基本能满足所有分布式的压力和用户场景。

国产开源IoTOS:腾讯物联网操作系统TencentOS Tiny的探索与实践

腾讯物联网终端操作系统(TencentOS tiny)是腾讯面向物联网领域自主研发的嵌入式实时操作系统。TencentOS Tiny提供精简的 RTOS 内核,内核代码仅1w行,内核组件可裁剪可配置,可快速移植到多种主流 MCU 及模组芯片上,集成主流物联网协议栈(如CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入腾讯云物联网平台。

2019年9月18日正式全网开源以来,覆盖了IoT主流应用场景,形成了良好的开发者生态和行业影响力。支持硬件平台数量超60+,包括STM32、NXP、华大半导体、Nordic、兆易半导体、国民技术、TI MSP、瑞兴恒方等多家MCU和模组厂家。

TencentOS Tiny 的产品架构,由下往上看,最下面是目前已经支持的 MCU 芯片和模组,其中包括 STM32 和主流的蜂窝通信模组,提供了驱动框架和外设框架,兼容不同硬件和方便适配不同硬件平台。

再往上面是TencentOS Tiny的核心基础内核,再上面是物联网所需要的联网组件,提供了 IoT 常用的功能组件,比如文件系统、KV存储和高级语言引擎框架等等,提供了方便用户调用的业务层API,业务层上也会提供常用的案例供客户和开发者参考。除此以外,此架构内置了安全框架,为终端设备的设备唯一标识、通信链路加密、密钥安全存储提供了保障,防止物联网设备被攻击。

总体来看,整个TencentOS Tiny物联网操作系统有三个主要特点:

第一,极至精简的内核。内核整体代码量不超过一万行,能够实现超低资源的占用,IDLE任务下,最小资源占用仅为0.6KB RAM,1.8 KB ROM。

第二,功耗低,最小休眠功耗可以达到 uA 级别。

第三,软件架构非常简捷,方便嵌入式开发者以超快的速度入门,只需要把操作系统快速移植上去,上面的IoT组件就可以直接使用,非常方便,不需花太多时间成本学习。

前端视角谈物联网三部曲:连接智能,交互智能,数据智能

作为离用户和物联网设备最近的前端,在物联网三部曲中扮演什么样的角色呢?这两年来腾讯云物联网探索出了“腾讯连连”小程序。

在业界比较少小程序经验的前提下,腾讯连连小程序率先提供了丰富的设备连接方式:WI-FI(SoftAP,SmartConfig,AirKiss,SimpleConfig,蓝牙辅助配网等),蓝牙(标准蓝牙协议,自定义蓝牙协议),LoRa等网关和子设备的连接方式,并且不断打磨连接体验和成功率。

在设备控制方面,提供了标准面板和独创性的基于SCF框架的自定义H5面板方案;为了和更多的物联网开发商和爱好者一起打造生态,提供了一系列的开源的开放能力:应用开发SDK,自定义H5面板开发SDK,小程序插件等等,吸引了很多厂商和开发者。

腾讯云 IoT 致力于帮助广大的物联网开发者做好设备生命周期管理中的基础设施建设,保证功能的易用性、完整性和性能高可用性,让开发者只需要关注自己业务逻辑即可,这样以最短时间发布产品抢占先机。整个物联网产品开发平台架构图如下:

开发者可以在物联网开发者平台去开发调试这个设备,在控制台去看这个设备的监控日志、数据分析等等。同时,腾讯也推出了 C 端的应用腾讯连连,去帮助用户做设备管理,设备管理包括设备的连接、交互、更新、删除等等,可以进一步的缩短开发厂商设备量产的 C 端产品开发流程。

腾讯连连当初为什么要做小程序呢?小程序的优势在于安装便捷,给一个二维码就可以打开了,不像 APP 的安装那么繁琐,它跟微信里面的关系链是强绑定的。而物联网设备也是跟人强绑定的,家居领域、企业领域都是需要跟一群人交互的,它的优势在于这里。

而对于开发商来说,小程序可以用一种语法在两端运行,不需要处理安卓、IOS 端的兼容性问题,可以大大的减少缩短开发周期,而且可以精简开发智能角色一个前端就可以搞定以前要两个端的开发人员做的工作。

压测利器:TarsBenchmark正确打开方式

Tars 是由腾讯主导开源,并捐献给Linux基金会的微服务RPC框架。当下后台逻辑服务大都采用微服务架构设计,其后台服务一般基于二进制的RPC方式对外提供服务,以Tars服务为例,其RPC的接口协议是极易扩展的,这种灵活多变的协议给服务的性能评测带来了一定的难度。而TarsBenchmark的及时推出极大地降低使用门槛,同时支持在线评测服务性能。

TarsBenchmark采用多进程的方式,在主进程上会根据服务器的物理核数去fork相等数量的压测进程,各压测进程之间是完全隔离的,也就是独立运行,避免了进程与进程之间互相争夺临界资源。

在网络方面,采用的是事件驱动的方式,通过定时发包器读写进程,并通过事件驱动避免网络IO的阻塞。外在连接方面采用连接池,在连接池对每个连接采用连接复用的方式。不依赖于对端是否返回,可以根据返回包的序号定位到发包的性能和发包的时间,也可以计算压测过程当中的一些耗损数据。

在协议方面,采用的是协议代理工厂模式,TarsBenchmark默认提供的是Tars协议的压测,但是如果开发者有一些私有协议,可以参考Tars协议的实现集成进来,代理工厂可以自动识别协议。在Tars协议中,支持随机数据的生成。另外还提供一个工具,用以自动生成测试用例,测试用例采用的是JSON格式,达到预期就可以轻松发起压测。

开源之潮,正滚滚而来,引领着技术发展的新思潮,而国内开源发展也正如火如荼,在这样的时代背景下,愿每一位开发者都能抓住机遇成就自身。正是源于对技术高度的热忱,让大家相遇在云 + 社区沙龙直播间,跟随技术大咖的前进脚步探索自己的开源之道。未来云+社区还将举办更多技术布道活动,积极拥抱开发者,携手谱写技术新时代篇章。

segmentfault 思否


王治治
1.2k 声望5.2k 粉丝

学者所志至大,犹恐所得浅。