# ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
> 原文: [http://highscalability.com/blog/2018/4/2/how-ipdata-serves-25m-api-calls-from-10-infinitely-scalable.html](http://highscalability.com/blog/2018/4/2/how-ipdata-serves-25m-api-calls-from-10-infinitely-scalable.html)
![](https://img.kancloud.cn/24/19/2419cc3fe4468156f85768191ae97796_320x240.png)
*这是 IP 地理位置 API [ipdata](https://ipdata.co/) 的创建者 [Jonathan Kosgei](https://twitter.com/jonathan_trev) 的来宾帖子。*
我在去年的黑色星期五醒来,收到了来自用户的大量电子邮件,报告来自 [ipdata](https://ipdata.co/) API 的 503 错误。
我们的用户通常会在其网站上的每个页面请求上调用我们的 API,以对用户进行地理位置定位和本地化其内容。 因此,这一特殊故障在一年中最大的销售日直接影响了我们用户的网站。
那天我只失去了一个用户,但差点失去了更多。
事件的顺序及其无法解释的性质-cpu,mem 和 i / o 远没有达到容量。 考虑到停机,我们担心扩展规模(如果有的话),这是一个重新考虑现有基础架构的重大呼吁。
## 当时的技术堆栈
![](https://img.kancloud.cn/01/50/0150edb03436b0829a317ff2fafd5092_800x337.png)
* Japronto Python 框架
* 雷迪斯
* AWS EC2 节点
* AWS 弹性负载平衡器
* 基于 Route53 延迟的路由
我已经在几个新的,有希望的 Python 微框架上进行了测试。
在使用 [https://github.com/samuelcolvin/aiohttp-vs-sanic-vs-japronto 对基准 3 进行基准测试后,我在[aiohttp],[sanic]和[japronto]之间进行选择,选择了](https://github.com/samuelcolvin/aiohttp-vs-sanic-vs-japronto) [Japronto](https://medium.freecodecamp.org/million-requests-per-second-with-python-95c137af319) 。 并发现它具有最高的吞吐量。
该 API 在 ELB 负载平衡器后面 3 个区域中的 3 个 EC2 节点上运行,并具有基于 Route53 延迟的路由,可将请求路由到距离用户最近的区域,以确保低延迟。
## 选择一个新的技术堆栈
![](https://img.kancloud.cn/41/16/41165c57823b46dd40dbf74ce081c394_600x262.png)
An Example Weather API using our current stack
大约在这个时候,我开始认真研究将 API 网关与 AWS Lambda 结合使用的原因:
1. 优惠的价格:API 网关每百万美元约 3.50 美元,AWS Lambda 每百万美元约 0.20 美元。
2. 无限规模和高吞吐量-API API 网关的帐户限制为每秒 10、000 个请求或每天约 864M 调用。 通过打开支持请求可以解除的限制。
这也使在众多 AWS 区域中拥有端点在经济上可行,从而为全球所有用户提供低延迟。
## 设计多区域 API 网关 API
为了使之可行,已经解决了许多架构难题。
1. 每个区域中的每个 lambda 函数都需要能够在同一区域中的数据库中查找使用情况数据,以最大程度地减少延迟
2. 我需要找出一种方法来确定每个 IP 地址,引荐来源网址和 API 密钥进行的 API 调用次数。
3. 一种同步所有区域中的使用情况数据的方法。 例如,如果 Route53 向我们的悉尼端点发送了 10000 个请求,然后决定向其首尔端点发送下一个 50000 个请求(具体取决于那个时间点的网络延迟最小)。 每个 lambda 函数都需要知道用户总共发出了 60 000 个请求才能正确处理速率限制。
4. 授权-API 网关提供使用计划和 API 密钥生成,并允许您将 API 密钥链接到使用计划。 此外,您无需为用户超出配额的请求付费,而无需支付额外费用。 但是,我无法使用此功能,因为对我来说,提供不注册,不使用信用卡的免费套餐非常重要。
通过大量的工作,我能够以创造性的方式解决这些问题。
## 在本地访问使用情况数据(针对每个 lambda 函数)
显而易见的解决方案是使用 Dynamodb,它在规模和速度上都具有成本效益! 每月前 200M 个请求免费。
Dynamodb 还提供 1-2 ms 的始终较低的读取延迟。
![](https://img.kancloud.cn/80/15/8015cc2b7a2f54d34c06ccf02e2cafbe_800x379.png)
可以使用 [Dynamodb Accelarator](https://aws.amazon.com/dynamodb/dax/) (DAX)将其加速到微秒范围。
> DAX 通过每秒数百万个请求处理大量读取工作负载的响应时间(以微秒为单位),将性能提升到一个新的水平。
## 收集所有标识符的使用情况数据
下一个挑战是如何实时计算每个 IP 地址,引荐来源网址或 API 密钥发出的请求数。
最简单,最直接的方法是在每次调用时更新动态表中的计数。
但是,这会在每次调用我们的 API 时引入数据库写操作,从而可能导致显着的延迟。
我能够找到一个简单而优雅的解决方案:
1. 首先,在每个请求上打印包含所有请求标识符的日志(JSON 对象)。 这是 IP 地址,引荐来源网址和 API 密钥(如果存在)。 真是 print(事件)
2. 将 [Cloudwatch 订阅过滤器](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html)添加到每个区域中每个 Lambda 函数的 Cloudwatch 日志流中,并将所有日志推送到 Kinesis 流中。 这将使我能够处理中心位置中每个区域的日志事件。 由于可以回放事件,因此我选择了 Kinesis 而不是 SQS(亚马逊的简单队列服务)。 SQS 会在使用者读取事件后立即删除事件。 我希望能够从节点故障和数据丢失中恢复。
3. 从 Kinesis 流中读取并使用使用情况数据更新 [Local Dynamodb](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) 实例
4. 使用 [Dynamodb 跨区域复制库](https://github.com/awslabs/dynamodb-cross-region-library)实时将对我的本地 dynamodb 实例的所有更改实时流式传输到所有区域中的所有表。
## 验证请求
我通过在注册时将密钥复制到每个区域来处理此问题,因此无论用户点击哪个端点,他们点击的 lambda 函数都可以通过在毫秒内检入本地 Dynamodb 表来验证其密钥。 它还可以存储用户的计划配额,并且可以在一次读取中验证密钥,如果密钥存在,则可以获取计划配额以与使用情况进行比较并确定是否接受或拒绝请求。
## 情况如何
今天,我们每月提供 2500 万个 API 调用,每天大约提供 100 万个调用。
它们中的大多数都在 30 毫秒之内,提供了业界最快的基于 SSL 的 IP 地理位置查找。
#### [Hyperping.io](https://hyperping.io/)
![](https://img.kancloud.cn/1d/c9/1dc953b432e7fee6f3952bc2bbd8e8b4_796x368.png)
### [我们的状态页面](https://updown.io/ndkd)
![](https://img.kancloud.cn/e0/c6/e0c6cab4bc8272c8472c32135ac82421_800x737.png)
延迟几乎是开发人员不愿意使用第三方 API 进行 GeoIP 查找的最大原因。
但是,我们的低延迟和冗余的全球基础架构正逐渐将大型企业吸引到我们的服务中。
## 费用
![](https://img.kancloud.cn/7f/ae/7faeefc5e975f5f90563446adcf53b48_966x798.png)
## 经验教训
1. Cloudwatch 的成本可能出乎意料的高-而不是日志存储-我们只能将 Cloudwatch 日志存储 24 小时。 警报,指标和 cloudwatch 请求确实可以加起来。
2. 在 API 网关上,由于冷启动次数减少,您获得的请求越少,延迟就越低,因此我发现在我们最繁忙的地区(法兰克福)的延迟低至 17 毫秒,而在悉尼等不那么繁忙的区域则只有 40 毫秒。
3. Dynamodb 的速度快,花费比您想象的要少(或者不,请参阅 [https://segment.com/blog/the-million-dollar-eng-problem/](https://segment.com/blog/the-million-dollar-eng-problem/) )。 最初,我认为应该按我提供的 RCU 和 WCU 的数量收费。 但是,计费似乎只是标准用法,因此,如果您提供 1000 个 RCU 和 1000 个 WCU,但仅使用 5 个 RCU 和 WCU,则只需要为使用付费。 Dynamodb 定价的这一方面在刚开始时很难确定。
4. 增加 lambda RAM 可以使执行时间减半,并使的响应时间更加一致(同时使您的成本增加一倍!)
5. Kinesis 已被证明在高吞吐量下非常可靠。 中继我们的所有日志事件以进行近实时处理。
6. 本地 Dynamodb 仅受系统资源的限制,这使其非常适合运行表扫描或查询(例如,在生成报告时),否则这些扫描或查询在 AWS 的 Dynamodb 上进行将非常昂贵。 请记住,Local Dynamodb 实际上只是 SQLite 周围的 Dynamo 包装:)。 对于我们的用例来说,它既有用又方便,但对您而言可能并非如此。
## 笔记
* AWS 去年在 Re:invent 上宣布了 Dynamodb Global 表,该表将所有表(“跨区域”)中的所有写入彼此同步。 我们目前不打算使用此功能,因为它仅在 5 个地区提供。
* 亚马逊还推出了`REQUEST`类型的自定义授权者。 这可能使您可以通过 IP 地址以及任何标头,查询或路径参数对速率进行限制。
[关于 HackerNews](https://news.ycombinator.com/item?id=16745376)
您的 DynamoDB 成本令人惊讶是因为默认情况下启用了“自动缩放”以读取/写入卷。 只要您的峰值不大,就永远不会看到配置错误...
我对此声明感到困惑:
-----
我最初以为我要提供的 RCU 和 WCU 数量付费。 但是,计费似乎只是标准用法,因此,如果您提供 1000 个 RCU 和 1000 个 WCU,但仅使用 5 个 RCU 和 WCU,则只需要为使用付费。 Dynamodb 定价的这一方面在刚开始时很难确定。
-----
定价页面(https://aws.amazon.com/dynamodb/pricing/)指出,您需要为您提供的吞吐量付费
也许因为仍在免费套餐中而未向您收费?
嘿 Cads,
我完全理解混乱,我也和您一样。
但是我很确定我们不在免费领域,因为我们要为 Dynamodb 付费。
而且,我们只收取使用费用,并不超出表中的规定。
这似乎与亚马逊的定价页面上所说的相反,但这是我在 AWS 账单上看到的。
感谢您的有趣文章。 关于本地 DynamoDB,我有一个问题:您在哪里运行此程序? 作为 EC2 实例?
嗨 Tobi,
谢谢! 我实际上在 Azure 节点上运行它。 但是,它可以作为实例在 DO 或 EC2 上运行。
该图显然是不真诚的。 从来没有太大的区别。 在这种情况下,可能是因为作者只是在测试管道而不是没有管道。 此外,他将 go pro 限制为 1 cpu。 同样,仓库也不再存在。 我把废话统称为“基准”。
顺便说一句,Japronto 主要是 C,请检查代码。
(我偏向于 Go,但是这不像 node,其他人无法应付自己)
我记得在中篇文章上有很多类似的评论,请参阅 https://medium.freecodecamp.org/million-requests-per-second-with-python-95c137af319
我还能够找到另一个基准,使 japronto 紧随 Rust
https://github.com/tbrand/which_is_the_fastest
每月 2500 万个请求是每秒 10 个请求...
每秒高峰请求呢?
写得很好的文章。 感谢您分享您的体验。 我对以下部分有疑问:
“首先,在每个请求上打印一个带有所有请求标识符的日志(JSON 对象)。这是 IP 地址,引荐来源网址和 API 密钥(如果存在的话)。确实是;```print(event)```“
只是想知道为什么不将这些消息直接发送给运动机能? 为什么要先登录?
Esko,API 网关可以处理 10k req / s 的峰值
Kaivalya,这会为用户带来延迟,打印日志是最便宜的(就延迟而言)和最简单的解决方案。
> > SQS 会在使用者读取事件后立即将其删除。
这是不正确的,一旦您从 SQS 读取了一条消息,直到可见性超时,任何人都看不到它。 您需要确认对 SQS 的读取,以便它可以删除消息。 我们通常要做的是处理消息,然后仅在处理实例发生故障的情况下进行确认,这样我们的消息仍然完好无损。 只需调整可见性超时以确保提供足够的时间即可。
很棒的文章。 感谢您与社区分享。
嗨,您如何处理每秒 1,000 个 Lambda 呼叫限制? AWS 的架构师建议我们不要在具有高使用率和高并发性的大多数项目中使用 Lambda-他们说,这仅对中小型项目更好,并且没有您所说的无限规模-我们被告知的一个大问题 当以最大速度运行时,AWS 团队将耗尽 VPC 中所有可用的 IP 地址。 超出 1,000 个限制的呼叫也会被拒绝,您的客户也会出错。
为了计算并发执行的次数,我们使用公式:
每秒事件(或请求)数*功能持续时间
如 https://docs.aws.amazon.com/lambda/latest/dg/scaling.html 所记录。
自这篇文章上线以来,我们平均每天平均有 2M API 调用,大约每秒 12 次。我们的最大 lambda 使用上面公式中的值,调用时间为 20ms;
12 * 0.020
我们得到的并发级别为 0.24。
这意味着我们可以在目前的 1000 lambda 调用限制下,每秒处理 50,000 个请求,每天约 43.2 亿个请求。
嗨,
单个订户的运动流事件有多个订户吗?
只是想知道为什么如果所有数据都存储在一个中央(本地)dynamo 数据库实例中,则跨区域 dynamo 数据库进行复制。
因此,您为 9 req / s 支付 150 美元?
对于许可证密钥检查,您是否考虑过使用 Bloom 或 Cuckoo 过滤器? 您可以将过滤器保存在内存中,并避免数据库调用。
首次使用 ipdata.co 的用户,我们最近切换到了另一个 IP 地理位置提供商。 延迟在过去几个月中增加了很多,并且在全球范围内不一致(请参阅 https://status.ipdata.co/)。 此外,该服务缺少监视仪表板。
如果您处于类似情况,我建议尝试 Ipregistry(https://ipregistry.co),其全局端点延迟实在令人难以置信(https://status.ipregistry.co/)! 我联系了他们的支持,建议在此博客上写一篇文章,因为他们的体系结构可能很有趣。
- LiveJournal 体系结构
- mixi.jp 体系结构
- 友谊建筑
- FeedBurner 体系结构
- GoogleTalk 架构
- ThemBid 架构
- 使用 Amazon 服务以 100 美元的价格构建无限可扩展的基础架构
- TypePad 建筑
- 维基媒体架构
- Joost 网络架构
- 亚马逊建筑
- Fotolog 扩展成功的秘诀
- 普恩斯的教训-早期
- 论文:Wikipedia 的站点内部,配置,代码示例和管理问题
- 扩大早期创业规模
- Feedblendr 架构-使用 EC2 进行扩展
- Slashdot Architecture-互联网的老人如何学会扩展
- Flickr 架构
- Tailrank 架构-了解如何在整个徽标范围内跟踪模因
- Ruby on Rails 如何在 550k 网页浏览中幸存
- Mailinator 架构
- Rackspace 现在如何使用 MapReduce 和 Hadoop 查询 TB 的数据
- Yandex 架构
- YouTube 架构
- Skype 计划 PostgreSQL 扩展到 10 亿用户
- 易趣建筑
- FaceStat 的祸根与智慧赢得了胜利
- Flickr 的联合会:每天进行数十亿次查询
- EVE 在线架构
- Notify.me 体系结构-同步性
- Google 架构
- 第二人生架构-网格
- MySpace 体系结构
- 扩展 Digg 和其他 Web 应用程序
- Digg 建筑
- 在 Amazon EC2 中部署大规模基础架构的六个经验教训
- Wolfram | Alpha 建筑
- 为什么 Facebook,Digg 和 Twitter 很难扩展?
- 全球范围扩展的 10 个 eBay 秘密
- BuddyPoke 如何使用 Google App Engine 在 Facebook 上扩展
- 《 FarmVille》如何扩展以每月收获 7500 万玩家
- Twitter 计划分析 1000 亿条推文
- MySpace 如何与 100 万个并发用户一起测试其实时站点
- FarmVille 如何扩展-后续
- Justin.tv 的实时视频广播架构
- 策略:缓存 404 在服务器时间上节省了洋葱 66%
- Poppen.de 建筑
- MocoSpace Architecture-一个月有 30 亿个移动页面浏览量
- Sify.com 体系结构-每秒 3900 个请求的门户
- 每月将 Reddit 打造为 2.7 亿页面浏览量时汲取的 7 个教训
- Playfish 的社交游戏架构-每月有 5000 万用户并且不断增长
- 扩展 BBC iPlayer 的 6 种策略
- Facebook 的新实时消息系统:HBase 每月可存储 135 亿条消息
- Pinboard.in Architecture-付费玩以保持系统小巧
- BankSimple 迷你架构-使用下一代工具链
- Riak 的 Bitcask-用于快速键/值数据的日志结构哈希表
- Mollom 体系结构-每秒以 100 个请求杀死超过 3.73 亿个垃圾邮件
- Wordnik-MongoDB 和 Scala 上每天有 1000 万个 API 请求
- Node.js 成为堆栈的一部分了吗? SimpleGeo 说是的。
- 堆栈溢出体系结构更新-现在每月有 9500 万页面浏览量
- Medialets 体系结构-击败艰巨的移动设备数据
- Facebook 的新实时分析系统:HBase 每天处理 200 亿个事件
- Microsoft Stack 是否杀死了 MySpace?
- Viddler Architecture-每天嵌入 700 万个和 1500 Req / Sec 高峰
- Facebook:用于扩展数十亿条消息的示例规范架构
- Evernote Architecture-每天有 900 万用户和 1.5 亿个请求
- TripAdvisor 的短
- TripAdvisor 架构-4,000 万访客,200M 动态页面浏览,30TB 数据
- ATMCash 利用虚拟化实现安全性-不变性和还原
- Google+是使用您也可以使用的工具构建的:闭包,Java Servlet,JavaScript,BigTable,Colossus,快速周转
- 新的文物建筑-每天收集 20 亿多个指标
- Peecho Architecture-鞋带上的可扩展性
- 标记式架构-扩展到 1 亿用户,1000 台服务器和 50 亿个页面视图
- 论文:Akamai 网络-70 个国家/地区的 61,000 台服务器,1,000 个网络
- 策略:在 S3 或 GitHub 上运行可扩展,可用且廉价的静态站点
- Pud 是反堆栈-Windows,CFML,Dropbox,Xeround,JungleDisk,ELB
- 用于扩展 Turntable.fm 和 Labmeeting 的数百万用户的 17 种技术
- StackExchange 体系结构更新-平稳运行,Amazon 4x 更昂贵
- DataSift 体系结构:每秒进行 120,000 条推文的实时数据挖掘
- Instagram 架构:1400 万用户,1 TB 的照片,数百个实例,数十种技术
- PlentyOfFish 更新-每月 60 亿次浏览量和 320 亿张图片
- Etsy Saga:从筒仓到开心到一个月的浏览量达到数十亿
- 数据范围项目-6PB 存储,500GBytes / sec 顺序 IO,20M IOPS,130TFlops
- 99designs 的设计-数以千万计的综合浏览量
- Tumblr Architecture-150 亿页面浏览量一个月,比 Twitter 更难扩展
- Berkeley DB 体系结构-NoSQL 很酷之前的 NoSQL
- Pixable Architecture-每天对 2000 万张照片进行爬网,分析和排名
- LinkedIn:使用 Databus 创建低延迟更改数据捕获系统
- 在 30 分钟内进行 7 年的 YouTube 可扩展性课程
- YouPorn-每天定位 2 亿次观看
- Instagram 架构更新:Instagram 有何新功能?
- 搜索技术剖析:blekko 的 NoSQL 数据库
- Pinterest 体系结构更新-1800 万访问者,增长 10 倍,拥有 12 名员工,410 TB 数据
- 搜索技术剖析:使用组合器爬行
- iDoneThis-从头开始扩展基于电子邮件的应用程序
- StubHub 体系结构:全球最大的票务市场背后的惊人复杂性
- FictionPress:在网络上发布 600 万本小说
- Cinchcast 体系结构-每天产生 1,500 小时的音频
- 棱柱架构-使用社交网络上的机器学习来弄清您应该在网络上阅读的内容
- 棱镜更新:基于文档和用户的机器学习
- Zoosk-实时通信背后的工程
- WordPress.com 使用 NGINX 服务 70,000 req / sec 和超过 15 Gbit / sec 的流量
- 史诗般的 TripAdvisor 更新:为什么不在云上运行? 盛大的实验
- UltraDNS 如何处理数十万个区域和数千万条记录
- 更简单,更便宜,更快:Playtomic 从.NET 迁移到 Node 和 Heroku
- Spanner-关于程序员使用 NoSQL 规模的 SQL 语义构建应用程序
- BigData 使用 Erlang,C 和 Lisp 对抗移动数据海啸
- 分析数十亿笔信用卡交易并在云中提供低延迟的见解
- MongoDB 和 GridFS 用于内部和内部数据中心数据复制
- 每天处理 1 亿个像素-少量竞争会导致大规模问题
- DuckDuckGo 体系结构-每天进行 100 万次深度搜索并不断增长
- SongPop 在 GAE 上可扩展至 100 万活跃用户,表明 PaaS 未通过
- Iron.io 从 Ruby 迁移到 Go:减少了 28 台服务器并避免了巨大的 Clusterf ** ks
- 可汗学院支票簿每月在 GAE 上扩展至 600 万用户
- 在破坏之前先检查自己-鳄梨的建筑演进的 5 个早期阶段
- 缩放 Pinterest-两年内每月从 0 到十亿的页面浏览量
- Facebook 的网络秘密
- 神话:埃里克·布鲁尔(Eric Brewer)谈银行为什么不是碱-可用性就是收入
- 一千万个并发连接的秘密-内核是问题,而不是解决方案
- GOV.UK-不是你父亲的书库
- 缩放邮箱-在 6 周内从 0 到 100 万用户,每天 1 亿条消息
- 在 Yelp 上利用云计算-每月访问量为 1.02 亿,评论量为 3900 万
- 每台服务器将 PHP 扩展到 30,000 个并发用户的 5 条 Rockin'Tips
- Twitter 的架构用于在 5 秒内处理 1.5 亿活跃用户,300K QPS,22 MB / S Firehose 以及发送推文
- Salesforce Architecture-他们每天如何处理 13 亿笔交易
- 扩大流量的设计决策
- ESPN 的架构规模-每秒以 100,000 Duh Nuh Nuhs 运行
- 如何制作无限可扩展的关系数据库管理系统(RDBMS)
- Bazaarvoice 的架构每月发展到 500M 唯一用户
- HipChat 如何使用 ElasticSearch 和 Redis 存储和索引数十亿条消息
- NYTimes 架构:无头,无主控,无单点故障
- 接下来的大型声音如何使用 Hadoop 数据版本控制系统跟踪万亿首歌曲的播放,喜欢和更多内容
- Google 如何备份 Internet 和数十亿字节的其他数据
- 从 HackerEarth 用 Apache 扩展 Python 和 Django 的 13 个简单技巧
- AOL.com 体系结构如何发展到 99.999%的可用性,每天 800 万的访问者和每秒 200,000 个请求
- Facebook 以 190 亿美元的价格收购了 WhatsApp 体系结构
- 使用 AWS,Scala,Akka,Play,MongoDB 和 Elasticsearch 构建社交音乐服务
- 大,小,热还是冷-条带,Tapad,Etsy 和 Square 的健壮数据管道示例
- WhatsApp 如何每秒吸引近 5 亿用户,11,000 内核和 7,000 万条消息
- Disqus 如何以每秒 165K 的消息和小于 0.2 秒的延迟进行实时处理
- 关于 Disqus 的更新:它仍然是实时的,但是 Go 摧毁了 Python
- 关于 Wayback 机器如何在银河系中存储比明星更多的页面的简短说明
- 在 PagerDuty 迁移到 EC2 中的 XtraDB 群集
- 扩展世界杯-Gambify 如何与 2 人组成的团队一起运行大型移动投注应用程序
- 一点点:建立一个可处理每月 60 亿次点击的分布式系统的经验教训
- StackOverflow 更新:一个月有 5.6 亿次网页浏览,25 台服务器,而这一切都与性能有关
- Tumblr:哈希处理每秒 23,000 个博客请求的方式
- 使用 HAProxy,PHP,Redis 和 MySQL 处理 10 亿个请求的简便方法来构建成长型启动架构
- MixRadio 体系结构-兼顾各种服务
- Twitter 如何使用 Redis 进行扩展-105TB RAM,39MM QPS,10,000 多个实例
- 正确处理事情:通过即时重放查看集中式系统与分散式系统
- Instagram 提高了其应用程序的性能。 这是如何做。
- Clay.io 如何使用 AWS,Docker,HAProxy 和 Lots 建立其 10 倍架构
- 英雄联盟如何将聊天扩大到 7000 万玩家-需要很多小兵。
- Wix 的 Nifty Architecture 技巧-大规模构建发布平台
- Aeron:我们真的需要另一个消息传递系统吗?
- 机器:惠普基于忆阻器的新型数据中心规模计算机-一切仍在变化
- AWS 的惊人规模及其对云的未来意味着什么
- Vinted 体系结构:每天部署数百次,以保持繁忙的门户稳定
- 将 Kim Kardashian 扩展到 1 亿个页面
- HappyPancake:建立简单可扩展基金会的回顾
- 阿尔及利亚分布式搜索网络的体系结构
- AppLovin:通过每天处理 300 亿个请求向全球移动消费者进行营销
- Swiftype 如何以及为何从 EC2 迁移到真实硬件
- 我们如何扩展 VividCortex 的后端系统
- Appknox 架构-从 AWS 切换到 Google Cloud
- 阿尔及利亚通往全球 API 的愤怒之路
- 阿尔及利亚通往全球 API 步骤的愤怒之路第 2 部分
- 为社交产品设计后端
- 阿尔及利亚通往全球 API 第 3 部分的愤怒之路
- Google 如何创造只有他们才能创造的惊人的数据中心网络
- Autodesk 如何在 Mesos 上实施可扩展事件
- 构建全球分布式,关键任务应用程序:Trenches 部分的经验教训 1
- 构建全球分布式,关键任务应用程序:Trenches 第 2 部分的经验教训
- 需要物联网吗? 这是美国一家主要公用事业公司从 550 万米以上收集电力数据的方式
- Uber 如何扩展其实时市场平台
- 优步变得非常规:使用司机电话作为备份数据中心
- 在不到五分钟的时间里,Facebook 如何告诉您的朋友您在灾难中很安全
- Zappos 的网站与 Amazon 集成后冻结了两年
- 为在现代时代构建可扩展的有状态服务提供依据
- 细分:使用 Docker,ECS 和 Terraform 重建基础架构
- 十年 IT 失败的五个教训
- Shopify 如何扩展以处理来自 Kanye West 和 Superbowl 的 Flash 销售
- 整个 Netflix 堆栈的 360 度视图
- Wistia 如何每小时处理数百万个请求并处理丰富的视频分析
- Google 和 eBay 关于构建微服务生态系统的深刻教训
- 无服务器启动-服务器崩溃!
- 在 Amazon AWS 上扩展至 1100 万以上用户的入门指南
- 为 David Guetta 建立无限可扩展的在线录制活动
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿个通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训
- 缩放原理
- TripleLift 如何建立 Adtech 数据管道每天处理数十亿个事件
- Tinder:最大的推荐引擎之一如何决定您接下来会看到谁?
- 如何使用微服务建立财产管理系统集成
- Egnyte 体系结构:构建和扩展多 PB 分布式系统的经验教训
- Zapier 如何自动化数十亿个工作流自动化任务的旅程
- Jeff Dean 在 Google 进行大规模深度学习
- 如今 Etsy 的架构是什么样的?
- 我们如何在 Mail.Ru Cloud 中实现视频播放器
- Twitter 如何每秒处理 3,000 张图像
- 每天可处理数百万个请求的图像优化技术
- Facebook 如何向 80 万同时观看者直播
- Google 如何针对行星级基础设施进行行星级工程设计?
- 为 Mail.Ru Group 的电子邮件服务实施反垃圾邮件的猫捉老鼠的故事,以及 Tarantool 与此相关的内容
- The Dollar Shave Club Architecture Unilever 以 10 亿美元的价格被收购
- Uber 如何使用 Mesos 和 Cassandra 跨多个数据中心每秒管理一百万个写入
- 从将 Uber 扩展到 2000 名工程师,1000 个服务和 8000 个 Git 存储库获得的经验教训
- QuickBooks 平台
- 美国大选期间城市飞艇如何扩展到 25 亿条通知
- Probot 的体系结构-我的 Slack 和 Messenger Bot 用于回答问题
- AdStage 从 Heroku 迁移到 AWS
- 为何将 Morningstar 迁移到云端:降低 97%的成本
- ButterCMS 体系结构:关键任务 API 每月可处理数百万个请求
- Netflix:按下 Play 会发生什么?
- ipdata 如何以每月 150 美元的价格为来自 10 个无限扩展的全球端点的 2500 万个 API 调用提供服务
- 每天为 1000 亿个事件赋予意义-Teads 的 Analytics(分析)管道
- Auth0 体系结构:在多个云提供商和地区中运行
- 从裸机到 Kubernetes
- Egnyte Architecture:构建和扩展多 PB 内容平台的经验教训