Codenvy架构:第一部分

1.0 概述

\

Codenvy是一个云IDE,大约有10万开发者在使用该IDE编码、构建和测试应用程序。

\

本文解释了Codenvy的各种技术和网站的架构。

\

(点击图像放大)

\

947a77f67d66a5e7b8b9ba09431b5740.jpg

\

我们的架构是由打算为用户提供的不同内容驱动的:

\
  1. Codenvy.com ——一个托管的云IDE,支持服务协议定义(SLA)和硬件。\
  2. Codenvy Enterprise——允许组织在他们自己的服务器上编码、构建、测试和部署应用程序。\
  3. Codenvy ISV ——使用推动工厂(Promoted Factories)、收费插件(Monetizable Plug-ins)和IDElets驱动并度量已发布的SDK和API的技术约定。一个工厂是一种通过策略启动一个临时的编码、构建、测试和调试工作空间的方法。一个IDElet是一个能够插入到其他产品中的可嵌入的编码、构建、测试、调试工作流。\
  4. Codenvy Platform——一个云IDE引擎,为开发者提供了一种方法让其能够开发、测试、运行工具插件和应用程序。\

Codenvy Platform是用于交付Codenvy.com、Codenvy Enterprise和Codenvy ISV的引擎。我们还能使用它创建任何其他有品牌化实现需要的IDE。该SDK的结构和Eclipse Platform相似,但是它是针对云环境设计的。该IDE还支持插件开发,开发人员能够为构建、运行、测试和调试工作流开发插件,而这些插件通常在IDE本身之外运维。

\

架构讨论将会分为两个部分:1)驱动Codenvy Platform的SDK,2)对SDK进行扩展从而创建Codenvy.com的组件。

\

2.0云IDE和桌面IDE之间的区别

\

这两种IDE之间的主要技术区别是——典型区别——对于桌面IDE而言,IDE提供商的期望是在工具本身之外安装和管理打包、构建、测试和运行环境。当然并非总是如此,因为确实有一些先进的IDE能够将这些额外的组件安装到主机上,但是这并不是很常见。

\

对于云IDE而言,它完全存在于云端;所以除了执行IDE之外,云IDE提供商通常还必须在一个托管的位置提供构建和运行时环境。

\

这个区别带来的不仅仅是希望,还有挑战。云IDE带来的希望是,开发者能够完全在云端开发,云IDE提供商能够提供更多的组件、做的更快并且潜在地降低由配置而引发的错误。挑战是管理一个工作空间的额外成本,现在它不仅包含了一个IDE,还包含了项目、代码、构建器和运行器。

\

2.1云IDE工作空间的管理方法

\

管理云端工作空间通常有两种方法可以采用:

\
  1. 为用户分配一个专有的虚拟机,他们在该虚拟机上拥有特权,可以安装那些能够被编辑、构建或者执行的文件以及其他的软件。\
  2. 用户共享合并的均匀规整的资源、IDE功能(例如重构)命令,构建功能、运行功能分布在不同的集群上并针对每一个功能做了针对性的优化。开发环境越规整,对于操作员而言系统的操作越密集。负面影响便是这些系统不够灵活,也不太可能成为开发者工作上的一个完美的匹配方案。\

Codenvy.com为用户提供了这两种配置。

\

对于资金计划充裕的用户而言,我们会运行第一个配置,为用户分配一个支持SSH选项的专有虚拟机。用户将能够在2013年的第4季度使用该计划。他们可以在虚拟机上安装不同的构建和运行时软件。然后可以重新配置运行在Codenvy系统内部的IDE,调整构建、运行和调试命令的指向让它们执行驻留在专有虚拟机中的进程。

\

对于想使用免费计划的用户而言,我们运营了一组集中式服务器,它们被分为了三个集群:一个用于IDE,一个用于构建,一个用于运行。每一个集群之间存在一个队列系统,它们控制着活动在集群间的前进和后退。每一个集群能够独立地扩展,并且支持不同用户的高密度操作。IDE集群对它们的I/O和内存瓶颈进行扩展,构建集群对技术能力扩展,运行集群对内存扩展。

\

3.0 CODENVY 平台的SDK架构

\

因为不同的开发者使用的开发工作流可能是不同的,所以我们需要设计一个引擎,该引擎允许创建不同的云IDE,它们能够改变系统的行为和体验。有一些良好定义的方式能够组织过去这些年由Eclipse和JetBrains产生的那些插件,同时这些接口能够被扩展到一个多租户的云环境。

\

SDK包括:

\
  1. 一个云客户端运行时,负责发现、注册、加载和管理插件。该运行时还负责管理一组连接到参与工具工作流系统的多租户入站和出站外部连接。\
  2. 一个云客户端SDK,能够开发多租户、云客户端插件。该SDK为资源、事件和用户界面的使用提供了一个通用的模型。插件能够按照一种可扩展的、良好定义的格式进行集成或分层。\
  3. 一组标准的插件,它们提供与核心开发工具相关的功能,并且在必要的时候可以从运行时中分离出来。目前的插件集合包括:git、Java、CSS、Python、HTML、Ruby、XML、PHP、JavaScript、Browser Shell和maven。\
  4. 一个默认的IDE,它包含了一个结构良好的工作台用于组织代码仓库、项目、文件、构建集成、运行时/调试器集成以及部署/发布工作流。该IDE是一个插件集成包,它交付了一组默认的工具。用户能够通过浏览器或者一组REST风格的Web服务(表示每个工具的功能)访问该IDE。\

3.1 插件架构

\

构建一个IDE的基础是能够创建、打包、部署并更新一个插件。插件能够按照适合自己的方式进行扩展,并且能够以下面的方式进行分层:一个插件能够调用并扩展另一个插件。

\

SDK是一个两层应用程序,它包含Web应用程序和服务器端应用程序服务。这两层都是可扩展的,能够由第三方修改。

\

插件使用Java、GWT和CDI实现。接口系统自始至终都使用了注入和面向方面的编程,它们是插件扩展、将插件连接到一起并将插件链接进IDE本身所使用的技术。通过注入和CDI接口系统能够在插件前面创建一个非常干净简单的接口。同时还使用了GWT,因为它对生成能够在多种浏览器上运行的高性能的标准JavaScript代码功能做了一些优化。

\

下面是一个空白插件,它向IDE中添加了一个菜单项,该菜单项的状态在被选中时会发生变化。该插件能够在它自己的工作流中进行编译、测试和验证。为了扩展Java类的构造函数使用了注入技术,这些注入能够添加额外的会被传入扩展本身的参数,

\
\package com.codenvy.ide.extension.demo;\\import com.codenvy.ide.api.editor.EditorAgent;\import com.codenvy.ide.api.extension.Extension;\import com.codenvy.ide.api.ui.action.ActionManager;\import com.codenvy.ide.api.ui.workspace.WorkspaceAgent;\import com.google.inject.Inject;\import com.google.inject.Singleton;\\/**\ * Extension used to demonstrate the IDE 2.0 SDK fetures\ *\ * @author \u0026lt;a href=\"mailto:nzamosenchuk@exoplatform.com\"\u0026gt;Nikolay Zamosenchuk\u0026lt;/a\u0026gt;\ */\@Singleton\@Extension(title = \"Demo extension\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值