Airbnb开源项目

QuibblerQuibbler 2020-02-12 约 16 分钟 1812 次阅读

Airbnb 开源项目全景:从 Lottie 到 Airflow


       Airbnb 不只是民宿平台,也是开源界的高产户:一个 airbnb.io 门户下挂着二十余个项目,横跨移动端、前端、数据平台与基础设施。其中既有 JavaScript 规范这种星标 8.5 万的现象级仓库,也有 Lottie 这种定义了三端动画工作方式的代表作。本文把这些项目按领域归类盘点,并附各项目的星标数与一句话定位,帮你快速建立 Airbnb 技术版图的全貌。



1、开源概览

       airbnb.io 是 Airbnb 官方的工程与开源门户,收录其公开的技术博客与项目仓库。本文化名的 20 个项目覆盖四大领域:前端工程、移动端、数据与机器学习、基础设施与安全。

       整体印象:

        - 前端影响力最大:JavaScript 规范 85,249 Star,是门户里星标最高的仓库

        - 移动端代表作是 Lottie 家族:Android、iOS、Web 三端合计近 6 万 Star

        - 数据侧走出了行业标准:Airflow 后被捐赠给 Apache 基金会持续演进

        - 基础设施类项目普遍小而精,星标不多但解决具体问题

       一点说明:

        - 文中星标数取自 airbnb.io 页面快照,部分项目现状已有变化(例如 Airflow 早已从 Apache 孵化器毕业为顶级项目),选型时以 GitHub 实时数据为准



2、Lottie 家族:一次设计,三端动画

       Lottie 是 Airbnb 最出圈的开源作品:设计师在 After Effects 里做好动画,导出 JSON,工程师用 Lottie 在各端原生渲染——动画的"设计稿即代码"由此成为现实。

       家族成员:

        - Lottie(Android):在 Android 上原生渲染 AE 动画,25,420 Star,家族中最热门

        - Lottie(iOS, macOS):iOS 端原生渲染 AE 矢量动画,17,180 Star

        - Lottie(Web):在浏览器中原生渲染 AE 动画,16,494 Star

        - Lottie(Docs):官方文档仓库,998 Star

       要点:

       1. 三端一套动画资源,设计到开发的交付链路被大幅缩短

       2. 动画以矢量 JSON 描述,体积小、可缩放、性能好于 GIF 序列

       3. 如今已成为行业事实标准,各端与各跨端框架均有对应实现



3、前端工程与规范

       前端是 Airbnb 开源声望最高的领域,从代码规范到测试、渲染与样式方案成体系输出。

       代表项目:

        - JavaScript Style Guide:自称"最通情达理"的 JS 编码规范,85,249 Star,是无数团队 ESLint 配置的源头

        - Enzyme:React 的 JavaScript 测试工具集,17,184 Star,React Testing Library 出现前的主流选择

        - Hypernova:JavaScript 视图的服务端渲染服务,5,084 Star,支撑首屏性能优化

        - react-with-styles:带主题的 CSS-in-JavaScript 方案,且不与单一实现强耦合,1,471 Star

       要点:

       1. 一份规范仓库的影响力超过多数框架——规范即生态入口

       2. Enzyme 属于历史主力:新项目多已转向官方推荐的测试方案

       3. Hypernova 的 SSR 思路后来被 Next.js 等框架产品化



4、数据平台与机器学习

       数据方向是 Airbnb 对行业贡献最深的一块:工作流调度、交互查询、知识管理与机器学习各有布局。

       代表项目:

        - Airflow:以有向无环图(DAG)编排工作流任务,12,263 Star;后进入 Apache 基金会,成为数据管道调度的事实标准之一

        - Aerosolve:定位"为人设计"的机器学习库,4,554 Star,强调可解释与易用

        - The Knowledge Repo:面向数据科学家与技术岗位的下一代知识沉淀平台,3,746 Star

        - Airpal:PrestoDB 的 Web 查询界面,2,502 Star,让交互式查询开箱可用

        - ReAir:Hive 数仓之间表与分区的复制工具集,240 Star

       要点:

       1. Airflow 是"内部工具长成行业标准"的典型:为自家管道而生,最终普惠全行业

       2. Knowledge Repo 押注"知识沉淀",与今天各家知识库产品的思路一脉相承

       3. Airpal 与 ReAir 服务于 Presto 与 Hive 生态,反映当时的大数据技术栈



