写点什么

伴鱼英语基础架构怎么做?

  • 2020-10-28
  • 本文字数:3155 字

    阅读完需:约 10 分钟

伴鱼英语基础架构怎么做?

今年年初的疫情,让线上教育平台都加大了线上宣传的力度,我也多多少少看过伴鱼英语的广告,于是就关注起来,原来这是一家刚过完了五周岁生日,专注于少儿英语的公司,也获得了 1.2 亿美金的 C 轮融资,目前覆盖 4000 万用户、160 万付费用户的产品矩阵。当然,我们更关注他们的技术积累。他们有自己的技术博客,由内部技术同学分享技术精进的内容,大家可以点击去看看


一家公司的技术水平如何,得从底层基础架构谈起,如果基础架构做的不好,是很难支撑业务增长的,也不可能有优质的用户体验。所以我们邀请伴鱼基础架构负责人徐成选来 QCon+案例研习社来分享伴鱼基础架构的细节,例如架构设计、迭代、优化等问题,希望大家能找到共鸣之处。我们也有幸提前采访了徐老师,聊了很多关于伴鱼英语基础架构的技术话题,以下是采访内容整理:

技术积累,不分公司大小

徐成选已经在基础架构领域工作了 6 年多,在每家公司的收获也是不一样的,正如他自己说的,基础架构比较特殊,跟公司的具体业务不直接相关,但是业务规模、流量特点会影响基础架构的规划建设思路。


最早从传统行业跳到一家创业公司开始做基础架构,那会儿困难比方法多,好多问题得不到答案,也解答不了别人的疑问。后来开始参与开源社区里的一些项目,多和业界技术人交流,开始有了一些思路。2016 年入职小米之后,分别开创、参与了 Redis 中间件集群、服务治理、MySQL 中间件集群等,这几年也不断学习,将所学知识应用到具体项目中。


小米自身的规模非常大,抢购具有流量洪峰,质量保障要求极高,在这种环境下做项目自己的架构设计、实现能力都得到了极大的提升。伴鱼英语量上虽然没有传统互联网公司大,但是对稳定性要求极高,并且是创业公司、时间紧张,系统建设需要找好切入点,依次展开。总之,在每个不同的公司,都保持持续学习的习惯,然后根据业务特点灵活开展项目,适合的才是最好的。


对于在线教育而言,2020 年业务应该是推动技术发展最快的一年吧,在这一年里,伴鱼技术上有哪些让你印象深刻的点?


2020 年对于整个中国、世界,不管是在线教育还是其他各行各业,都是令人难忘的一年。


徐成选说,作为一个教育行业的技术人,在经历阵痛的同时,也迎来了在线教育的爆发。这一年里伴鱼扩展基础设施(如专线建设);深耕服务治理、质量保证,提升服务研发效能,数据库稳定性;从 0 到 1 推出多个系统如 CMDB、PaaS、SQL 审核、OKR 平台、触达平台等等,不断提升业务、研发的自动化水平,减少人为介入。另外,伴鱼还非常重视技术影响力建设,推出了几十篇高质量的技术文章,跟 PingCAP 达成战略合作,参与、推出开源项目等,为下一个五年做好充足的准备。

基础架构要因地制宜的建设

基础架构团队是隶属于技术中台部门下的一个团队,主要负责服务治理、中间件、Kubernetes、部分在线数据设施的建设工作。伴鱼建设基础架构或者说整个技术中台部门都是围绕研发效能、稳定性、赋能业务来开展的。



月底在 QCon 会议上,徐老师会主讲服务治理话题,介绍伴鱼的技术效能、稳定性、规范化建设,感兴趣的可以关注一下。


在徐成选看来,基础架构挑战中最重要的一点是做出对的决策。基础架构核心比较标准,但是落地时是一个非标领域,各家都有自己的技术选型、现有系统等。这就需要基础架构负责人能够做出适合公司的选择,是自研还是选择开源,具体项目的架构层次如何划分,模块如何设计,项目完成后如何落地,如何权衡业务需求,系统建设之间的矛盾如何解决。这里面每一步的决策都比较有挑战。


