本文作者 上海駐雲資深系統開發工程師 周逸靈
大家都知道阿里雲上線了自助實驗室的學習平台了嗎~(點擊閱讀原文前往)該平台又叫雲中沙箱!
本文就是來告訴大家整個平台的系統架構和基本實現方式,希望對想要在雲上開發的您有一定的幫助~
雲中沙箱是什么?
如今越來越多的企業用戶將傳統機房服務器遷移至雲計算平台,無論是穩定性的提高,抑或是維護成本的降低,都是雲計算帶來的不可否認的優勢。然而,如果僅僅是從物理主機轉變為虛擬雲主機,那顯然是不夠的,雲計算平台在提供雲主機服務的同時,也推出了各種其他相應的產品。那么這些產品如何使用,如何互相配合完成生成目的,依然是需要技術人員需要了解的內容。雲中沙箱便是這么一個為技術人員提供雲產品培訓,並可以模擬真實雲計算平台環境的一個培訓平台。
此外,雲中沙箱本身也是部署在雲計算平台上,那么下面就簡單介紹一下雲中沙箱的技術實現。
雲中沙箱用到了哪些雲產品?
雲中沙箱本身所需要的雲產品並不復雜,極端地說,絕大多數應用就算僅僅是用雲主機也是可行的,但這並不是一個好主意。根據具體需求選擇所需產品才較為合理。雲中沙箱根據本身的需求,使用了阿里雲四大件(ECS、RDS、SLB、OSS)來部署整個產品:
1. ECS(雲主機)和SLB(負載均衡)
ECS的使用方法和普通主機並無太大區別,而在項目部署中,雲主機配置的選擇缺需要有一定考量。這里有把SLB一起,正是這個理由。
如今只要是有一定訪問量的網站,想必都不會進行單機部署。那么在多服務器部署時,就需要有一個統一入口,將每個請求轉發到這些服務器上去,在這里SLB就承擔了這個任務。依靠阿里雲控制台的統一管理,將眾多ECS添加為SLB的后端服務器變得異常簡單。此外,HTTPS證書的管理、健康檢查、會話保持機制等無不在向人們表明,ECS就是應該和SLB一起使用。而雲中沙箱正是使用了這種方式來部署網站應用。
2. RDS(數據庫)
數據庫管理始終是任何項目的關鍵所在,而數據庫的維護也或多或少困擾着DBA們。出於這方面的考慮,雲中沙箱的數據庫直接使用RDS,圖形化方式管理數據庫用戶,慢SQL查詢,數據庫日志查詢,各項指標的檢測,自動備份等功能為開發工作提供了極大的便利。同時,RDS可以僅開放內網訪問,提高數據庫的安全性。
3. OSS(對象存儲)
涉及到用戶上傳下載文件的功能,在多Web服務器同步數據時就會遇到各服務器之間文件同步的問題。如果將用戶上傳的文件存放在Web服務器本地,一來有容量問題,二來需要同步到其他Web服務器;如果以二進制方式存放在數據庫也不是個好的選擇;如果單獨配置專門存放用戶文件的服務器,成本和維護也是個需要考慮的問題。所以,雲中沙箱選擇了OSS,這種方式非常接近於前面的第三種單獨配置文件服務器的方式,但卻不需要開發人員專門維護,使用成本也非常低。
雲中沙箱用到了哪些開發技術?
雲中沙箱在技術選型階段,便綜合考慮了用戶體驗、網站並發量以及開發維護成本等因素。主要分為負責呈現網站的Web部分和創建雲計算平台實驗模擬環境的Service部分。同時,Web部分進行了前后端分離,以實現負責各部分功能的開發人員可以同步進行開發。
1. Web前端(AngularJS)
雲中沙箱整個頁面呈現的部分使用了AngularJS框架,並以單頁應用的模式進行開發。得益於AngularJS雙向綁定的特性,幾乎所有的請求都以JSON格式數據通過AJAX請求發送至Web后端。用戶在使用網站時的頁面無刷新、快速的響應,使雲中沙箱實現了與傳統后端渲染方式呈現頁面的網站應用完全不同的用戶體驗。此外,在開發方面,傳統枯燥的表單處理在Angular框架下也變得輕松簡單。
2. Web后端(NodeJS)
由於前后端的完全分離,雲中沙箱的Web后端實際就是一個HTTP API服務器,通過JSON格式數據與Web前端進行交互。服務器框架使用了Express4進行開發。
由於Nodejs的異步特性,Web后端可以承受相當大的並發量,並且由於只是HTTP API,僅僅接受和返回JSON格式的數據,而不是完整的頁面,通訊的數據量也能盡可能做到最少。此外,用戶認證方面,雲中使用了Token的方式而不是傳統的Cookie保存SessionID的方式進行。選用這種模式,使得與第三方合作伙伴對接,內部管理工具開發,以及未來移動端接入方面留有余地。
3. Service(Python)
雲中沙箱除了網站頁面呈現本身之外,一個核心價值就在於可以根據培訓課程的內容,自動在阿里雲平台創建實驗環境。網站本身的訪問需要考慮高並發,但創建實驗環境並不需要那么高並發,此外,創建實驗環境需要一定時間,瀏覽器發來的請求需要立刻返回。所以,與Web服務器不同,Service並沒有繼續使用Nodejs。同時,由於創建實驗環境屬於相對流程化的處理,最終選擇了比Nodejs更為簡單直觀的Python進行開發,並單獨部署在一台ECS上。
而與Web服務器之間的銜接,則是通過Redis充當消息隊列來實現。比如,當用戶在網站上發起一個創建實驗的請求后,Web服務器會首先進行基本的處理。隨后,生成一個任務發送至消息隊列。Service從消息隊列接收到任務后,按照任務內容去創建所需要的實驗環境。創建完成后,再通知Web服務器即可。
小結
在考慮維護成本及實現便利的基礎上,選用了阿里雲四大件(ECS、RDS、SLB、OSS)來部署。Web前端使用AngularJS,Web后端使用Nodejs和Express4,任務處理使用Python開發,並從Redis充當的消息隊列接收Web后端生成的任務。
以上便是雲中沙箱的技術實現,也算是阿里雲使用的一個案例。