大厂架构笔记 暂记 :Airbnb,可汗学院,来福车

Airbnb的架构

  • https://quastor.substack.com/p/airbnbs-architecture
  • https://www.youtube.com/watch?v=yGOtTd-l_3E
  • 我们将介绍每个体系结构,并讨论其优缺点以及迁移Airbnb原因。我们将介绍每个体系结构,并讨论其优缺点以及迁移Airbnb原因。我们将介绍每个体系结构,并讨论其优缺点以及迁移Airbnb原因。
  • Airbnb最初是Ruby on Rails单体(2008 - 2017),然后过渡到微服务架构(2017 - 2020),现在已经迁移到微服务和宏服务之间的混合(宏服务聚合多个微服务)。Airbnb最初是Ruby on Rails单体,然后过渡到微服务架构,现在已经迁移到微服务和宏服务之间的混合(宏服务聚合多个微服务)。Airbnb最初是Ruby on Rails单体,然后过渡到微服务架构,现在已经迁移到微服务和宏服务之间的混合(宏服务聚合多个微服务)。

可汗学院 Khan Academy

  • https://quastor.substack.com/p/how-khan-academy-rewrote-their-backend
  • https://blog.khanacademy.org/go-services-one-goliath-project/
  • https://blog.khanacademy.org/technical-choices-behind-a-successful-rewrite-project/
  • https://blog.khanacademy.org/incremental-rewrites-with-graphql/

        在2019年底,可汗学院正在寻求升级他们的后端。该网站建立在Python 2单体之上,运行良好超过10年。

        然而,Python 2 即将在2020 年1 月 1日正式结束生命周期,因此可汗学院的工程师决定他们必须更新。

        KA(可汗学院)有几种选择

  • 从 Python 2 迁移到 Python 3 - 这将使 KA 在后端服务器代码性能和 Python 10 的语言功能方面提高 15-3%。

  • 从 Python 2 迁移到 Kotlin 从 Python 2 迁移到 Kotlin - KA 开始使用 Kotlin 执行计算密集型后端任务,因为它比 Python 2 性能更高。从 Python 切换到 Kotlin 可能意味着 Khan Academy 的响应速度更快,服务器成本也会下降。

  • 从Python 2迁移到Go - Go是一种简单简洁的语言,编译时间非常快,对Google App Engine有一流的支持,并且比Kotlin(基于KA的测试)更少的内存使用量。

        在这些选项中,可汗学院决定采用第三种选择,并用Go重写他们的Python 2单体。他们进行了性能测试,发现 Go 和 Kotlin(在 JVM 上)的表现相似,Kotlin 领先百分之几。但是,Go 使用的内存要少得多。Go 和 Python 之间的巨大性能差异使得转换所涉及的努力是值得的。

在这里插入图片描述

Stack Overflow

  • https://quastor.substack.com/p/-the-architecture-behind-the-worlds

在这里插入图片描述

Tinder的视频交付

  • https://quastor.substack.com/p/how-tinder-streams-video-to-70-million

  • Tinder工程师使用FFMPEG将MP4文件转码为HLS流。他们开发了一个工作流程,将 MP4 文件和配置(分辨率、比特率、帧速率等)作为输入,并将包含 HLS 流的目录作为输出。

  • 他们为所需的所有不同视频版本提供了多个配置,并将所有这些视频版本存储在 AWS S3 存储桶中。
    在这里插入图片描述

Netflix 如何同步数亿台设备

  • https://quastor.substack.com/p/how-netflix-syncs-hundreds-of-millions

Quora如何分片他们的MySQL数据库

  • https://quastor.substack.com/p/how-quora-shards-their-mysql-database
  • 随着读/写查询负载的增长,工程师不得不水平扩展数据库 水平 (添加更多计算机)。他们通过将数据库表拆分为不同的分区来实现这一点。如果某个表变得非常大或具有大量流量,则会为该表创建一个新分区。每个分区由一个主节点和副本节点组成。从分区到该分区中的表列表的映射存储在 ZooKeeper 中。
  • 将大型/高流量表拆分到新分区上效果很好,但是在变得非常大的表周围仍然存在问题(即使它们位于自己的分区上)。对于大型表,架构更改变得非常困难,因为它们需要大量空间并且需要几个小时(由于负载峰值,它们也必须经常中止)。涉及未知的风险,因为很少有公司拥有像Quora运营的桌子一样大的单个表格。MySQL有时会在读取或写入时选择错误的索引。在 1 TB 表上选择错误的索引比在 100 GB 表上选择错误的索引要昂贵得多。因此,Quora的工程师研究了分片策略,其中可以将大表拆分为较小的表,然后放在新的分区上。

