写点什么

专访贺晋如:小红书基础架构演进历程

  • 2022-04-02
  • 本文字数:3306 字

    阅读完需:约 11 分钟

专访贺晋如:小红书基础架构演进历程

早年间云计算刚起步的时候,Infrastructure as a Service 概念兴起,基础设施即服务,各大云计算服务来支撑各个企业的业务发展。同样的道理,基础架构在公司内部相当于技术底座,对各个业务进行赋能,其重要性不言而喻。


贺晋如博士在回国之前,曾在 Facebook,Pinterest 工作过,后回国加入茄子快传,小红书。在国外的工作经历中有些收获对于现在的工作很有帮助的。用贺晋如自己的话说,分为两方面,第一方面是技术上,他曾经非常有幸和一些世界上很优秀的工程师一起工作,一起从 0 搭建大规模的分布式系统。这里的收获不仅仅是如何搭建各种系统,更多是跟这些大师学到的搭建复杂系统的思维体系,比如:如何在设计复杂系统时做各种架构上的取舍:如何写高质量的代码;如何有效的定位线上故障并及时排障。这些收获是让他在后面很长时间都有所收益。


第二方面是在工程师文化上,在 Facebook 的时候,公司鼓励工程师去不断尝试,不设限的去参与解决各种问题。


这些技术上和文化上的收获其实都在回国后的工作里起到了比较大的帮助,这些帮助也潜移默化的影响着他的工作。目前,贺晋如是小红书基础架构负责人,负责公司的云原生架构,高可用的服务架构,数据库,缓存和 NoSQL 存储系统。以下是对贺晋如的采访整理。


InfoQ:您的工作内容基本上是围绕基础架构领域,可以介绍一下您现在在小红书带领基础架构部门具体做哪些事情么?


贺晋如:小红书的基础架构主要包括数据库缓存,存储,中间件,Kubernetes 云原生计算等相关内容。


中间件系统的完整是随着业务的需要而慢慢建立起来的,当这些系统成体系,完善后,威力巨大。也许这就是坚持长期主义,相信技术的力量,允许犯错,提供平台的结果。


我们之前在中间件的迭代上碰到过很多问题,总的来说,最核心的点在于如何让中间件的升级迭代成本变低。举个例子,我们曾经对中间件版本做了一次比较大的升级操作,对流量进行精细化的控制。出发点是好的,要求业务方去设置这些参数,让服务更加的高可用。但事实上,在我们推动升级的过程中,一部分用户其实并不关注这些配置项,另外一些用户关注但不知道如何配置。业务方不愿意升级,得一个一个业务去做宣传或者帮他们升级。


拿到这些反馈后,我们意识到,需要做到让业务方的改动尽量的少,才能使推广新版本的成本足够的低。所以我们在后续的中间件迭代里就秉持了一个理念:中间件的升级需要尽量做到业务无感知,让业务方接入成本足够的低;任何一次版本的变动都需要做到足够的向下兼容。为此,我们开始在后续的版本着手施行无感知升级的方案,这样中间件的升级迭代的成本就下来了。


InfoQ:你们在招聘网站上对存储方面的候选人要求,对 Redis、MySQL 等数据库相关产品内核优化;缓存、数据库中间件性能优化、功能迭代;其他分布式数据库解决方案预研。想了解,你们现在的数据存储方案有哪些?对于存储有怎样的特殊需求?有哪些解决方案?


贺晋如:我们现在数据大部分都存放在自建的 MySQL 和 MongoDB 里,同时缓存使用的是自建的 Redis。这里值得一提的是,小红书的 Redis 集群在 2018 年就已经实现全部容器化在 Kubernetes 上部署了,应该算业界比较早尝试做存储容器化的公司。4 月份的 ArchSummit 全球架构师峰会上,我们缓存团队的同学也会和大家分享这方面的经验。在存储方面,我们自建了高性能的 KV 存储,这部分在去年的 QCon 已经做了分享。


随着小红书业务的不断成长,缓存集群的规模也在扩大,现有的集群方案已经不能满足要求了。我们目前正在进行缓存架构上的迭代,包括对缓存内核的优化,对节点探活机制的改进等等,力求满足超大规模缓存集群的要求。


