SmartIDE v0.1.18 (cli build 3538) 已经发布,在过去的Sprint 18中,我们集中精力推进对 k8s 远程工作区 的支持,同时继续扩展SmartIDE对不同技术栈的支持,我们适配了针对分布式应用运行时Dapr以及数据科学计算分析工具Juypter的环境支持。在这个过程中,我们探索了VM-Like-Container的能力,为提供开发者优化的容器环境又迈进了一步。最后,我SmartIDE插件市场也迎来了它的第一个开源社区支持者,阿里蚂蚁开源的国产IDE OpenSumi已经将 SmartIDE作为自己的默认插件源。
2022.05.19

阿里蚂蚁OpenSumi采用SmartIDE插件市场提速10倍

在 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 微服务开发环境支持 VM-Like-Container验证通过

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 brokerRabbitMQ 作为消息队列以及其他的基础服务。应用本身需要至少4个微服务组件才能正常工作:

  • TrafficControlService 是交通控制服务,也是主服务,其业务逻辑是根据公路上的2个固定位置摄像头反馈的数据,计算车辆通过摄像头的车速,以便判断是否存在超速行为。
  • FineCollectionService 是罚单处理服务,根据 TrafficControlService 发送过来的车牌数据,查询车辆注册数据库(VehicleRegistrationService)获取联系人信息,并发送邮件
  • VehicleRegistrationService 是车辆注册数据库,提供车辆信息查询,可以通过车牌号码获取车主信息,比如邮件地址。
  • Simulation/VisualSimuation 是一个模拟器应用,用于模拟车辆行为,以便可以测试以上服务的工作情况,在上图中展示的是 VisualSimulation 的画面。

下面这个视频完整演示了如何使用 SmartIDE开发调试 经典的Dapr示例 dapr-traffice-control,相关的启动命令如下

Copy

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

Jupyter Notebook 环境支持

远程工作区 的一个重要优势就是可以帮助开发者更好的利用远程主机的强大算力和数据处理能力,在这个领域中 Jupyter Notebook 无疑是非常典型的应用类型。我们在 Sprint 18 中增加了对 Jupyter Notebook 的远程工作区支持,现在开发者可以使用一个简单的指令就可以启动预装 Jupyter Notebook 的远程工作区,并且通过 --host 参数将这个 工作区漫游 到任意主机或者k8s环境中。相关指令如下:

Copy

## 启动使用 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改进我们的分析算法。

大家可以使用以下指令一键启动上面这个示例

Copy

## 在本地开发机上启动
smartide start https://github.com/SmartIDE/sample-anaconda-jupyter.git
## 在远程主机上启动
smartide start --host <hostId> https://github.com/SmartIDE/sample-anaconda-jupyter.git

启动以后的效果如下,图中:

  1. SmartIDE简化指令方式 se = smartide
  2. 内置在远程工作区中的 VSCode WebIDE,这个远程工作区中还预置了 Python 环境,开发者可以直接在VSCode中使用Python语言进行编程。
  3. 内置在工作区中的 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

CLI k8s 模式支持(特性预览)

SmartIDE CLI中已经增加了k8s相关指令,用户现在可以使用 smartide start --k8s 来完成在k8s集群中启动 远程工作区 的操作,基于 计算器示例应用 的启动命令如下:

Copy

smartide start --k8s SmartIDEAKS --namespace default --repourl https://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配置文件,后续我们也会统一提供。

Copy

kubectl apply -f https://smartidedl.blob.core.chinacloudapi.cn/kubectl/resources/smartide-file-storageclass.yaml

另外,如果使用 azure-cli,可以直接使用以下指令快速创建k8s集群(测试用途)并获取集群的 kube-config 配置

Copy

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开发者, 享受 开发从未如此简单 的快乐。

