在 Sprint 16中,我們開始支援阿里螞蟻開源的國產IDE開發框架 OpenSumi,並且在 Sprint 17 釋出了 基於 Eclipse OpenVSX Registry 的 SmartIDE外掛市場。OpenSumi的開發團隊在測試了 SmartIDE外掛市場之後發現速度提升可以達到10倍以上,並將其設定為OpenSumi內預設的外掛市場來源。
下圖來自:https://github.com/opensumi/core/pull/1045 ,是 OpenSumi 團隊的測試結果。
SmartIDE外掛市場 是我們針對國內使用類 VSCode IDE 的開發者提供的開源外掛市場映象服務,我們將 open-vsx.org 的國外站點通過 Github Action 自動同步到了部署在國內的站點中,經我們自己測試速度提升2-5倍。此次經阿里螞蟻OpenSumi團隊的測試結果提升10倍的原因可能是因為他們採用了批次外掛安裝的方式。這個結果對於國內使用類 VSCode IDE 的團隊來說是一個好訊息,說明我們提供的 SmartIDE外掛市場 開始發揮它應有的作用了。
在 Sprint 18 中,我們還對外掛同步機制進行了改進,增加了按週期自動同步和歷史版本同步機制,這樣就可以確保國內的小夥伴及時獲取到最新的VSCode外掛。
相關修改可以參考 https://github.com/SmartIDE/eclipse-openvsx/issues/2
以上PR已經在2022年5月18日合併進入OpenSumi的主分支,安裝 OpenSumi 的最新版就已經可以體驗外掛極速安裝的快感了。
Dapr 是微軟主導的雲原生開源專案,2019年10月首次釋出,到正式釋出 V1.0 版本的不到一年的時間內,github star 數達到了 1.2萬(現在已經超過1.7萬星),超過同期的 kubernetes、istio、knative 等,發展勢頭迅猛,業界關注度非常高。
Dapr 這個詞是是 「Distributed Application runtime」的首字母縮寫,非常精煉的解釋了 dapr 是什麼:dapr 是一個為應用提供分散式能力的執行時。
Dapr官網 https://dapr.io
SmartIDE 團隊 Sprint14 開源了包括 .net6
環境在內的開發者映象相關程式碼,在那個時間點對於 .net6
技術棧的支援已經完整。這個迭代中,我們針對 .net6
的開發者映象進行了改進,增加了 VM-Like-Container
的能力,以便可以完美支援 dapr 環境的搭建和偵錯。
所謂 VM-Like-Container
,其實就是將容器當成虛擬機器器來使用。大家可能會覺得有點奇怪,既然我們都容器化了,為什麼還要開倒車,回到VM呢?這個其實和開發者的需求有關,一般的容器都是為了運維環境優化,並沒有考慮開發者的訴求,或者說這兩者的訴求的相互衝突的,運維要的是穩定,因此極盡所能剝奪一切容器內不必要元件,而開發者需要靈活,需要能夠在容器內按需構建自己的所需要的各種元件。比較典型的場景就是在容器中執行docker,也即是大家所說的 DIND (Docker in Docker)
的場景。對於開發者來說,確保應用可以用容器釋出的最好方式就是在自己的開發環境中可以直接執行 docker build
和 docker run
,這樣才能確保自己所交付的程式碼是經過容器化環境測試的,不至於等到流水線打包並部署完成以後才發現自己的程式碼其實在容器中無法正確執行。
對於開發環境而言,提供內建的Docker環境意味這開發者有更加靈活的能力構建自己專屬的客製化化環境,比如執行各種型別的中介軟體、同時執行和偵錯應用的多個版本,臨時組網進行測試等等。對於Dapr而言,dapr的開發工具需要使用docker環境來模擬微服務邊車 (sidecar) 的很多能力,比如最常見的服務發現和訊息佇列,都需要dapr執行一些中介軟體來提供相關的服務。以下就是在 SmartIDE 的 .net6(vscode)
開發環境中,執行一個機遇dapr的範例應用的截圖:
範例程式碼庫地址:https://github.com/SmartIDE/sample-dapr-traffic-control
在這個範例中,我們使用了 dapr init
來初始化 dapr 開發環境,執行 dapr 的基礎服務,然後啟動 Mosquitto
作為 MQTT broker
,RabbitMQ
作為訊息佇列以及其他的基礎服務。應用本身需要至少4個微服務元件才能正常工作:
TrafficControlService
是交通控制服務,也是主服務,其業務邏輯是根據公路上的2個固定位置攝像頭反饋的資料,計算車輛通過攝像頭的車速,以便判斷是否存在超速行為。FineCollectionService
是罰單處理服務,根據 TrafficControlService
傳送過來的車牌資料,查詢車輛註冊資料庫(VehicleRegistrationService
)獲取聯絡人資訊,並行送郵件VehicleRegistrationService
是車輛註冊資料庫,提供車輛資訊查詢,可以通過車牌號碼獲取車主資訊,比如郵件地址。Simulation/VisualSimuation
是一個模擬器應用,用於模擬車輛行為,以便可以測試以上服務的工作情況,在上圖中展示的是 VisualSimulation
的畫面。下面這個視訊完整演示瞭如何使用 SmartIDE開發偵錯 經典的Dapr範例 dapr-traffice-control
,相關的啟動命令如下
smartide start https://github.com/SmartIDE/sample-dapr-traffic-control
遠端工作區 的一個重要優勢就是可以幫助開發者更好的利用遠端主機的強大算力和資料處理能力,在這個領域中 Jupyter Notebook
無疑是非常典型的應用型別。我們在 Sprint 18 中增加了對 Jupyter Notebook
的遠端工作區支援,現在開發者可以使用一個簡單的指令就可以啟動預裝 Jupyter Notebook
的遠端工作區,並且通過 --host
引數將這個 工作區漫遊 到任意主機或者k8s環境中。相關指令如下:
## 啟動使用 Jupyter Notebook 的資料科學處理開發者容器
smartide new anaconda -t jupyter
## 在遠端主機上啟動
### 首先將自己的主機新增到 SmartIDE工具中,並獲取hostId
smartide host add <Ip-Address> --username <user> --password <pwd>
### 使用 --host 引數再次啟動
smartide new --host <hostId> anaconda -t jupyter
使用以上方式啟動的 Jupyter Notebook
環境還會內建一個 VSCode WebIDE,這樣可以利用內建的Git管理工具將製作好的 Notebook 提交到Git程式碼倉庫中進行版本管理。 其他開發者就可以使用 smartide start <程式碼庫地址>
指令一鍵將同樣的環境漫遊到自己的本地開發機,主機或者k8s上。
為了讓大家更容易體驗,我們為大家提供了一個預置了範例 Notebook 的程式碼庫,這個範例中內建了一個新冠疫情資料分析Notebook。
範例地址 https://github.com/SmartIDE/sample-anaconda-jupyter
使用這個 Notebook 對上海和北京最近的疫情資料的分析結果如下:
備註:以上資料分析僅為展示SmartIDE的產品特性,資料處理的非常粗糙。歡迎對
Juypter Notebook
開發有興趣的小夥伴提交PR改進我們的分析演演算法。
大家可以使用以下指令一鍵啟動上面這個範例
## 在本地開發機上啟動
smartide start https://github.com/SmartIDE/sample-anaconda-jupyter.git
## 在遠端主機上啟動
smartide start --host <hostId> https://github.com/SmartIDE/sample-anaconda-jupyter.git
啟動以後的效果如下,圖中:
se = smartide
Jupyter Notebook
,載入了 「新冠疫情分析」 範例資料,這個 Notebook 通過讀取微信疫情小程式的API介面獲取實時資料,並利用圖表展示了上海過去60天疫情變化趨勢在適配 Jupyter Notebook
的過程中,SmartIDE沒有修改一行產品程式碼,完全利用我們所提供的 IDE組態檔 和 開發者映象模版庫 的能力完成。SmartIDE作為一款面向企業的B端產品,對於可延伸效能力的要求是根植於產品的設計核心。利用這種能力,企業在部署了SmartIDE之後無需進行二次開發就可以自助適配各種開發語言,工具和環境,大幅降低企業採納遠端工作區的技術門檻和實施成本。
下面的視訊展示了在 SmartIDE 中使用 Jupyter Notebook 分析上海和北京疫情資料的過程:
https://www.bilibili.com/video/BV1mZ4y1t7fj?spm_id_from=333.999.0.0
SmartIDE CLI中已經增加了k8s相關指令,使用者現在可以使用 smartide start --k8s
來完成在k8s叢集中啟動 遠端工作區 的操作,基於 計算器範例應用 的啟動命令如下:
smartide start --k8s SmartIDEAKS --namespace default --repourl https://github.com/idcf-boat-house/boathouse-calculator.git --filepath .ide/k8s.ide.yaml
使用這個指令之前使用者需要完成2個準備工作:
smartide-file-storageclass
,這個設定的目的是為了能夠讓 SmartIDE 可以支援各種型別的k8s服務。Storage Class (儲存類定義)是k8s上適配不同提供商的底層儲存driver而提供了一層隔離機制,在遠端工作區場景下,我們需要允許工作區中的多個開發容器共用的存取同一份程式碼/設定/環境變數/工具等資源,因此需要使用具備 ReadWriteMany 能力的儲存 driver。.kube
目錄中匯入你的k8s叢集的 kube-config
檔案,這個步驟是為了允許 SmartIDE CLI 可以連線k8s進行操作的許可權。以下是匯入 storageclass 的相關指令,當前只提供Azure微軟雲的組態檔,使用其他雲平臺或者自建k8s平臺的小夥伴可以自行查詢適合自己平臺的StorageClass組態檔,後續我們也會統一提供。
kubectl apply -f https://smartidedl.blob.core.chinacloudapi.cn/kubectl/resources/smartide-file-storageclass.yaml
另外,如果使用 azure-cli
,可以直接使用以下指令快速建立k8s叢集(測試用途)並獲取叢集的 kube-config
設定
az login
az account set -s <訂閱ID>
az group create --name <資源組名稱> --location southeastasia
az aks create -g <資源組名稱> -n <叢集名稱> --location southeastasia --node-vm-size Standard_DS2_v2 --node-count 1 --disable-rbac --generate-ssh-keys
az aks get-credentials -g <資源組名稱> -n <叢集名稱>
CLI k8s 模式現在已經支援一鍵啟動工作區和清除工作區操作,我們正在將這個cli能力整合到server中;在後續的迭代中大家會陸續獲得 server k8s 模式的更新。
如果你對雲原生開發環境感興趣,請加入我們的 SmartIDE社群早鳥計劃
謝謝您對SmartIDE的關注,讓我們一起成為雲原生時代的 Smart開發者, 享受 開發從未如此簡單 的快樂。