5、移动端专用库

       除 Lottie 外,Airbnb 还开源了几个解决 Android 具体痛点的库,也曾是 Android 社区的高频选择。

       代表项目:

        - Epoxy:在 RecyclerView 中构建复杂页面的 Android 库,5,482 Star,把列表做成声明式组装

        - DeepLinkDispatch:深链的声明式定义与路由,3,418 Star,注解一打即生效

        - AirMapView:地图视图抽象层,1,691 Star,屏蔽底层 Google Maps 等不同地图 provider 的差异

       要点:

       1. Epoxy 的"声明式拼列表"思路,可视为 Compose 列表时代的思想前身

       2. AirMapView 解决的是国内厂商无 Google 服务时的地图降级问题

       3. 这批库多诞生于 View 体系时期,新项目选型前先确认维护状态



6、基础设施与安全

       底座类项目星标不高,却各管一段:安全检测、服务发现、告警与存储。

       代表项目:

        - BinaryAlert:无服务器架构的实时与回溯恶意软件检测,856 Star

        - Nerve:带健康检查的服务注册守护进程,与 synapse 搭档使用,877 Star

        - Hammerspace:类 Hash 接口的持久化、并发、堆外存储,318 Star

        - Interferon:基础设施与应用问题告警,205 Star

       要点:

       1. BinaryAlert 是"无服务器做安全"的早期实践,函数计算扫描恶意特征

       2. Nerve 与 synapse 组成服务发现组合,是微服务浪潮期的产物

       3. 这一类项目大多服务于当年的内部架构,外部通用性有限



7、观察与启示

       纵览这 20 个项目,能看出一家公司开源策略的几条规律。

       四点观察:

        - 影响力分布极不均匀:一份编码规范(85k)超过其余多数项目之和,规范类内容的传播成本最低

        - 解决自身痛点的项目最长寿:Airflow、Lottie 都诞生于内部真实需求,才经得起时间

        - 捐赠给基金会是延长生命的路径:Airflow 进入 Apache 后获得了超越单一公司的维护力量

        - 快照里的项目热度≠今天的选择:Enzyme、Epoxy 等曾是标配,如今各有更现代的替代,读清单要看年代

       对技术选型的提示:

        - 仍在一线使用:JavaScript 规范、Lottie、Airflow

        - 历史价值大于现用价值:Enzyme、Epoxy、AirMapView、Hypernova

        - 小众但思路可借鉴:BinaryAlert 的无服务器安全、Knowledge Repo 的知识沉淀



8、总结

       Airbnb 的开源版图以 airbnb.io 为门户,横跨四大领域:前端有 8.5 万 Star 的 JavaScript 规范与 Enzyme、Hypernova;移动端有近 6 万 Star 的 Lottie 三端家族与 Epoxy;数据侧走出了 Airflow 这一行业标准;基础设施与安全则是 BinaryAlert、Nerve 等小而精的实践。星标数取自页面快照,部分项目现状已有演进。

       对开发者:直接可用的是 Lottie、JavaScript 规范与 Airflow 这"三件长青货";其余项目更适合当作思想来源——声明式列表、无服务器安全、知识沉淀,都在今天的技术里有回声。浏览这类公司开源清单时,把"当年的热度"与"今天的选择"分开看,是必要的清醒。

相关推荐

OkHttp线程池和连接池
开源

OkHttp线程池和连接池

OkHttp线程池和连接池了解了OkHttp的网络请求流程以及拦截器实现原理,再关注OkHttp中两个重要的:OkHttp的线程池和连接池。1、OkHttp线程池在OkHttp网络请求流程一文中,我们分析了OkHttp异步和同步请求流程。请求最后都在Dispatcher中分发调度处理,最后被ExecutorService执行。1.1、DispatcherDispatcher中执行任务的执行器是ex

5.2k
优美的开源动效库:Lottie
开源

优美的开源动效库:Lottie

优美的开源动效库:Lottie1、强大的动效LottieLottie是一个适用于Android,iOS,Web和Windows的库,它可以使用Bodymovin解析以json格式导出的Adobe After Effects动画,并在移动设备和Web上原生渲染它们!GitHub:https://github.com/airbnb/lottie-androidLottie官网:http://airbn

4.3k
Glide配置:AppGlideModule
开源

Glide配置:AppGlideModule

Glide配置:AppGlideModuleGlide用起来非常方便,基本用法见Glide的基本用法,简短的一句链式调用就能给ImageView设置图片。而且自带缓存实现,如果不进行额外的设置Glide的缓存目录、缓存大小都是默认的。应用可以自行进行定制修改,就用到AppGlideModule。1、自定义AppGlideModule配置Glide加载图片的设置、缓存设置、缓存策略,就需要应用自己继

3.7k