目前存储的拼图还相对比较薄弱:除了 KV 存储以外,我们还有类似于 Facebook TAO 的一跳图查询引擎。但其实业务对我们的需求是很多的:包括支持复杂图查询的图数据库;表格存储;强一致的 KV 存储,时序数据的存储引擎;对象存储和块存储。这些都需要我们慢慢补齐。此外,随着业务的增长,我们也在探索基于持久化内存的 KV 存储。


InfoQ:MySQL、MongoDB、TiDB 等数据库产品在你们内部的选用,有哪些考量因素?如何配合业务需求?


贺晋如:主要考量因素是业务的需求和可扩展性,以及我们目前数据库团队的规模。我们会更倾向于使用更加主流的产品来作为我们存储核心数据的方案。因为 MySQL 在高可用,数据复制方面都有比 MongoDB 更加成熟的方案,也更容易运维。


InfoQ:异地多活等高可用建设上,具体是怎么做的,技术上攻克了哪些难点?现在处于什么阶段?


贺晋如:我们目前正在从单云架构向着多云架构演进。多云架构和传统的单云架构一个很大不同点是,在多云的环境里,我们让自己的技术栈做到云独立,同样的业务代码在任何一朵云上都可以跑得通。


这里主要的难点就是,服务间在跨云环境里的上下游调用,根据业务需求的不同,有的服务调用可以跨云,有的服务调用是需要做到严格限制在单元内的。新的服务发现逻辑如何做到在所有中间件版本和 mesh 数据面上都能适用,是我们当时在做多活时候的一个难点。


做多云多机房架构的本质是服务的高可用能力,在一个机房的服务发生故障时迅速将流量切走。这是我们面临的另一个难点。


目前小红书主要的技术改造集中在微服务访问的单元化改造,数据库存储层的异地多活改造,南北流量接入层网关改造。我相信这些都是做异地多活的团队都碰到并且需要去解决的一些问题。


在流量控制方面,我觉得很重要一点是在某个机房的下游服务发生故障时,故障的爆炸半径要做到足够的小,尽可能的控制在单机房内。


举一个在实际生产中碰到的例子,在我们 SDK 设计里,流量控制参考了 mesh 的实现:默认上下游服务调用都在单机房内完成。在同机房下游服务健康实例不足的时候会自动 failover 一部分流量到另一个机房。这个设计的初衷是,在同机房下游服务出现容量不足时,能自动的把一部分流量切到另一个机房来保证上下游服务调用的正常。看上去是很合理的,但是在实际中碰到的情况是:上游服务因为流量过载把同机房内的下游服务实例打垮,上游流量会自动的 failover 到另外机房的下游服务,另一个机房的下游服务由于短时间内承接了之前 2X 的流量,很快也挂了,导致我们整条链路宕机。如果没有自动的跨机房流量跳转,我们是可以把故障控制在单机房内。从而保证另外一个机房的流量是正常的。


InfoQ:对于先进的架构和理念选择上,你们有哪些考量和标准?


贺晋如:我觉得核心考量的标准是这些新的架构和理念是否能够为我们的业务赋能,是否能为我们的研发工程师提效降本,是否能提高我们整体架构的稳定性。任何脱离了实际业务来谈架构和理念都是没有意义的。


在这个基础上,架构的通用性和普适性也是我们考虑的因素。这套架构是否已经在相同规模或者更大规模的互联网公司落地。是否已经带来了好的收益。同时一套通用的架构也更容易让我们在市场上招到匹配的人才。


架构的灵活性能给我们足够的可扩展空间进行二次开发来满足业务的需求。我们的业务是一直在高速发展的,如果一套架构不具有可扩展性,那么有可能会在某个阶段成为业务进一步发展的卡点。


InfoQ:在架构上,不管是设计层面,还是应用层面,您这两年有哪些发现,或者观察?对软件架构的发展,有哪些预测,或者期待?


