2021下半年有哪些不能错过的技术趋势?(下)

2021-07-20 19:10:16 浏览数 (2)

作者:腾讯在线教育技术团队  导语| 腾讯在线教育部后台中心团队,作为在线教育行业的从业者,尝试整理一下2020年后端技术要点,以此窥探后台未来技术的发展趋势: ①云计算进程提速,一切皆服务。  ②云上安全越来越受到企业的重视。 ③从资源云向业务云化转变,最终全面云原生化。  ④微服务、DDD、中台技术并非企业技术架构设计的银弹。 ⑤Python、Go、Rust成为后端未来最先考虑学习编程语言。  ⑥Go语言生态发展稳健,越来越多企业在生产中使用Go语言落地业务。 ⑦疫情催化在线教育行业产品升级转型,音视频技术不断迭代升级。 

上篇已对前四个趋势进行了展开介绍,本文将详细阐述后三个。

点击查看上篇:2021下半年有哪些不能错过的技术趋势?(上)

05

DevOps

2020 年,在云原生的浪潮下,devops 相关的技术栈也在稳步地向前演进,下面将从以下几个方面分别进行阐述:

  • 敏捷的应用交付流程
  • 监控告警系统
  • tracing 系统
  • 云原生对提升 devops 的展望

1. 敏捷的应用交付流程

业内趋势

当前出现了一系列的基于Kubernetes的CI/CD工具,如Jenkins-x、Gitkube,它提供了从代码提交、自动编译、打包镜像、配置注入、发布部署到Kubernetes平台的一系列自动化流程。甚至出现了像ballerina这样的云原生编程语言,它的出现就是为了解决应用开发到服务集成之间的鸿沟。然后结合监控告警系统实时掌握服务运行情况,结合调用链系统进行服务故障定位。

在线教育的实践

蓝盾是腾讯从业务安全出发,贯穿产品研发、测试和运营的全生命周期;助力业务平滑过渡到敏捷研发模式,打造的一站式研发运维体系。它助力业务持续快速交付高质量的产品。蓝盾提供了丰富的特性:

  • 可视化
  • 一键式部署
  • 和持续集成无缝集成
  • 支持并行部署
  • 架构水平扩展,相同逻辑的节点无主备关系
  • 数据安全
  • 小核心,大扩展!可插件化扩展,优先添加所需要的流程控制部件,同时可方便的扩展其他部件
  • 可监控,监控一切异常的构建并告警
  • 灰度切换,达到切换时不影响正在构建的流水线

2. 监控告警系统

监控系统事实上的标准 prometheus

Prometheus 在度量领域的统治力虽然还暂时不如日志领域中 Elastic Stack 的统治地位那么稳固,但在云原生时代里,基本也已经能算是事实标准了。2020 年,对 prometheus 来说,是忙碌的一年:

grafana cloud agent 发布:为 grafana cloud 优化的的一个轻量级 prometheus 分支,它使用 prometheus 的代码,保证 prometheus 生态依赖的一些属性:数据完整性、数据过期处理等等。允许使用一种更灵活的方式定义从何处以什么方法拉取和传输数据,它已经成为一种更受欢迎的方式将数据写入后端存储。它的 remote_write 方式相比于传统 prometheus agent 的 remote_write,内存使用降低了 40%;

v2.19.0 的发布:最核心的功能是,对于完整的 chunk,在内存中使用 head 结构映射磁盘中的 block,单就这一个点,内存使用就降低了 20%-40%,并且使得 prometheus 的重启速度更快;

v2.20.0 的发布:它为 Docker Swarm 和 DigitalOcean 支持了本地的服务发现;

提升批量插入一大批老数据到 prometheus 的效率;

Grafana Metrics Enterprise 的启动:提供针对大企业的 prometheus-as-a-service 的解决方案

在线教育的实践

nginx 访问日志和服务间模块调用相关信息都上报到全链路 es 集群

通过一个 exporter 对 es 中的数据按照项目和接口维度进行汇聚,将相关的聚合数据存入 prometheus