Facebook的News Feed

  • https://quastor.substack.com/p/-the-engineering-behind-facebook
  • https://engineering.fb.com/2021/01/26/ml-applications/news-feed-ranking/
  • 每当您刷新Facebook新闻源时,Facebook的Web / PHP层都会向Feed聚合器查询它应该显示的帖子。源聚合器在源叶数据库中查询所有帖子和相关指标。然后,提要聚合器处理数字并返回帖子的排名列表,供前端呈现。
    在这里插入图片描述

Lyft 如何存储为其 ML 模型提供支持的数据

  • 来福车 美国交通网络公司
  • https://quastor.substack.com/p/how-lyft-stores-the-data-powering
  • https://eng.lyft.com/ml-feature-serving-infrastructure-at-lyft-d30bf2d3c32a
    在这里插入图片描述

功能定义

这些功能在 SQL 中定义。定义的复杂性可以从单个查询到包含复杂联接和转换的数千行 SQL。

这些定义还包含 JSON 中的元数据,用于描述功能版本、所有者、验证信息等。

要素数据摄取

对于在批处理数据上定义的特征,Lyft 使用 Flyte 运行定期计划的特征提取作业。该作业针对 Lyft 的数据仓库执行 SQL,然后写入要素服务。

对于实时特征数据,Lyft使用Apache Flink。它们针对流窗口执行 SQL ,然后写入要素服务。

特征处理和检索

功能服务是用 Golang 编写的,具有用于写入和读取功能数据的 gRPC 和 REST 端点。

将要素数据添加到服务时,会同时写入 DynamoDB 和 Redis 中(Redis 用作直写缓存以减少 DynamoDB 上的读取负载)。

Lyft使用Dynamo流将特征数据复制到Apache Hive(他们的数据仓库工具)和Elasticsearch。

然后,功能服务将利用 Redis 缓存、DynamoDB、Hive 和 Elasticsearch 来处理特征数据请求。

对于需要快速返回要素数据的实时 ML 模型,要素服务将尝试从 Redis 缓存中检索要素数据。如果缓存未命中,它将从 DynamoDB 检索数据。

CG

  • Kubernetes - The Documentary 【Kubernetes 纪录片 】https://www.youtube.com/watch?v=BE77h7dmoQU

  • B站搬运版https://www.bilibili.com/video/BV1jL4y157Mq/?
    在这里插入图片描述

  • https://quastor.substack.com/p/dynamic-programming-in-the-real-world

  • 大型科技公司远程工作的未来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/59992.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Perl - Subroutines(子例程)

定义子程序 Perl编程语言中 Subroutine子程序定义的一般形式如下: sub subroutine_name {body of the subroutine } 调用该Perl Subroutine的典型方式如下- subroutine_name( list of arguments ); 在Perl 5.0之前的版本中,调用 Subroutine的语法略有不同&…

过去几十年来,主要湖泊遭受了严重的水流失

一项新的研究表明,干旱和潮湿地区的损失是全球性的,可能对地球四分之一的人口产生重大影响。 美国宇航局的地表水和海洋地形任务(如图所示)在轨道上运行,将扫描湖泊和水库,为全球湖泊水储存估计提供新数据…

【Python机器学习】实验08 决策树

文章目录 决策树1 创建数据2 定义香农信息熵3 条件熵4 信息增益5 计算所有特征的信息增益,选择最优最大信息增益的特征返回6 利用ID3算法生成决策树7 利用数据构造一颗决策树Scikit-learn实例决策树分类决策树回归Scikit-learn 的决策树参数决策树调参 实验1 通过sk…

weblogic XML反序列化分析——CVE-2017-10271

环境 https://vulhub.org/#/environments/weblogic/CVE-2017-10271/ 启动环境 docker-compose up -d代码审计 传入参数 中间跟进函数 最后的出口 没有限制,直接包参数传入xmlDecoder public String readLine() throws IOException {return (String)this.xml…

css实现卡片的左上角有一个三角形的遮盖效果