有些公司的基础架构建设很难得到重视,伴鱼是怎样实施推进的呢?对于这一点,徐成选说,基础架构需要上层管理者的支持,上层不重视,基础架构工作很难开展。另外推拉结合,如果推是基础架构主动推动,拉就是业务系统对基础架构有所求。比如服务治理是很容易提升业务开发效率的,这就很容易得到业务的认可,建设、推动起来会比较方便。对于深层次的如基础设施、中间件这类业务感知不明显的系统,就需要基础研发的同学不断找存在感,打造内外影响力,让大家能够感知到这类系统带来的一些变化。另外技术债是永远不可避免的一个点,解决历史债务一是要有良好的指导文档,二是要重视小工具的建设,方便大家迁移。


伴鱼的基础架构研发更适合使用因地制宜的方式。首先,伴鱼是一家创业公司,并且教育类公司也有自己的特点。例如,伴鱼的服务有固定晚高峰,高峰期服务付费用户,那对于稳定性的要求要非常高,所以伴鱼开展稳定性建设比较早,如自研稳定性组件—Dolphin,提供限流、降级、熔断能力,TiDB、Mongo SDK 静默埋入表级别熔断能力,防止 DB 挂掉;伴鱼中台非常重视效能,现阶段经常会出现测试环境不够用的情况,于是就提供了泳道能力,流量在前端入口、网关处会打上标记,网关之后的服务实例都会带有泳道标识,具有相同泳道标识的流量、服务构成一个完整的测试环境,方便开发人员密集开发需求时,不同需求的测试。

基础架构稳定性措施

其实架构稳定性是个比较大而全的话题,往往也会包含了存储。单体应用时期,架构稳定性更多的是落实到具体组件,如 Nginx、PHP-FPM(FastCGI Process Manager:FastCGI 进程管理器)实例数是否够用,与 DB 之间的连通性是不是有问题,排查问题也比较简单。微服务之后,虽然带来了研发、部署的便利性,但也带来了一些问题。伴鱼未来解决这些问题做的如下几个点:


拆分。首先服务的依赖层次必须清晰,微服务经常出现循环调用,继而导致线上连锁反应,这是特别常见的事情。所以,先不用管服务拆分的粒度,循环依赖的事情不能有,层次必须清晰;拆分的另一方面是基础库、基础服务 SDK、业务代码库的层次关系,一定要逐层向上依赖,拆分清晰。


稳定性平台建设。伴鱼设计、开发了 Dolphin 稳定性平台,支持服务治理、SDK、基础服务、基础库的限流、降级、熔断需求,在应对业务突发、异常问题时非常有用。


推动单元测试框架。提升流程自动化水平、减少人为接入,推动业务监控大盘、APM 提升可视化能力,持续推动报警平台建设、接入,不断打磨、优化框架等。


服务治理的点非常多,在特定情况下如何寻找切入点,先做什么、后做什么,如何权衡呢?


“If you can’t measure it, you can’t improve it.” 其实服务治理也是一个研发效能、稳定性提升的过程,如果不可见、不能衡量,也就很难说做的是否正确。徐成选说:“我一般先从监控入手,比如统一业务监控大盘,每个业务系统都可以看到自己某个系统的运行情况。然后,报警也非常重要,尤其是业务发展比较快的时期,很容易出现各类问题。日志规范化越早做越好,为后续跟数据对接做准备。基本的服务治理框架必不可少,后面可以边对外支持,边迭代开发,复议代码生成工具(服务)可以很好的解决一些历史代码问题,剩下的就是根据公司需要推出一些基础服务、中间件、平台建设了。“

写在最后:

目前伴鱼已经开启了第二个五年,会继续深耕少儿英语,扩展多学科,走国际化路线,打造有粉丝的互联网教育品牌。在这里,也诚挚欢迎各路大牛加入,我们非常重视技术团队、氛围建设,希望为大家提供一个良好的平台,开心地做事情,感兴趣的同学可以联系。


讲师简介:


