SmartIDE v0.1.18 已經發布 – 助力阿里國產IDE OpenSumi 插件安裝提速10倍、Dapr和Jupyter支援、CLI k8s支援

SmartIDE v0.1.18 (cli build 3538) 已經發布,在過去的Sprint 18中,我們集中精力推進對 k8s 遠程工作區 的支援,同時繼續擴展SmartIDE對不同技術棧的支援,我們適配了針對分散式應用運行時Dapr以及數據科學計算分析工具Juypter的環境支援。在這個過程中,我們探索了VM-Like-Container的能力,為提供開發者優化的容器環境又邁進了一步。最後,我SmartIDE插件市場也迎來了它的第一個開源社區支援者,阿里螞蟻開源的國產IDE OpenSumi已經將 SmartIDE作為自己的默認插件源。

阿里螞蟻OpenSumi採用SmartIDE插件市場提速10倍

在 Sprint 16中,我們開始支援阿里螞蟻開源的國產IDE開發框架 OpenSumi,並且在 Sprint 17 發布了 基於 Eclipse OpenVSX Registry 的 SmartIDE插件市場。OpenSumi的開發團隊在測試了 SmartIDE插件市場之後發現速度提升可以達到10倍以上,並將其設置為OpenSumi內默認的插件市場來源。

下圖來自://github.com/opensumi/core/pull/1045 ,是 OpenSumi 團隊的測試結果。

OpenSumi PR

SmartIDE插件市場 是我們針對中國使用類 VSCode IDE 的開發者提供的開源插件市場鏡像服務,我們將 open-vsx.org 的國外站點通過 Github Action 自動同步到了部署在中國的站點中,經我們自己測試速度提升2-5倍。此次經阿里螞蟻OpenSumi團隊的測試結果提升10倍的原因可能是因為他們採用了批量插件安裝的方式。這個結果對於中國使用類 VSCode IDE 的團隊來說是一個好消息,說明我們提供的 SmartIDE插件市場 開始發揮它應有的作用了。

在 Sprint 18 中,我們還對插件同步機制進行了改進,增加了按周期自動同步和歷史版本同步機制,這樣就可以確保中國的小夥伴及時獲取到最新的VSCode插件。

相關修改可以參考 //github.com/SmartIDE/eclipse-openvsx/issues/2

以上PR已經在2022年5月18日合併進入OpenSumi的主分支,安裝 OpenSumi 的最新版就已經可以體驗插件極速安裝的快感了。

Dapr 微服務開發環境支援 VM-Like-Container驗證通過

Dapr 是微軟主導的雲原生開源項目,2019年10月首次發布,到正式發布 V1.0 版本的不到一年的時間內,github star 數達到了 1.2萬(現在已經超過1.7萬星),超過同期的 kubernetes、istio、knative 等,發展勢頭迅猛,業界關注度非常高。

Dapr 這個詞是是 「Distributed Application runtime」的首字母縮寫,非常精鍊的解釋了 dapr 是什麼:dapr 是一個為應用提供分散式能力的運行時。

Dapr官網 //dapr.io

Dapr

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的示例應用的截圖:

示例程式碼庫地址://github.com/SmartIDE/sample-dapr-traffic-control

Dapr Traffice Control Sample

在這個示例中,我們使用了 dapr init 來初始化 dapr 開發環境,運行 dapr 的基礎服務,然後啟動 Mosquitto 作為 MQTT brokerRabbitMQ 作為消息隊列以及其他的基礎服務。應用本身需要至少4個微服務組件才能正常工作:

  • TrafficControlService 是交通控制服務,也是主服務,其業務邏輯是根據公路上的2個固定位置攝影機回饋的數據,計算車輛通過攝影機的車速,以便判斷是否存在超速行為。
  • FineCollectionService 是罰單處理服務,根據 TrafficControlService 發送過來的車牌數據,查詢車輛註冊資料庫(VehicleRegistrationService)獲取聯繫人資訊,並發送郵件
  • VehicleRegistrationService 是車輛註冊資料庫,提供車輛資訊查詢,可以通過車牌號碼獲取車主資訊,比如郵件地址。
  • Simulation/VisualSimuation 是一個模擬器應用,用於模擬車輛行為,以便可以測試以上服務的工作情況,在上圖中展示的是 VisualSimulation 的畫面。

