面向个人的免费插件仓库iOpenWorks平台终于成型发布了
经过5年的努力,一个平台的梦想终于初步实现,我们的插件仓库iOpenWorks平台(http://www.iopenworks.com)初步成型。iOpenWorks平台是一个面向软件开发者的免费插件仓库,致力于让开发者可以以“组装”的方式来实现软件的开发。平台梦的原型源于2008年,我和几个师弟都是技术爱好者,当时我们希望能够构建一个这样的平台:当我们需要开发一个软件的时候,我们可以先到一个软件素材库平台,先给我们的软件找一个主界面(未来也可以根据需求随时替换主界面,因为用户的需求是比较变态但我们希望能适应并降低工作量),然后下载组装;接着我们还可以再看看是否有现成的软件模块,比如通用的功能——数据访问/权限管理等,甚至是一些应用模块,我们也可以直接下载组装;然后基于这些基础为客户来快速定制出软件,甚至未来可以给用户组装出一个成品软件。当时的梦想也很简单,希望能为中国软件带来点变化。于是,带着这样简单的梦想,我们就开始在业余时间来设计和研发平台。各位前辈高手们,估计也意料到了,做这样事情将会无比的困难,需要解决的不简单是单纯的技术问题。不过,我们就是这么简单的开始了。下面我来介绍一下平台现状及研发历史。
1 平台介绍
iOpenWorks平台,中文为“开放·工厂”,它意味着,这个平台将会是开放式的,大家可以免费试用并进行技术成果分享;此外,我们希望为企业构建一个标准化的软件生产线平台,软件生产线平台的核心就是插件仓库(也可以成为组件库,但绝不是国内很多高校搞的所谓的组件库,因为我们的目标是面向企业应用,不是简单学术平台),开发者可以从插件仓库来获取需要开发的软件的界面、通用功能,然后在此基础上,大家并行来开发软件,而测试团队和部署团队则可以从插件仓库获取需要测试/部署的插件,直接将其部署到目标机器,一旦有更新可以自动升级。
插件仓库是整个平台的核心,只有一个上规模的插件仓库,才可以真正来实现“组装”式开发。目前插件仓库拥有108个的可直接使用插件,涵盖了桌面界面框架、Web界面框架、数据库访问、数据挖掘、数据集成、大数据支撑、消息队列、数据加密、文件访问等各类插件。
插件仓库也是软件生产线的关键,下图是以插件仓库为核心的软件生产线的架构和流程,通过插件仓库,团队之间的协作将完全实现自动化。这将避免开发过程中很多无谓的浪费。我对敏捷也有所研究,在我看来,“敏捷”不简单是快速开发,更是避免很多无谓的浪费,这些浪费集中在低效的协作、管理、维护。
插件仓库的所有插件必须有一个统一的规范和基于统一的插件框架,这是模块组装的前提,因此我们需要为模块选用一个标准开放的规范,当我在2008年接触到OSGi规范后,我毅然决然的将其作为插件框架的标准规范。因此,我们开始将OSGi规范移植到.NET平台,并且设计了目前算是国际上唯一的标准OSGi.NET插件框架(根据互联网搜索结果)。与Java的OSGi规范不同,我们在设计OSGi.NET规范时,已经考虑到这个规范要应用到所有的.NET应用环境,包括WinForm、WPF、ASP.NET、ASP.NET MVC(当时还没有)、Silverlight,甚至是移动等应用环境。下图就是OSGi.NET插件框架的主要功能及要兼容的环境。
上述三要素是整个平台的核心,因此,整个iOpenWorks平台的架构也就非常的清晰了,这个平台由插件仓库平台和插件开发工具组装。开发者基于插件开发工具来为用户构建应用系统,构建应用系统过程中,可以通过插件仓库访问与插件管理服务来访问插件仓库列表,然后下载需要的界面、通用功能组装起来,实现应用系统的基础框架,然后在此基础上进行定制开发;在开发过程中,可以将开发团队的所有插件进行集成,持续交付给用户,也可以通过插件部署工具直接发布到插件仓库中,给客户部署时可以实现自动化的升级/降级。
下面我来介绍一下这个平台的功能。
2 平台功能
iOpenWorks平台由插件仓库和插件开发工具来组装,下面我们来详细介绍。
2.1 插件仓库
插件仓库平台的核心在于插件管理、插件开发工具管理、插件内核文件管理、私有插件仓库管理等。
该平台提供的功能描述如下:
功能 |
描述 |
公共插件仓库 |
公共插件仓库包含有108个可以直接复用的插件,并为自动化升级提供了支持 |
OSGi.NET内核文件管理 |
1 内核文件升级; 2 内核文件修改或删除; 3 内核文件下载。 |
SDK下载 |
发布的公共SDK下载链接 |
用户管理 |
用户注册、登录 |
私有插件仓库 |
用户可以通过私有插件仓库来管理私有访问的插件,用户可以创建任意多的项目来管理插件,实现私有项目的自动化部署与升级,它提供如下功能。 1 私有插件项目创建、编辑、删除; 2 私有插件项目用户组及权限管理; 3 私有插件项目中对插件分类进行管理,实现分类的增加/修改/删除; 4 私有插件项目的插件管理,插件创建、编辑、升级和删除; 5 私有插件展示,包括插件的介绍、开发指南、依赖关系、日志等。 |
共享插件仓库 |
1 为所有人提供可以公开访问的插件; 2 权限检测、插件管理、插件升级; 3 插件分类管理。 |
插件依赖关系管理 |
该平台管理各个插件的依赖关系,用于在下载插件时自动将依赖的插件绑定下载 |
计数器 |
插件、SDK访问计数 |
插件仓库OpenAPI服务 |
1 插件仓库访问的开放接口,包括共享插件仓库浏览、私有插件仓库浏览、插件分类、插件详细信息; 2 内核文件访问的开放接口,提供内核文件浏览; 3 插件和内核文件下载; 4 插件创建或者升级。 |
统计日志 |
1 用户访问日志; 2 页面性能日志。 |
2.2 插件开发工具
插件开发工具支持VS2005、VS2008、VS2010和VS2012开发环境,支持.NET提Framework 2.0、3.0、3.5、4.0、4.5,由OSGi.NET插件框架、插件项目模板、插件迁移工具、插件自动化部署工具、插件可视化编辑工具、插件调试工具。
2.2.1 OSGi.NET插件框架
OSGi.NET插件框架架构如下所示,它是OSGi规范在.NET平台的实现,提供三大核心功能:动态模块化、面向服务和模块扩展,具备两大特性:动态性和个理性。
该框架的功能描述如下。
功能 |
描述 |
动态模块化 |
1 插件化支持,插件具备热插拔与隔离特性,每一个插件拥有独立的目录结构、独立的运行空间; 2 插件能够被动态安装、启动、停止、下载、更新; 3 插件具备依赖关系; 4 支持多版本类型加载; 5 支持启动顺序调节; 6 支持晚加载。 |
面向服务 |
1 支持服务动态注册; 2 支持服务动态绑定; 3 服务为轻量级,可在运行中动态安装、卸载和替换。 |
模块扩展 |
1 无限扩展支持,通过扩展点-扩展机制实现; 2 插件启动时,扩展/扩展点生效; 3 插件停止时,扩展/扩展点失效。 |
支持所有.NET应用 |
1 WinForm应用; 2 ASP.NET应用; 3 ASP.NET MVC应用; 4 WPF应用; 5 控制台应用; 6 Windows服务应用; 7 Silverlight甚至是手机应用。 |
自动升级 |
内置插件自动升级支持 |
跨平台支持 |
支持Mono,可在安装Mono的Linux的环境来运行 |
许可证支持 |
支持插件许可证颁发和校验,支持内核许可证颁发和校验 |
IDE和.NET Framework |
1 支持VS2005、2008、2010和2012; 2 支持.NET Framework 2.0、3.0、3.5、4.0、4.5 |
示例与文档 |
含有丰富的视频、规范的用户指南和详细的示例 |
2.2.2 插件项目模板
iOpenWorks平台的插件框架是目前上最简单的插件框架,为了能让开发者在3分钟内组装一个基础界面框架,我们费了很大的努力做了一些项目模板,项目模板如下所示。
项目模板功能描述如下。
功能 |
描述 |
各种应用 |
1 WinForm空主程序、空插件项目; 2 WinForm高级主程序、空插件项目; 3 WPF高级主程序、空插件项目; 4 ASP.NET空主程序、空插件项目; 5 ASP.NET高级主程序、空插件项目; 6 ASP.NET MVC高级主程序、空插件项目; 7 控制台主程序、空插件项目; 8 服务项目。 |
内核文件自动升级 |
1 iOpenWorks启动程序升级; 2 iOpenWorks插件仓库OpenAPI客户端程序升级; 3 OSGi.NET内核文件自动升级; 4 Web扩展程序自动升级; 5 MVC扩展程序自动升级。 |
系统插件 |
1 插件管理服务,暴露了插件内核管理、插件仓库访问服务; 2 插件中心插件,提供浏览插件、插件下载安装、插件升级、管理插件的界面库; 3 Web服务包装器服务,实现将普通对象封装成Web服务; 4 远程管理服务,通过Web服务实现插件的远程管理,包括启动、停止、卸载等。 |
IDE和.NET Framework |
1 支持VS2005、2008、2010和2012; 2 支持.NET Framework 2.0、3.0、3.5、4.0、4.5 |
2.2.3 插件迁移工具
基于OSGi.NET插件框架构建的应用是插件化架构,与传统开发方式有所不同。为了能将传统开发的程序集直接在插件框架中使用,我们构建了一个迁移工具,这个迁移工具能够在5分钟内不更改一行代码的情况下将传统程序集迁移成插件,甚至可以直接发布到插件仓库中,从而使应用程序的迁移变得无比简单。
该工具提供了如下功能。
功能 |
描述 |
程序集转换成插件 |
1 可以添加、删除程序集,支持多个程序集组合; 2 为多个程序集创建一个插件描述清单,转换成插件。 |
插件发布 |
1 将生成的插件打包成zip文件; 2 将插件发布到指定目录; 3 将插件直接发布到插件仓库。 |
.NET Framework支持 |
支持.NET Framework 2.0、3.0、3.5、4.0、4.5 |
2.2.4 插件自动化部署工具
插件自动化部署工具能够轻松的将开发的插件及其升级包直接发布到插件仓库,从而实现软件系统的自动升级。这个工具是IDE插件,允许开发人员在开发过程中或者修复Bug后,发布应用系统的新版本。
该工具提供了如下功能。
功能 |
描述 |
IDE集成 |
该自动化工具与IDE集成,可以在插件开发过程中右键随时发布,该工具支持VS2005、VS2008、VS2010、VS2012集成 |
自动构建插件项目 |
发布插件时,会自动构建项目,如果构建失败则不再继续发布 |
插件发布 |
1 过滤发布的插件包含的内容; 2 以树形的方式来编辑发布的插件包含的文件内容; 3 将插件直接打包成zip包; 4 将插件直接发布到插件仓库; 5 自动增加插件版本,实现升级。 |
2.2.5 插件可视化编辑工具
在OSGi.NET插件框架,每一个插件都基于OSGi规范来定义,该规范使用一个Manifest的插件清单文件来描述插件的信息,它定义了插件的名称、版本、起始状态、包含的程序集、依赖关系等。插件可视化编辑器允许以图形化的方式来编辑该文件。该工具也是一个IDE插件。
插件清单编辑器提供的功能描述如下。
功能 |
描述 |
IDE集成 |
该工具支持VS2005、VS2008、VS2010、VS2012集成 |
基本信息编辑 |
1 配置插件的唯一标识、名称、版本、启动级别、激活器、晚激活和起始状态; 2 配置插件可选信息。 |
运行时信息编辑 |
1 插件本地程序集浏览、添加; 2 插件依赖编辑; |
服务信息编辑 |
1 服务浏览; 2 服务添加/删除。 |
扩展信息编辑 |
1 扩展点编辑; 2 扩展编辑。 |
2.2.6 插件调试工具
OSGi.NET框架提供了健全的异常处理机制,一个插件的异常不会对框架造成影响。为了隔离这种影响,我们屏蔽了插件的异常,并通过日志来展示。为了方便对插件内核状态调试,我们构建了一个插件工具,这个插件工具描述如下。
该调试工具提供的功能描述如下。
功能 |
描述 |
插件远程管理 |
1 插件信息浏览; 2 插件启动/停止; 3 插件安装和卸载。 |
服务浏览 |
浏览OSGi.NET内核中暴露的服务 |
服务器配置 |
OSGi.NET内核远程管理IP地址和端口号配置 |
3 平台发展历程
2008年5月份,OSGi.NET四人开发团队成立,开始设计和研发OSGi.NET框架。在研发过程中,翻译了OSGi R4规范,这是网上能公开下载到的第一个OSGi R4规范的翻译版本;分析了微软智能客户端软件工厂、微软ObjectBuilder这两个企业级开发框架源码,翻译了这两个框架的开发指南和架构指南;分析了Eclipse内核——Equniox的源码;分析了开源插件框架SharpDevelop的源码;研究比较了MAF、MEF、Mono.Addins开源插件框架。在以上研究成果之上,设计了OSGi.NET规范并研发OSGi.NET框架。
2010年5月份,历时2年,国际首个OSGi.NET框架研发成功发布了测试版。
2011年5月1日,基于OSGi.NET框架,成功研发了面向企业的SaaS应用商店平台,实现了应用开发、销售、部署一体化的云PaaS平台——尤埃SaaS引擎(http://www.saasengine.cn)。
2011年11月5日,在经过用户试用和反馈之后,发布了OSGi.NET正式版。
2012年3月24日,基于OSGi.NET框架,成功研发了面向开发商的插件仓库平台——开放工厂iOpenWorks。
2012年4月,与某公司建立合作,签订了基于iOpenWorks的集成平台改进合同。
2012年6月,销售了开放工厂私有部署平台,为某公司构建了面向电力的基于OSGi.NET的软件生产线平台。
2012年7月,与某研究所所合作,签订了基于iOpenWorks的《热力远程抄表系统》合同,在这个系统中,自动化部署得到了验证和成功应用,节约了大量的成本。
2012年9月,与某公司合作,签订了基于开放工厂构建某油田统一集成平台的项目合同。
2012年12月10日,开放工厂SDK实现了插件自动化部署工具、开放工厂自动升级支持,并成功应用到《热力远程抄表系统》。
2013年2月16日,开放工厂SDK实现了插件快速迁移工具,成功解决了软件迁移的问题。
2013年4月25日,开放工厂插件仓库规模超100个,注册人数超1300人,插件SDK下次查过13000次数。
2013年5月16日,与某所合作,签订了基于开放工厂构建《基于云计算和大数据技术的建筑能耗监测系统》项目的合同。
回想iOpenWorks平台研发经历,真是感慨万分,我们以有限的人力坚持不懈到现在,并能够取得一些成绩。我们现在将该平台开放给所有的技术人员,希望能够真正的为中国软件带来点什么。