BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 陈菲 关注 0 他的粉丝 发布于 2013年11月16日. 估计阅读时间: 16 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Eclipse OrionCloud9及其它新一代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”,也将触发你在同一机器中所定义的进程命令。

InfoQCodenvy能离线工作吗?如果不能,你们的计划是什么?

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)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT