写点什么

Codenvy 背后的技术 -- 一次与 CEO TylerJewell 的深入访谈

2013 年 11 月 15 日

Eclipse Orion Cloud9 及其它新一代 IDE 一样, Codenvy 也是其中一员。它们都试图转变开发人员创建软件的方式,为他们提供可以在任何主流浏览器上执行的前端界面,以及可以在服务器或云中执行的后端,该部分将处理所有的力气活:编译、代码分析、构建、预备、发布等等。

Codenvy 可以支持多种语言的在线开发,其中有 Java、JavaScript、HTML5、CSS、PHP、Python、Ruby 及 XML。同时更多的工作也在进行中,以便支持更多语言,同时为社区提供所需工具用来添加想要的语言。对于框架也是一样的,Codenvy 目前支持 Spring、Node.js、JSP、Rails、GWT 和 Django 等框架。对于 Android 开发的支持也在 Google I/O 2013 对外发布了。

应用程序在 IDE 里就可以往不同 PaaS 上发布:Amazon(Elastic Beanstack)、CloudBees、Cloud Foundry、GAE、Heroku、OpenShift、AppFog 和 Tier3。

对于代码仓库,Codenvy 一开始就支持 GitHub 和 BitBucket ,随后支持 Git 和 Mercurial 代码库,但是最近添加了对 Assembla、BeanStalk、Codebase、Deveo、GitEnterprise、Gitorious、PikaCode、ProjectLocker 和 Unfuddle 的支持。Codenvy 使用 Jenkins、Hudson 或 CloudBees 来持续集成。

Codenvy 支持结对编程,它含有实时多光标协作功能。其代码编辑器包含有语法高亮,代码补全和重构功能。

我们采访了 Tyler Jewell,Codenvy 的 CEO,以便挖掘出那些为该 IDE 提供动力的技术背后所存在的更多细节。

InfoQ:Codenvy 是由什么构造的?其背后技术、服务器和客户端都是什么?

TJCodenvy 作为一个云系统,包含有多个节点来处理路由,负载平衡,身份管理,IDE,生成器,运行器和分析器。核心 IDE 本身是用 Java 编写的,并由 GWT 生产优化后的客户端 JavaScript。对于大部分浏览器和服务器之间的沟通,我们则采用 WebSockets。其它在系统中广泛使用的技术包括:Apache Web Services,CloudFoundry,Gluster,CodeMirror,Collide(协同编辑器),Hadoop 和 Apache Pig。其实 Codenvy 的核心是作为构建云 IDE 的平台。在内部,我们利用一个运行时框架来管理发现,加载,协调和激活分层扩展。扩展是以插件形式打包好提供语言、框架、编辑器、文件管理、生成器指令和运行器指令。然后我们创建一个 IDE 框架链接各个插件并部署到云框架,用来提供租赁、灵活性、日志记录、身份管理和隔离控制。我们建立了自己的多租户 IP,这样在单个 JVM 上就能运行最多 250 个 IDE,同时也防止 IDE 在执行生成和运行流程时产生拥堵现象。我们针对 OAuth 创建了自己的拓展,用来允许入站身份验证请求,以及向外拓展身份到云下游以简化用户工作流。我们使用 puppet 和大量的 Bash 脚本来处理与 Devops 相关的问题。而我们的网站,作为独立于我们云生命周期的产品,是通过 JavaScript、Yeoman、Grunt 和 Jekyll 撰写的。而对于工具,我们则大量使用 GitHub、Jira、Confluence 和 Selenium。Codenvy 的原始代码是通过使用 Eclipse 和 IntelliJ 来撰写的,但是现在大部分 Codenvy 是通过 Codenvy 本身来撰写的。

我们使用超过 100 多个开源库来创建运行现有 Codenvy 的各种元素。

InfoQ: Codenvy**** 是在哪里运行的,在您自己的服务器上,还是在云里?到底是哪个?

TJ我们有开发(验收测试),临时(完整的测试环境),准产品(允许市场营销、技术支持和文档参与进来的最终确定版本),以及产品等不同环境。我们在 AWS 上运行产品。准产品则在我们自己位于欧洲的数据中心内,执行于 Eucalyptus 之上。我们将临时环境运行于 AWS,这样就能进行 Devops 配置,测试多种不允许内部访问的云 API,以及执行大规模的测试。我们的开发服务器环境都是包装有 Codenvy 的单服务器,它们能根据配置执行于 1 到 2 个虚拟机上。针对每个功能特征,我们使用开发环境(能同时运行 6 个)驱动从 PM 和用户那所获取的验收标准。在 Sprint 中,验收服务器会在我们自己的数据中心中运行每个功能。当 Sprint 结束后,临时环境和预产品环境将通过 Puppet 程序自动更新。

InfoQ你们是否有打算支持其它语言呢?如果是,那将是哪些?

TJ目前就我看来,我们不可能支持太多的语言。在这里,我们有两个方向可以考虑:一是全新的语言,需要专门的构建和运行环境来执行;另外就是可以运行于 VM 的语言,类似那些执行于 JVM 的。如果单靠我们自己团队,有太多的环境需要支持,因此我们把社区引入进来。我们一直在努力完成内部所使用的 SDK,然后将其发布出去,这样大家就能创建自己的扩展和插件。它的架构和 Eclipse 插件相符,只会更广泛一点。Codenvy 内部是个完整的构建子系统和执行 Cloud Foundry 的运行环境。因此,如果开发人员想往系统中添加新语言,比如:C,就需要添加常用的 IDE 部件(文档、语法、调试、重构和宏)。同时也需要给 Codenvy 相应指令去操作构建系统(make)和运行环境。

我们的首要任务就是将该 SDK 发布出去,而这将是在今年;随后,我们的第二个重点是将围绕不同框架和语言的社区组织起来。我们也有来自外部的人有兴趣参与到 C、C++,Objective C、Go、Scala、Plan 等语言中。

InfoQ那对框架 /PaaS/CI 的支持呢?

TJ在每个 Sprint 中我们都尝试添加新的东西。我们执行为期两周的 Sprint,因此这方面的列表总是在变化。之所以 Codenvy 这么快能走红,是因为我们有个广泛的集成,而且也没有放缓的倾向。我们最新列表也是广泛分布的。我们为 GitHub、Bitbucket、AWS、Google App Engine、Heroku、Cloud Foundry、OpenShift、CloudBees、Tier3 和 AppFog 所提供的高度支持,感到非常自豪。我们也刚刚完成大概 10 个 git 供应商的认证,因此我们将更新所有规范和 how-to,以更好地与各供应商协作。

对于 CI 的支持,我们启用了 post-comment hooks,以及让 Web Service 直接调用 CI 供应者。

InfoQ该 SDK 提供了什么?我理解是开发人员能够自己添加语言或平台。还有该 SDK 将在什么时候发布?

TJ该 SDK 提供了一个 API 用于编写分层拓展;一个 API 用于分离 UI、数据(文档)和事件模型,以便单独考虑;API 文档;一组插件实例,比如我们给 Java 所设计的那样;一个专门的 SDK 云允许开发人员上传插件测试。插件本身将通过 Java 和 GWT 来编写。除非是在开发模式下运行,否则 GWT 需要 11 分钟编译。我们打算让 GWT 为 Codenvy 设置一个开发模式,但是从简化创建流程的最初目的上看,我们需要开发人员上传插件到 Codenvy 的伙伴云中,在那里我们可以编译、打包以及集成到运行时中。

该 SDK 云的最初版本会发布于 2013 年夏天。我们已经签订了好几个 ISV 合作伙伴,他们对此非常期待,因此这是我们内部的最高优先级。

在首次发布后,我们将创建 Codenvy WAR 文件包。这样开发人员就可以在 Tomcat 中运行 Codenvy 的单服务器版本,同时本地构建和发布插件。该版本将会有点棘手,因为它没有包含对运行器的支持。由于我们使用的是 Clound Foundry 执行运行器,目前为止还没有找到一个简单的方法将运行器包装到单服务器模式。我们将允许开发人员映射他们的“云运行器”到 Tomcat 中运行来处理 localhost 系统。因此如果在 localhost 的浏览器中执行“Run”,也将触发你在同一机器中所定义的进程命令。

InfoQ**:Codenvy能离线工作吗?如果不能,你们的计划是什么?**

TJ我们不支持离线工作。在某种程度该话题本身就能成为一个初步招股说明书(a red herring)。从 UserVoice 获知,该特性是排名第 4 或第 5 个大家所需要的。但是当我们询问开发人员他们为什么需要这个特性时,答案却每个都不一样。有些人担心飞机旅行,需要完全离线;而有些则考虑如果只有部分网络访问能力的话,情况会怎么样;但大部分人并不认为如果没有该功能会是个大问题,而提出该需求本身也是件非常自然的事。

提供离线支持的一部分在于决定哪些可以离线。我们可以很容易地提供一个文本编辑器,但不会有对 Git 指令、构建、调试、运行或部署的支持。因此,从最基本层面看,初始阶段允许开发人员离线时有个只读模式是有一定道理的。而这在将来也非常容易做到。除此之外,不同层次的离线功能将取决于你是否可以或愿意允许在客户端安装它们。如果系统完全基于浏览器,那么我们可以同步 Git 代码库,并提供编辑功能。如果允许我们在桌面上安装软件,那么我们也可以在本地创建一个完全同步的构建和运行器。

在这方面,我们还在评估哪方面是我们想做的,并希望与社区进行更多的讨论。

InfoQ你能就 Codenvy 对 JRebel、Rally Dev 和 Tasktop 的集成上提供更多的细节吗?

TJ为协调 Java 工程我们提供了 JRebel。首先建立一个单一且永久的运行器,然后在生成器和运行器集群间激活 JRebel。

我们会在今年年底讨论我们将为 Rally 和 TaskTop 做哪些工作。

InfoQ目前只有社区版是可用的。你们打算什么时候推出其它已经宣布定价的版本呢?

TJ其实,我们已经有一些付费服务可供出售。现在,我们为那些个人使用者提供了“早期采用者项目”,并提供 66% 的折扣。随着时间的展开, 我们对于在每一个版本中增加的高级特性更有自信, 价格将会逐年增加.

InfoQ企业版将包含什么?

TJ: Codenvy 企业版将会是一个安装在防火墙后能管理大量开发者的云系统. 迄今为止使用的客户都是那些有监管,合规,安全,外包管理需求的. 企业版除了包含公共云的特性之外还加入了一些特殊功能: a) LDAP(轻量级目录访问协议)& 认证集成,b) 集群, 负载均衡, 和高可用性策略控制, 和 c) 分析和汇报以衡量采购,参与度,以及开发团队、工作空间和项目的活力。现在,客户们自己提供硬件,然后在 Tier3、AWS、Eucalyptus 或 OpenStack 上运行 Codenvy Enterprise。

有趣的是,很多 Codenvy Enterprise 的早期使用者并没有把它当作 Eclipse 的替代品。相反,它被作为一个辅助的系统。很多情况下,我们会替换离岸开发人员运行缓慢的 VDI 或 TS 环境。在其他情况下,当花时间在有限窗口下编程比学会如何配置开发环境更重要的时候,我们正在变成新员工、实习生或合作伙伴的培训基地。就算作为辅助使用,开发人员还是可以推广自己的云,只是他们需要自己负责管理桌面,并让 IT 负责管理 Codenvy。

InfoQ对于将来,你们有什么计划?

TJ我们非常有幸拥有 30 个工程师在我们的开发团队。他们都是非常出色的系统工程师,在构建大而复杂的系统上有很丰富经验。我想这也正是他们的动力之源,促使他们开发设计出了大量能帮助开发人员自动化复杂工作流的项目。我们的精力将分散到以下这几个分类中:

1) 支持开发人员。更多的语言,更多的框架,更多的云集成和其他云服务将被引进。我希望在年底能集成 250 个技术到 Codenvy 中。此外,由于与 Trigger.IO 和 Google 的合作,我们已公开承诺将添加 Android 和 iOS 开发。

2) 支持独立软件开发商(ISV)。在第三季度,我们将交付各种 ISV 软件包,这样用户就能自定义模板,推广示例应用程序,以及内部构建 / 测量 / 跟踪开发活动。最终,我们希望所有 ISV 都能在线配置自定义的、按需的 IDE。这一点,在很多方面,需要结合他们在 SDK 方面的情况。

3) 支持企业。我们寻求更多的 POC,及在大企业中的安装。我们已经在一些大公司上完成安装,但是我们想再完成大概 25 个后,再宣称 Codenvy Enterprise GA。任何想自己运行开发云的公司,都可以联系我们,我们将非常荣幸。

关于被访者

Tyler Jewell是 Codenvy 的 CEO。同时也是 Toba Capital 的投资合伙人,他主要关注中间件和应用开发投资。他是 WSO2、Exo Platform 和 Codenvy 的董事会成员,同时也投资了 Cloudant、ZeroTurnaround、InfoQ 和 AppHarbor。

参考英文原文: The Technology behind Codenvy. An Interview with Tyler Jewell, CEO


感谢陈菲对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013 年 11 月 15 日 08:064170
用户头像

发布了 39 篇内容, 共 10.9 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

网易游戏部门Java架构师必看的“完美版”Netty源码笔记

Java架构追梦

Java 学习 源码 架构 Netty

架构师养成第三课

万有引力

生产环境全链路压测建设历程之六 淘宝网2012年双十一的痛

数列科技杨德华

Week 12

黄立

iOS面试高薪,进阶 你会这些呢嘛?

ios swift 面试

腾讯T1~T9级别工程师具备专业的能力及知识点总结。

Linux服务器开发

程序员 腾讯 工程师 Linux服务器开发 岗位级别

使用Tomcat Native提升Tomcat IO效率

程序那些事

tomcat nio 异步IO 程序那些事 bio

Redis为什么用跳表而不用平衡树?

Java架构师迁哥

复盘不止复盘,更是个人认知升级加速器?

Alan

复盘 思维 技术人应知的创新思维模型 28天写作

架构师训练营第 1 期 - 第十二周作业

Todd-Lee

极客大学架构师训练营

TRONex智能合约APP系统软件开发

开發I852946OIIO

系统开发

Tronex智能合约APP系统开发|Tronex智能合约软件开发

开發I852946OIIO

系统开发

架构师训练营第三周课后作业

万有引力

Github上标星82.1K+star面试笔记,可以帮你搞定95%以上的Java面试,已经帮助多人拿下offer

云流

学习 程序员 面试 计算机

架构之书:审美与《重构》

lidaobing

架构

架构师训练营第 1 期 - 第十二周总结

Todd-Lee

极客大学架构师训练营

开除AI伦理学家,谷歌如何从“不作恶”到“不宽容”?

脑极体

与技术总监另起炉灶的CTO | 法庭上的CTO(8)

赵新龙

CTO 法庭上的CTO

跨专业零基础校招拿到网易18K*13薪Java岗offer全过程复盘总结

Java架构师迁哥

《人工智能:一种现代的方法(第3版)》PDF

计算机与AI

人工智能 学习

【小菜学网络】物理层概述

fasionchan

网络编程 计算机网络 网络协议 TCP/IP 物理层

天下武功,唯“拆”不破之MECE原则一| 技术人应知的创新思维模型 (5)

Alan

职场成长 技术人应知的创新思维模型 组合创新 结构化思维 28天写作

基于 getty 的分布式事务框架seata-golang 通信模型详解

apache/dubbo-go

dubbo dubbo-go dubbogo seata

云上的移动性能测试平台

应用研发平台EMAS

阿里云 测试 移动研发平台

Kindle的又一用处

孙苏勇

读书

腾讯T3大牛手把手教你!从外包月薪5K到阿里月薪15K,分享一点面试小经验

欢喜学安卓

android 程序员 面试 移动开发

2021数字化投资规划,你做好了吗?

ThoughtWorks洞见

架构 业务架构

Singleton手绘

raox

极客大学架构师训练营

实践出真知!华为Android面试真题解析,附超全教程文档

欢喜学安卓

android 程序员 面试 移动开发

学习笔记丨Linux中数据提取相关命令

Liuchengz.

Linux ubuntu #Ubuntu

找到相同链表的点

落朽

Codenvy背后的技术--一次与CEO TylerJewell的深入访谈-InfoQ