估值百亿独角兽爱学习教育集团:通过云原生实践与时间赛跑

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: iiMedia Research(艾媒咨询)数据显示,在线教育市场规模保持逐年增长的态势,2019年在线教育市场规模已突破4000亿元。在疫情的助推下,在线教育加速渗透,市场空间有望进一步打开,预计2020年中国在线教育市场规模将达到4538亿元。

13.jpg

作者:山猎

爱学习教育集团的前身为高思教育,成立于2009年,以中小学课外培训起家,曾经的定位是K12培训机构;2014年,爱学习教育集团发力B端市场,目前在2B领域获得了全国各地办学机构的广泛认可,由K12培训机构升级为K12教育供给平台。

2019年4月份,爱学习教育集团完成由华平投资领投的1.4亿美元D轮融资。2014年以前,作为一家“教育产品研发”企业,爱学习教育集团为3-18岁年龄层的孩子提供个性化的教育产品方案及所有与教育相关的服务,旗下拥有“思泉语文”、“高思数学”、“高思VIP一对一”、“中学理科”等互联网教育产品:“乐乐课堂”、“爱学习”、“爱上古诗”“爱尖子”、“爱提分”等多个全国著名的学习子品牌,这些产品目前已经被大量的中小学辅导机构及公立学校引进,普遍提升了孩子的学习体验和学习效果。

2014年,在不断发展进化当中,爱学习教育集团(当时还叫高思教育)毅然决然的转型2B领域。据了解,到2029年,爱学习教育集团希望服务全球1亿学生和500万老师,助力50万所学校,以引领行业的内容和科技给学生带来美好的学习体验。

在线教育市场竞争激烈,爱学习是如何脱颖而出?

丰富的互动场景提升用户体验,稳定性如何实现?

近些年,在线教育行业飞速发展,为整个社会的知识传播提供了前所未有的便利性。通过多种形式的在线教育平台,学员与教师即使相隔万里也可以开展教学活动,真正打破了时间和空间的限制。基于流媒体传输技术兴起的在线课堂,可以让师生拥有同处一个教室面对面授课听课的真实体验,受到了广大用户的欢迎。

流媒体传输技术是建设在线课堂类应用需要使用到的核心技术,但要打造一款真正优秀的在线课堂应用,仅仅依靠流媒体传输是不够的,只有融入丰富的课堂互动场景才能提升用户体验,让学员的学习效率倍增。这些互动场景包括提问、发言、跟读、点赞、教材导航、白板内容实时展示等,尽可能的提升这些互动场景的操作流畅度,是一款在线课堂类应用竞争力的体现,也是众多在线教育平台技术团队的共同追求。爱学习教育的研发团队,就通过不断迭代的技术手段,将在线课堂互动场景的用户体验提升到了极致。

线上用户量的飞速增长对爱学习研发团队来说是一个巨大挑战,借助于云计算弹性伸缩能力,视频直播可以直接使用云服务以满足高并发需求,但真正的难题是如何支撑互动场景的稳定运行。成熟的分布式微服务架构通过节点水平扩容可以轻松的应对HTTP请求量的突增,但标准的HTTP通讯只能解决由客户端到服务端的单向请求,如下图所示:

image.png

在线课堂互动场景涉及不同用户之间的互相通讯,以及服务器向客户端的主动消息推送,需要建立类似这样的通讯模型:

image.png

拿课堂发言的场景为例,一位学生提交发言的文字内容后,同一个课堂的其他用户都能够看到这位学生的发言。为了确保发言的内容不违规,最好的方式是服务端先对内容审核一下,过滤掉其中的敏感信息后,再推送给课堂的其他用户,类似这样的流程:

image.png

因此,在线课堂互动的本质是服务端和客户端之间的双向消息通讯,建立一个健壮、可扩展、高性能、高成本的双向消息通讯机制,这是实现线课堂互动场景的技术根基。标准的HTTP协议没有办法实现服务端主动向客户端推送消息的业务场景,因此传统的Web架构无法满足在线课堂互动需求。对于这个难题,业界也存在多种解决方案,最简单的方式是对HTTP进行少许改造,让客户端周期性对服务端进行询问,以拿回属于自己的消息,这就是基于HTTP的轮询(Polling)方案:

image.png

这个方案能一定程度上实现服务端主动向客户端推送消息,但性能极差,不但实时性满足不了要求,在没有消息的情况下还会产生大量空轮询。此外还有一种基于HTTP的长轮询(long polling)方案,是对普通轮询方案的改进,能解决空轮询问题,但优化程度非常有限,没有办法满足互动场景对于实时性的要求。

在基于HTTP协议的方案中,能原生实现服务端与客户端双向通讯的是WebSocket方案,通过建立WebSocket连接,服务端能实时地将消息推送给客户端,这也是一些基于网页的轻量级IM所普遍采用的方案。爱学习的研发团队也曾考虑过通过WebSocket方案实现课堂互动场景,但经过短暂的预研后,他们发现这个方案存在很大的局限性。在课堂互动场景中,有两个非常明显的特点:

(1)单个消息往往会同时发送给客户端。前面提到的发言场景就是一个很典型的例子,用户在课堂上的发言会被这个课堂的所有其他用户看到。

(2)在线的用户量大,高峰期数万个课堂同时开课。WebSocket方案需要让服务端和每一个客户端建立连接,如果需要推送同一笔消息给多个客户端,需要在服务端自行实现这个逻辑。

image.png

当用户量急剧上升的时候,这个架构对于服务端会造成巨大的压力,很难支持海量用户同时在线,因此爱学习的研发团队决定弃用WebSocket方案,尝试其他的方式来解决。

基于TCP或UDP自行实现应用层通讯协议也是爱学习进行过深入预研的方案,这种方式灵活度非常高,可以通过定制化的协议对消息的传输实现任意扩展,但要从头到尾设计一套应用层通讯协议,是一项极其复杂的工作,需要处理多个难题,如:

• 连接异常如何处理?
• 客户端断线如何重连?
• 消息在传输过程中丢失如何重发?
• 身份验证和权限管理如何实现?
• 如何保证服务端节点如何实现水平扩容?

这些都是开发要考虑的因素,爱学习的研发团队虽然有能力将这些细节都照顾周全,设计一套适合于自身业务场景的通讯协议,但需要投入的时间成本是非常大的,面临的风险也非常高。在业务快速发展的大背景下,研发团队需要和时间赛跑,重新寻找可以快速支撑海量用户同时在线的课堂互动方案。

通过不断技术预研所积累下来的经验,爱学习的研发团队得出了最终的结论:在技术架构上要能做到如下几点,才能满足他们在线课堂互动的需求:

(1)能支撑海量客户端同时在线;
(2)稳定,高可用;
(3)性能不满足要求时,服务端能水平扩展;
(4)通过一个中间模块进行消息分发,减少消息复制的成本;
(5)简单易用,可以快速上线。

这其中,能满足4和5的最佳方案基于MQTT协议来实现。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,为低带宽和不稳定的网络环境中的设备提供可靠的网络服务。MQTT协议具有设计思想开放、简单、轻量、易用的特点,能提供一对多的消息发布,从而解除应用程序之间的耦合,也提供了消息必达性的保障,是非常适合用于移动客户端消息推送的。
image.png

但MQTT毕竟只是一个协议,需要有成熟稳定的产品来支撑,才能用于大规模的商用场景。开源界提供的几套MQTT实现方案,都没有经过严谨的测试和商用考验,客户端数量达到1000个以后性能急剧下降,根本无法支持万级客户端同时在线。

围绕课堂互动场景,爱学习研发团队和阿里云技术专家进行了深入交流,通过数轮的评估测试后,终于决定使用阿里云微消息队列MQTT来搭建他们的在线课堂互动平台。相比开源方案,阿里云微消息队列MQTT在阿里巴巴内部经过了多年的验证和演进,能够支撑千万级设备在线连接,百万级消息并发,以及毫秒级消息推送。其采用分布式理念进行设计,无单点瓶颈,各组件之间均可以无限水平扩展,确保容量可弹性伸缩,并对用户透明。

image.png

