最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

评论

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

2024杭州国际切削工具装备展览会

吹吹晚风

与 TDengine 性能直接相关——3.0 的落盘机制优化及使用原则

爱倒腾的程序员

涛思数据 tdengine 时序数据库

互联网高可用架构探讨 | 京东云技术团队

京东科技开发者

高可用 架构设计 硬件架构 网络架构 企业号 7 月 PK 榜

从头学Java17-Modules模块

烧霞

modules java17

微服务架构中的单一职责原则:构建高内聚、低耦合的服务

2756

微服务 微服务架构 单一职责

2024杭州国际嵌入式系统展览会

吹吹晚风

稳定性和高可用如何兼顾,华为云网站高可用解决方案满足多方案需求

轶天下事

网页直播源码知识分享:“直播卫士”,查杀病毒功能在此!

山东布谷科技

软件开发 直播 源码搭建 网页开发 直播源码

华为云WeLink——助力企业数字化办公降本增效,提升竞争力

轶天下事

穷人版生产力工具,好用得飞起 「GitHub 热点速览」

EquatorCoco

sql git 开源

AntDB数据库将携创新性解决方案亮相2023可信数据库发展大会

亚信AntDB数据库

数据库 AntDB AntDB数据库

2024杭州国际轴承及装备展览会

吹吹晚风

内卷时代如何上云,华为云Web及移动App上云又有何亮点?

YG科技

视频会议进入云时代,为何企业需要华为云会议

轶天下事

云上办公时代,华为云会议如何保障企业的开会效率与数据安全?

轶天下事

云会议成为企业高频服务,华为云会议为何成为众多企业的选择?

轶天下事

企业数字化办公,华为云WeLink为何能脱颖而出

轶天下事

聊聊Excel解析:如何处理百万行EXCEL文件? | 京东云技术团队

京东科技开发者

POI 内存优化 企业号 7 月 PK 榜 excel解析

安全是企业数字化的基石,华为云WeLink如何构建数字化办公护盾

轶天下事

大模型之Huggingface初体验

程序员架构进阶

Transformer 大模型 7月日更 7月月更 huggingface

前端常见的十种布局

EquatorCoco

前端 前端前端框架

单色和彩色LED显示屏

Dylan

场景 使用技巧 显示器 LED显示屏 全彩LED显示屏

微服务架构概览图

wiflish

微服务 微服务架构 架构治理

数字化办公需求激增,华为云桌面解锁全新云办公模式

轶天下事

2023上海国际电子浆料及新型浆料展览会

吹吹晚风

Databend v1.2 版本发布!Data + AI

Databend

华为云桌面正协助企业快速进入云上数字化办公时代

轶天下事

从头学Java17-Lambda表达式

烧霞

Lambda java17

迭代失败的4个迹象,团队中了几个?快来看看如何解决!

敏捷开发

项目管理 Scrum 迭代 开发人员

给新手产品经理的技术接口文档入门指南

Liam

产品 程序员 接口 API接口文档

避免“一选定终身”,那些从就读到就业的AI真相

脑极体

AI

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