IBM“認知課堂”如何使用Docker服務於超百萬學者
“認知課堂(Cognitive Class)”是IBM面向全球技術人員提供的高質量課程學習平臺,課程主題包括人工智能(AI)、機器學習、數據科學、大數據、分析和數據庫等,前身為IBM Big Data University。自發布以來,“認知課堂”跨過了一項又一項裏程碑,如今已擁有超過100萬名學習者。
這篇文章中將分享IBM“認知課堂”在技術方面的裏程碑和演變,特別是平臺是如何從一個靜態基礎架構轉變到現在使用Docker、運行著數十個Open edX實例的動態+可擴展部署的。
OPEN EDX 101
Open edX是edx.org提供的開源代碼。它由幾個存儲庫組成,edx-platform是其主要存儲庫。如果想要部署Open edX實例,官方的方法是使用配置好的repo,通過Ansible playbooks自動安裝。這種方式需要訪問正在運行Ansible playbook的服務器。在這些完成之後,你將獲得一個全新的Open edX部署。
IBM也是這樣運營cognitiveclass.ai(我們的對外網站)的,從2015年開始IBM將“認知課堂”從Moodle部署轉移到了Open edX上。Open edX提供了很好的服務,使得我們每天可以為數百名並發學習者提供超過70門課程。
但我們仍然面臨著一些挑戰:
Open edX主要針對的是Amazon的AWS服務,但我們要在IBM Cloud上運行我們的基礎架構。
需要創建虛擬機來部署新實例。
Open edX從存儲在服務器中的JSON文件中讀取配置信息,每個實例必須保持這些文件同步。
雖然我們能夠在大型的單一部署中克服這些問題,但對於我們的新目標對象,Cognitive Class Private Portals來說它們會變得很難管理。
商業用途的“認知課堂”
在向其他公司介紹時,我們經常會聽到同樣的問題:“我怎麽樣才能讓我的員工明白並使用這些內容呢?”,這也是我們為“認知課堂”創立“專屬門戶(Private Portals)”的動機所在。
“專屬門戶”是一個專門為客戶創建的專用部署,用戶可以獨享專屬於他的“認知課堂“,可以創建自定義學習路徑、自行定制課程、追蹤學習進度、設置訪問限制、創立競賽等等。“專屬門戶”服務是IBM為團隊、部門、小型企業、大型企業、學術機構和培訓提供商等推出的。從技術角度來看,這就要求我們能夠快速按需推出新的部署。我們回到前文提到的幾點挑戰,隨著部署數量的增長,第二點和第三點尤其具有挑戰性。
為每個部署創建和配置新的虛擬機是一個緩慢而且昂貴的過程。如果某個Portals超出了它的資源,我們不得不需要找到一種方法來擴展它,並且在多個虛擬機中管理它的配置。
使用Docker
與此同時,我們在Virtual Labs(供課程用戶進行實踐操作的環境)的基礎設施中遇到了類似的需求,數百個虛擬機的使用讓管理非常混亂。於是IBM的Virtual Labs團隊開始研究並且實現基於Docker的解決方案。
對我們來說,Docker的主要好處有兩個:
提高服務器的使用密度;
隔離服務進程以及文件。
這些好處是密切相關的:因為每個容器管理自己runtime和文件,我們能夠在同一個服務器上輕松運行不同的軟件,而不會相互幹擾。與虛擬機相比,我們這樣做的開銷要低很多,因為Docker在它們之間提供了輕量級的隔離。
通過提高使用密度,我們能夠在少量大型服務器中運行數千個容器,這些服務器可以提前進行配置,而不需要去管理數千個較小的實例。
對於IBM的“認知課堂-專屬門戶“網站來說,這意味著我們可以在幾分鐘內準備好使用新部署。底層的基礎設施已經就位,所以我們只需要啟動一些容器即可。
使用Rancher管理容器
Docker本身就是一項出色的技術,但面對高度可擴展的分布式生產環境,我們仍需要借助其他工具或平臺來管理容器的生命周期。在“認知課堂”平臺中,我們決定使用Rancher,它能夠讓我們將基礎設施抽象出來,只需專註於應用程序本身。
簡而言之,Rancher將容器組織成服務,接著服務被分組到stack中。把stack部署到環境中,而環境由主機控制,主機是最終啟動容器的底層服務器。Rancher負責在所有主機上創建專用網絡,以便他們可以相互安全地進行通信。
讓一切運行起來
我們的網站采用微服務架構,都在Rancher中以stack的形式組合在一起。Open edX是主要組成部分,它可以分為較小的服務。除了Open edX之外,我們還有其他幾個組件可以為我們的產品提供額外的功能。下圖是我們的Rancher界面示例:
這裏有非常多的內容,所以我們來快速解釋一下這些內容:
IBM“認知課堂”如何使用Docker服務於超百萬學者