# 從裸機到 Kubernetes
> 原文: [http://highscalability.com/blog/2019/4/8/from-bare-metal-to-kubernetes.html](http://highscalability.com/blog/2019/4/8/from-bare-metal-to-kubernetes.html)

*這是位于舊金山的零售服裝公司和眾籌平臺 [Betabrand](https://www.betabrand.com) 的首席工程師 [Hugues Alary](https://www.linkedin.com/in/huguesalary/?locale=en_US) 的特邀帖子。 本文最初在此處發表[。](https://boxunix.com/post/bare_metal_to_kube/)*
* [早期基礎架構](#_early_infrastructure)
* [VPS](#_vps)
* [機架空間](#_rackspace)
* [OVH](#_ovh)
* [硬件基礎結構](#_hardware_infrastructure)
* [可伸縮性和可維護性問題](#_the_scalability_and_maintainability_issue)
* [擴展開發流程](#_scaling_development_processes)
* [Docker](#_the_advent_ofdocker) 的出現
* [調速器](#_kubernetes)
* [學習 Kubernetes](#_learning_kubernetes)
* [正式遷移](#_officially_migrating)
* [開發/分階段環境](#_the_developmentstaging_environments)
* [在](#_a_year_after)之后一年
如何將 [Betabrand](https://www.betabrand.com) 的裸機基礎架構遷移到托管在 Google Container Engine 上的 Kubernetes 集群,從而解決了許多工程問題-從硬件故障到生產服務的可伸縮性不足,復雜的配置管理和高度異構的開發 -生產階段環境-使我們能夠實現可靠,可用和可擴展的基礎架構。
這篇文章將引導您了解 Betabrand 從 2011 年到 2018 年遇到的許多基礎架構變更和挑戰。
* * *
## 早期基礎設施
### VPS
在我工作的 7 年中,Betabrand 的基礎架構發生了許多次變化。
在 2011 年,即我們的 CTO 雇用我的那一年,該網站托管在具有 Plesk 界面且沒有 root 訪問權限的共享服務器上(當然)。 每封新聞通訊(最多發送給數百人)都會使該網站屈服并使其爬行,有時甚至完全無響應。
我的第一筆生意就是尋找替代品,并將網站轉移到自己的專用服務器上。
### 機架空間
經過幾天的在線研究,我們在 Rackspace 上安裝了 VPS-8GB RAM,320GO 磁盤,4 個虛擬 CPU,150Mbps 帶寬。 再過幾天,我們就生活在由……1 臺服務器組成的新基礎架構上; 運行帶有 Memcached 提示的典型 Linux,Apache,PHP,MySQL 堆棧。
毫不奇怪,此基礎架構很快就過時了。
它不僅沒有擴展,而且更重要的是,它的每個部分都是單點故障。 阿帕奇下來? 網站關閉。 Rackspace 實例關閉了嗎? 網站關閉。 MySQL 崩潰了……您明白了。
它的另一方面是它的成本。
我們的平均每月賬單迅速攀升至 1,000 美元以上。 對于一臺機器和我們當時產生的低流量來說,這是很昂貴的價格。
在運行了該堆棧幾年后,即 2013 年中,我決定是時候讓我們的網站更具可擴展性,冗余性和成本效益了。
我估計,我們至少需要 3 臺服務器才能使我們的網站有些冗余,這在 Rackspace 上每年高達$ 14400。 作為一家非常小的初創公司,我們無法證明基礎設施賬單的“高價”; 我一直在尋找。
最便宜的選擇最終導致我們的堆棧在裸機服務器上運行。
### OVH
我過去曾在 OVH 工作過,一直都很滿意(盡管在線上有不同的評論)。 我估計在 OVH 上運行 3 臺服務器每年將達到 3240 美元,幾乎比 Rackspace 便宜 5 倍。
OVH 不僅更便宜,而且其服務器的功能也比 Rackspace 的服務器強 4 倍:32GB RAM,8 個 CPU,SSD 和無限帶寬。
最重要的是,他們剛剛在北美開設了一個新的數據中心。
幾周后,Betabrand.com 被托管在加拿大博哈努瓦的 OVH。
## 硬件基礎架構
在 2013 年至 2017 年之間,我們的硬件基礎架構經歷了一些架構更改。
到 2017 年底,無論是在軟件還是在硬件方面,我們的堆棧都大大超過了以往。
Betabrand.com 在 17 臺裸機上運行:
* 2 臺負責 SSL 卸載的 HAProxy 機器配置為熱備用
* 在我們的 Web 服務器的熱備份負載平衡中配置了 2 個清漆緩存計算機
* 5 臺運行 Apache 和 PHP-FPM 的計算機
* 2 個 Redis 服務器,每個服務器運行 2 個獨立的 Redis 實例。 1 個實例用于某些應用程序緩存,1 個實例用于我們的 PHP 會話
* 3 臺配置為 master-master 的 MariaDB 服務器,但以 master-slave 方式使用
* 3 個 Glusterd 服務器為我們所有的靜態資產服務
否則,每臺機器都將運行一個或多個進程,例如 keepalived,Ganglia,Munin,logstash,exim,備份管理器,有監督的,sshd,fail2ban,prerender,rabbitmq 和 docker。
但是,盡管此基礎架構非常便宜,冗余且沒有單點故障,但它仍不可擴展,并且維護起來也非常困難。
### 可伸縮性和可維護性問題
現在,管理服務器“艦隊”需要編寫一組 Ansible 腳本并進行維護,盡管 Ansible 是一款了不起的軟件,但這絕非易事。
即使會盡最大努力使您達到目標,Ansible 也不保證您的系統狀態。
例如,在由異構 OS 組成的服務器機群(例如 debian 8 和 debian 9)上運行 Ansible 腳本,將使所有計算機的狀態都接近您定義的狀態,但是最終可能會出現差異。 第一個是您在 Debian 8 和 Debian 9 上運行,但是在某些服務器和其他服務器上,軟件版本和配置也不同。
> 我經常搜索 Ansible 替代品,但從未發現更好。
>
> 我看了看 Puppet,但發現它的學習曲線太陡峭了,從閱讀別人的食譜中,*似乎*感到驚訝,因為它們做相同事情的方法太多了。 有些人可能認為這是靈活性,我認為這是復雜性。
>
> SaltStack 引起了我的注意,但也發現很難學習。 盡管他們進行了廣泛而深入的文檔編制,但他們的命名選擇(礦井,礦井,鹽等)從未對我產生影響; 在復雜性方面,它似乎遭受了與 Puppet 相同的問題。
>
> Nix 軟件包管理器和 NixOS 聽起來很棒,除了我對學習全新的操作系統感到不舒服(我已經使用 Debian 多年了),并擔心盡管選擇了巨大的軟件包,但最終我仍需要軟件包 可用,這將成為新的維護對象。
>
> 這些是我查看過的僅有的 3 個工具,但我敢肯定還有很多其他工具我可能從未聽說過。
然而,編寫 Ansible 腳本并進行維護并不是我們唯一的問題; 增加容量是另一個。
對于裸機,無法即時添加和刪除容量。 您需要提前計劃好您的需求:購買一臺機器-通常租用至少 1 個月-等待其準備就緒-可能需要 2 分鐘至 3 天的時間-安裝其基本操作系統, 安裝 Ansible 的依賴項(主要是 python 和一些其他軟件包),然后最后對它運行 Ansible 腳本。
對我們來說,整個過程是完全不切實際的,通常發生的事情是,我們會為預期的峰值負載增加容量,但之后再也不會刪除它,這反過來又增加了我們的成本。
但是,值得注意的是,即使基礎架構中未使用的容量類似于在燒錢,但在裸機上的成本仍然比在云上便宜得多。 另一方面,使用裸機服務器帶來的工程難題只是將成本從純粹的材料成本轉移到了管理成本。
在我們的裸機設置容量計劃中,服務器管理和 Ansible 腳本只是冰山一角。
### 擴展開發流程
在 2017 年初,雖然我們的基礎架構有所發展,但我們的團隊也有所發展。
我們又雇用了 7 名工程師,使我們的團隊由 9 人組成,其技能組從后端到前端遍及各個領域,并具有不同的資歷水平。
即使在一個只有 9 人的小型團隊中,也要保持生產效率并限制部署到生產中的錯誤數量,就可以確保簡單,易于設置和易于使用的開發,分期和生產三聯產品。
將您的開發環境設置為新員工,無需花費數小時,也無需升級或重新創建它。
此外,應該存在公司范圍內可訪問的登臺環境,該環境應與您的產品的 99%(如果不是 100%)匹配。
不幸的是,在我們的硬件基礎架構中,達到這種和諧的三重奏是不可能的。
### 開發環境
首先,我們工程團隊的每個人都使用 MacBook Pro,這是一個問題,因為我們的堆棧基于 Linux。
但是,要求所有人切換到 Linux 并可能更改他們寶貴的工作流程并不是一個理想的選擇。 這意味著最好的解決方案是提供一個與開發人員的機器偏好無關的開發環境。
我只能看到兩個明顯的選擇:
提供一個可以運行多個虛擬機的 Vagrant 堆棧(實際上更可能是 17 個計算機運行我們的整個堆棧),或者重新使用已經編寫的 ansible 腳本,然后對我們的本地 macbook 運行它們。
在調查了 Vagrant 之后,我覺得使用虛擬機會嚴重阻礙性能,這是不值得的。 我決定(不管是好是壞)走 Ansible 路線(事后看來,這可能不是最好的決定)。
我們將在生產,登臺和開發中使用相同的 Ansible 腳本集。 當然,我們的開發堆棧雖然接近生產,但并不是 100%匹配。
這足夠好一段時間了。 但是,這種失配會在以后(例如,我們的開發和生產 MySQL 版本未統一)時引起問題。 一些在開發人員上運行的查詢不會在生產環境中使用。
#### 暫存環境
其次,在不同的軟件(mac os 與 debian)上運行開發和生產環境意味著我們絕對需要一個暫存環境。
不僅是由于版本不匹配導致的潛在錯誤,還因為我們需要一種在發布之前與外部成員共享新功能的方法。
我再次有多種選擇:
* 購買 17 臺服務器并對它們運行 ansible。 但是,這會使我們的成本增加一倍,并且我們試圖節省資金。
* 在一個可以從外部訪問的獨特的 linux 服務器上設置我們的整個堆棧。 更便宜的解決方案,但再次沒有提供我們生產系統的精確副本。
我決定實施節省成本的解決方案。
暫存環境的早期版本涉及 3 個獨立的 linux 服務器,每個服務器運行整個堆棧。 然后,開發人員會在整個房間(或聊天室)大喊大叫,“接管 dev1”,“有人在使用 dev3 嗎?”,“ dev2 關閉了:/”。
總體而言,我們的開發,分階段和生產設置遠非最佳:它可以完成工作; 但絕對需要改進。
## Docker 的出現
2013 年,Dotcloud 發布了 Docker。
Docker 的 Betabrand 用例立即顯而易見。 我將其視為簡化我們的開發和登臺環境的解決方案。 通過擺脫煩人的腳本(好吧,差不多;稍后再講)。
這些腳本現在僅用于生產。
當時,該團隊的一個主要痛點是爭奪我們的三臺物理登臺服務器:dev1,dev2 和 dev3;而另一臺則是服務器。 對我來說,維護這 3 臺服務器是一個很大的麻煩。
在觀察了 docker 幾個月后,我決定在 2014 年 4 月試用它。
在其中一個登臺服務器上安裝 docker 之后,我創建了一個包含整個堆棧(haproxy,清漆,redis,apache 等)的 docker 映像,然后在接下來的幾個月中編寫了一個工具(`sailor`),使我們可以創建 ,銷毀和管理可通過單獨的唯一 URL 訪問的無限數量的登臺環境。
> 值得一提的是,當時 docker-compose 還不存在; 而且將整個堆棧放入一個 docker 映像中當然是一個很大的禁忌,但這在這里并不重要。
從那時起,團隊不再競爭訪問登臺服務器。 任何人都可以使用 Sailor 從 Docker 映像創建一個完全配置的新登臺容器。 我也不再需要維護服務器; 更好的是,我關閉并取消了其中的 2 個。
但是,我們的開發環境仍在 macos(當時為“ Mac OS X”)上運行,并使用 Ansible 腳本。
然后,在 2016 年左右的某個時候發布了 docker-machine。
Docker machine 是一種工具,可在您選擇的任何堆棧上部署 docker 守護進程:virtualbox,aws,gce,bare-metal,azure(由您命名),docker-machine 可以完成; 在一個命令行中。
我將其視為輕松,快速地將基于 ansible 的開發環境遷移到基于 docker 的機會。 我修改了`sailor`以使用 docker-machine 作為其后端。
設置開發環境現在只需創建一個新的 docker-machine,然后傳遞一個標志供水手使用即可。
至此,我們的開發階段流程已大大簡化; 至少從開發人員的角度來看:每當我需要將我們的堆棧中的任何軟件升級到較新版本或更改配置時,都無需修改我的 ansible 腳本,而是要求所有團隊來運行它們,然后自己在所有 3 個設備上運行它們 登臺服務器; 我現在可以簡單地推送一個新的 docker 映像。
具有諷刺意味的是,我最終需要虛擬機(故意避免使用)在我們的 macbook 上運行 docker。 從一開始,使用無業游民而不是 Ansible 是一個更好的選擇。 后視總是 20/20。
將 docker 用于我們的開發和登臺系統為 Betabrand.com 現在運行的更好的解決方案鋪平了道路。
## 州長
由于 Betabrand 主要是一個電子商務平臺,因此黑色星期五每年越來越多地出現在我們的網站上。
令我們驚訝的是,自 2013 年以來,該網站已處理了越來越多的負載,而沒有發生任何重大災難,但是它確實需要提前一個月的準備:盡可能地增加容量,負載測試和優化我們的結帳代碼路徑。
但是,在為 2016 年黑色星期五做準備之后,很明顯基礎架構無法在 2017 年黑色星期五進行擴展。 我擔心在負載下該網站將無法訪問。
幸運的是,在 2015 年的某個時候,Kubernetes 1.0 的發布引起了我的注意。
就像在 docker 中看到一個明顯的用例一樣,我知道 k8s 是解決許多問題所需要的。 首先,它最終將允許我們運行幾乎與*相同的 dev-staging-production 環境。 而且,還將解決我們的可伸縮性問題。*
我還評估了另外兩個解決方案,即 Nomad 和 Docker Swarm,但 Kubernetes 似乎是最有前途的。
對于 2017 年黑色星期五,我著手將整個基礎架構遷移到 k8s。
> 盡管我考慮了這一點,但我很快排除了將我們當前的 OVH 裸機服務器用于 k8s 節點的問題,因為這將與我擺脫 Ansible 而不是處理硬件服務器所帶來的所有問題的目標背道而馳。 此外,在我開始調查 Kubernetes 之后不久,Google 便發布了他們的托管 Kubernetes(GKE)產品,我很快就選擇了它。
### 學習 Kubernetes
遷移到 k8 首先需要通過閱讀在線文檔來深入了解其架構和概念。
最重要的是了解容器,容器,部署和服務以及它們如何組合在一起。 然后依次執行 ConfigMaps,Secrets,Daemonsets,StatefulSets,Volumes,PersistentVolumes 和 PersistentVolumeClaims。
其他概念也很重要,盡管使集群前進的必要性較低。
一旦吸收了這些概念,第二個也是最困難的一步就是將我們的裸機架構轉換為一組 YAML 清單。
從一開始,我就打算只有一套清單用于創建所有三個開發,登臺和生產環境。 我很快就遇到了需要參數化我的 YAML 清單的問題,而 Kubernetes 并不能立即使用它。 這是 Helm <sup>[ [1](#_footnotedef_1 "View footnote.") ]</sup> 派上用場的地方。
> Helm 網站上的*:Helm 幫助您管理 Kubernetes 應用程序-Helm Charts 幫助您定義,安裝和升級最復雜的 Kubernetes 應用程序。*
Helm 將自己定位為 Kubernetes 的程序包管理器,但我最初只是將其用于模板功能。 現在,我也開始欣賞它的軟件包管理器方面,并用它來安裝 Grafana <sup>[ [2](#_footnotedef_2 "View footnote.") ]</sup> 和 Prometheus <sup>[ [3](#_footnotedef_3 "View footnote.") ]</sup> 。
經過一番汗水和幾滴眼淚,我們的基礎架構現在被整齊地組織為 1 個 Helm 程序包,17 個部署,9 個 ConfigMap,5 個 PersistentVolumeClaims,5 個秘密,18 個服務,1 個 StatefulSet,2 個 StorageClasses,22 個容器映像。
剩下的就是遷移到這個新的基礎架構并關閉所有硬件服務器。
### 正式遷移
2017 年 10 月 5 日是夜晚。
扣動扳機非常容易,而且順利進行。
我創建了一個新的 GKE 集群,運行`helm install betabrand --name production`,將我們的 MySQL 數據庫導入到 Google Cloud SQL 中,然后,實際上花了大約 2 個小時,我們才生活在 Clouds 中。
遷移很簡單,就是。
當然,最有用的是在 Google GKE 中創建多個集群的能力:在遷移產品之前,我能夠通過多次測試遷移進行排練,記下成功啟動所需的每個步驟。
Betabrand 的黑色星期五 2017 年非常成功,我們遇到的一些技術問題與遷移無關。
### 開發/分期環境
我們的開發機器通過 Minikube <sup>[ [4](#_footnotedef_4 "View footnote.") ]</sup> 運行 Kubernetes 集群。
相同的 YAML 清單用于創建本地開發環境或“類似生產”的環境。
在生產環境中運行的所有內容,也在開發環境中運行。 兩種環境之間的唯一區別是,我們的開發環境與本地 MySQL 數據庫對話,而生產與 Google Cloud SQL 對話。
創建登臺環境與創建新的生產集群完全相同:所需要做的只是克隆生產數據庫實例(只需單擊幾下或一個命令行),然后通過`--set database`將登臺集群指向該數據庫。 `helm`中的]參數。
### 一年后
從我們將基礎架構移至 Kubernetes 至今已經一年零兩個月了,我再也高興不起來了。
Kubernetes 在生產中一直堅如磐石,我們還沒有遇到過停機的情況。
預計 2018 年黑色星期五會有大量流量,我們能夠在幾分鐘內創建生產服務的精確副本并進行大量負載測試。 這些負載測試顯示特定的代碼路徑性能非常差,只能顯示大量流量,并允許我們在黑色星期五之前修復它們。
不出所料,2018 年黑色星期五給 Betabrand.com 帶來了比以往更多的訪問量,但 k8s 兌現了承諾,而 Horizo??ntalPodAutoscaler 等功能與 GKE 的節點自動縮放功能相結合,使我們的網站能夠毫無問題地吸收峰值負載。
K8 與 GKE 相結合,為我們提供了使我們的基礎架構可靠,可用,可伸縮和可維護所需的工具。
* * *
[1](#_footnoteref_1). [https://helm.sh/](https://helm.sh/)[2](#_footnoteref_2). [https://grafana.com/](https://grafana.com/)[3](#_footnoteref_3). [https://prometheus.io/](https://prometheus.io/)[4](#_footnoteref_4). [https://github.com/kubernetes/minikube](https://github.com/kubernetes/minikube)
雨果,好帖子! 真的很脆,沒有花哨/不必要的術語。
我很好奇看到您每月帳單的比較-OVH 裸機與 GCP K8S
I too am curious to see a comparison of your monthly bill - OVH bare-metall vs GCP K8S...??
您認為這對這家公司來說太過分了嗎? 我一直都很喜歡 Kube,不是因為業務需要,而是因為人們喜歡高科技。 IDK,只是想一想
為什么不使用不同的名稱空間進行測試和暫存,而不是創建不同的集群?
- 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 內容平臺的經驗教訓