Dapr Traffice Control Sample

下面這個影片完整演示了如何使用 SmartIDE開發調試 經典的Dapr示例 dapr-traffice-control,相關的啟動命令如下

smartide start //github.com/SmartIDE/sample-dapr-traffic-control
 
 

Jupyter Notebook 環境支援

遠程工作區 的一個重要優勢就是可以幫助開發者更好的利用遠程主機的強大算力和數據處理能力,在這個領域中 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。

示例地址 //github.com/SmartIDE/sample-anaconda-jupyter

使用這個 Notebook 對上海和北京最近的疫情數據的分析結果如下:

Juypter Covid19 Analysis

備註:以上數據分析僅為展示SmartIDE的產品特性,數據處理的非常粗糙。歡迎對 Juypter Notebook 開發有興趣的小夥伴提交PR改進我們的分析演算法。

大家可以使用以下指令一鍵啟動上面這個示例

## 在本地開發機上啟動
smartide start //github.com/SmartIDE/sample-anaconda-jupyter.git
## 在遠程主機上啟動
smartide start --host <hostId> //github.com/SmartIDE/sample-anaconda-jupyter.git

啟動以後的效果如下,圖中:

  1. SmartIDE簡化指令方式 se = smartide
  2. 內置在遠程工作區中的 VSCode WebIDE,這個遠程工作區中還預置了 Python 環境,開發者可以直接在VSCode中使用Python語言進行編程。
  3. 內置在工作區中的 Jupyter Notebook,載入了 「新冠疫情分析」 示例數據,這個 Notebook 通過讀取微信疫情小程式的API介面獲取實時數據,並利用圖表展示了上海過去60天疫情變化趨勢

Juypter Covid19 Analysis

在適配 Jupyter Notebook 的過程中,SmartIDE沒有修改一行產品程式碼,完全利用我們所提供的 IDE配置文件 和 開發者鏡像模版庫 的能力完成。SmartIDE作為一款面向企業的B端產品,對於可擴展性能力的要求是根植於產品的設計核心。利用這種能力,企業在部署了SmartIDE之後無需進行二次開發就可以自助適配各種開發語言,工具和環境,大幅降低企業採納遠程工作區的技術門檻和實施成本。

下面的影片展示了在 SmartIDE 中使用 Jupyter Notebook 分析上海和北京疫情數據的過程:

//www.bilibili.com/video/BV1mZ4y1t7fj?spm_id_from=333.999.0.0

CLI k8s 模式支援(特性預覽)

SmartIDE CLI中已經增加了k8s相關指令,用戶現在可以使用 smartide start --k8s 來完成在k8s集群中啟動 遠程工作區 的操作,基於 計算器示例應用 的啟動命令如下:

smartide start --k8s SmartIDEAKS --namespace default --repourl //github.com/idcf-boat-house/boathouse-calculator.git --filepath .ide/k8s.ide.yaml

使用這個指令之前用戶需要完成2個準備工作:

  1. 在k8s集群上安裝 smartide-file-storageclass,這個配置的目的是為了能夠讓 SmartIDE 可以支援各種類型的k8s服務。Storage Class (存儲類定義)是k8s上適配不同提供商的底層存儲driver而提供了一層隔離機制,在遠程工作區場景下,我們需要允許工作區中的多個開發容器共享的訪問同一份程式碼/配置/環境變數/工具等資源,因此需要使用具備 ReadWriteMany 能力的存儲 driver。
  2. 在本地的 .kube 目錄中導入你的k8s集群的 kube-config 文件,這個步驟是為了允許 SmartIDE CLI 可以連接k8s進行操作的許可權。

以下是導入 storageclass 的相關指令,當前只提供Azure微軟雲的配置文件,使用其他雲平台或者自建k8s平台的小夥伴可以自行查找適合自己平台的StorageClass配置文件,後續我們也會統一提供。

kubectl apply -f //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開發者, 享受 開發從未如此簡單 的快樂。