“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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

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

评论

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

Ts中string、number和any等类型 不能当做索引用,怎么处理?

肥晨

三周年连更

软件测试/测试开发丨自动化测试之读取配置文件

测试人

软件测试 自动化测试 测试开发

震撼!阿里架构师全新产出Java面试突击宝典。我觉得泰库辣!

Java你猿哥

Java redis spring Spring Boot JVM

SaaS 软件的 SLA 和 Escalation

Jerry Wang

SaaS Cloud 三周年连更

目前江西省等级测评公司有几家?都在南昌吗?

行云管家

江西 等保 等级保护 等保2.0

linux下怎么拉取远程的代码并且合并到本地,保证不冲突

linux大本营

git Linux

HummerRisk V1.0.1:k8s检测扩充、批量删除及修复bug

HummerCloud

开源 云原生 云安全 云原生安全

基于STM32设计避障寻迹小车

DS小龙哥

三周年连更

Android C++系列:函数返回值注意事项

轻口味

c++ android 三周年连更

ShareSDK 微信平台注册指南

MobTech袤博科技

深入探索数据库MySQL,性能优化与复杂查询相关操作

做梦都在改BUG

Java MySQL 数据库 性能优化

融云 CTO 岑裕:出海技术前沿探索和排「坑」实践

融云 RongCloud

运维 网络 融云 泛娱乐 出海

用C语言实现,终端输入1.2.3.4/32,解析输出unsignedint类型的1.2.3.4和32

linux大本营

C语言

免费云堡垒机用哪个牌子软件好?包含哪些功能?

行云管家

云计算 网络安全 IT运维 云堡垒机

C语言sqlite3,实现判断一个数据库存不存在,不存在就创建

linux大本营

数据库 C语言 sqlite3

超越YOLOv8,飞桨推出精度最高的实时检测器RT-DETR!

飞桨PaddlePaddle

人工智能 计算机视觉 目标检测 百度飞桨

open3d将pcd存数据库

linux大本营

sqlite 数据库 存储 :MySQL 数据库

递归算法

linux大本营

递归 数据结构与算法

websocket底层原理

linux大本营

nginx HTTP websocket 通信协议 web服务器

刘浩:当谈到RTO < 8s时,OceanBase究竟在说什么?

OceanBase 数据库

数据库 oceanbase

Mac无损音乐播放器:Audirvana for Mac中文

真大的脸盆

Mac Mac 软件 音乐播放 音乐播放器

Java 应用程序在 Kubernetes 上棘手的内存管理

做梦都在改BUG

Java Kubernetes JVM 内存管理

canvas-绘制一个柱状图

格斗家不爱在外太空沉思

CSS canvas 三周年连更

如何在makefile中链接Json解析库Reader

linux大本营

json makefile reader

华为亮相KubeCon EU 2023 新云原生开源项目Kuasar推动“云上演进”

华为云开发者联盟

开源 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

怎样判断户外LED显示屏质量是否达标

Dylan

媒体 广告 户外LED显示屏

数仓实践丨主动预防-DWS关键工具安装确认

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

用纯python写web app:Streamlit

AIWeker

Python python小知识 三周年连更

【Python实战】Python采集皮肤图片数据

BROKEN

三周年连更

写一个回调函数

linux大本营

回调函数 C++

ubuntu如何安装Json解析库Reader

linux大本营

ubuntu JSON库 reader

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