贺晋如:微服务的 Serverless 化,由架构团队来负责容器,云等底层资源管理,屏蔽底层资源差异性,向业务提供可靠、稳定、可弹性的运行环境,让业务技术团队能聚焦业务需求的快速迭代。


另外,把有状态服务容器化上 Kubernetes。数据库,存储容器化后,有进一步的空间可以提升存储集群的资源利用率。并且也可以减少运维人员的一些重复性工作。


嘉宾介绍:贺晋如 博士


小红书基础架构负责人,拥有十余年高性能分布式系统,微服务高可用架构工作经验,先后在 Facebook,Pinterest 参与和主导大规模分布式图数据库,NoSQL 存储系统,机器学习推理平台等项目的设计和研发。目前在小红书负责公司的云原生架构,高可用的服务架构,数据库,缓存和 NoSQL 存储系统。



除了上面的回复内容外,贺晋如老师还会出席 4 月下旬在上海举办的 ArchSummit 全球架构师峰会活动,他是“架构系统性能优化”专题出品人,这个专题下邀请了小红书、字节跳动、阿里巴巴的技术专家来分享各自的实践内容,感兴趣的可以关注会议日程。

2022-04-02 14:359443

评论

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

快手StreamLake:构建大算力基础设施体系,应对视频和大模型挑战

Geek老T

大模型 AIGC

ARTS 打卡 Week2

JimDeng

ARTS 打卡计划 ARTS活动

【ARTS】Week 2

小小

报名开启丨邀你一起探索云端 AI 新兴技术和发展模式

TRaaS

英文阅读 The manager's path

程序员在修行

C++字符串详解

芯动大师

华为云云耀云服务器L实例,助力千行百业轻松上云

平平无奇爱好科技

中小企业要快速开展业务,为何建议用云耀云服务器L实例

平平无奇爱好科技

想解决技术债,你要先学会如何量化它

互联网工科生

程序员 敏捷开发 技术债 敏捷宣言

OSCS开源安全周报第 57 期:Smartbi windowUnloading限制绕过导致远程代码执行

墨菲安全

网络安全 安全漏洞 oscs

[ K8s Operator 开发完整教程-1 ] kind创建本地K8s集群

baiyutang

云原生 k8s operator PaaS

ARTS 打卡第二周

程序员在修行

揭示限流的力量:确保现代系统的健壮和效能

Steven

架构 分布式 限流 令牌桶 漏桶

华为云云耀云服务器L实例,打造极致性能的原生虚拟化设施

平平无奇爱好科技

MySQL切换字符集引发的思考(二)

石小天

MySQL 数据库 运维 后端 dba

ARTS 打卡第 19 天

自由

ARTS 打卡计划

AI 狂飙,云端 IDE 如何书写未来?TVP 吐槽大会邀您来论道

CODING DevOps

《揭秘软件开发文档:你的项目管理必备利器》

金陵老街

开发文档

思考 快与慢 在工作中的应用 1

程序员在修行

云计算时代,华为云云耀云服务器L实例助力中小企业与开发者轻松上云

平平无奇爱好科技

ARTS 打卡第 2 周

orient

Elasticsearch最佳实践:如何保证你的数据安全

腾讯云大数据

Elastic Search

Go 格式化动词

小万哥

Go 程序员 后端 开发 Google

问题即答案:HarmonyOS NEXT,点燃应用生态星星之火

Geek_2d6073

K8s Operator 开发完整教程

baiyutang

云原生 k8s operator PaaS

如果你越来越冷漠

宇文辰皓

【GO】Grafana Tempo (1) --- 架构

非晓为骁

Go 可观测性 Grafana tempo LGTM

[ K8s Operator 开发完整教程-2 ] 使用kubebuilder直接上手

baiyutang

云原生 k8s operator PaaS

netty WebSocket客户端实践

FunTester

使用 Amazon Lambda 进行无服务器计算:云架构中的一场革命

亚马逊云科技 (Amazon Web Services)

容器 Amazon Lambda

非递归方式 实现 前中后序遍历二叉树

程序员在修行

递归

专访贺晋如:小红书基础架构演进历程_行业深度_Xue Liang_InfoQ精选文章