從零到千萬用戶的雲端(AWS)基礎架構最佳實踐

極牛技術實踐分享活動 css

極牛技術實踐分享系列活動是極牛聯合頂級VC、技術專家,爲企業、技術人提供的一種系統的線上技術分享活動。
每期不一樣的技術主題,和行業專家深度探討,專一解決技術實踐難點,推進技術創新,每兩週的週三20點正式開課。歡迎各個機構、企業、行業專家、技術人報名參加。web

本期大綱
隨着從0到千萬用戶的業務增加,經過aws的不一樣服務輕鬆地實現高性能和高可用的基礎架構。redis

嘉賓介紹
方坤,AWS解決方案架構師,9年服務器開發和雲計算領域解決方案經驗。曾任Intel亞太研發公司軟件開發工程師和UCloud雲計算高級解決方案架構師,熟悉互聯網領域多種應用場景,有豐富的初創企業IT解決方案項目設計經驗。數據庫

方坤老師本次的主題比較偏向AWS實踐的基礎部分,假設了一個web應用從小型到中型和大型的時候,可能須要用到的AWS服務,以及相關介紹和實踐建議。後端

可能有的小夥伴沒太瞭解,因此幾個重要的基礎概念先說明下:緩存

首先是區域(Region),它是一個物理的概念,數據中心的集合,能夠覆蓋一個地區或國家。服務器

好比說北京區,就是覆蓋中國地區,而後區域下面有可用區的概念,一個區域包括多個可用區。而可用區是若干物理數據中心(由高速光纖鏈接)邏輯上組成的,北京區有兩個可用區,通俗來講能夠理解爲同城的多數據中心。微信

可用edge location,邊緣節點能夠理解爲CDN分發節點,今天主要涉及到的服務會是計算、存儲、網絡三個部分。網絡

爲何可用區的概念這麼重要?是由於AWS的不少服務都是自然跨可用區的,提供高可用或失效轉移的特性,這樣企業就不用花費額外的工做量和成原本搭建。最初的時候,測試環境或者剛上線的時候,考慮到便利性,一般能夠採用all-in-one的結構。架構

首先須要在AWS環境中建立一個VPC,VPC就像是爲你提供了一個虛擬的私有云,一張大的二層網絡。再經過咱們的控制檯工具,在裏面劃分的子網,配置路由。而後建立一臺EC2,就能夠SSH登陸上,部署您的服務了,甚至能夠把數據庫也搭建在上面。

配置好IP,綁定到這個EC2上,你的用戶就能經過DNS解析訪問到這臺EC2上的服務了。大致架構以下圖:

clipboard.png

Route 53是AWS提供的DNS服務,他能夠基於延遲、地區等規則來進行路由。可是目前在中國區不可用,您須要用到國內第三方的DNS服務。這是一個最簡單的架構,即便是隻有一臺EC2,也是大有文章可作,由於EC2自己的配置很是多樣。

它有不一樣的機型,好比內存優化型,適用於構建基於內存的數據庫、大數據處理引擎、高性能計算等應用。還有GPU的機型,適用於3D圖形應用等等,包括計算優化和存儲優化機型。

EC2磁盤的IOPS也是能夠配置的,若是有對io要求很高的話,能夠選擇存儲優化,而後加上PIOPS配置,也就是預約義它的IOPS能力。

可是這樣一個小型的架構,會存在如下問題:

  1. 頗有可能訪問會突增,那麼勢必會扛不住

  2. 沒有失效轉移

  3. 數據也沒有冗餘

因此,能夠考慮先將web和DB拆開,DB的部分既能夠選擇比較合適的EC2機型自建,也能夠選擇AWS託管的數據庫服務。其實關係型數據庫服務爲RDS,菲關係行數據庫服務爲DynamoDB。

RDS會比較經常使用,它能夠支持oracle,SQL Server、PstgreSQL,MysQL和MariaDB。

好處是維護簡單,由於底層都是AWS在維護。能夠縱向更改配置,並且有自動備份。它還會在另外一個可用區配置一個同步複製的從庫,一旦主庫失效,就能failover過去,DynamoDB的話後面再詳細介紹。

因而,將DB拆出來後,架構圖就會演變成這樣:

clipboard.png

固然,這個架構仍是在單個可用區部署的,因此隨着業務的繼續擴展,後面須要考慮到負載均衡和多可用區,咱們會建議再演變成下圖:

clipboard.png

ELB支持HTTP和HTTPS,並且會對後端作健康檢查,這樣一個原型,擴展性很好了。

clipboard.png

能夠一直橫向的擴展,固然,最後的瓶頸勢必會出在DB上。這樣的擴展仍是存在一個問題,就是全部的事情都要人手動來作。

AWS提供了一個工具,叫auto scaling。讓企業結合監控規則來自動擴展,比方說,能夠定義web server這一層的最小和最大數量,根據CPU的負載來決定是否要擴容縮容,具體配置方法比較細節,就不在這贅述了。

同時,還要考慮動靜分離,將靜態資源分離出來,好比圖片、css、js、視頻等等,結合源站存儲和CDN來部署,源站可使用S3服務。S3是對象存儲,自動擴容,只須要把你的對象放進來,經過控制檯或者命令行工具或者SDK來讀寫。

海外的話,AWS提供cloudfront服務,也就是CDN加速;國內的話,暫時須要用第三方的CDN服務。

S3的好處是持久性高,有11個9,每一個對象最高達5TB。S3有兩種,除了通用的S3服務外,還能夠選擇低冗餘的類型,用來存儲不是那麼敏感的數據,這樣能夠節省成本,這是靜態的內容緩存。而動態的內容緩存,基本上是用到內存型存儲或者NoSQL。

