# 在 Amazon AWS 上擴展至 1100 萬以上用戶的入門指南
> 原文: [http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html](http://highscalability.com/blog/2016/1/11/a-beginners-guide-to-scaling-to-11-million-users-on-amazons.html)

您如何將系統從一個用戶擴展到超過 1100 萬用戶? [Joel Williams](https://www.linkedin.com/in/joel-williams-70257b7) ,亞馬遜網絡服務解決方案架構師,就該主題發表了精彩的演講: [AWS re:Invent 2015 擴展到您的前 1000 萬用戶](https://www.youtube.com/watch?v=vg5onp8TU6Q&list=PLhr1KZpdzukdRxs_pGJm-qSy5LayL6W_Y)。
如果您是 AWS 的高級用戶,那么本演講不適合您,但是如果您是 AWS 的新手,云的新手或的入門者,那么這是上手的好方法 不斷涌現的新功能 Amazon 不斷涌現。
正如您可能期望的那樣,由于這是 Amazon 的一次講話,因此 Amazon 服務始終是解決任何問題的中心。 他們的平臺表現令人印象深刻且具有啟發性。 通過將各個部分組合在一起,很明顯,亞馬遜在確定用戶需求并確保他們擁有該領域的產品方面做得非常出色。
一些有趣的外賣:
* 從 SQL 開始,僅在必要時移至 NoSQL。
* 一致的主題是將組件分離出來。 這使這些組件可以獨立擴展和失敗。 它適用于拆分層并創建微服務。
* 僅投資于使您的企業與眾不同的任務,不要重蹈覆轍。
* 可伸縮性和冗余不是兩個獨立的概念,您通常可以同時進行。
* 沒有提及費用。 這將是演講的一個很好的補充,因為這是對 AWS 解決方案的主要批評之一。
## 基礎知識
* AWS 在全球 12 個地區中。
* 區域是世界上亞馬遜具有多個可用區的物理位置。 中有 [地區:北美; 南美洲; 歐洲; 中東; 非洲; 亞太地區。](https://aws.amazon.com/about-aws/global-infrastructure/)
* 可用區(AZ)通常是單個數據中心,盡管它們可以由多個數據中心構成。
* 每個可用區都足夠獨立,因此它們具有獨立的電源和 Internet 連接。
* 可用區之間的唯一連接是低延遲網絡。 例如,可用區可以相隔 5 或 15 英里。 網絡足夠快,您的應用程序就可以像所有可用區都在同一個數據中心中一樣工作。
* 每個區域至少有兩個可用區。 共有 32 個可用區。
* 使用可用區可以為您的應用程序創建高可用性架構。
* 2016 年將至少有 9 個可用區和 4 個地區。
* AWS 在全球擁有 53 個邊緣位置。
* 邊緣位置由 Amazon 的內容分發網絡(CDN)CloudFront 和 Amazon 的托管 DNS 服務器 Route53 使用。
* 邊緣位置使用戶無論身在何處都可以以極低的延遲訪問內容。
* 構建基塊服務
* AWS 創建了許多服務,這些服務在內部使用多個可用區來實現高可用性和容錯能力。 [是其中](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) [提供哪些服務的列表](http://docs.aws.amazon.com/general/latest/gr/rande.html) ,其中 可用。
* 您可以付費在應用程序中使用這些服務,而不必擔心使它們自己高度可用。
* 可用區內存在的一些服務:CloudFront,Route 53,S3,DynamoDB,彈性負載平衡,EFS,Lambda,SQS,SNS,SES,SWF。
* 即使服務位于單個 AZ 中,也可以使用服務創建高可用的體系結構。
## 1 個用戶
* 在這種情況下,您是唯一的用戶,并且您要運行一個網站。
* 您的架構將類似于:
* 在單個實例上運行,可能是 [t2.micro](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html) 類型。 實例類型包括 CPU,內存,存儲和網絡容量的各種組合,使您可以靈活地為應用程序選擇適當的資源組合。
* 一個實例將運行整個 [Web 堆棧]( http://whatis.techtarget.com/definition/Web-stack) ,例如:Web 應用程序,數據庫,管理等。
* 將 Amazon [路由 53](https://aws.amazon.com/route53/) 用作 DNS。
* 將單個 [彈性 IP](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) 地址附加到實例。
* 運作良好,持續了一段時間。
## 垂直縮放
* 您需要一個更大的盒子。 最簡單的擴展方法是選擇更大的實例類型。 例如,也許 [c4.8xlarge](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/c4-instances.html) 或 [m3.2xlarge](https://aws.amazon.com/ec2/instance-types/) 。
* 這種方法稱為 [垂直縮放](https://en.wikipedia.org/wiki/Scalability) 。
* 只需停止實例并選擇一種新的實例類型,您就可以以更高的功率運行。
* 有多種不同的硬件配置可供選擇。 您可以擁有一個帶有 244 GB RAM 的系統(即將推出 2TB RAM 類型)。 或一個 40 核。 有高 I / O 實例,高 CPU 實例,高存儲實例。
* 某些 Amazon 服務隨附 [預置 IOPS](http://serverfault.com/questions/580568/amazon-how-do-i-know-if-i-need-provisioned-iops) 選項,以確保性能。 這個想法是,您也許可以為服務使用較小的實例類型,并利用 DynamoDB 之類的 Amazon 服務來提供可擴展的服務,因此您不必這樣做。
* 垂直擴展存在一個大問題:沒有故障轉移,也沒有冗余。 如果實例出現問題,則您的網站將死亡。 你所有的雞蛋都放在一個籃子里。
* 最終,單個實例只能變得如此之大。 您需要做其他事情。
## 用戶> 10
* 將單個 主機分離為多個主機
* 該網站的主機。
* 數據庫的一臺主機。 運行所需的任何數據庫,但是您需要進行數據庫管理。
* 使用單獨的主機可以使網站和數據庫彼此獨立地擴展。 例如,也許您的數據庫將需要比網站更大的計算機。
* 或者,也可以使用數據庫服務代替運行自己的數據庫。
* 您是數據庫管理員嗎? 您真的要擔心備份嗎? 高可用性? 補丁? 操作系統?
* 使用服務的一大優勢在于,您只需單擊即可設置多個可用區數據庫。 您無需擔心復制或任何此類事情。 您的數據庫將高度可用且可靠。
* 您可能會想像到亞馬遜有幾項完全托??管的數據庫服務可以賣給您:
* [Amazon RDS](https://aws.amazon.com/rds/) (關系數據庫服務)。 有很多選項:Microsoft SQL Server,Oracle,MySQL,PostgreSQL,MariaDB,Amazon Aurora。
* [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 。 NoSQL 管理的數據庫。
* [Amazon Redshift](https://aws.amazon.com/redshift/) 。 PB 級數據倉庫系統。
* 更多 [Amazon Aurora](https://aws.amazon.com/rds/aurora/) :
* 自動存儲擴展到 64TB。 您不再需要為數據配置存儲。
* 最多 15 個讀只讀副本
* 連續(增量)備份到 S3。
* 跨 3 個 AZ 進行 6 向復制。 這可以幫助您處理故障。
* MySQL 兼容。
* 從 SQL 數據庫而不是 NoSQL 數據庫開始。
* 建議從 SQL 數據庫開始。
* 該技術已建立。
* 有很多現有的代碼,社區,支持小組,書籍和工具。
* 您不會破壞前 1000 萬用戶的 SQL 數據庫。 差遠了。 (除非您的數據很大)。
* 清晰的模式可擴展。
* 您何時需要從 NoSQL 數據庫開始?
* 如果您需要在第一年存儲 5 TB 的>數據,或者您的數據處理工作量非常大。
* 您的應用程序具有超低延遲要求。
* 您需要非常高的吞吐量。 您需要真正調整在讀取和寫入中都得到的 IO。
* 您沒有任何關系數據。
## 用戶> 100
* 將 單獨的主機用于 Web 層 。
* 將 數據庫存儲在 Amazon RDS 上。 它照顧一切。
* 這就是您要做的。
## 用戶> 1000
* 按照架構,您的應用程序存在可用性問題。 如果您的 Web 服務主機出現故障,則您的網站將關閉。
* 因此,您 在另一個可用區 中需要另一個 Web 實例。 可以,因為 AZ 之間的等待時間只有幾位毫秒,幾乎就像它們彼此相鄰一樣。
* 您還需要一個 從屬數據庫到在另一個 AZ 中運行的 RDS 。 如果主服務器有問題,您的應用程序將自動切換到從屬服務器。 故障轉移無需對應用程序進行任何更改,因為您的應用程序始終使用相同的端點。
* 彈性負載均衡器(ELB)已添加到配置中,以在兩個可用區中的兩個 Web 主機實例之間負載均衡用戶。
* 彈性負載平衡器(ELB):
* ELB 是高度可用的托管負載均衡器。 ELB 存在于所有可用區中。 它是您的應用程序的單個 DNS 終結點。 只需將其放在 Route 53 中,它將在您的 Web 主機實例之間實現負載平衡。
* ELB 具有運行狀況檢查,以確保流量不會流向發生故障的主機。
* 無需任何操作即可縮放。 如果看到額外的流量,它將在水平和垂直方向上擴展到幕后。 您不必管理它。 隨著應用程序規模的擴展,ELB 也隨之擴展。
## 用戶> 10,000s-100,000s
* 先前的配置在 ELB 后面有 2 個實例,實際上,您可以在 ELB 后面有 1000 個實例。 這是 [水平縮放](https://en.wikipedia.org/wiki/Scalability) 。
* 您需要向數據庫和 RDS 添加更多只讀副本。 這將減輕寫主機的負擔。
* 通過將 通過將一些流量轉移到其他地方來減輕 Web 層 服務器的負載,從而考慮性能和效率。 將 Web 應用程序中的靜態內容移動到 Amazon S3 和 Amazon CloudFront。 CloudFront 是 Amazon 的 CDN,可將您的數據存儲在全球 53 個邊緣位置。
* Amazon S3 是對象庫。
* 它與 EBS 不同,它不是連接到 EC2 實例的存儲,而是對象存儲,而不是塊存儲。
* 這是存儲靜態內容(如 javascript,css,圖像,視頻)的好地方。 此類內容無需位于 EC2 實例上。
* 高度耐用,可靠性 11 9。
* 無限擴展,可根據需要拋出盡可能多的數據。 客戶在 S3 中存儲多個 PB 的數據。
* 支持最大 5TB 的對象。
* 支持加密。 您可以使用 Amazon 的加密,您的加密或加密服務。
* Amazon CloudFront 緩存了您的內容。
* 它在邊緣位置緩存內容,以為用戶提供盡可能低的延遲訪問。
* 如果沒有 CDN,您的用戶將遇到對您的內容的更高延遲訪問。 您的服務器在提供內容以及處理 Web 請求時也將承受更高的負載。
* 一位客戶需要以 60 Gbps 的速度提供內容。 網絡層甚至都不知道這是怎么回事,CloudFront 處理了所有事情。
* 您還可以通過將會話狀態移出 Web 層來減輕負載。
* 將會話狀態存儲在 [ElastiCache](https://aws.amazon.com/elasticache/) 或 DynamoDB 中。
* 這種方法還可以設置系統以支持將來的自動縮放。
* 您還可以通過將數據從數據庫緩存到 ElastiCache 中來減輕負載。
* 您的數據庫不需要處理所有數據獲取。 緩存可以處理很多工作,而數據庫則可以處理更重要的流量。
* Amazon DynamoDB-托管的 NoSQL 數據庫
* 您可以配置所需的吞吐量。 您可以提高要支付的讀寫性能。
* 支持快速,可預測的性能。
* 完全分布式且具有容錯能力。 它存在于多個可用區中。
* 這是一個鍵值存儲。 支持 JSON。
* 支持最大 400KB 的文檔。
* Amazon Elasticache-托管的 Memcached 或 Redis
* 管理內存緩存集群并不能為您帶來更多收益,因此讓 Amazon 為您做到這一點。 那就是球場。
* 將自動為您縮放群集。 這是一種自我修復的基礎架構,如果節點發生故障,則會自動啟動新節點。
* 您還可以通過將動態內容轉移到 CloudFront 來減輕負載。
* 許多人都知道 CloudFront 可以處理靜態內容(例如文件),但也可以處理一些動態內容。 談話中沒有進一步討論該主題,但這里的 [鏈接](https://aws.amazon.com/cloudfront/dynamic-content/) 。
## [自動縮放](https://aws.amazon.com/autoscaling/)
* 如果您提供足夠的容量來始終處理高峰流量,例如黑色星期五,那是在浪費錢。 將計算能力與需求匹配起來會更好。 這就是 Auto Scaling 的工作,即自動調整計算群集的大小。
* 您可以定義池的最小和最大大小。 作為用戶,您可以確定集群中最少的實例數和最多的實例數。
* [CloudWatch](https://aws.amazon.com/cloudwatch/) 是一項管理服務,已嵌入到所有應用程序中。
* CloudWatch 事件驅動擴展。
* 您要擴展 CPU 使用率嗎? 您要擴展延遲嗎? 在網絡流量上?
* 您也可以將自己的自定義指標推送到 CloudWatch。 如果要按特定的應用程序擴展,可以將該指標推送到 CloudWatch,然后告訴 Auto Scaling 您要按該指標擴展。
## 用戶> 500,000+
* 從先前配置中添加的是 [自動縮放組](http://docs.aws.amazon.com/gettingstarted/latest/wah/getting-started-create-as.html) 已添加到 Web 層 。 自動縮放組包括兩個 AZ,但可以擴展到 3 個 AZ,最多可以位于同一區域。 實例可以在多個可用區中彈出,不僅是為了實現可伸縮性,還在于可用性。
* 該示例在每個可用區中都有 3 個 Web 層實例,但可能是數千個實例。 您可以說您要最少 10 個實例,最多 1000 個實例。
* ElastiCache 用于卸載數據庫中的流行讀取。
* DynamoDB 用于卸載會話數據。
* 您需要添加監視,指標和日志記錄。
* 主機級別指標。 查看自動擴展組中的單個 CPU 實例,找出問題所在。
* 聚合級別指標。 查看 Elastic Load Balancer 上的指標,以了解整個實例集的性能。
* 日志分析。 查看應用程序使用 [CloudWatch](https://aws.amazon.com/about-aws/whats-new/2014/07/10/introducing-amazon-cloudwatch-logs/) 日志告訴您什么。 [CloudTrail](https://aws.amazon.com/cloudtrail/) 可幫助您分析和管理日志。
* 外部站點性能。 了解您的客戶看到的最終用戶。 使用新遺物或 Pingdom 之類的服務。
* 您需要知道客戶在說什么。 他們的延遲不好嗎? 他們轉到您的網頁時會收到錯誤消息嗎?
* 盡可能從配置中壓縮性能。 Auto Scaling 可以提供幫助。 您不希望 CPU 使用率達到 20%的系統。
## 自動化
* 基礎架構越來越大,可以擴展到數千個實例。 我們已經閱讀過副本,可以水平縮放,但是我們需要一些自動化來幫助管理所有內容,我們不想管理每個實例。
* 自動化工具具有層次結構。
* 自己做 :Amazon EC2,AWS CloudFormation。
* 更高級別的服務 :AWS Elastic Beanstalk,AWS OpsWorks
* [AWS Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) :自動管理應用程序的基礎架構。 這很方便,但沒有太多控制權。
* [AWS OpsWorks](https://aws.amazon.com/opsworks/) :一個在其中分層構建應用程序的環境,您可以使用 Chef 食譜來管理應用程序的層。
* 還使您能夠進行持續集成和部署。
* [AWS CloudFormation](https://aws.amazon.com/cloudformation/) :使用時間最長。
* 提供了最大的靈活性,因為它提供了堆棧的模板化視圖。 它可以用于構建整個堆棧或僅堆棧的組件。
* 如果要更新堆棧,請更新 Cloud Formation 模板,它將僅更新應用程序的這一部分。
* 有很多控制權,但不太方便。
* [AWS CodeDeploy](https://aws.amazon.com/codedeploy/) :將代碼部署到一組 EC2 實例。
* 可以部署到一個或數千個實例。
* 代碼部署可以指向自動擴展配置,因此代碼可以部署到一組實例。
* 也可以與 Chef 和 Puppet 結合使用。
## 解耦基礎架構
* 使用 [SOA](https://en.wikipedia.org/wiki/Service-oriented_architecture) / [微服務](http://techblog.netflix.com/2015/02/a-microscope-on-microservices.html) 。 從您的層中取出組件并將它們分開。 創建單獨的服務 ,就像將 Web 層與數據庫層分開一樣。
* 然后可以獨立擴展各個服務。 這為擴展和高可用性提供了很大的靈活性。
* SOA 是 Amazon 構建的架構的關鍵組成部分。
* 松耦合使您自由。
* 您可以分別縮放組件和使組件失敗。
* 如果工作程序節點無法從 SQS 提取工作,這有關系嗎? 不,只是開始另一個。 事情將會失敗,讓我們建立一個處理失敗的架構。
* 將所有內容設計為黑匣子。
* 解耦交互。
* 支持具有內置冗余和可伸縮性的服務,而不是自己構建。
## 不要重新發明輪子
* 僅投資于使您的業務與眾不同的任務。
* 亞馬遜擁有許多固有的容錯服務,因為它們跨越多個可用區。 例如:排隊,電子郵件,代碼轉換,搜索,數據庫,監視,指標,日志記錄,計算。 您不必自己構建這些。
* [SQS](https://aws.amazon.com/sqs/) :排隊服務。
* 提供的第一個 Amazon 服務。
* 它跨越多個可用區,因此具有容錯能力。
* 它具有可擴展性,安全性和簡單性。
* 排隊可以通過幫助您在基礎結構的不同組件之間傳遞消息來幫助您的基礎結構。
* 以 Photo CMS 為例。 收集照片并對其進行處理的系統應該是兩個不同的系統。 他們應該能夠獨立擴展。 它們應該松耦合。 攝取照片并將其放入隊列中,工作人員可以將照片從隊列中拉出并對其進行處理。
* [AWS Lambda](https://aws.amazon.com/lambda/) :您可以在不配置或管理服務器的情況下運行代碼。
* 出色的工具,可讓您解耦應用程序。
* 在 Photo CMS 示例中,Lambda 可以響應 S3 事件,因此,當添加 S3 文件時,將自動觸發要處理的 Lambda 函數。
* 我們已經取消了 EC2。 它可以為您進行擴展,并且無需管理任何操作系統。
## 用戶> 1,000,000+
* 要達到一百萬個以上的用戶,則需要滿足以上所有條件:
* 多可用區
* 層之間的彈性負載平衡。 不僅在 Web 層上,而且在應用程序層,數據層和您擁有的任何其他層上。
* 自動縮放
* 面向服務的體系結構
* 使用 S3 和 CloudFront 巧妙地服務內容
* 將緩存放在數據庫前面
* 將狀態移出 Web 層。
* 使用 [Amazon SES](https://aws.amazon.com/ses/) 發送電子郵件。
* 使用 CloudWatch 進行監視。
## 用戶> 10,000,000+
* 隨著規模的擴大,我們會遇到數據層的問題。 與 [寫入主機](https://en.wikipedia.org/wiki/Multi-master_replication) 爭用時,您的數據庫可能會遇到問題。 。
* 您如何解決?
* 聯盟
* 分片
* 將某些功能移至其他類型的數據庫(NoSQL,圖形等)
* 聯合身份驗證-基于功能分為多個 DB
* 例如,創建一個論壇數據庫,一個用戶數據庫,一個產品數據庫。 您以前可能將它們放在單個數據庫中,現在將它們分發出去。
* 不同的數據庫可以彼此獨立地擴展。
* 缺點:您無法進行跨數據庫查詢; 這會延遲進入下一個分片策略。
* 分片-在多個主機之間拆分一個數據集
* 在應用層更加復雜,但是對可伸縮性沒有實際限制。
* 例如,在用戶數據庫中,用戶的?可能會發送到一個分片,最后三分之一發送到另一個分片,另一個分片發送到另外三分之一。
* 將某些功能移至其他類型的數據庫
* 開始考慮 NoSQL 數據庫。
* 如果您的數據不需要排行榜,例如排行榜,快速獲取點擊流/日志數據,臨時數據,熱點表,元數據/查找表,則可以考慮將其移至 NoSQL 數據庫。
* 這意味著它們可以彼此獨立縮放。
## 用戶> 1100 萬
* 縮放是一個迭代過程。 隨著您變得更大,總會有更多您可以做。
* 微調您的應用程序。
* 更多 SOA 的功能/特性。
* 從多可用區轉到多區域。
* 開始構建自定義解決方案,以解決您以前從未有人做過的特定問題。 如果您需要為十億客戶提供服務,則可能需要定制解決方案。
* 深入分析整個堆棧。
## 審核中
* 使用多可用區基礎結構來提高可靠性。
* 利用自擴展服務,例如 ELB,S3,SQS,SNS,DynamoDB 等。
* 在每個級別構建冗余。 可伸縮性和冗余不是兩個獨立的概念,您通常可以同時進行。
* 從傳統的關系 SQL 數據庫開始。
* 在基礎結構內部和外部緩存數據。
* 在基礎架構中使用自動化工具。
* 確保您具有良好的指標/監視/日志記錄。 確保您正在查找客戶對應用程序的體驗。
* 將層劃分為單獨的服務(SOA),以便它們可以彼此獨立地擴展和失敗。
* 準備使用自動縮放功能。
* 除非絕對必要,否則不要重新發明輪子,而是使用托管服務而不是自己編寫代碼。
* 如果可行,請轉移到 NoSQL。
## 延伸閱讀
* [在 HackerNews](https://news.ycombinator.com/item?id=10885727) 上/ [在 Reddit](https://www.reddit.com/r/sysadmin/comments/40hon7/a_beginners_guide_to_scaling_to_11_million_users/) 上
* [http://aws.amazon.com/documentation](http://aws.amazon.com/documentation/)
* [http://aws.amazon.com/architecture](http://aws.amazon.com/architecture/)
* [http://aws.amazon.com/start-ups](http://aws.amazon.com/start-ups)
* [http://aws.amazon.com/free](http://aws.amazon.com/free)
* 從 2007 年開始: [Amazon Architecture](http://highscalability.com/blog/2007/9/18/amazon-architecture.html)
不錯的文章。 請更正用于啟動的鏈接。 (對 http://aws.amazon.comstart-ups 的開放應該是 http://aws.amazon.com/start-ups/)
即使對于可伸縮性專業人員來說,這也是一篇出色的,易于上手的文章。 做得好
此設置每月將耗費瘋狂的$。 AWS 是一種將 VC 美元間接注入亞馬遜銀行賬戶的好方法。
如果人們實際上對 TCO / ROI 持認真態度,那么人們就必須停止對價格過高的 VM 的炒作,而回到裸機解決方案。
這是非常依賴于應用程序的,但是對于每個級別的用戶,可以期望每秒鐘的事務/請求范圍是多少?
@帕特里克
是的,但是沒有。
正是在這個主題上,我們進行了荒謬的成本分析。 實際上,在我們系統運營的每個領域中,AWS 都能為我們節省大量資金。 某些 AWS 服務的成本僅為內部成本的 1/3。
每當您看到整個世界都朝著某種趨勢發展時,尤其是當該“世界”主要由聰明人和百萬富翁(他們真的很喜歡保留/賺錢)組成時,您應該假設其可能不僅僅是“炒作”或 “時尚”。
五年前的數字有所不同,但是自那時以來,AWS 已將價格降低了一半或更多。 除非您的計算器壞了,否則我將很難得出任何其他結論。
我的經驗主要是在 AWS ..上,但是 Google 的云的價格相當,并且我認為其他 IaS 和 PaS 提供商的價格差異可以忽略不計。
所以,我的建議是:仔細看..然后跳上馬車或開始計劃退休
AWS CloudFormation 的問題一直是大型 JSON 腳本的笨拙-沒有一致的添加注釋的方式,笨拙的模塊化故事以及沒有向后引用。
通過使用 yaml 編寫模板,然后使用 [YAML Stratus](https://github.com/kikinteractive/yaml-stratus) 轉換為所需的 JSON,我們一直在解決此問題。 Yaml 支持注釋,向后引用,并且 yaml stratus 添加 yaml 擴展以包括其他具有覆蓋的 yaml 腳本以及編譯時參數化。
@盧克·查弗斯
是的,但是你錯了。
AWS 總是比裸機中的裸機貴,大約是 10 到 100 倍。 部署這樣的復雜設置(更糟糕的是,大多數應用程序永遠都不需要)時,情況更糟。
Modern 的速度非常快,基本的中型服務器每天可以支持數百萬個請求,而將高可用性加倍則很便宜。 即使在云中,除非您確實需要,最好還是堅持使用基本 VM 而不是所有托管服務。
從您的評論來看,好像是您的計算器壞了,或者您只是在為 AWS 工作。
我有點不同意 RDS 觀點。 如果您甚至具有基本的 db-administraton 技能,請不要使用 RDS。AmazonsRDS 對數據庫使用 EBS 驅動器的速度非常非常慢。一種更好的方法是將實例存儲 SSD 驅動器用于您不需要的臨時存儲物 需要持久化(tempdb,事務日志(如果您知道自己在做什么以及如何在沒有日志的情況下還原數據庫)等)。
除了我的這個小小的評論-很棒的帖子,謝謝
你好
我已經將 RDS 用于我的應用程序之一,該應用程序處理數百萬個實時社交媒體數據。 通過所有優化,我們可以在中等亞馬遜實例中使用 mysql mysql 來處理 1 或 2 周的數據。 隨著數據量的增長,RDS 是我們關系數據庫設計的幫助。
事實是,與普通解決方案相比,這是非常昂貴的,但是當您必須處理潛在的大量數據時,則值得花費。
哈哈@ colo。 當然,如果您喜歡停機和昂貴的帶寬費用,請選擇合適的顏色!
嘿@Alex:這個[1]說 Amazon RDS 是否支持 SSD?
[1] http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html
真正使我擔心的是在 AWS 上進行擴展,這就是為什么喜歡 Cloudways 的原因,因為他們可以按比例縮放服務器規模。
非常不錯的文章,但我會緩和一個事實,那就是我們應該從 SQL DB 開始,然后將可能的方式切換到 No-SQL。 從 SQL 轉換為 No-SQL 可能會非常痛苦(模型轉換,業務代碼重寫,數據遷移等),而且風險很大,您永遠也不會做。
因此,我建議您采取以下措施:如果您懷疑您的應用程序將支持超過 10 萬個用戶(并且您的業務肯定是與 No-SQL 兼容的),請直接使用 No-SQL 數據庫。 您將能夠輕松進行分片,使用 No-SQL 進行開發并不昂貴,并且您的應用程序可以自然擴展,而無需重新定義體系結構。
讓·馬克
關于裸機顏色的問題是,您需要考慮所有“成本”。 大多數決定采用裸機的人都嚴重低估了所需的時間和精力,其中最少的是硬件(但是,假設您使用的是專業質量的服務器硬件,而不是垃圾郵件,那么硬件仍然比您想象的要昂貴得多)。 您當地的回收場)。 特別是,您將需要一個實施團隊來進行初始部署,然后*至少*由一名工作人員負責,只負責服務器的維護和維護以及最重要的虛擬化基礎架構,每年的費用為 15 萬美元以上 僅針對一個人-假設您可以和一個人一起停下來。 然后是數據中心不同區域的機架之間的光纖互連成本(數據中心通常具有電源和網絡區域-機架位于不同的 UPS 和路由器上,但??是如果您想在兩個前哨站之間實現 10 GB 的快速互連, 您必須為此支付$$)。 當然,硬件本身的成本-用于互連數據庫服務器和計算服務器的 10 吉比特交換機,所需的 10 吉比特卡,以及專業質量好的服務器和企業級 SSD 的價格并不便宜。 我已經為自己的業務工作了一個交叉點,這種交叉點在內部而不是通過亞馬遜來進行比較便宜,盡管該交叉點的用戶數遠遠少于 1000 萬,但肯定比我們現在花費的更多 在 AWS 服務上。
關于 NoSQL,最好將其用于大量非結構化數據,例如日志數據(例如 ElasticSearch),但是現代 SQL 數據庫的 ACID 保證在許多方面都非常重要。 與將 SQL 數據庫簡單地優化和擴展到所需的位置相比,嘗試將它們橫向入侵 NoSQL 數據庫通常會花費更多的時間。 Twitter 使用 MySQL 處理 1.5 億活躍用戶。 已為您的時間表授予 Redis 緩存和一些自定義復制代碼,但仍然:MySQL。
這是一個很棒的帖子! 我認為在某些時候提高網站效率可能比服務器規模更有效。 例如,有人說通過使用微緩存和 nginx,他們每天可以在微型 VPS 服務器上處理數百萬的網頁瀏覽。
但是話又說回來,我從來沒有承受過太大的服務器負載,所以我知道什么。
非常有用的信息,請不斷更新我們,.....
謝謝。 我是這個領域的初學者。 由于 AWS 昂貴,因此我使用 Linode VPS 進行托管。 這將非常有助于我在上下文中使用。 但是,如果您有關于該/其他廉價服務的經驗,請與我們分享,因為 Linode 沒有 AWS 提供的一些自動化服務。
人們沒有解決一些問題,亞馬遜可能會更昂貴,但是每當懷疑/涉及欺詐時,他們的確會聽取買賣雙方的意見,而 ebay 不會這樣做。
超級清晰,寫得很好。 謝謝
- 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 內容平臺的經驗教訓