徐成选:伴鱼英语 技术中台/基础架构负责人,后端八年,基础架构方向六年,传统行业、互联网都有所经历,曾职于小米、阿里,目前在伴鱼负责基础架构团队。个人对支付系统、服务治理、中间件、分布式系统都有所涉猎,也在学习云原生相关的知识。热爱开源,在小米期间开源了 Gaea,在这之前作为核心开发参与过 Kingshard,目前也在和团队积极参与 TiDB 生态相关的一些孵化项目。


技术会议推荐:


传播前沿技术趋势,分享热门技术话题。阔别半年之久,InfoQ 线下技术大会正式回归!将在 12 月份和 2021 年 1 月份启动三站 QCon 全球软件开发大会,定位深圳、上海和北京。欢迎查看会议日程 https://qcon.infoq.cn/2020/shanghai/schedule


2020-10-28 12:272138

评论

发布
暂无评论
发现更多内容

MySQL打印死锁日志

Simon

MySQL 死锁

新机遇,拨开证劵企业生态转型迷雾

大咖说

云计算 阿里云 数字化转型 数字化 企业上云

在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

汪子熙

SAP abap CloudFoundry 11月日更

10行代码,撸一个在线个人简历页面!

老表

Python GitHub Linux web开发 跟老表学云服务器

TypeScript 针对 JavaScript 做了什么

HoneyMoose

一文帮你掌握TDengine的降采样查询+跨时区统计

TDengine

数据库 tdengine 后端

云管理软件哪家好?有哪些功能?咨询电话多少?

行云管家

云计算 云服务 云平台 云资源 云管理

用明道云集成多平台多部门数据,发挥数据分析的力量

明道云

TDSQL | 多类型数据库统一管理,腾讯云数据库DBhouse工具重磅发布

腾讯云数据库

数据库 tdsql

金融级数据库新坐标:腾讯云TDSQL发布全自研新敏态引擎

腾讯云数据库

数据库 tdsql

CodeGuide 300+文档、100+代码库,一个指导程序员写代码的,Github 仓库开源啦!

小傅哥

Java GitHub 小傅哥 开源社区 代码库

作业三总结

Geek_1d37ea

架构训练营

TDSQL首次登上腾讯财报!金融机构核心系统落地实现规模化复制

腾讯云数据库

数据库 tdsql

8大原则带你秒懂Happens-Before原则

华为云开发者联盟

线程 并发 Happens-Bfore Java内存

国家质量基础设施(NQI)一站式综合服务平台开发搭建

电微13828808271

Apache Pulsar 荣获中国开源云联盟「2021 优秀开源项目」

Apache Pulsar

大数据 云原生 开源项目 Apache Pulsar 消息系统 Apache Pulsar 社区

架构实战营模块八作业

Geek_d18264

架构实战营

100G云服务器诞生记

科技热闻

ABAP Netweaver和git的快捷方式

汪子熙

SAP Netweaver CloudFoundry 11月日更

OPPO 图数据库平台建设及业务落地

NebulaGraph

图数据库 知识图谱 图数据库实战 分布式图数据库

JDK的第三个LTS版本JDK17来了

程序那些事

程序那些事 11月日更 jdk17 java17

用一个极致简单的场景演练领域建模

神帅

DDD 领域建模

智联招聘的Web模块扩展落地方案

智联大前端

组件化 SSR

校招 C++ 大概学习到什么程度?

博文视点Broadview

企业采购管理的这些痛点,如何解决?

低代码小观

企业管理 管理系统 管理工具 采购管理 企业采购管理

模块三作业

Geek_1d37ea

架构训练营

新时代下如何构建TDSQL-C数据库产品

腾讯云数据库

数据库 tdsql

重点人员动态管控系统开发,智慧公安情报研判系统搭建

电微13828808271

Moment.js 转换 UTC 格式的 2 个小问题

HoneyMoose

云小课 | DSC:快速识别敏感数据并脱敏

华为云开发者联盟

华为云 识别 数据脱敏 数据安全中心 敏感数据

【Promise 源码学习】第八篇 - 完善 Promise 并通过 promise-aplus-tests 测试

Brave

源码 Promise 11月日更

伴鱼英语基础架构怎么做?_架构_Xue Liang_InfoQ精选文章