在这个架构中,位于互联网上的客户端设备通过标准的MQTT协议接入阿里云微消息队列MQTT。MQTT协议的SDK几乎覆盖了所有主流的开发语言,而且能非常好的适应移动客户端网络不稳定的情况。位于云上的服务器集群通过RocketMQ协议接入消息队列RocketMQ,并通过RocketMQ与MQTT之间的协议转换实现服务端与客户端之间的双向互通。

为什么要引入一个新的组件消息队列RocketMQ,并让服务端的实例通过RocketMQ协议接入呢?有三个主要原因:

(1)相比客户端实例,服务端实例在规模上要小几个数量级,但单实例的消息吞吐量又比客户端要大几个数量级。在一个典型的在线课堂场景中,有数万甚至几十万级的客户端设备同时接入,而每个客户端每秒钟的消息收发量不会超过10条;服务端的情况就恰恰相反,100个实例的规模集群已经是非常大规模的集群了,而每个服务端实例1秒内可能要处理上万笔消息。服务端和客户端之间天然的区别这就决定了他们需要使用不同特性的通讯协议进行接入,以实现性能和效率的最大化。

(2)当服务端的处理能力存在不足时,消息需要在队列上进行暂存。而RocketMQ的引入为MQTT提供了消息的存储。

(3)服务端集群的多个实例之间隐含着对等和任务分摊的关系,通过RocketMQ的集群消费模式恰好就能够提供原生的负载均衡机制。

回到课堂发言的场景,发言内容提交以后,通过负载均机制,服务端集群中的某一个实例拿到发言内容,在审核完成后,只需要将消息投递给MQTT 云服务,就能分发给同一个课堂的其他用户了。这样对于服务端实例而言,只需要和MQTT云服务建立一个连接,就能同时为上万个用户提供服务。

image.png

业务高峰期,当服务端实例出现了性能瓶颈的时候,只需要增加服务端实例的数量,就能水平线性的提升。而MQTT云服务本身的性能提升则更加简单,只需要在规则上进行升配就可以实现,可以做到对应用完全无感知。

爱学习的研发团队基于这套架构,半个月的时间就搭建了一套完整的课堂互动系统。开发团队不需要在应用层关心弱网络环境、断线重连、异常处理、海量并发、系统高可用等复杂的技术问题,极大程度上降低了开发成本,提升了用户体验。

为了支持“天空之城”计划带来的用户量急剧上升,爱学习教育对这套系统进行了多次扩容,成功抗住了数次流量洪峰,确保了业务的稳定运行。(补充:为响应教育部“停课不停学”的呼吁,帮助更多本地K12机构及时转型线上,爱学习教育集团推出“天空之城”计划,开放优质内容和在线直播能力。已有9000多家机构选择通过爱学习在线平台进行线上授课,爱学习正在帮助越来越多的机构顺利转型,共筑“天空之城”。)

“天空之城”计划受全社会的高度认可的同时,爱学习的研发团队也对系统架构进行持续的迭代,并将MQTT技术用在更多的云端双向互通场景,以应付未来更多的挑战。正如爱学习教育集团联合创始人、集团总裁李川所言:“我们喜欢做价值更大的事儿,未来还有更美好的期待。”

【更多精彩】

1.中间件爆款一折起,还有阿里巴巴十年最佳实践深度解密,点击马上了解:https://www.aliyun.com/activity/daily/commercial?spm=5176.20960838.0.0.6a54305etoEn4D

2.【填问卷领淘公仔】点击马上填写问卷:
https://survey.aliyun.com/apps/zhiliao/YmW95Gk8bU

【加入行业实战交流钉钉群】

阿里云专门成立了“互联网架构升级实战课”钉钉群,每周邀请一位阿里云专家在群内进行行业最佳实践直播,每天分享行业前沿干货,钉钉扫码马上加入。

