最近參加了一次AWS 架構師的面試,吐槽一下整個面試時間相當的長,幾乎經歷了半年左右,但是我也是抱著學習偉大的AWS雲產品的態度所以在整個過程中學到不少的雲產品的功能、設計等知識,所以說還是相當有益處的。前面的幾關解答客戶需求筆試還是相當順利,雖然最後在視頻面試會議中對可用區的概念上是被認為是不瞭解 ...
最近參加了一次AWS 架構師的面試,吐槽一下整個面試時間相當的長,幾乎經歷了半年左右,但是我也是抱著學習偉大的AWS雲產品的態度所以在整個過程中學到不少的雲產品的功能、設計等知識,所以說還是相當有益處的。
前面的幾關解答客戶需求筆試還是相當順利,雖然最後在視頻面試會議中對可用區的概念上是被認為是不瞭解,終止面試,但是最起碼對整個AWS雲產品,包括在實際應用中如何為客戶選擇有了一定的認識。
言歸正傳記錄一下麵試的內容和思路
面試內容引用原文:
BRIEF
Imagine that you meet with a small startup company in the early stages of their
operations. Currently their architecture uses a LAMP stack with MySQL, Apache and PHP all running on one desktop PC within their small office. Like many small start-ups they are confident that they will be the next big thing and expect significant, rapid, yet un-quantified growth in the next few months. With this in mind, they are concerned about:
scaling to meet the demand, but with uncertainty around when and how much this
demand will be they are very concerned about buying too much infrastructure too
soon or not enough too late!
their lack of provision for Disaster Recovery
their ability to configure their database and data access layer for high performance and throughput
making the user experience in the browser very low latency even though a large
portion of their user base will be from far away
effective distribution of load
a self-healing infrastructure that recovers from failed service instances
security of data at rest and in transit
securing access to the environment as the delivery team expands
an archival strategy for inactive objects greater than 6 months
ability to easily manage and replicate multiple environments based on their blueprint architecture
OBJECTIVE
Recommend a manageable, secure, scalable, high performance, efficient, elastic, highly available, fault tolerant and recoverable architecture that allows the startup to organically grow. The architecture should specifically address the requirements/concerns as described above.
DELIVERABLES
(1) A well written document in PDF format with no more than 6 pages.
(Note: The proposal should be a document, not slides.)
(2) Clearly and succinctly present an analysis of the startups requirements of how and why use every AWS services specifically based on your understanding.
(3) Proposed architecture diagram give a detailed description for your architecture diagram and explained why you choose this solution. (4) Clearly state all assumptions and references made during the design and explicitly state the referenced Amazon Web Services.
Executive Summary
Requirements Analysis
客戶採用的是典型的LAMP stack,系統通常會劃分為web層,app層,數據層,根據客戶的想法和關心可以通過如下幾方面闡述:
擴大規模以滿足需求,但由於不確定這個需求的時間和程度,他們非常擔心過早購買過多的基礎設施或者太晚了!
說明用戶對未來規模不確定,如果過早投入必然造成資源和成本的浪費,太遲則可能會阻礙企業的發展。這樣就要求雲計算具有彈性伸縮的能力,可以根據流量自動擴大或縮小服務的規模。
解決:可以使用 Amazon EC2 Auto Scaling 確保 EC2 隊列的可用性並根據其需求自動擴展和縮減該隊列,以最大限度提高性能和降低成本,同時實例類型可以採用按需實例,實際消耗的計算容量支付費用,而不是預留實例。
針對缺乏災難恢復機制
自建機房部署方式如果出現故障會造成災難性的後果,即使恢復也可能丟失掉部分數據。做為雲計算需要有快速恢復故障的能力同時確保數據的不丟失,
解決:採用Amazon EC2實例恢復的機制,如果實例出現問題,替代實例可以在其中以可預見的方式快速啟動。Amazon RDS使用了由主資料庫和備資料庫構成的高可用資料庫,通常備用實例也是存放在其他可用區中,Amazon RDS 會將數據同步複製到其他可用區 (AZ) 的備用實例中,同時設置資料庫的快照。另外在發生硬體故障的情況下,Amazon RDS 將自動更換用於支持部署的計算實例。
他們能夠配置資料庫和數據訪問層以實現高性能和吞吐量
解決:可以通過Performance Insights分析和調整RDS 資料庫性能,幫助客戶快速評估關係資料庫工作負載的性能。
另外提高性能需要註意的有以下措施:
1、在配置方面可以採用高性能的存儲類型(IOPS(SSD))保證資料庫提供高性能的讀寫操作;
2、通過多個只讀副本讀寫分離,從而負載資料庫的訪問;
3、高性能資料庫必要的時候通過緩存減少資料庫訪問次數。
儘管他們的大部分用戶群來自遠方,但使用戶在瀏覽器中的體驗延遲非常低
要求我們的應用可以被遠端用戶以最小的網路延遲被訪問,通常是採用CDN方式.
解決:通過CloudFront能夠使的邊緣站點緩存靜態數據,加速分配給最終用戶的 Web 服務。
effective distribution of load
解決方案:EC2 可以通過Elastic Load Balancing 分發流量到後端多個應用實例,根據流量的負載情況自動擴展。
通過使用Elasticache 緩存應用數據來減少資料庫讀取的壓力。
數據查詢通過資料庫的只讀副本的方式,針對進行大量讀取操作的資料庫負載靈活地進行擴展。
有效分配負載一個自我修複的基礎架構,可以從失敗的服務實例中恢復
要求服務實例具有在失敗中恢復的能力。
解決:通過 Cloudwatch中定義的報警指標檢測auto-scaling
您可以創建 Amazon CloudWatch 警報來監控 Amazon EC2 實例。如果實例因需要 AWS 參與才能修複的基礎硬體故障或問題而受損,可自動恢復實例。
靜態和傳輸中的數據安全性
解決:作為web層提供服務給用戶採用https的方式,用戶可以通過AWS Certificate Manager 來申請 SSL 證書。
數據安全通常做法在數據傳輸過程和存儲能夠加密的形式。
數據存儲的安全性通常的做法是使用加密演算法存儲數據,
對數據在傳輸過程中的安全,由於VPC起到了隔離資源的作用。那麼在網路層可以僅由客戶使用IAM給定的特權來建立連接。數據在運輸過程中可以通過SSL / TLS傳輸協議。
在交付團隊擴展時保護對環境的訪問,
解決:使用IAM定義,用戶,角色,和組的不同許可權,針對不同資源向不同人員授予不同許可權, 例如,您可以允許某些用戶完全訪問 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Simple Storage Service (Amazon S3)、Amazon DynamoDB、Amazon Redshift 和其他 AWS 服務。對於另一些用戶,您可以允許僅針對某些 S3 存儲桶的只讀訪問許可權,或是僅管理某些 EC2 實例的許可權,或是訪問您的賬單信息但無法訪問任何其他內容的許可權。不必共用您的密碼或訪問密鑰。
因為交付團隊擴展了超過6個月的非活動對象的歸檔策略:
需要有一個存儲檔案的容器可以定期存在相關的日誌和非活動的對象。
解決:S3 可用來持久化靜態對象,例如,部署歸檔文件,腳本,資料庫備份文件和日誌,媒體文件等。
可以根據其藍圖架構輕鬆管理和複製多個環境。
解決:如果複製到不同region,可以採用AWS CloudFormation ,它提供了一種通用語言來描述和預配置您的雲環境中的所有基礎設施資源。CloudFormation 使您可以跨所有地區和賬戶使用簡單的文本文件以自動化的安全方式為您的應用程式需要的所有資源建模並對其進行預配置。
另外可以使用BeanStalk,通過使用BeanStalk快速部署PHP應用程式
Solution Design
系統架構圖:
使用了一個網上線上製圖網站Freedgo Design 其訪問地址為: https://www.freedgo.com.
freedgo Design 是一個多種類型圖表的線上繪製軟體,讓您創建 阿裡雲架構圖 騰訊雲架構圖 Oracle雲架構圖 AWS系統部署圖 軟體架構圖, UML,BPMN,ERD,流程圖,UX設計圖,ANT DESIGN,思維導圖,圖表。 可以做到註冊用戶免費使用。
具體繪製步驟如下:
- 打開 Freedgo Design註冊頁面 , 先點擊註冊成為註冊用戶,Freedgo Design提供郵箱、微信、QQ、微博等多種註冊方式。
- 註冊成功後,點擊 開始製作 按鈕,然後就進入製圖工具頁面進行繪製。
- 選擇菜單文件-> 從類型中新建 -> 雲架構 -> AWS
架構預覽
Design Detail
網路層
Route53:實現的DNS功能變數名稱解析服務,通過CNAME連接到CloudFront endpoint 。
cloudFront: 實現全球內容發佈網路,用戶請求將被引導到最低延遲的節點,提供傳送的內容最佳性能,需要設置cloudFront 設置訪問源為應用的ELB節點。
AWS Regoin 是應用部署的區域,一個Region可以有A-Z可用區。
Route53: Implemented the DNS domain name resolution service, connecting to the CloudFront endpoint via CNAME.
cloudFront: Implementing a global content delivery network, user requests will be directed to the lowest latency node, providing the best performance for the delivered content. You need to set the cloudFront to set the access source to the application’s ELB node.
AWS Regoin is the area where the application is deployed. A Region can have an A-Z Availability Zone.
應用層
autoScaling:
Auto Scaling與 ELB 集成來實現應用服務的可用性和擴展性,將ELB附加到現有 Auto Scaling組實現負載均衡,它能夠自動註冊組內的實例,並將傳入請求分配給這些實例。 在可用性方面,如果有服務失敗宕機,那麼auto-scaling 能夠迅速發現問題機器並啟動一臺新的機器,持續服務。在擴展性方面使用 Auto Scaling,可以設置Min/MaX/參數實現自動擴縮 EC2 的服務實例數量。 AutoScaling組中的每個實例都在不同的可用區,防止在可用區發生故障
數據層
elasticache:
使用ElastiCache Redis 提高生產部署的可靠性,緩解前端請求對資料庫訪問的壓力,降低延遲,還可以起到防災、減災的作用。
Redis 複製組包含一個應用程式可讀寫入的主節點和 2個只讀副本節點。在向主節點寫入數據時,也會在只讀副本節點上非同步更新數據。 這樣可以有效的防止節點故障,而在兩個可用區各分別部署一個集群服務,主要是為了避免可用區故障。
DataBase:
資料庫負責資料庫的高可用和高性能的數據存儲,一個高可用的資料庫通常包含兩個資料庫實例:一個主資料庫和備用資料庫。當所有請求發送到主資料庫時,由 RDS實例來負責響應伺服器請求,完成對數據的讀寫操作。主和備用資料庫之間的數據同步複製。如果主資料庫由於硬體或網路故障而不可用時,RDS會自動偵測到故障,啟動故障轉移過程,備用資料庫將成為了主資料庫,同時DNS也會自動更新,來實現快速故障轉移。
VPC&安全組設置
每一層都設計了安全組和子網,能夠更加有效提供安全保障機制。
在應用層autoScaling的安全控制中定義允許如何位置的訪問應用的80和443埠,允許互聯網的用戶訪問入口, 定義ssh 22埠 指定特定位置的訪問。
數據層設置安全組的入站策略中定義允許應用訪問MYSQL/Aurora的3306埠
Elasticache安全組的入站策略中定義允許應用訪問自定義TCP訪問redis的埠
監控
系統可以通過使用CloudWatch來監控整個系統的記憶體使用率、處理器利用率、緩存命中率等一系列指標來監控伺服器運行狀況。
Summary
創業公司提出的需求正是雲平臺提供商所要解決的問題,如何提供可管理的,高性能,高可用,安全的基礎服務平臺,同時方便用戶日常的維護,發佈和應對突發事件的能力。
高性能:也是客戶非常關註的,AWS幾乎覆蓋全世界11個主要區域,42個可用區,52個邊緣站點,在提供高可用的服務同時,也能夠提供高性能服務。AWS在各個層提供了各種類型的主機類型,記憶體優化,存儲優化等等,適應不同的需求。
高可用性:無論是APP層的AutoScaling、資料庫、S3都會提供若幹應用的副本,而且是在不同的可用區,這個可以保證一個可用區不可用時,應用可以快速切換到另外的可用區,做到高可用。
安全性:AWS通過自動監控系統可以做到保護網路和增強互聯網接入的安全性,通過VPC和安全組的控制,做到網路的安全性和隔離。
References
線上製圖工具: https://www.freedgo.com
Router53 使用:https://www.cnblogs.com/huang0925/p/3684348.html
Cloudfront: https://console.aws.amazon.com/cloudfront/home?region=us-east-2
Route 53 console:
RDS console: https://us-east-2.console.aws.amazon.com/rds/home?region=us-east-2#database:id=csydb;is-cluster=false