摘要:本期大綱隨著從到千萬用戶的業務增長,通過的不同服務輕松地實現高性能和高可用的基礎架構。方坤老師本次的主題比較偏向實踐的基礎部分,假設了一個應用從小型到中型和大型的時候,可能需要用到的服務,以及相關介紹和實踐建議。
極牛技術實踐分享活動
極牛技術實踐分享系列活動是極牛聯合頂級VC、技術專家,為企業、技術人提供的一種系統的線上技術分享活動。
每期不同的技術主題,和行業專家深度探討,專注解決技術實踐難點,推動技術創新,每兩周的周三20點正式開課。歡迎各個機構、企業、行業專家、技術人報名參加。
本期大綱
隨著從0到千萬用戶的業務增長,通過aws的不同服務輕松地實現高性能和高可用的基礎架構。
嘉賓介紹
方坤,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上的服務了。大體架構如下圖:
Route 53是AWS提供的DNS服務,他可以基于延遲、地區等規則來進行路由。但是目前在中國區不可用,您需要用到國內第三方的DNS服務。這是一個最簡單的架構,即使是只有一臺EC2,也是大有文章可做,因為EC2本身的配置非常多樣。
它有不同的機型,比如內存優化型,適用于構建基于內存的數據庫、大數據處理引擎、高性能計算等應用。還有GPU的機型,適用于3D圖形應用等等,包括計算優化和存儲優化機型。
EC2磁盤的IOPS也是可以配置的,如果有對io要求很高的話,可以選擇存儲優化,然后加上PIOPS配置,也就是預定義它的IOPS能力。
但是這樣一個小型的架構,會存在以下問題:
很有可能訪問會突增,那么勢必會扛不住
沒有失效轉移
數據也沒有冗余
所以,可以考慮先將web和DB拆開,DB的部分既可以選擇比較合適的EC2機型自建,也可以選擇AWS托管的數據庫服務。其實關系型數據庫服務為RDS,菲關系行數據庫服務為DynamoDB。
RDS會比較常用,它可以支持oracle,SQL Server、PstgreSQL,MysQL和MariaDB。
好處是維護簡單,因為底層都是AWS在維護。可以縱向更改配置,而且有自動備份。它還會在另一個可用區配置一個同步復制的從庫,一旦主庫失效,就能failover過去,DynamoDB的話后面再詳細介紹。
于是,將DB拆出來后,架構圖就會演變成這樣:
當然,這個架構還是在單個可用區部署的,所以隨著業務的繼續擴展,后面需要考慮到負載均衡和多可用區,我們會建議再演變成下圖:
ELB支持HTTP和HTTPS,而且會對后端做健康檢查,這樣一個原型,擴展性很好了。
可以一直橫向的擴展,當然,最后的瓶頸勢必會出在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的數據存取,總之,架構可以演變成下圖:
簡單起見,這里只顯示了一個可用區關于這兩個服務的更多細節,所以基本上,一個中型的web服務,在AWS上就可以這樣架構:
再之后的優化,就是自動化了,一方面是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來粘合,讓你的應用更輕量級,也不需要考慮其擴展性和可用性,所以當你的應用到達大型之后,就可以考慮如下幾個方法了:
部署多可用區
用ELB負載均衡流量
用auto scaling自動擴展
利用AWS的服務SOA化
利用S3和CDN動靜分離
緩存DB
把應用盡量無狀態化,這一點可以通過SQS、lambda等服務來支持,參考下圖:
最后的話,就要解決DB的瓶頸了。如果您在使用關系行數據庫的話,只有兩個辦法。要么按業務和功能劃分數據庫,這一點AWS能協助的是幫助你方便地搭建讀副本,但是更多的需要您從業務層面來梳理和劃分;要么就是做sharding,這一點來說,AWS RDS也只是能提供底層的支撐,更多的是應用層面的分片。
然而,在NosQL這一部分,AWS的DynamoDB可以提供強大的幫助,所以您需要考慮哪些數據是可以上NoSQL的,這一點的擴展性在AWS上是非常好的支持的。
DynamoDB是一個托管式的NoSQL數據庫,可以提供很高的性能,您可以更具實際的需求來配置讀寫性能。底層支持分布式和容錯,基于SSD的存儲,平均延遲低于10ms。可以提供最終一致性或強一致性。數據的副本基于多可用區分布是部署,您只需要管理你的表和項目,而至于底層的節點,對您來說是透明的。
當然,更重要的是從業務層面來梳理,再來歸納幾個重要的點:
要使用多可用區部署
充分利用能自動擴展的服務,比如ELB,S3,SNS,SQS等等
充分考慮NoSQL的可行性
外部和內部的緩存
盡可能的自動化,充分利用AWS的自動化工具,比如auto scaling、cloudformation等等
確保您充分利用了cloudwatch的監控服務和日志工具
充分利用AWS的服務來進行服務模塊化
別在AWS上重復造輪子
Q&A
Q1:如果業務既面向國內,也面向海外,是使用aws國內版,還是海外版?互通性會不會不同地區用戶的體驗問題?
A1: 首先不可避免的是海內外網絡的穩定性和性能問題,基于國情建議如下考慮:
如果主要的用戶來自國內,您可以部署在國內,然后海外部分通過將靜態內容CDN加速來降低延遲、甚至是使用國際專線,我們也有合作伙伴來支持;反之國際亦然。
還有一個辦法,就是看能否分開部署,這個完全取決于您的業務和應用能否支持了,這個主要還是網絡基礎設施層面的問題。
Q2:從國內現有的云服務,遷移到aws,有什么好的方式不?
A2:其實困難主要就是在于數據庫的遷移。我們有個工具叫DMS,國內尚不可用,將來應該會有。所以一般的方法就是先將全庫拷貝過來,然后再增量復制。因為不同數據庫特性不同,總的來說,就是AWS會幫助大家一起想出最佳的方案。
下期預告
時間:2016年11月23日 晚8點
方式:線上微信群
主題:直播中視頻編碼實踐經驗總結
報名請關注極牛公號(ji-niu)并回復技術分享。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61827.html
摘要:主題大綱淺述采樣與端到端何為何為端到端何為采樣的做法與弊端嘉賓介紹高馳濤,官方開發組成員,作者,云智慧高級架構師。 極牛技術實踐分享活動 極牛技術實踐分享系列活動是極牛聯合頂級VC、技術專家,為企業、技術人提供的一種系統的線上技術分享活動。 每期不同的技術主題,和行業專家深度探討,專注解決技術實踐難點,推動技術創新,每兩周的周三20點正式開課。歡迎各個機構、企業、行業專家、技術人...
摘要:以推出輕舟微服務平臺的網易云為代表,云計算公司正在微服務領域發力,促進企業數字化創新。以網易云輕舟微服務平臺為例,該平臺已經在物流工業和金融等領域得到了深度應用。 所謂數字化轉型升級,就是以數字技術優化傳統資源,企業需要謹慎地選擇合適的技術逐步完成自己的數字化戰略。以推出輕舟微服務平臺的網易云為代表,云計算公司正在微服務領域發力,促進企業數字化創新。那么,微服務對數字化轉型意味著什么?...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術專家我看過哪些技術類書籍。 大家好,我是...
摘要:亞馬遜人工智能語音助手技能超過萬個,全球各主要硬件廠商紛紛搭載或兼容,使得其亞馬遜助手無處不在。物聯網設備透過云端實現跨行業和跨設備互聯互通,所收集數據除了在邊緣側處理,還需要上傳至云端,云端作為數據集散地,各種數據經過云端AI處理后,對這些數據利用將會帶來新的商業模式。在物聯網資深專家楊劍勇看來,云計算是全球物聯網重要基礎設施,作為物聯網產業發展基石,聚集了亞馬遜、微軟、谷歌和BAT等重量...
摘要:包括服務的自動化部署,以及鏈路監控等并未細說提及。結語誠然,整個服務架構可以輕松應對千萬級并發。期望,整個服務架構能伴隨公司繼續成長壯大。 背景介紹 回顧 ShareSDK,顧名思義,分享的SDK組件,公司基于互聯網,早期主要以ShareSDK起家。今日思來,很幸運,能陪著ShareSDK一起成長。 showImg(https://segmentfault.com/img/bV0Wo5...
閱讀 1433·2021-09-03 10:29
閱讀 3457·2019-08-29 16:24
閱讀 2010·2019-08-29 11:03
閱讀 1409·2019-08-26 13:52
閱讀 2924·2019-08-26 11:36
閱讀 2785·2019-08-23 17:19
閱讀 559·2019-08-23 17:14
閱讀 811·2019-08-23 13:59