理解在AWS上部署數據庫的監控需求
大多數的現代化應用都依賴于DB層來對數據進行集成、查詢和管理。在AWS上部署一個數據庫需要相應的監控和管理功能,使應用更容易縱向擴展,從而降低宕機影響并保持較低的成本。
AWS在改善其核心數據庫和自動化管理以及監控等相關功能上做了很多工作。與此同時,AWS的競爭對手也在改善它們自身的管理功能。企業在選型的時候需要更仔細,以便權衡AWS以及其他第三方數據庫服務商。
理解系統需求
在軟件開發團隊的工作啟動之前,對應用需求有一個深刻的理解是非常關鍵的。一般來說,在此之前進行架構變動是相對容易的。雖然要預估一個系統的規模并非易事,但是要對所要求的一致性進行評估并不困難。
例如,Netflix用AWS存儲了Apache Cassandra 數據庫中的大量數據。在這個大型系統中,對于Netflix來說,其在線可用性要比精確記錄所觀看過電影的存儲位置更加重要。
企業需要考慮是否要將可用性和可擴展性納入最重要的考量范疇。很多企業在進行過可用性優化的NoSQL平臺上部署應用,而這需要調整以保證一致性。對于此類應用更好的一個方法是使用類似PostgreSQL的傳統關系型數據庫,它可以更有效地提供所需的一致性。
相反,很多企業錯誤的地使用基于事務的關系型數據庫來提供一致性,但并不具備高可用性——例如一個推薦系統應用。在這些案例中,企業可能從一開始就應避免使用類似Cassandra的數據庫。
本地化
另一個***實踐就是考慮利用本地AWS服務替代傳統數據庫架構。當開發人員將應用程序從傳統環境遷移至AWS時,建立數據庫服務器和集群是很常見的。
AmazonRDS提供的功能可以將數據庫作為一個托管服務來使用,它可以很好的支持MySQL、PostgreSQL、Oracle以及SQL Server。 這是因為RDS包含大量的監控和管理功能來支持諸如升級,打補丁以及故障檢測等內容。 但是,這并沒有免除所有DBA的責任。企業仍需要配置備份,決定數據庫的需求并指定諸如內存和存儲等事務。
AWS包含大量的數據庫服務,這些服務內置有類似SimpleDB和DynamoDB的管理和監控功能。這些服務是以擴展的方式加以提供,這樣就相對簡單并且可以減少對專門服務的需求。但是其他的NoSQL數據庫傾向于為很多用例提供更為豐富的功能集,這也是它們快速成長并廣受歡迎的原因。
隨著AWS不斷完善其基礎功能,這種情況可能會有所改變。例如,AWS剛剛在DynamoDB上添加了對JSON數據模型的支持,這對于MongoDB這類產品來說一直是一個非常重要的優勢。但在目前階段,根據文檔的大小,對文本搜索功能和地理空間功能的支持上,與第三方產品相比,AWS服務有著更多嚴格的限制。
平衡可擴展性和功能
諸如MongoDB之類的NoSQL數據庫的主要挑戰是在提供新實例,更新軟件以及進行擴展方面所面臨的困難。例如,一般來說,要配置一個運行在12臺服務器之上的MongoDB集群需要操作150多個步驟。而最近添加進MongoDB MMS的自動化功能可以將此手動工作大為簡化。有了MMS,你就不需要了解其內部實現,而且工作效率也會大為提高。
Decisive是一家提供互聯網廣告管理服務的公司,他們的系統運行在AWS上。對于一個用于創建和優化移動廣告活動的新API來說,Decisive可以利用MMS來簡化對新增MongoDB實例的自動部署和擴展。Decisive之所以選擇MongoDB是因為其數據模型的靈活性。MongoDB可以收集某個活動相關的各種數據,例如觀看廣告以及進行點擊的用戶數量和類型。
雖然AWS在數據庫上層提供了一些基本的監控和管理功能,但是這對于很多需求來說還不夠。MMS可以讓Decisive監測客戶端的磁盤I/O流量以及延遲。MMS還可以協助訪問數據庫集群的健康狀況,這樣可以在發生問題的時候更容易找出問題所在。隨著讀寫負載變得更高,MMS會報告它們發生的位置并給出通過擴展系統來應對這些挑戰的***途徑。
與此同時,類似AWS Redshift服務對于很多數據倉庫應用是足夠實用的,且提供了很好的性價比。而對于企業分析之類的工作,Redshift表現也是極為出色。你可以在MongoDB上存儲事件,在需要的時候可以快速遷移至Redshift。這里你損失的只是一定的靈活性。