AWS入門指南之二:泛談AWS的分佈式概念

今天從寬泛的角度談談AWS的分佈式概念。首先,AWS是一個基於分佈式架構構建的雲服務,我想這一點是最清楚最明白,人人皆知不過的了。但是,當我們開始使用AWS以後就會發現分佈式遠不像我們想象中那麼清晰,而是經常會忘記,並且需要時時提醒自己我正在使用的是一個分佈式系統。當我們後面討論一些AWS當中最流行的服務,比如DynamoDB,比如S3,我們會涉及到一個很有趣的概念,叫做consistency。我們會需要深入理解eventually consistency的概念,和使用這樣的服務時需要克服的一些陷阱。而這些問題的出現,都是因爲AWS是一個分佈式的系統。

什麼叫分佈式系統?按照維基百科的定義:

分佈式系統是一種系統,其組件位於不同的聯網計算機上,這些計算機通過相互傳遞消息來通信和協調其動作。[1]這些組件相互交互以實現一個共同的目標。分佈式系統的三個重要特徵是:組件併發,缺少全局時鐘和組件獨立故障。

AWS可以帶給我們很多好的使用特性,可以說都是藉助於分佈式系統完成的。比如,AWS可以動態調整我們要使用的資源。只有在我們使用的資源不夠時纔會分配給我們更多的資源,以達到節省費用的目的。那麼正是因爲AWS的基礎架構是基於多個小的組件完成的,使得AWS提供動態分配資源的功能。還有很多很多特性都是基於分佈式系統帶來的好處,在這裏先不細說。

我們先來從最高層理解一下AWS是怎麼體現出分佈式的。首先,我們應該注意到AWS裏的region的概念。如果我們打開AWS console界面右上角在“support”左邊的region下拉菜單,我們可以看到所有的AWS已經部署了的region。每一個region的信息包括“大地區 (小地區)region名稱”,比如“US East (N. Virginia) us-east-1”,大地區是美國東部,小地區是弗吉尼亞北部,region名稱是us-east-1。當我們使用AWS服務時,第一要選擇的就是region,也就是說我們要使用哪個region裏的該服務。這裏要考慮的問題包括與該服務交互的其他服務會部署在什麼region裏,我們會傾向於將互相通信的服務部署在相同的region,這樣減少他們之間通信的時延。第二要考慮我們要使用哪些服務,因爲有些服務只部署在了某些region裏。第三要考慮AWS服務使用者所在的區域。比如我們使用AWS部署一個web portal,假如我們的目標客戶基本以中國大陸爲主,我們當然應該選擇一個離我們近的region,比如日本,韓國,新加坡等。

再下來的一個概念是Availability Zones,也就是可用區,或者也叫AZ。AWS幾乎所有的服務不會只部署在region的一個區域裏,而是至少部署在region的兩個及以上的區域裏,並且可用區之間要求一定的距離。這樣做的好處明顯是提高了服務面對物理破壞帶來的服務癱瘓的危險,比如地震,網線被破壞,等等。對於某些服務在建立的時候我們會被要求指定要使用那些AZ,us-east-1a,us-east-1b,us-east-1c就是在ue-east-裏的3個AZ。還有相當多的服務是不需要用戶指定AZ的,而是AWS會自動分配AZ,但是肯定是2個或以上。

Region和AZ的關係如下圖所示:

當我們訪問某個服務時,該服務的功能將由所有在該region上的部署了該服務的AZ共同完成。以後在我們談到更具體的AWS服務時,我們再詳細談一些由分佈式帶來的好處和陷阱。今天就先寫到這裏,大家有什麼觀點和問題歡迎留言討論。

關於AWS region和available zone的介紹請參考AWS文檔:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章