SmartIDE v0.1.18 已经发布 - 助力阿里国产IDE OpenSumi 插件安装提速10倍、Dapr和Jupyter支持、CLI k8s支持的更多相关文章

  1. SmartIDE v0.1.17 已经发布 - 模版库远程模式和插件市场公测

    SmartIDE v0.1.17 已经发布,本次同步更新了CLI (Build 3332) 的稳定版通道和Server (Build 3333) 生产环境(内测中).请参考对应的 安装说明 获取最新版 ...

  2. SmartIDE v0.1.16 已经发布 - 支持阿里&蚂蚁开源的国产 IDE OpenSumi

    SmartIDE v0.1.16 (Build 3137) 已经在2022年4月19日发布到稳定版通道,我们在这个版本中增加了阿里和蚂蚁发布的国产IDE OpenSumi的支持,以及其他一些改进.Sm ...

  3. 【免费公测】阿里云SSD云盘,不仅仅是IO提速10倍

    今天很高兴为大家介绍最新的ECS存储服务:SSD云盘. SSD云盘基于全SSD存储介质.利用阿里云飞天分布式存储技术,提供数据可靠性99.999%的高性能存储:该产品具备以下特点: l  高性能:单个 ...

  4. SmartIDE v0.1.19 - 码云(Gitee)最有价值开源项目奖项、工作区策略、类虚拟机镜像VMLC、Server安装手册

    SmartIDE v0.1.19 (CLI Build 3909, Server Build 3890) 已经发布,本次Sprint主要完成2个重要特性,工作区策略和类虚拟机容器(VM Like Co ...

  5. Docker将镜像文件发布到阿里云

    一.创建新镜像文件 1.创建容器并在容器内创建一个文件夹 在容器内创建一个新文件主要是为了代表这个容器非镜像文件直接创建的容器,而是通过自定义在容器内创建了属于自己的文件 2.提交容器副本使之成为一个 ...

  6. Oracle GoldenGate 18.1发布

    软件下载地址:https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html 文档下载地址: https:/ ...

  7. 阿里云Centos7使用yum安装MySQL5.6的正确姿势

    阿里云Centos7使用yum安装MySQL5.6 阿里云Centos7使用yum安装MySQL5.6 前言:由于某些不可抗力,我要在自己的阿里云服务器上搭建hadoop+hive+mysql+tom ...

  8. 10倍处理能力 阿里云推云上首个支持12层4K非编NAS产品

    5月23日,阿里云在2017云栖大会·成都峰会上正式推出了云上首个支持广电级非编的文件存储产品------NAS Plus,作为阿里云文件存储NAS的升级款,NAS Plus提供高达200Gbps的吞 ...

  9. 数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……

    摘要:墨天轮数据库周刊第31期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.openGauss 正式开源,华为公开发布源代码[摘要]6月1日,华为正式宣布开源数据库能 ...

随机推荐

  1. Anaconda安装tensorflow和keras(gpu版,超详细)

    本人配置:window10+GTX 1650+tensorflow-gpu 1.14+keras-gpu 2.2.5+python 3.6,亲测可行 一.Anaconda安装 直接到清华镜像网站下载( ...

  2. python-班级人员信息统计

    输入a,b班的名单,并进行如下统计. 输入格式: 第1行::a班名单,一串字符串,每个字符代表一个学生,无空格,可能有重复字符.第2行::b班名单,一串字符串,每个学生名称以1个或多个空格分隔,可能有 ...

  3. 【Android开发】【数据库】LitePal 数据库的使用

    一,导包 dependencies { ...... // LitePal的包 compile 'org.litepal.android:core:1.3.1' ...... } 二,创建bean类 ...

  4. java中 什么叫隐藏(Hide)? 最好给个例子

    4.隐藏   技术核心和实例前面已经给出,这里只是给出大家对这种现象的一个定义而已,马克-to-win:子类重新定义一个与父类那里继承来的域变量完全相同的变量,称为域的隐藏.这里所谓隐藏是指子类拥有了 ...

  5. java中如何知道一个字符串中有多少个字,把每个字打印出来,举例

    9.6 About string,"I am ateacher",这个字符串中有多少个字,且分别把每个字打印出来. public class Test {     static i ...

  6. java中递归的用法和例子

    递归   直接或者间接调用自己, public class Test{    public static void main(String[] args){        int i = 5;    ...

  7. jdbc连接数据库以及简单实现(普通JDBC方法实现和连接池方式实现)

    @ 目录 总结内容 1. 基本概念 jdbc的概念 2. 数据库连接 数据库的连接 DAO层思想 重构设计 3. 事务 概念 事务的ACID属性 事务的操作 4. 连接池 为什么要使用连接池 连接池分 ...

  8. css实现超出部分显示省略号

     /* 显示一行,省略号 */       white-space: nowrap;     text-overflow: ellipsis;     overflow: hidden;     wo ...

  9. 《头号玩家》AI电影调研报告(四)

    五. 现实中对于技术的实现 1.自由变身 电影中,主人公借助"魔幻眼镜"让自己快速变成另一个人的模样,现实中我们一样也能做到! 在今年游戏开发者大会(GDC)上,一个名为" ...

  10. 微信小程序,制作属于自己的Icon图标

    前言 最近在接手一个微信小程序,发现里面的图标都是使用的image组件,看起来非常别扭,加载也不太顺畅. 就想着看看微信有没有类似自带的图标库可以使用. 有是有,就是太少了,翻来翻去好像也就 8 种, ...