# Auth0 体系结构:在多个云提供商和地区中运行
> 原文: [http://highscalability.com/blog/2018/8/27/auth0-architecture-running-in-multiple-cloud-providers-and-r.html](http://highscalability.com/blog/2018/8/27/auth0-architecture-running-in-multiple-cloud-providers-and-r.html)
![](https://img.kancloud.cn/0f/c3/0fc3923f050f4d667b48d0e9c37456c5_500x315.png)
*此文章由 Auth0 的站点可靠性工程师 Dirceu Pereira Tiegs 撰写,最初发表于 [Auth0](https://auth0.com/blog/auth0-architecture-running-in-multiple-cloud-providers-and-regions/) 中。*
Auth0 为任何堆栈上的任何类型(移动,Web,本机)的应用程序提供身份验证,授权和单点登录服务。 身份验证对于绝大多数应用程序至关重要。 我们从一开始就设计 Auth0,以便它可以在任何地方运行:在我们的云,您的云甚至您自己的私有基础结构上。
在这篇文章中,我们将更多地讨论我们的公共 SaaS 部署,并简要介绍 [auth0.com](https://auth0.com/) 背后的基础架构以及我们用来使其保持高可用性和正常运行的策略。
从那时起,Auth0 发生了很多变化。 这些是一些亮点:
* 我们从每月处理几百万个登录到每月处理 1.5+十亿个登录,为成千上万的客户提供服务,包括 [FuboTV](https://auth0.com/learn/sports-centric-streaming-service-fubotv-sees-50-roi-just-auth0s-security/) , [Mozilla](https://auth0.com/blog/auth0-mozilla-partnership/) , [JetPrivilege](https://auth0.com/learn/jetprivilege-case-study/) 和 更多。
* 我们实现了新功能,例如[自定义域](https://auth0.com/docs/custom-domains),[扩展的 bcrypt 操作](https://auth0.engineering/bcrypt-as-a-service-9e71707bda47),极大地[改进的用户搜索](https://auth0.com/docs/users/search/v3)等。
* 组成我们的产品以扩展我们的组织并处理流量增长的服务数量从不到 10 种增加到 30 多种。
* 云资源的数量也大大增加。 我们曾经在一个环境(美国)中有几十个节点,现在在四个环境(美国,US-2,欧盟,非盟)中有超过一千个节点。
* 我们加倍决定在每个环境中使用一个云提供商,并将所有公共云基础架构移至 AWS。
## 核心服务架构
![Auth0.com core service architecture](https://img.kancloud.cn/eb/a1/eba11c97e9add94aa39d1ad130d3136b_718x1133.png)
核心服务由不同的层组成:
* 核心应用程序:自动扩展运行我们堆栈中不同服务(身份验证,管理 API,多因素身份验证 API 等)的服务器组。
* 数据存储:MongoDB,Elasticsearch,Redis 和 PostgreSQL 的集群,存储用于不同应用程序和功能的各种数据集。
* 传输/队列:Kinesis 流和 RabbitMQ,SNS 和 SQS 队列。
* 基本服务:限速,bcrypt 群集,功能标记等服务。
* 路由:AWS 负载均衡器(AWS 的 ALB,NLB 和 ELB)和一些运行 NGINX 作为代理的节点。
## 高可用性
2014 年,我们使用了多云架构(使用 Azure 和 AWS,并在 Google Cloud 上提供了一些额外的资源),多年来一直为我们服务。 随着使用量(和负载)的迅速增加,我们发现自己越来越依赖 AWS 资源。
首先,我们将环境中的主要区域切换到 AWS 中,并将 Azure 保留为故障转移。 随着我们开始使用更多的 AWS 资源(例如 Kinesis 和 SQS),我们开始难以在两个提供商中保持相同的功能集。 随着我们对移动(和扩展)速度的需求增长,我们选择继续以有限的功能奇偶校验来支持 Azure:如果 AWS 上的所有事情都失败了,我们仍然可以使用 Azure 群集来支持核心身份验证功能,但是没有太多新功能 我们一直在发展。
在 2016 年发生严重故障后,我们决定最终在 AWS 上融合。 我们停止了与保持服务和自动化平台无关的所有工作,而是专注于:
* 使用多个区域以及每个区域至少 3 个可用区,从而在 AWS 内部提供更好的故障转移故事。
* 越来越多地使用 AWS 特定资源,例如自动扩展组(而不是使用固定的节点集群),应用程序负载平衡器(ALB)等。
* 编写更好的自动化程序:我们改进了自动化程序,完全使用 TerraForm 和 SaltStack 来将基础架构作为代码包含在内,以提供新的 Auth0 环境(并替换现有环境)。 这使我们从每秒约 300 次登录的部分自动化环境发展到每秒约 3.4 千次登录的完全自动化环境。 使用新工具可以更轻松地按比例放大和缩小。 我们实现的自动化水平不是完美的,但是它使我们能够以更便捷的方式发展到新地区并创建新环境。
* 编写更好的剧本:我们花了更多的时间和精力,除了自动化之外,还需要更好的剧本,以了解,管理和响应与我们不断增长的服务网格有关的事件。 这极大地提高了可扩展性和可靠性,同时还使我们能够更快地招聘新员工。
[](https://twitter.com/intent/tweet?text=%22Writing+better+automation+let+us+grow+from+partially+automated+environments+doing+%7E300+logins+per+second+to+fully+automated+environments+doing+more+than+%7E3.4+thousand+logins+per+second%22%20via%20@auth0%20http://auth0.com/blog/auth0-architecture-running-in-multiple-cloud-providers-and-regions/)
> 编写更好的自动化软件,使我们从每秒进行 300 次登录的部分自动化环境发展到每秒进行 3.4 千多次登录的全自动化环境
让我们看一下我们的美国环境架构。 我们具有以下一般结构:
![Auth0 US Environment Architecture](https://img.kancloud.cn/bb/25/bb2546bea6e5405c53d4a500e9a6a58c_1440x360.png)
这是单个可用区内部的结构:
![Auth0 Single Availablity Zone](https://img.kancloud.cn/7b/8d/7b8d8891746adf43191d73f295f7723a_1440x1440.png)
在这种情况下,我们使用两个 AWS 区域:us-west-2(我们的主要区域)和 us-west-1(我们的故障转移)。 在正常情况下,所有请求都会发送到 us-west-2,由三个单独的可用区提供服务。
这就是我们实现高可用性的方式:所有服务(包括数据库)在每个可用性区域(AZ)上都具有正在运行的实例。 如果由于数据中心故障而使一个可用区关闭,我们仍然有两个可用区来处理来自其的请求。 如果整个区域宕机或有错误,我们可以更新 Route53 以故障转移到 us-west-1 并恢复操作。
> We achieve high availability by running all services instances on every AWS availability zone
对于服务故障转移,我们有不同的成熟度级别:某些服务(例如用户搜索 v2(在 Elasticsearch 上构建缓存))可能会起作用,但是数据有些陈旧; 尽管如此,核心功能仍能按预期运行。
在数据层中,我们使用:
* MongoDB 的跨区域集群。
* PostgreSQL 的 RDS 复制。
* 具有自动快照和恢复功能的 Elasticsearch 每个区域的群集定期运行,以解决缺乏跨区域群集的问题。
我们每年至少执行一次故障转移,并且我们有剧本和自动化工具可以帮助新的基础架构工程师迅速掌握如何进行故障转移以及所带来的影响。
我们的部署通常由 Jenkins 节点触发; 根据服务的不同,我们可以使用 Puppet,SaltStack 和/或 Ansible 来更新单个或一组节点,也可以更新 AMI 并为不可变的部署创建新的自动伸缩组。 对于新旧服务,我们有不同类型的部署,并且由于我们需要维护自动化,文档和监视应统一的内容,因此这种方法在很大程度上无效。
我们目前正在为某些核心服务推出蓝色/绿色部署,并且我们打算为每个核心和支持服务实施相同的部署。
## 自动化测试
除了每个项目的单元测试范围外,我们还有在每个环境中运行的多个功能测试套件; 我们在部署到生产之前在临时环境上运行它,并在完成部署后在生产中再次运行它们以确保一切正常。
亮点:
* 我们在不同的项目中有成千上万的单元测试。
* 我们使用每分钟运行一次的 Pingdom 探针来检查核心功能。
* 在每次部署之前和之后,我们混合使用基于 Selenium 和 CodeceptJS 的功能测试。 功能测试套件可测试不同的 API 端点,身份验证流程,身份提供者等。
> 除了涵盖每个项目的单元测试外,我们还有在每个环境中运行的多个功能测试套件:在部署到生产之前进行过渡,在完成部署之后再次进行生产。
## CDN
直到 2017 年,我们在多个区域中使用 NGINX,Varnish 和 EC2 节点运行了自己的定制 CDN。 从那时起,我们过渡到 CloudFront,这给了我们很多好处,包括:
* 更多的边缘位置,这意味着对我们的客户的延迟减少。
* 降低维护成本。
* 易于配置。
有一些缺点,例如我们需要运行 Lambda 来执行一些配置(例如向 PDF 文件添加自定义标头之类的事实)。 尽管如此,上行空间肯定可以弥补这一点。
## 延伸
我们提供的功能之一是能够通过 [*身份验证规则*](https://auth0.com/docs/rules/current) 或 [*定制数据库连接* [](https://auth0.com/docs/connections/database/custom-db) 。 这些功能由 [*Extend*](https://goextend.io/) 提供支持,这是一种基于 Auth0 的可扩展性平台,现在也被其他公司使用。 借助 Extend,我们的客户可以在这些脚本和规则中编写他们想要的任何内容,从而允许他们扩展配置文件,规范化属性,发送通知等等。
我们有专门针对 Auth0 的扩展集群; 他们结合使用 EC2 自动扩展组,Docker 容器和自定义代理来处理来自我们租户的请求,每秒处理数千个请求,并快速响应负载变化。 有关如何构建和运行它的更多详细信息,请查看有关[如何构建自己的无服务器平台](https://tomasz.janczuk.org/2018/03/how-to-build-your-own-serverless-platform.html)的文章。
## 监控方式
我们使用不同工具的组合来监视和调试问题:
* CloudWatch
* 数据狗
* 平度
* 森丁
我们的绝大多数警报来自 CloudWatch 和 DataDog。
我们倾向于通过 TerraForm 配置 CloudWatch 警报,而我们在 CloudWatch 上保留的主要监视器为:
* 来自主要负载均衡器的 HTTP 错误。
* 目标组中的不正常实例。
* SQS 处理延迟。
CloudWatch 是基于 AWS 生成的指标(如来自负载平衡器或自动伸缩组的指标)的警报的最佳工具。 CloudWatch 警报通常转到 PagerDuty,从 PagerDuty 转到 Slack / phone。
DataDog 是我们用来存储时间序列指标并对其采取行动的一项服务。 我们从 Linux 盒子,AWS 资源,现成的服务(例如 NGINX 或 MongoDB)以及我们已经构建的自定义服务(例如我们的 Management API)发送指标。
我们有许多 DataDog 监视器。 一些例子:
* `$service`中`$environment`中的响应时间增加。
* `$instance`(`$ip_address`)中`$volume`上的空间不足。
* `$environment` / `$host`(`$ip_address`)上的`$process`问题。
* 增加`$environment`上`$service`的处理时间。
* NTP 漂移/ `$host`(`$ip_address`)上的时钟问题。
* `$environment`上的 MongoDB 副本集更改。
从上面的示例中可以看到,我们具有针对低级指标(如磁盘空间)和高级指标(如 MongoDB 副本集更改)的监视器,它们会在主节点定义发生更改时向我们发出警报, 例)。 我们要做的更多,并且围绕某些服务有一些非常复杂的监视器。
DataDog 警报的输出非常灵活,我们通常将它们全部发送到 Slack,仅将那些应该“唤醒人们”的人发送给 PagerDuty(例如错误尖峰,或者我们确信会对客户产生影响的大多数事情) 。
对于日志记录,我们使用 Kibana 和 SumoLogic。 我们正在使用 SumoLogic 来记录审计跟踪和许多 AWS 生成的日志,并且我们使用 Kibana 来存储来自我们自己的服务以及 NGINX 和 MongoDB 等其他“现成”服务的应用程序日志。
## 未来
我们的平台进行了相当多的改进,以处理对客户而言很重要的额外负载和各种用例,但我们仍有更多的优化空间。
不仅我们的平台在增长,而且我们的工程组织也在扩大规模:我们有许多新团队在构建自己的服务,并且需要有关可伸缩性的自动化,工具和指南。 考虑到这一点,这些举措使我们不仅可以扩展我们的平台,还可以扩展我们的工程实践:
* 建立一个 PaaS 风格的平台:如前所述,今天我们有不同的自动化和部署流程。 这会引起混乱,并给工程师带来了进入的障碍,因为如果不接触太多的存储库就很难进行试验和扩展。 我们正在为一个平台(当前在 ECS 之上运行)开发 PoC,工程师可以在其中配置 YAML 文件并进行部署,以获取计算资源,监视,日志记录,备份等等。 所有这些都无需显式配置。 这项工作尚处于初期阶段,可能还会改变很多(EKS?)。 但是,鉴于我们不断增长的规模和可伸缩性限制,我们认为我们正在朝着正确的方向发展。
* 为每个新的请求请求实施冒烟测试:除了单元测试(已在每个新 PR 上运行)之外,我们还希望在临时环境中运行集成测试。
* 将我们的日志记录解决方案集中到一个提供商中。 这可能意味着离开 Kibana 并仅使用 SumoLogic,但是我们仍然需要评估功能集,数据量等。
* 自动化指标:我们太多的指标故事现在是手动的:在部署时将与指标相关的调用添加到代码中,以及使用 DataDog 界面构建仪表板和监视器。 如果使用标准格式和命名,则可以执行以下操作:自动构建仪表板/监视器,从日志中提取指标,而不是显式地添加对代码的调用等。
* 确保我们在每个核心服务上都有自动扩展和蓝色/绿色部署。 这应该从我们的新平台中直接获得,但是在构建和测试该平台时,我们需要针对仍缺乏这方面的核心服务来改进可伸缩性/部署/回滚的过程。
- 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 内容平台的经验教训