有個服務叫ElastiCache能夠提供memcache和redis服務,能夠把DB的熱點數據放在這裏面,提供更高的IO性能。ElastiCache也是託管型服務,好處是能夠方便的分片或者構建集羣和副本集,像redis的話能夠支持數據持久化,多個可用區。

緩存也能夠用DynamoDB來替代,它能夠提供延遲低於10ms的數據存取,總之,架構能夠演變成下圖:

clipboard.png

簡單起見,這裏只顯示了一個可用區關於這兩個服務的更多細節,因此基本上,一箇中型的web服務,在AWS上就能夠這樣架構:

clipboard.png

再以後的優化,就是自動化了,一方面是auto scaling這個工具,另外一方面AWS也提供了一些自動化運維的工具。

像ElasticBeanstalk,你能夠把你的應用上傳過來,只須要簡單的配置,這個服務就會幫你配置好網絡、服務器和數據庫;像OpsWorks,它是一個託管型的chef服務;還有Cloudformation,它能夠幫助你把AWS上使用的服務經過一個JSON文件來管理,這樣不管是基礎架構的版本管理仍是自動部署,都會更加方便,一切都代碼化。

另外,監控方面,須要用到CloudWatch服務,它不只基本的基礎架構監控,也可讓你自定義應用級別的監控。後者須要用到咱們的代理agent。而後,AWS也有工具和服務能夠幫助你把架構SOA化,把服務當作獨立的單元對待,獨立地進行擴展,好比郵件服務,消息通知服務,消息隊列服務等等。

那消息隊列服務來講,AWS提供的SQS服務,能夠幫助架構解耦合,經過簡單的API來首發消息,消息存儲在無限制容量的SQS裏,而後能夠對隊列作認證和權限控制,並且這個消息隊列也是基於多個可用區存儲的,因此也提供高可用。

固然,出於性能的高可用考慮,它沒法百分百保證先進先出,因此只須要在應用裏面加入對順序對的控制便可。

還有一個lamdba服務,它是一個函數的託管服務,您能夠把基於事件觸發的函數託管過來,不須要關心底層的擴展,好比說你有一個用戶在S3上傳了圖片,能夠觸發Lambda的函數來處理,並將經過SQS隊列來把任務發給EC2,處理完後又觸發Lambda函數把該圖片的元數據保存到數據庫裏。

在各個AWS服務之間,都經過Lambda來粘合,讓你的應用更輕量級,也不須要考慮其擴展性和可用性,因此當你的應用到達大型以後,就能夠考慮以下幾個方法了:

  1. 部署多可用區

  2. 用ELB負載均衡流量

  3. 用auto scaling自動擴展

  4. 利用AWS的服務SOA化

  5. 利用S3和CDN動靜分離

  6. 緩存DB

  7. 把應用盡可能無狀態化,這一點能夠經過SQS、lambda等服務來支持,參考下圖:

clipboard.png

最後的話,就要解決DB的瓶頸了。若是您在使用關係行數據庫的話,只有兩個辦法。要麼按業務和功能劃分數據庫,這一點AWS能協助的是幫助你方便地搭建讀副本,可是更多的須要您從業務層面來梳理和劃分;要麼就是作sharding,這一點來講,AWS RDS也只是能提供底層的支撐,更多的是應用層面的分片。

然而,在NosQL這一部分,AWS的DynamoDB能夠提供強大的幫助,因此您須要考慮哪些數據是能夠上NoSQL的,這一點的擴展性在AWS上是很是好的支持的。

DynamoDB是一個託管式的NoSQL數據庫,能夠提供很高的性能,您能夠更具實際的需求來配置讀寫性能。底層支持分佈式和容錯,基於SSD的存儲,平均延遲低於10ms。能夠提供最終一致性或強一致性。數據的副本基於多可用區分佈是部署,您只須要管理你的表和項目,而至於底層的節點,對您來講是透明的。

固然,更重要的是從業務層面來梳理,再來概括幾個重要的點:

  1. 要使用多可用區部署

  2. 充分利用能自動擴展的服務,好比ELB,S3,SNS,SQS等等

  3. 充分考慮NoSQL的可行性

  4. 外部和內部的緩存

  5. 儘量的自動化,充分利用AWS的自動化工具,好比auto scaling、cloudformation等等

  6. 確保您充分利用了cloudwatch的監控服務和日誌工具

  7. 充分利用AWS的服務來進行服務模塊化

  8. 別在AWS上重複造輪子

Q&A

Q1:若是業務既面向國內,也面向海外,是使用aws國內版,仍是海外版?互通性會不會不一樣地區用戶的體驗問題?

A1: 首先不可避免的是海內外網絡的穩定性和性能問題,基於國情建議以下考慮:

若是主要的用戶來自國內,您能夠部署在國內,而後海外部分經過將靜態內容CDN加速來下降延遲、甚至是使用國際專線,咱們也有合做夥伴來支持;反之國際亦然。

還有一個辦法,就是看可否分開部署,這個徹底取決於您的業務和應用可否支持了,這個主要仍是網絡基礎設施層面的問題。

Q2:從國內現有的雲服務,遷移到aws,有什麼好的方式不?

A2:其實困難主要就是在於數據庫的遷移。咱們有個工具叫DMS,國內尚不可用,未來應該會有。因此通常的方法就是先將全庫拷貝過來,而後再增量複製。由於不一樣數據庫特性不一樣,總的來講,就是AWS會幫助你們一塊兒想出最佳的方案。

下期預告
時間:2016年11月23日 晚8點
方式:線上微信羣
主題:直播中視頻編碼實踐經驗總結

報名請關注極牛公號(ji-niu)並回復技術分享。

相關文章
相關標籤/搜索