全链路 es 和 prometheus 都可以作为 grafana 的数据源进行数据展示和告警判断

alert 模块将告警信息发送到相应的渠道

收到告警之后,去 grafana 查看对应时间段的趋势图,去全链路 es 集群查看对应时间段的原始日志

3. tracing 系统

比起日志与度量, tracing 这个领域的产品竞争要相对激烈得多。一方面,目前还没有像日志、度量那样出现具有明显统治力的产品。另一方面,几乎市面上所有的追踪系统都是以 Dapper 的论文为原型发展出来的,功能上并没有太本质的差距,却又受制于实现细节,彼此互斥,很难搭配工作。

OpenTracing 规范

为了推进追踪领域的产品的标准化,2016年11月,CNCF技术委员会接受了OpenTracing作为基金会第三个项目。OpenTracing是一套与平台无关、与厂商无关、与语言无关的追踪协议规范。

OpenCensus 规范

OpenTracing规范公布后,几乎所有业界有名的追踪系统,譬如Zipkin、Jaeger、SkyWalking等都很快宣布支持OpenTracing,但是Google自己却在此时提出了与OpenTracing目标类似的OpenCensus规范。OpenCensus不仅涉及到追踪,还把指标度量也纳入进来。

OpenTelemetry 规范

2019年,OpenTracing和OpenCensus又共同发布了可观测性的终极解决方案 OpenTelemetry,并宣布会各自冻结OpenTracing和OpenCensus的发展。OpenTelemetry野心颇大,不仅包括追踪规范,还包括日志和度量方面的规范、各种语言的SDK、以及采集系统的参考实现。

在线教育的实践

腾讯基于 OpenTelemetry 规范,自研了天机阁系统。天机阁主要分为三大部分:

  • 分布式追踪(distributed tracing)
  • 监控(monitoring,metrics)
  • 日志(logging)

与之对应提供七大能力:

  • 故障定位:天机阁中能够提供整个请求全链路上下文信息,具体哪个环节出错一目了然
  • 耗时分析:天机阁的耗时分布图,可以快速了解全链路耗时情况
  • 多维染色:在天机阁基于通用的设计理念下,天机阁提供的染色能力,不会局限在某个业务的具体字段,同样也不会局限单个维度
  • 架构治理:天机阁架构治理的核心功能是微服务架构拓扑,基于微服务架构拓扑可以构建更加丰富更加具体的上层分析能力
  • 全链路日志:天机阁核心建立在分布式追踪方法论下,提供将分散在各个微服务的日志根据因果和时间有机进行组合,达到提供全链路上下文日志的效果
  • 服务监控:天机阁在监控领域将会重点推出如下几大领域监控(机器基础指标监控、数据库监控、进程监控、模调监控)
  • 业务看板:主要用于业务定制化的数据指标配置和展示

系统架构图

功能模块图

4.云原生对提升 devops 的展望

serverless 对提升 devops 的展望

  • 降低运维需求
  • 缩短迭代周期、上线时间
  • 快速试错
  • 极致弹性
  • 降低运营成本

service mesh 对提升 devops 的展望

  • 更好发挥掌握不同编程语言的人才优势
  • 框架的部分能力平台化,加速应用迭代速度
  • 微服务软件架构从解决"拆"到解决"连"的加速落地
  • 灵活的流量治理能力改善软件的发布与回滚效率

06

音视频

1. 音视频技术回顾

随着AI技术的兴起、5G时代的到来,音视频技术不断加速应用发展,像直播、短视频这样的产品遍地开花,火热程度相信大家或多或少都接触过。

音视频技术的加速应用依赖底层编解码标准的发展,当前主流的 H.264 编解码技术已经不能满足未来4K、8K的需求,今年年中刚发布的H266/VCC,与 H.265相比进一步提高了压缩效率,这项耗时3年的标准,主要面向未来的4K和8K,后续的落地应用非常值得期待。

