【ArchSummit 】会议即将开幕,一起来看架构师在AI时代的“生存法则”总结! 了解详情
写点什么

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

  • 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:271871

评论

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

Git 基础知识学习

LeoBing

软件设计原则

yupi

Java世界的“烂”包管理

申扬科技

maven Git Submodule

在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了

java金融

Java 后端 BigDecimal金额 Arrays.asList

策略模式解析

Seven七哥

设计模式 策略模式

大话设计模式 | 3. SOLID原则

Puran

设计模式

程序员的晚餐 | 6 月 20 日 随便牛肉和翡翠白玉

清远

美食

区块链系列教程之:比特币的钱包与交易

程序那些事

比特币 区块链 智能合约 钱包 交易

【Golang runtime学习笔记-启动过程分析】

卓丁

初始化 runtime 汇编 Go 语言

终于有人把 java代理 讲清楚了,万字详解!

java金融

Java jdk 后端 动态代理 cglib

架构师训练营第三周学习总结

张明森

由一次管理后台定时推送功能引发的对 RabbitMQ 延迟队列的思考 (二)

LSJ

Java RabbitMQ 延迟队列 优先级队列

Kafka面试题:基础27问,必须都会的呀!

Java小咖秀

大数据 kafka 分布式 队列 延时消息

[安利] 可能会让你爱上书写的工具组合!

猴哥一一 cium

Typora markdown markdown编辑器 玩转写作平台

ArrayList哪种循环效率更好你真的清楚吗

java金融

Java 后端 ArrayList 循环效率 方式

从拼多多突破阿里和京东两大巨头绞杀,市值破千亿美金来看职业价值链

非著名程序员

程序员 程序人生 职业规划 职业成长

实现一个redis命令--nonzerodecr

老胡爱分享

redis 源码分析 源码阅读

游戏夜读 | RPG的美式和日式

game1night

啥是CPU缓存?又如何提高缓存命中率呢?

八两

架构师第二周学习总结

陈靓-哲露

优化工程师逻辑视角下的微信“拍一拍”功能

Earth_Polarbear

人工智能 微信 系统工程 优化逻辑

如何做好职场印象管理?

石云升

职场 印象管理 职场形象

一款跨平台免费的开源 SQL 编辑器和数据库管理器!

JackTian

数据库 sql GitHub 开源 实用工具

golang-pprof实战笔记

卓丁

pprof 性能分析 Go 语言

[架构师训练营] 2 依赖倒置

悬浮

SpringIOC 是依赖倒置吗?

yupi

架构师训练营 - 第 2 周命题作业

红了哟

Java操作Excel竟如此简单

生命在于折腾

Java EasyExcel

架构师训练营 - 第2周学习总结

红了哟

效率思维模式与Zombie Scrum

Worktile

敏捷开发

架构师训练营第二周作业

陈靓-哲露

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