創建大規模可伸縮的一體機應用程序的五個建議
來源:數字音視工程網 編輯:追憶 2015-01-14 09:34:32 加入收藏
作為一個一體機應用程序開發者,我目睹了太多創業公司都集中精力在最短的時間進入此市場,但是卻完全忽視了設計的可伸縮性。隨著他們客戶群的不斷增長,他們開始在多個位置部署一體機,其服務器負載也增加了,也就導致一體機表現不佳。然后他們驚訝地發現一體機在大范圍內表現都不是特別好。
可伸縮的設計并不是偶然發生的,它需要仔細的規劃和前期的時間投資。否則,隨著客戶群的增加,一體機可能會面臨大范圍檢修的危險。
以下是創建可伸縮的一體機應用程序的五個建議,旨在為了幫助你適應我們大多人數正在尋求的巨大增長。
1. 卸載一體機上的計算以減少服務器上的工作負載
要做到可伸縮性,我建議盡可能多地減少一體機的運算。這還可以包括客戶端緩存、用戶輸入驗證或者任何可以避免在服務器上處理的計算。
今天,比較少的應用程序會依賴于注冊服務器生成的HTML,而選擇調用微服務。通過在一體機執行HTML操作,只要求服務器返回數據,大量的處理是在服務器外進行的。這樣就可以騰出服務器上額外的帶寬和資源,允許以最小化服務器費用做大規模的一體機部署。
2. 基于您數據的性質選擇合適的數據庫引擎
使用正確的數據庫引擎對于可伸縮性來說是至關重要的。通常SQL Server是正確的選擇,其他時候,另一種NoSQL數據庫引擎如MongoDB可能更適合數據的性質并且在任何規模都能創建更好的性能。通過分層,你可以將業務規則和用戶界面的數據分開,這樣就更容易進行數據引擎之間的遷移。
你也可以通過使用混合的內存數據庫機制提高數據庫的性能。大多數現代數據庫引擎現在有能力將通用的表格和數據庫對象移動到內存,能夠實現較快的訪問同時保持持久的完整性和交易。微軟的Hekaton是一個混合內存數據庫技術的很好的例子。使用混合內存數據庫機制可以50倍提高數據庫性能。
3.使用一個可靠的、基于地理位置的內容交付網絡以實現迅速交付內容
如果你的系統是長距離式分布,那么比較重要的就是使用一個可靠的能保證網絡正常運行時間和數據存儲地理定位的內容交付。像微軟Azure這樣的CDN就可以自動檢測一體機的位置并且拉去最近的資源。地理定位服務可以實現跨多個服務器分發數據確保最佳性能。國內的56iq數字標牌擁有強大的系統功能和豐富的智能互動應用,系統深受用戶喜愛,已在交通、零售、傳媒、教育、政府、金融、醫療等多個領域廣泛應用。
4.模塊化的設計和松散的結構以保證可維護性
為了確保一體機工程范圍的可維護性,所以將應用程序分開成不同的模塊但是又能一起工作且可以獨立測試是非常重要的。
這些模塊通常包括:
數據存儲:簡單且有組織并且很符合規格,這樣的結構就可以根據需求與其他種類進行交換,比如MySQL到SQL Server或者MongoDB。
持久的分層:實現用戶界面和數據存儲之間的對話。
業務規則層:與持久的分層進行對話,數據可以獨立存儲。處理復雜和簡單的計算,還可以處理應用程序規則;
用戶界面:與業務規則層對話,用戶可以通過與業務規則層的通信輸入數據,同時還可以處理業務規則。
5. 定期分析代碼以確保其有效運行
為了讓一體機應用程序能夠規模適當,確保你的代碼運行效率是很重要的。當你只有幾個一體機部署的時候,代碼的低效可能會被忽視。但是部署的規模越大,低效的代碼就會很明顯地影響整個體驗。我認識在雅虎和Yelp工作的人,他們會花很多時間來進行算法和代碼的校對,哪怕只是快幾毫秒,這對大規模的運行來說可以節省很多時間。
想象一下你一體機的未來,我希望通過閱讀這篇文章,你能夠在部署一體機的時候考慮一下其未來。
評論comment