前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021下半年有哪些不能错过的技术趋势?(下)

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

作者头像
腾讯大讲堂
发布2021-07-20 19:10:16
5480
发布2021-07-20 19:10:16
举报

作者:腾讯在线教育技术团队  导语| 腾讯在线教育部后台中心团队,作为在线教育行业的从业者,尝试整理一下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年下半年也会有更多创新出现。

近期热文推荐

  你“在看”我吗?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯大讲堂 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 05
    • 1. 敏捷的应用交付流程
      • 2. 监控告警系统
        • 3. tracing 系统
          • 4.云原生对提升 devops 的展望
          • 06
            • 2. 平台的新技术点
              • 3. 业务应用新技术的能力扩展
              • 07
                • 2. 在线教育网关实践
                • 08
                相关产品与服务
                云直播
                云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档