在实时音视频技术领域,不得不提及谷歌的开源项目WebRTC,可以在浏览器上快速开发出各种音视频应用,目前主流的浏览器包括Chrome、Firefox、Safari等都将WebRTC作为首选的实时音视频方案。同时也催生了像声网、即构科技这样的专门音视频服务商。从StackOverflow Trends 和GoogleTrends来看,未来关注度仍会持续上升,腾讯也是WebRTC应用的主力军。

目前直播后台开发主要分为三大块:

  1. 标准直播:我们日常生活中使用频率最高的直播,例如电视节目直播、游戏直播、直播带货。
  2. 快直播:标准直播在超低延迟直播场景基础上的延伸,毫秒级超低延迟播放的同时,也兼顾了秒开、卡顿等核心问题,为用户带来超低延迟流畅度的直播体验。
  3. 慢直播:能够提供更稳定清晰的直播画面,基本的使用场景都用于监控领域,国内疫情早期,4000万人同时在线,通过一个固定机位观看雷神山医院建筑工地的现场直播,让云监工迅速火爆。2020 行至年终,各大机构评选的网络热词相继出炉,其中,“云监工”频繁出没于「十大网络热词」榜单中,与之并列的多是“后浪”“网抑云”“打工人”等。

随着网络技术的不断发展,持续提供高质量的视频信号传播已经算不上浪费网络资源,即使一个直播无人观看,未来慢直播具有极大的延伸价值以及发展前景,让我们期待慢直播行业的蓬勃发展。

借助5G技术低时延、高速率、大容量等显著优势,音视频的大赛道,从目前的短视频慢慢走向中长视频发展,这是未来的大风口。

2. 平台的新技术点

目前腾讯在线教育音视频直播已完成整体上云,腾讯云的互动直播也从早期的opensdk全面升级到TRTC,TRTC是腾讯实时音视频[Tencent Real-Time Communication],源自QQ音视频团队,是基于QQ十几年来的音视频技术积累。

腾讯云提供TRTC(全球延时<300ms) WebRTC快直播(上行走RTMP推流或FLV、HLS、RTMP回源,下行支持标准WebRTC协议输出,延时500ms左右) 标准LVB直播(FLV/HLS/DASH,平均延时3-5秒)融合解决方案,如下图中用户可以针对自己的业务场景组合不同的直播解决方案。承载大规模带宽、支撑高并发,保证客户业务正常运作,达到99.9%以上的可用性,整体资源储备及业务突发承接能力行业领先。

随着全民抗疫,“停课不停学”的号召,在线教育也成为直播的主力军,直播的进房成功率/首帧延迟/卡顿率/音画同步时延/分辨率等指标直接影响用户核心体验。站在云的肩膀上,在线教育直播业务通过组合云上多种直播模式,结合业务流控系统,对各端直播接入进行多级流控及直播模式切换,在保证直播质量的前提下支撑远超互动直播极限的房间容量,下图是具体的直播架构。

3. 业务应用新技术的能力扩展

目前直播课普遍采用大班授课方式,老师在上课的时候,跟学生的互动有限,学生的注意力和参与感有限。大班教室人数太多,老师无法提供足量的presentation机会,学生与学生之间缺少有效的学习互动。

腾讯在线教育部推出如下图的六人小班课,基于TRTC 在互动课堂场景下,为学员提供了稳定优质的服务,延迟低至原来的1/10,互动效果得到很大提升。六人小班课给用户带来更多“被关注”的感觉,相比于大班课,家长的价值感知更高。

07

接入网关

1. 网关发展历程

接入网关有四大职能

  • API入口:作为所有API接口服务请求的接入点,负责请求的转发。
  • 业务聚合:网关封装了系统内部架构,为每个客户端提供一个定制的API。作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用。
  • 中介策略:身份验证、路由、过滤、流控、缓存、监控、负载均衡、请求分片与管理、静态响应处理等策略,进行一些必要的中介处理。
  • 统一管理:提供统一的管理界面,提供配置管理工具,对所有API服务的调用生命周期和相应的中介策略进行统一管理

开源网关发展迅速。从nginx横空出世,到openresty解放程序员,更加专注解决业务需求,再到kong成为api网关的独角兽,以及最近出现不久的apisix,当然也不能少了大名鼎鼎的envoy。下面介绍主要的几个网关。

