我們若已接受最壞的,就再沒有什麼損失。
—— 戴爾·卡耐基
因為“停課不停學”,釘釘火了,以至于“火”到了求饒的地步,不明覺厲的請看MV:《釘釘本釘,線上求饒》。
釘釘尚且如此,假如是自建“停課不停學”系統的話……
以下,就是我對自建“停課不停學”IT系統的一些建議:
使用雲服務
為了應對“線上複工”洪流的沖擊,釘釘臨時從阿裡雲擴容了十萬台伺服器,這樣的彈性擴容規模已經不亞于“雙十一”。雲計算已經成為整個社會的基礎設施,我們在自建“停課不停學”系統的時候沒有理由不去使用。
當然,雲計算不等于伺服器,在建構“停課不停學”IT系統時除了雲伺服器,還有以下這些服務用的上:
- 視訊點播、播放提前錄制好的課程,在提供近乎無限的并發點播能力的同時還提供防盜鍊、健權、加密這些功能。
- 視訊直播、通過專業直播機、PC、甚至手機實時推送視訊流到雲端,再通過雲端分發實時視訊。視訊直播支援連麥功能,可以進行小規模的互動。
- 音視訊通信 RTC(Real-Time Communication)、提供小範圍(20人左右)的低延遲時間互動視訊和音頻通訊功能,通過就近接入和遍布全球的營運商支援,可以保證全球範圍内的高品質互動教學的流暢性。
- PolarDB雲原生資料庫、作為一個雲原生資料庫,PolarDB每個節點最大支援88個vCPU,710G記憶體,能橫向擴充到16個節點,最大可提供1408核的計算能力,單個資料庫可擴容到100TB,并可以結合DRDS實作多個資料庫的“捆綁”。PolarDB具備5分鐘增加節點的快速彈性擴容能力、可以在幾十秒内完成10TB級别資料庫的備份。PolarDB提供MySQL以及PostgreSQL的100%相容能力、Oracle資料庫的90%以上的高相容能力,已經開發好的應用基本不用做修改就能使用。
壓力測試
為了避免系統在萬衆矚目下崩潰、出醜、有必要在上線前就對“停課不停學”系統進行壓力測試,以做到心中有數。
壓力測試的工具有開源的AB和JMeter、也有商業軟體LoadRunner,這些都可以用,但要想更接近實際的應用場景還是建議使用阿裡雲PTS。
阿裡雲PTS通過分布在全國的CDN邊緣節點可以更好的仿真實際的大并發通路場景,并支援導入開源的JMeter測試腳本。
和PTS配合使用的是ARMS,可以在進行壓測的過程中對系統的運作狀态進行細粒度的監控。

(上圖來自阿裡雲官網)
ARMS是一款APM産品,支援對Java和PHP開發的伺服器端應用進行接口級别的細粒度監控。通過PTS和ARMS的結合一方面可以了解高壓下的系統整體性能水準,另一方面通過ARMS還可以收集應用内部的各接口之間的調用和響應資料,及時發現系統的性能瓶頸點。
優化應用架構
一旦發現系統無法滿足性能名額,要進一步提高系統的并發處理能力,通常的做法有五個:
- 加緩存、為了盡可能避免資料庫操作成為系統的瓶頸,可以在應用系統和資料庫之間增加緩存服務,将經常需要通路的資料在緩存中儲存和直接調用,降低資料庫系統的壓力。目前最常見的緩存服務就是Redis,在阿裡雲上的Redis服務有标準版、讀寫分離版、叢集版三種,分别可以提供1萬、6萬、50萬的最大連接配接。
- 異步化、假如代碼之間采用直接調用耦合的方式,上遊子產品突然增加的流量,如果下遊子產品處理不及時就會将系統整個給“拖死”。可以将這樣的地方改用消息中間件耦合的方式,上遊子產品将請求直接丢入消息隊列後就直接傳回以開足馬力處理後續的請求,下遊子產品從消息隊列中擷取資料和指令進行後續處理,即便下遊子產品的處理能力跟不上新增的請求,指令和資料也隻會在消息隊列裡堆積而不會造成系統的崩潰。阿裡雲的消息隊列服務是經過雙十一檢驗過的,能夠承受萬億級資料流轉、千萬級并發、億級消息的堆積而不影響叢集的正常服務。阿裡雲消息隊列服務MQ目前提供RocketMQ版(雙十一采用)、AMPQ(RabbitMQ)、微消息隊列MQTT版(物聯網、活動直播),可以根據需要選擇。
- 限流、假如通過壓力測試可以探查出系統的最大處理能力(TPS)來,就可以依據這個數值對系統的進入流量進行限流。阿裡雲用于流量限流的服務叫做AHAS,可以在突發的流量洪峰到來的時候限制能夠進入系統的流量,保護後端的資料庫等系統免受沖擊,并為系統的擴容争取時間。阿裡雲AHAS的接入方式有三種:不需要修改代碼的Agent方式、通過Kubernetes接入、通過AHAS 的SDK接入。其中支援Agent方式的架構和應用伺服器包括但不限于:Dubbo、Spring Boot、Spring MVC、String Cloud Gateway、Zull、Jetty、Tomcat、WebLogic等。
- 降級、當面臨無法應對的流量時可以舍棄部分非重要功能來保障關鍵功能的運作正常。通過阿裡雲AHAS可以對不影響整體流程的第三方應用的調用應用降級規則,在異常比例超過一定的閥值時,在降級視窗時間内對第三方服務的所有請求都會快速失敗。
- 隔離、有些對第三方元件或服務的調用會影響系統的整體處理流程,這時就不能對這個服務的調用進行快速失敗,這時就可以使用隔離功能,阻止更多的請求進入本服務,直到堆積的請求線程處理完成。在阻止請求進入時可以根據上遊應用的重要程度設定不同的資源閥值,保證核心系統能夠獲得更多的資源。通過AHAS的隔離規則功能可以設定當自身的線程數達到一定的閥值以後從指定應用來的請求都會快速失敗。
備用的系統
無論如何,總有一些意外會發生,總有一些你沒想到的原因會讓系統崩潰,是以事先準備一個靜态頁面呈現給使用者要比将系統的報錯資訊顯示出來要好的多。對于一個“停機不停學”的IT系統,這個靜态頁面甚至還可以再提供一些視訊的靜态連結。
阿裡雲的OSS最适合用來做這個靜态頁面了。