image.png

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3天前
|
Kubernetes Cloud Native 测试技术
探索软件测试的奥秘:从理论到实践深入理解云原生架构:从基础到实践
【8月更文挑战第28天】在软件开发的世界中,测试不仅是质量的守护者,也是创新的催化剂。本文将带你穿越软件测试的迷宫,从基础概念到高级策略,揭示如何通过测试提升软件质量和用户体验。我们将一起解码测试的核心原则,探索自动化测试的魅力,并学习如何设计有效的测试案例。无论你是测试新手还是资深开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,让你在软件测试的道路上更加从容不迫。 【8月更文挑战第28天】本文旨在为读者揭示云原生技术的核心概念、优势以及如何在实际项目中应用。通过深入浅出的方式,我们将探索云原生的多个方面,包括容器化、微服务架构、持续集成和持续部署(CI/CD)、以及如何利用Kubern
|
3天前
|
Kubernetes Cloud Native 开发者
云原生时代的微服务架构实践
【8月更文挑战第28天】在数字化浪潮的推动下,云原生技术成为企业数字化转型的重要支撑。本文深入探讨了微服务架构在云原生环境下的应用实践,旨在为开发者提供一套完整的微服务解决方案,从理论到实战,全方位解析微服务的设计、部署与管理过程。通过具体的代码示例和实操指导,帮助读者快速掌握云原生微服务的核心技能。
|
1天前
|
存储 Kubernetes Cloud Native
探索Python编程的奥秘云原生时代的容器编排:Kubernetes入门与实践
【8月更文挑战第30天】本文以浅显易懂的方式,探讨了Python编程的核心概念和技巧。从基础语法到高级特性,再到实际应用案例,逐步引导读者深入理解Python编程的精髓。通过本文的学习,读者将能够掌握Python编程的基本技能,并激发进一步探索的兴趣。
19 13
|
9天前
|
运维 Cloud Native Devops
一线实战:运维人少,我们是如何从 0 到 1 实践 DevOps 和云原生?
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19147 14
|
1天前
|
运维 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群的搭建与实践Python 编程入门:从零基础到编写实用脚本
【8月更文挑战第30天】在数字化转型的大潮中,云原生技术以其弹性、可扩展性及高效运维能力成为企业IT架构升级的关键。本文将通过实际操作演示如何在本地环境搭建一个简易的Kubernetes集群,带你领略云原生的魅力所在。从集群规划到服务部署,每一步都是对云原生理念的深刻理解和应用。让我们共同探索,如何通过Kubernetes集群的搭建和运维,提升业务灵活性和创新能力。
|
2天前
|
运维 Cloud Native 云计算
云原生技术在现代软件开发中的实践与思考
【8月更文挑战第29天】随着数字化转型的浪潮席卷全球,云原生技术已成为支撑现代软件开发的关键架构。本文将深入探讨云原生的核心概念、优势以及如何在企业中实施云原生策略,同时通过实际案例分析,揭示云原生技术如何助力企业实现快速迭代和高弹性的系统部署。
|
3天前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
4天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器化到微服务架构探索移动应用开发:从理念到实践
【8月更文挑战第27天】在数字化浪潮中,云原生技术如一艘航船,带领企业乘风破浪。本文将作为你的指南针,指引你探索云原生的核心概念,从容器化技术的基石Docker和Kubernetes,到微服务架构的设计哲学。文章不仅阐述理论,更通过实际代码示例,让你体验从传统应用向云原生应用转变的奇妙旅程。准备好,我们将启航进入一个更高效、更灵活的软件部署和运维新时代。
|
5天前
|
消息中间件 监控 Cloud Native
云原生时代的微服务架构实践
【8月更文挑战第26天】在数字化转型的浪潮中,企业正迅速将传统应用迁移到云端。本文探讨了云原生环境下微服务架构的设计、部署及优化策略,旨在为开发者和架构师提供实战指南。从容器化技术到服务网格,我们将深入分析微服务的最佳实践,并结合代码示例,展现如何在云平台上高效地构建和管理微服务。
|
5天前
|
Cloud Native 持续交付 云计算
云原生之旅:从理论到实践
【8月更文挑战第26天】本文旨在通过浅显易懂的语言,带领读者踏上云原生的探索之旅。我们将从云原生的基本概念出发,通过一个简单示例,展示如何将传统应用容器化并部署到云平台。文章不仅涉及技术细节,还探讨了云原生背后的哲学及其对现代软件开发的影响。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供价值。
下一篇
云函数