nginx

2004年10月4日发布的第一个公开版本以来,nginx已成为高性能web服务器、反向代理服务器的代名词。相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,能够支持高达 50,000 个并发连接数的响应。模块化和将一个请求分为多个阶段的设计,方便开发人员扩展。

openresty

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。python、js、lua 三种语言中,lua 是解析器最小、性能最高的语言,而LuaJIT比lua又快数10倍,开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

kong

kong 是 API 管理的强大效率工具,主要有4个特点

  • 扩展性:通过增添更多的服务器实例达到横向扩展
  • 灵活性:可以部署在单个或多个数据中心环境的私有云或公有云上。支持大多数流行的操作系统,比如Linux、Mac和Windows。包括许多实用技巧,以便针对大多数现代平台完成安装和配置工作
  • 模块性:可以与新的插件协同运行,扩展基本功能。可将API与许多不同的插件整合起来,以增强安全、分析、验证、日志及/或监测机制
  • 生态:开源免费使用,同时也能获得企业版,此外还提供初始安装、从第三方API管理工具来迁移、紧急补丁、热修复程序及更多特性。

2. 在线教育网关实践

在线教育网关发展过程中的包袱

  • 通道proxy多语言, 多框架, 多协议功能无法服用,维护成本高
  • 配置动态加载能力和插件能力不统一
  • 一个接口上线配置多次,验证多次。
  • 缺乏完善的监控
  • 频控,容灾、熔断、下载等能力缺失
  • 非云原生应用,不支持自动扩缩容

tiny网关

tiny网关主要的能力如下:

  • 提供 app 端, web, pc 端快速接入,统一sdk和协议
  • 支持智能路由,支持按照 cmd, uid, roomid, cid字段的路由
  • 全房间和多维度组合推送策略
  • 可靠push保障
  • 业务级别的监控告警
  • 命令字配置集中管理,支持热加载
  • 支持插件化的能力,方便添加业务特性的插件
  • 全面落地容器化,支持自动扩缩容

完整的架构如下图所示

08

go语言

随着云原生在互联网行业的普及,golang从众多语言中,脱颖而出,成为了云原生时代的新秀。越来越多的开源项目采用golang语言来实现。因此学习和掌握golang语言,越来越成为一种趋势。本篇文章,主要围绕golang语言的主要特性来展开讲解,希望对大家有帮助。

语法简单

golang素以简单著称,总共25个保留字,相比c 的82个,java语言的50个,少的不能再少了。golang官方也比较吝于新增命令字。常见的结构和判断,对于golang来说,就只有if,for,switch等非常简单的命令字。自带的array,slice,map等数据结构,基本可以cover大多数的使用场景。

部署方便

编译好的golang程序,是一个独立的二进制程序,只依赖操作系统的一些基础库,除此之外,没有任何其他外部依赖。有使用过golang语言开发开源软件的同学,应该感触。

静态编译

golang是一门静态强类型的编译型语言,与c 类似,golang也是也有一个完整的编译链接过程,并且有严格的编译期的语法检查过程。配合golang强大的工具链,在编译期可以提前解决脚本语言运行时才能发现的诸多问题。

垃圾回收

一直以来,c 程序员饱受内存问题的困扰,常见的比如内存泄漏,溢出,double free等问题层出不穷,并且定位起来费时费力。c 官方为了降低使用成本,也在c 0x之后,引入了智能指针来解决内存使用的问题。但是内存问题依然存在。golang跟java语言一样,从语言层面提供了GC能力,自带的垃圾回收机制,有效解决了内存使用的诸多问题。但是垃圾回收并非完美无缺, 不合理的内存使用方式,依然会导致程序出现严重的gc问题,从而导致程序出现性能问题,因此也有一定的trick需要遵循。

工具链支持

除了golang语言自带的编译,安装,单元测试等工具之外,c 的调试神器gdb也能够使用。同时第三方提供的delve调试工具, 兼容性和易用性更好,同时还提供了远程调试的能力。原生自带的perf工具,配合第三方的go-torch工具,生成的火焰图,调试的时候非常方便, 让性能瓶颈能够一目了然。