需求: 卡片的左上角有一个绿色的三角形标签,用来区分状态 实现: .vCard{position: relative;overflow: hidden; } .vCard::before {content: "";position: absolute;top: 0;left: 0;width: 0;height: 0;border-bottom: 20px solid transparent;border-left: 20px …

OPENCV C++(四)形态学操作+连通域统计

形态学操作 先得到一个卷积核 Mat kernel getStructuringElement(MORPH_RECT,Size(5,5)); 第一个是形状 第二个是卷积核大小 依次为腐蚀 膨胀 开运算 闭运算 Mat erodemat,dilatemat,openmat,closemat;morphologyEx(result1, erodemat, MORPH_ERODE, kernel);morphologyEx…

R语言中数据重塑(长宽表的转化)

学习笔记,仅供学习使用。 目录 1-什么是整洁的数据? 2-宽表变成长表 示例1: 示例2: 示例3: 3-长表变宽表 示例1: 示例2: 1-什么是整洁的数据? 按照Hadley的表述&#xf…

利用abapGit的离线模式导出、导入开发对象

1. 背景 abapGit是为ABAP服务器开发的开源Git客户端,用于在ABAP系统之间导入和导出ABAP对象。 使用abapGit,可以将ABAP对象从任何系统导出到另一个系统,通常是从本地系统导出到云,或者从一个云系统导出到另一个云系统。 当然从…

使用Vscode编辑keil工程

一、需要安装的插件 1. Keil Assistant 2. C/C 3. 中文配置: 二、插件配置 1. Keil Assistant 添加Keil的安装路径 接下来就可以使用vscode编辑Keil的工程了,调试编译和下载程序需要返回到Keil中进行操作。 三、Vscode常用快捷键 可以自定义进行配置…

设计模式行为型——中介者模式

目录 什么是中介者模式 中介者模式的实现 中介者模式角色 中介者模式类图 中介者模式代码实现 中介者模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是中介者模式 中介者模式(Mediator Pattern)属于行为型模式,是用来降低…

软件为什么要进行性能压力测试?

软件为什么要进行性能压力测试?随着软件应用的不断增多和复杂度的提高,软件的性能对用户体验和业务成功至关重要。性能问题可能导致软件运行缓慢、崩溃或无响应,给用户带来不便甚至损失。为了确保软件能够在高负载和压力下正常运行&#xff0…

微波光子的参数:动态范围

微波光子的参数:无杂散动态范围 无杂散动态范围的定义 微波光子链路中的非线性失真主要由电光调制器的非线性调制产生,这些非线性失真可以分为谐波失真和交调失真两类。图1.2(a)给出了光信号在调制器内被一个频率为10 GHz的射频…

国内做软件行业总是不挣钱?

在国内,很多人都知道,软件最好和硬件结合起来卖,能获得更高的收益。这背后隐藏的意思是,软件作为一门生意,中国人认为没有硬件这门生意好。 在由中国电子信息行业联合会发布的2019年中国软件企业百强榜中,排…

IDEWA项目实践——mybatis的一些基本原理以及案例

系列文章目录 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍_intellij 创建scala IDEA项目实践——动态SQL、关系映射、注解开发 文章目录 系列文章目录 1.MyBatis …

CleanMyMac真的有必要买吗 2023年最新CleanMyMac和腾讯柠檬详细解析

在如今的电脑使用过程中,保持电脑干净整洁是一项重要的任务。而随着Mac电脑越来越受欢迎,Mac电脑清理软件也愈发流行。在众多的Mac电脑清理软件中,CleanMyMac是一款备受好评的软件。但是,很多人还在犹豫CleanMyMac有必要买吗&…

你真的了解什么是生成式AI吗?

最近正好有这样的机会,让我给一群非技术人士介绍生成式AI,忙忙碌碌了一阵子,结果发现受众还是未能理解什么是生成式AI,到底和之前的AI有什么区别。因此希望此篇能够帮助普通人真正理解生成式AI,有个直观印象。 人工智…

C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作

文章目录 写在前面哈夫曼树及哈夫曼编码的算法实现实验内容代码实现 图的基本操作实验内容代码实现 写在前面 本篇实验代码非本人写,代码源自外部,经调试解决了部分warning和error后在本地vs上可以正常运行,如有运行失败可换至vs 未来会重构…

Zebec Payroll :计划推2出 WageLink On-Demand Pay,进军薪酬发放领域

“Zebec Protocol生态旨以Web3的方式建立全新的公平秩序,基于其流支付体系构建的薪酬支付板块,就是解决问题的一把利刃” Zebec Protocol在创立之初就有着一个十分宏大的愿景,其希望通过Web3的方式来进一步打破世界上一些不公平现象。 Zebec …

【漏洞复现】Metabase 远程命令执行漏洞(CVE-2023-38646)

文章目录 前言声明一、漏洞介绍二、影响版本三、漏洞原理四、漏洞复现五、修复建议 前言 Metabase 0.46.6.1之前版本和Metabase Enterprise 1.46.6.1之前版本存在安全漏洞,未经身份认证的远程攻击者利用该漏洞可以在服务器上以运行 Metabase 服务器的权限执行任意命…

docker配置远程连接端口

配置docker 配置远程连接端口 vi /lib/systemd/system/docker.servicesystemctl daemon-reload && systemctl restart docker firewall-cmd --zonepublic --add-port2375/tcp --permanenthttp://node2:2375/version