Airbnb 技术架构,在这里找到答案

Airbnb 技术架构,在这里找到答案

SOA 微服务架构

2016~2017年,开始 SOA 改造,改造的前后各种考量请参考前文《客户案例分析:Airbnb单体到微服务改造之旅(1)》

数据库 Amazon Aurora

绝大多数 MySQL,少部分 Postgres / Oracle

从 2011年开始全部是全托管的 RDS 服务

2017年7月启动 RDS for MySQL 到 Amazon Aurora的评估和迁移,17年底完成生产环境切换

数据库代理:定制化的 MariaDB MaxScale,增强的数据库连接池,限流,限制慢查等等

上百个数据库实例

通过 Terraform 来进行基础设施自动化管理

同时支持两种协议,一个是 JSON over HTTP,另外一个是 RPC 方式的 Thrift over HTTP,开发者而言,很多基本的服务治理相关逻辑,由 IDL 定义并自动生成。

服务发现 - SmartStack

SmartStack 类似如今的 Service Mesh,服务通过本机的边车(Sidecar)代理(HAProxy)进行互相之间的调用和路由,其中两个组件 Nerve 和 Synapse 都已经开源,SmartStack 应该是最早(2013年前后)的 “Service Mesh” 的雏形;如下图所示,服务注册库基于 Zookeeper,组件 Nerve 负责主机上的服务发现,健康检查和服务下线等操作;Synapse 负责监听 ZK 的动态变化,并生成并更新 HAProxy的服务路由配置;HAProxy 在这里作为一个 Sidecar(边车)代理服务消费者到服务提供方之间的请求。该架构对应用无任何侵入性,不需要自行处理服务注册和发现。

由于 HAProxy 支持的协议所限,Airbnb 团队在向 Envoy 演进。

负载均衡 - Charon

微服务中期望将上下文传播到下游的服务中去,因此引入了 Nginx 作为外部服务入口,由于前端 CDN 分发不均衡问题,Airbnb 团队,在 CDN 和 Nginx 之间还是引入了 Amazon ELB。

内部服务以 .dyno命名,所有发送到 *.dyno 的请求都会通过 DNS 指向 Dyno 服务实例组,Dyno 也类似 Nginx,从请求报文 Header 中截取服务名称,并通过 Synapse 和 HAProxy 来处理到目标服务的访问;Dyno 同时也负责服务的认证授权。

API Gateway - Kraken (JSON Over HTTP)

移动端和 Web 端调用,从负载均衡 Charon 进来,到 Kraken 进行路由和全局处理,再路由到下层领域服务;

数据分析数据分析基础平台架构

应用将消息和事件写入 Kafka

利用 Sqoop 将 RDS 数据导入到 Hadoop

原始数据包含用户行为事件,维度表数据,保存在 Gold 集群中,执行 ETL 任务,生成统计表,检查数据质量

架构中的 Gold 集群和 Silver 集群主要是保障高可用,以及隔离不同的 SLA 查询任务,黄金版集群满足严格的SLA要求的重要任务,不允许执行对资源消耗大的 Adhoc 查询;而白银版集群,则比较轻松,不要求 SLA,可以跑消耗大的查询。

大部分使用针对 Hive 表的 Presto 查询接口

采用开源的 Airpal 组件,一个支持 Presto 的交互式 UI,30% 的员工使用该工具进行交互式查询

定时任务采用 Airflow 进行编排和调度

S3 作为数据湖,适合数据长期存储和结合 EMRFS 使用

公开资料显示,Airbnb 拥有 30人规模的 Data Science 团队。

房东可以理解的机器学习库 - Aerosolve

主要解决 Airbnb 共享经济中,房屋定价和需求匹配问题,重点强调算法可解释性,集合机器学习和人工经验;比如房屋的动态定价问题,影响因素特别多,有房屋位置,季节和时间,有百万间独立房屋带有不同的服务比如面积大小,家具,等等,用户有不同的喜好,比如服务,食物等;非正常因素,比如当地的活动或节假日。

Aerosolve 从常识出发,结合数据训练,比如价格提升,成交概率降低,再结合数据来修正经验常识,比如简单利用线性模型,按绝对值倒排权重,就可以知道哪些特征比较重要:比如房屋照片偏好问题,专业摄影的房间照片对比客户自行上传的照片,直接排序结果可以知道,房客拍摄的照片排序来看更喜欢温馨,暖色调,卧室居多;而专业摄影师,则强调华丽,通透及客厅;

与其他的机器学习库相比,Aerosolve 具有以下特点:

特征呈现基于 Thrift:支持Pairwise Ranking Loss 和单上下文的多条目呈现,每一个特征向量(FeatureVector)有三种类型:stringFeatures、floatFeatures 和denseFeatures。

支持特征转换语言:Aerosolve 将特征转换包含在一个独立的转换模块中,与模型解耦,用户既能够将转换操作拆散使用,又可以提前转换相关数据,常用的转换操作包括:列表转换、交叉转换和多尺度网格转换。

比较容易理解的调试模型

独立轻量的 Java 推理代码

使用 Scala 代码进行训练

简单的图片内容分析代码,适合图片的排序

底层跑在 Apache Spark 上

目标是赋能 Airbnb 算法团队一个高效的 ML 共享基础设施平台,降低构建生产级 ML 应用的复杂度;构建 ML 应用的复杂度在于,和数仓集成,扩展模型训练和推理服务,在原型和生产之间,在训练和推理之间,如何保障一致性?跟踪多个模型版本,ML 模型的迭代;

ML 模型通常只需要8~12周来构建完成,但 ML 工作流常常比预计的要慢很多,零碎且脆弱。

整个基础设施串接 ML 的原型环境,Jupyter Notebook加强版 Redspot,容器环境和生产环境,包括实时推理和批处理(训练+推理)

实验环境:Redspot

增强的 JupyterHub,

集成 Airbinb 的数仓

访问优化的硬件资源比如 GPU, Amazon P3/X1 etc

文件共享,基于 AWS EFS 实现

集成 Bighead 服务

保障实验和生产环境,模型的一致性

面向 ML 定制化的依赖管理,保障环境的一致性

ML 生命周期管理,

统一的模型管理:跟进模型变化比跟进代码变化更重要

唯一可信的模型状态管理:ML 模型需要可以快速重建,保障持续性

不同模型效果的对比

提供 Bighead library,构建一致的 ML Pipeline(提供可视化),屏蔽底层框架差异,模型训练的元数据管理,等等

Zipline 的初衷是算法科学家花在准备数据上的时间太多,超 60% 以上,但前面我们已经提到 Hadoop 数据平台,为什么还需要构建一个新的 Zipline?Hadoop 数据仓库面向是分析师而不是 ML 模型,ML 特征数据的表达和数据仓库不一样,比如过去7天的订单量,模型需要的值是 0 还是 1,但数仓中一般是累加数值,比如3, 4等等,另外缺少更多的特征,比如进一步要求过去12个小时的订单数;同时已有的应用数据库数据,也不适合直接给到模型做训练。

参考资料

Airbnb AWS 案例

商业模式分析 共享经济代表——Airbnb

Airbnb Architecture

Airbnb确定今年晚些时候IPO 估值超310亿美元

https://airbnb.io/

https://medium.com/@airbnbeng

加入技术琐话读者群讨论,请在公众号回复关键词:读者群。

以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。本号由坐馆老司机技术团队维护。返回搜狐,查看更多

相关文章

如何用英语表达「你最近怎么样」?完整指南
365bet亚洲官网

如何用英语表达「你最近怎么样」?完整指南

🕒 09-17 👁️ 6900
担保押金要多少长时间可以退
best365中国官网

担保押金要多少长时间可以退

🕒 07-22 👁️ 671
qq文件怎么设置不是7天自动过期
365比分网APP

qq文件怎么设置不是7天自动过期

🕒 08-23 👁️ 3468
lol什么是蛋刀
365bet亚洲官网

lol什么是蛋刀

🕒 09-12 👁️ 2673
梅西世界杯首场亮相回顾及其首次征战的历史性意义
【心得】三轉全職強化版本後的火咒解說  (228更10F   挑戰一階影片更新) @RO 仙境傳說 Online 哈啦板