泛型

golang被人诟病的特性之一,就是不支持泛型。官方认为虽然泛型很赞,但会使语言设计复杂度提升,所以并没有把这个泛型支持作为紧急需要增加的特性,也许在不久的将来, 会引入这个特性。现阶段可以通过使用Interface作为中间层,起到抽象和适配的作用。一些第三方工具,比如genny,通过模板化生成代码,也可以作为泛型的一种解决方案。

错误处理

golang语言, 错误处理从语言层面得到了支持, 基于Error接口来实现,配合函数的多返回值机制,, ,一般情况下, 错误码也会作为函数的最后一个返回值。在golang中, 错误处理非常重要, 语言的设计和规范,也鼓励开发人员显示的检查错误。也正因为如此,golang的错误处理,也被很多人所诟病,觉得不像其他高级语言,比如java的错误处理那么简洁。不过整体来说,golang作者将错误码显性化,目的是为了让大家能够重视错误处理,所以应该说是各有特色。

包管理

golang语言刚诞生的时候,并不支持版本管理。GOPATH方式,也只能算是包管理基本的雏形。后来经过一系列的演变,社区先后支持了dodep,glide的工具。直到2016年,官方才提出采用外部依赖包的方式,引入了vendor机制。2017的时候推出的dep工具,基本可以作为准官方的解决方案了。然而,直到2019,go modules的推出, golang的包管理争论才最终尘埃落定。基于go mod的版本管理机制,基本上可以说是一统江湖。具体的golang包管理演进过程,如下图所示:

并发性能

golang从语言层面就支持了并发,大大简化了并发程序的编写。这也是golang广受大家欢迎的原因之一。goroutine是golang并发设计的核心, 本质上讲就是协程,也叫做用户态线程,它比线程更易用,更高效,更轻便,占用内存更小,并对开发者屏蔽了底层的协程调度细节。提供的go,select,channel等关键字,易用性非常好。配合golang中提供的sync包,可以非常高效的实现并发控制能力。

常见网站

  • golang百科全书: https://awesome-go.com/
  • golang developer roadmap: https://github.com/Alikhll/golang-developer-roadmap
  • sql2go工具: http://stming.cn/tool/sql2go.html
  • toml2go工具: https://xuri.me/toml-to-go/
  • curl2go工具: https://mholt.github.io/curl-to-go/
  • json2go工具: https://mholt.github.io/json-to-go/
  • 泛型工具: https://github.com/cheekybits/genny

生态

Go在未来企业会有更多布道:Go Conference一直都是Gopher关注的技术大会,20年11月国内的Go Conferernce分享主题主要包括Go语言基础(Go编程模式、Go Module、Go编译器、组件包)和架构落地实践(微服务实践、微服务框架、云原生实践、大数据和高并发挑战),侧面也印证了Go语言在后端领域具备较强的业务实战落地能力,对打算采用Go的互联网企业,具有较强的指导和借鉴意义。

业界认可度

golang作为云原生的首选语言,在业界获得广泛的认可。基于golang的很多明星项目,包括docker,k8s,etcd,influxdb,tidb,prometheus,kibana,nsq等覆盖了容器化,容器编排,存储,监控,消息队列等各个场景, 在各大公司都获得了大量的应用。同时从github拉取数据查看语言流行程度, 我们对比了java,c ,c,go等语言发现,golang在github开源库的使用上越来越流行。如下图所示的golang占比情况:

趋势

全面转到Go Module:官方会终止对GOPATH的开发支持,全面转到Go Module。

2021年,golang中的泛型还要持续打磨。

随着云原生浪潮,越来越多的企业将会考虑将Go作为其主要后端开发语言。

技术的发展是一分钟也不会停滞。 可以预见云原生、微服务等新技术依旧是后台技术发展趋势,2021年下半年也会有更多创新出现。

近期热文推荐

  你“在看”我吗?

0 人点赞