IT开源化概述

IT开源化就是采用开源软件来搭建企业的软件基础设施和业务应用程序。开源的含义首先是“开放源代码”,即将源代码向全世界公开,没有任何隐藏的部分。开源的另一个含义是“免费”,任何机构和个人都可以免费获得和使用这些源代码。

一、开源是大势所趋

随着计算机技术的发展,尤其是互联网技术和相关企业的兴起,开源软件在操作系统、编译工具链、数据库、WEB服务器、移动操作系统等各个方面已经成为主流。而且许多企业利用开源软件形成了独特的商业模式。比如谷歌的 Android 操作系统,从 2007 年开源发布第一个版本起,到今天已经发展到 4.2版本,占据了智能手机操作系统一半以上的市场份额,谷歌也通过 Android 操作系统在移动互联网这一新兴行业中占据了领先和主导地位。再比如在服务器端广泛使用的关系型数据库 MySQL,在以开源软件和商业许可并行的模式下,得到了快速发展,并在 2008 年作价 10 亿美金由 Sun 收购(后者又在 2009 年被 Oracle 公司以 74 亿美金的高价收购)。相反,以前一直和开源软件做斗争的微软公司,却因为无法快速推出适应市场的 Windows Phone 操作系统,在移动互联网竞争中处于下风。为顺应潮流,微软也开始拥抱开源,比如向Samba项目贡献代码,放弃自己研发多年的大数据项目而选择 Hadoop为其大数据的核心等。
显然,纵观 IT 行业这二十多年的发展,开源软件从黑客的理想之国,已经形成了一股推进计算机及相关行业不停进步的巨大力量。很多人可能尚未意识到,我们使用的电脑中运行 有开源软件,手机中运行有开源软件,家里的电视也运行有开源软件,甚至小小的数码产品(如电子相框)中也运行有开源软件,尤其是互联网服务器端软件,几乎 全部是开源软件。毫不夸张地说,开源软件已经渗透到了我们日常生活的方方面面。那么,开源软件到底什么,开源软件尤其是国内的开源软件及社区的现状如何, 发展面临哪些困难和问题?

二、开源软件的发展历程

开源软件的发展,和互联网的发展密不可分。真正有规模的开源软件,应该是从上个世纪 90 年代开始进入公众视线,也就是互联网开始兴起的年代。我们大致可以将开源软件的发展分为如下三个阶段:
1、萌芽阶段(上世纪九十年代之前)。这个阶段主要以个人和大学为主,因为发布条件受限,大多数开源软件无法得到有效传播,而仅仅流传于互相熟悉的程序员和老师、学生之间。这个阶段的典型开源软件为 BSD 操作系统。
2、以非盈利组织为主的阶段。这个阶段应从上个世纪九十年代算起,说起这个阶段,我们不得不提到 Richard Stallman 发起的自由软件基金会,还有 Apache 基金会等。前者发起的 GNU 项目(1983 年发起,九十年代后随 Linux普及),成就了 Linux 操作系统;后者维护的 Apache WEB服务器,在互联网上几乎占据了统治地位。
3、以大型IT企业为主的阶段。这个阶段出现于 2005 年之后,以谷歌为代表的大型互联网企业,开始以各种方式发布开源软件,最为著名的是 Chrome 浏览器以及 Android 操作系统;当然还有 Intel、Nokia 等企业主导的 Moblin、MeeGo 等基于 Linux 的智能手机操作系统。
经过二十多年的发展,到今天,全球已有四百多万源代码贡献者无私地在开源技术社区开发了超过一千万个开源软件项目,形成了完整的开源技术体系。今天,基本上所有的商业软件都有成熟的开源软件与之对应,开源技术已经成为一座巨大的知识宝库。

三、开源化的SWOT分析

多年来,大型企业的IT基础设施和应用软件都被商业软件占据。但是近年来这种状况发生了很大的变化,大公司纷纷抛弃商业软件,投入了开源的怀抱。那么,采用开源软件具有哪些优势和劣势?面临什么样的机遇和风险?

(一)优势

企业实行IT开源化具有以下的优势:
  • 1. 降低IT采购成本
  • 开源软件可以降低初期投入。开源软件都是免费的,相比于昂贵的商业软件,可以大大降低采购费用。商业的操作系统如各种Unix,商业应用服务器如IBM WebSphere、Oracle WebLogic,商业数据库如Oracle、DB2等,都是价格非常昂贵的,而且随着CPU数量或用户数量的增加,价格还会不断上涨。与之相比,开源的操作系统包括各种Linux、开源应用服务器JBoss、GlassFish、开源数据库MySQL和PostgreSQL等在提供基本相同的功能和质量的同时,完全免费或者只需要支付低廉的费用。
    开源软件可以降低总拥有成本(TCO)。在IBM委托Freeform Dynamics进行的一份题为“桌面Linux:主流商务采纳经验”的报告中指出:“采用Linux桌面不仅在操作系统本身的许可证上得到了节约,而且还在运行在操作系统之上的应用组合中体现出来,因为Linux环境中通常开源软件的比例很高。”
    报告对大量IT工作者进行了调查,多数答复都认为Linux能全面降低总拥有成本,这也是可靠性、安全性和灵活性这些传统品质的体现。在用户体验方面,稳定性和可靠性影响很大,而这些也同样转化成维护和支持费用的降低。各方面的调查结果表明,在重要的商务部署中,Linux都取得了非常实在的利益。节省下来的费用可以用来投入创新和研发,进一步促进企业的生产力。
  • 2. 自主性
  • 免费是开源化最明显的优势,自主性才是开源化最大的优势。通过采用开源软件构建应用,企业对自己的IT资产保留了最大限度的自主权。如果我们购买商业软件,我们购买到的只是使用权,而不是所有权。我们并不真正拥有这套软件,不能对它为所欲为。软件对我们来说是个黑箱,我们无法也无权探究它的内部机制,通过反向工程获得它的源代码是违法行为。我们也不能试图修改它,使得它能够和我们的其他软件更好地配合,或者更适合我们的整体企业架构。如果发现某些方面不能满足我们的需求,我们无法对它进行扩展,只能寄望于它未来的升级,而什么时候升级,升级后的软件是否包含我们期待的新特性等等,都是不可预知的,更不要说升级软件又需要支付一笔额外的费用。如果软件出了故障,因为我们不知道软件的内部运行机制,无法自行处理,只等仰赖厂商的支持,而厂商的支持往往又不及时。
    如果使用开源软件,则一切尽在我们掌控之下。软件对我们来说是透明的,我们可以看到软件的每一行源代码,也可以随意对它进行修改和扩展。我们可以自己动手,不需要求助于软件厂商。我们可以马上动手,不需要漫长的等待。我们不需要为修改和扩展支付一分钱的额外费用,也不会因为修改软件而冒着违反法律的风险。如果软件运行出了问题,我们可以跟踪调试到每一行源代码中,即时解决问题,而不需要漫长的等待外力的帮助。
  • 3. 开放标准和避免厂商锁定
  • 文件格式和协议的开放标准是开源软件的首要原则。互操作性指计算机系统应产出共同的格式使一台计算机能够与另一台交谈,这是电子时代以来计算行业的一大目标。开放标准的目的是促进不同的操作系统上不同应用之间的互操作性。但是私有数据格式却会鼓励对单一供应商应用的依赖,阻止与竞争产品的互操作性。私有数据格式将用户锁定到单一供应商的升级周期中,无法保证一致性和持久性。
    开放标准允许用户独立于平台、供应商和软件。开放标准使网络协作成为可能,使在平台之间移动自定义的软件解决方案变得更加容易。开放标准的用户,不论是个人还是政府,都拥有在不同的软件、平台和供应商之中选择的灵活性和自由。而私有的、保密的标准使得用户只能使用一个供应商的软件,并且因为他们的数据都存储为私有格式,转换代价高昂而在此后继续受供应商的摆布。
    荷兰国际信息经济研究所(International Institute of Infomatics)《自由/开源软件:调查研究》这篇论文的作者们也反对在政府中使用私有软件。他们认为:“……因此反对在公共部门使用私有软件的一个主要理由是对私有软件供应商的依赖。私有标准一旦建立人们就必须服从。即使在开放的竞标制度下,与私有标准兼容的需求也使得制度偏向于特定的软件供应商,因此造成长期的依赖。”
    在不同的地区,使用自由/开源软件作为摆脱供应商依赖的手段都获得了提倡。一份提交英国政府的报告认为“数据标准的开源实现常常能加速标准的推行,推荐政府有选择地支持这样的开源实现。”
  • 4. 安全
  • 虽然并没有完全安全的系统或平台,像开发方法、程序架构和目标市场这样的因素都会极大地影响系统的安全性并决定攻破它是否困难。在这方面,自由/开源软件系统有一些指标优于私有软件系统:
    1. 由于微软英特网信息服务(Internet Information Server, IIS)糟糕的安全记录,Gartner 集团推荐公司使用 Apache 或其他 web 服务器。Gartner 集团发现到2001年7月美国的企业仅为修复 IIS 的“红色代码”漏洞就花费了12亿美元。
    2. J. S. Wurzler 保险公司的“黑客险”对使用 Windows 的用户收取比 GNU/Linux 或 Unix 系统用户多5-15%的保险费用。J. S. Wurzler 公司的保险高级副总裁 Walter Kopf 说:“我们发现使用 NT 系统造成损失的可能性更大。”
    对安全的考虑已经推动许多公共机构转移到或考虑转移到自由/开源软件方案。法国海关和间接税管理部门主要出于安全的考虑,迁移到了 Red Hat 6.2 平台。一般认为,自由/开源软件较好的安全记录有如下原因:
    • 源代码可获取:自由/开源软件的源代码开放性让开发者和用户更容易在漏洞被攻击者利用前就能发现和修补。在 Bugtraq 上列出的许多漏洞都是在定期的评审中发现的,而没有被利用的记录。自由/开源软件系统一般都采用预应式而非反应式的评审制度。
    • 专注于安全而非用户友好:自由/开源软件支撑着互联网的很大一部分,因此更专注于健壮性和功能,而不是考虑易于使用。在为任何主要的自由/开源软件应用增加功能之前,人们都要考虑其安全性,只有认为该功能不影响系统安全的情况下才会将其加入。
    • 根用户制度:自由/开源软件多数基于多用户和支持网络的 Unix 模式。因此,它们具有完备的权限结构和很强的安全性。当许多用户共享一个强力的服务器时这种模式至关重要,否则,用户将可以使服务器崩溃,偷窃其他用户的私人资料或侵占其他用户的资源。这种制度使得应用程序中的漏洞即使被利用也只会造成有限的损失。
    木马、病毒和恶意软件在Windows中很常见,是每位办公室经理的心头之患,但对于大多数Linux用户来说它们几乎没有影响。安全性是所有Linux和Unix系统的重大优势,也被认 为是开源软件的一大长处,所有的Linux发行版都包含了更新机制,并提供即时的安全建议。
    Linux系统适合网络应用,拥有总体安全性的优越记录。许多企业网络的标准技巧是使用Linux计算机作为防火墙,在入侵者袭击网络之前拦截他们。虽然这并不意味着Linux完全免疫,但它的系统架构让它在面对攻击时强大得多,而Windows中病毒防护的成本是无法估量的。
    安全性还有另一面。商业软件由于是闭源的,而且大多来自国外,我们无法保证里面不会隐藏恶意代码。最近发生的斯诺登事件,就揭示了这一类的风险。采用开源软件可以完全规避这一类的风险,因为每一行代码都被晾晒在阳光之下。
  • 5. 可靠性和稳定性
  • 自由/开源软件因为它们的可靠性和稳定性而闻名。业界已经有许多自由/开源软件服务器不需维护连续运行数年的故事。但是,定量研究相对而言更加困难。以下介绍两个近年进行的研究:
    1999年 ZDnet 进行的为期10个月的稳定性测试比较了 Red Hat Linux,Caldera Systems OpenLinux 和微软的 Windows NT 4.0 SP3 服务器版。三个系统都在同样的硬件上运行了打印、web 服务和文件服务功能。结果是 Windows NT 每6星期就崩溃一次,而自由/开源软件在10个月中没有一次崩溃。
    一项使用随机方法的压力测试在1995年测试了7种商业系统和 GNU/Linux 系统。测试中模拟来自错误数据或恶意用户输入的随机字符被发送到这些系统。结果是商业系统的平均失效率达到23%,而 Linux 失效率为9%。GNU 软件(FSF 下属的 GNU 工程生产的软件)失效的时间只占全部时间的6%。数年后的跟踪研究发现测试中暴露的漏洞在自由/开源软件系统中得到了修补,但在私有软件中都完全没有改变。
    开源软件被广泛采纳是因为它质量可靠、弹性大、适应性也更强。例如电信和金融部门大规模采用Linux和其它开源解决方案是由于它们的性价比远远超过了Unix和Windows。所有的主要硬件、移动电话和芯片制造商们都正在GPL许可及其延展协议下贡献自己的想法和软件,并且还积极参与自由软件项目。
    开源和自由软件的分布式开发性质帮助软件在开发和维护的过程中保持了良好的习惯,还有一些软件开发的基本规则:透明、简洁、模块化和便携性。良好的开发习惯产生好的软件,而良好的软件能随着时间而获得更低的成本。遵循规范的开源项目提高了效率,减少了商业开发模式下几乎不可避免的代码重复问题。
    闭源软件的质量通常与软件公司的开发人员水平息息相关,开发人员的水平通常参差不齐,因此闭源软件的质量通常也是参差不齐,而开源软件通常是由社区中的技术高手在维护,有时用户自身也可以参与维护,并且开源软件的用户较多,软件存在的bug一般都会被及时发现和修补,产品质量更加可靠。
  • 6. 增强自身软件能力
  • 人们发现经济体内自由/开源软件开发者的增长与创造能力(软件)成正相关关系。国际信息经济研究所的一份报告列出了这个现象的三个原因:
    • 易于参与:自由/开源软件鼓励自由的修改和发布,容易获得、使用和学习。私有软件则有许多限制,不仅源代码的获取受限,还有授权、专利和版权的限制。自由/开源软件很象基础研究,允许开发者利用已有的知识和组件生产软件。
    • 自由/开源软件可作为理想的培训系统:自由/开源软件开发和协作的特性让学生能够考察软件概念并进行实验,而不会对社会造成影响。类似地,学生也可以加入全球性的自由/开源软件合作开发网络,利用其中的大量技术信息和交互式的讨论工具。
    • 作为标准来源的自由/开源软件:自由/开源软件常常由于其在某一特定行业部门中的主导地位而成为事实上的标准。地区通过参与制定某一特定自由/开源软件应用的标准,可以确保产生的标准符合地区的需要和文化考量。
    自由/开源软件的开发方式不仅极大地促进了创新,也有利于创新成果的传播。一份微软的内部备忘录写到,“基于 Linux 的研究/教学项目由于 Linux 源代码随处可以获取而很容易传播。特别是新的研究想法都先被在 Linux 上实现和发布,然后才在其他平台上被整合或发布。”
  • 7. 人才队伍建设
  • 由于开源软件在世界上被广泛采用,因此更容易招聘到相关人才。因为软件是开源的,下载和安装没有受到任何法律限制,因此容易吸引到大量的开发者。商业软件除了少数广泛应用的(Windows、Oracle等)之外,由于版权限制等问题,很少有人有机会使用到,因此,精通商业软件的人往往很少。所以,如果企业采用开源软件,容易招聘到大量的人才;而采用商业软件,就很难招聘得到相关人才。

    (二)劣势

    从企业用户角度,使用开源软件的缺点或担忧主要在于:服务支持、保证以及知识产权问题。
  • 1. 技术支持不足
  • 首要的问题是支持和服务:当企业从Oracle、SAP等专有软件厂商那里购买软件时,它们知道就该软件今后应当向谁寻求帮助;而一旦采用开源软件,它们往往不知道自己该向谁求助 。开源软件的支持和维护往往依赖于其背后大规模的开源代码社区 ,缺乏正式的服务支持和保证是可以理解的担忧 。开源软件的“低成本”优势因而受到了质疑:某些低廉的前期费用往往可能导致较高的后期维护等费用 ;整体IT架构向开源软件移植的成本也不容忽视 。
    首要的问题是支持和服务:当企业从Oracle、SAP等专有软件厂商那里购买软件时,它们知道就该软件今后应当向谁寻求帮助;而一旦采用开源软件,它们往往不知道自己该向谁求助 。开源软件的支持和维护往往依赖于其背后大规模的开源代码社区 ,缺乏正式的服务支持和保证是可以理解的担忧 。开源软件的“低成本”优势因而受到了质疑:某些低廉的前期费用往往可能导致较高的后期维护等费用 ;整体IT架构向开源软件移植的成本也不容忽视 。
    对于这个问题,开源厂商和开元社区已经有一些应对之道。首先,象Redhat、Ubuntu等开源软件厂商都对软件提供了技术支持,而且其服务价格与商业软件相比十分低廉。其次,广为采用的开源软件都有非常活跃的社区,有大量的开发人员愿意在社区里贡献自己的技巧和经验,并为其他人解答问题。因此,遇到问题之后通过互联网在社区里查找解决方案或者提问,往往可以非常快速就解决了技术问题。
  • 2. 易用性不够
  • 易用性问题是开源软件的常见问题。传统上,商业软件非常关注易用性问题,提供了更好的用户体验。而开源软件更关注技术核心的开发,对易用性严重关注不足。很多开源软件只提供了相对简陋的用户界面,甚至根本不会开发用户界面。这个问题暂时没有通用的解决方案。如果易用性是个问题,一般只能由企业自行组织技术力量去开发。
  • 3. 没有形成上下游的生态系统
  • 商业软件巨头如IBM、Oracle、Microsoft等等,他们开发的软件都不是孤立的,其产品往往形成一个完善的软件栈,一个完整的软件生态系统。如果企业采用了同一家供应商的多个产品,这些软件产品之间的互操作性非常好,不会有方凿圆枘的问题。而开源软件厂商,除了少数比较成功的之外(Redhat、Spring等),基本上都没有力量去开发一个完善的软件栈,其产品都是独立的。要组合多个不同来源的开源软件组合成一个软件栈,往往面临很多需要磨合的问题。好的一面是,开源软件认识到了这个问题,现在很多开源软件都是面向标准、面向规范设计和编写,例如ActiveMQ遵循JMS规范,Hibernate遵循JPA规范,Spring和Guice遵循JSR 330规范,因此,相互之间的配合不再存在问题。

    (三)机遇

    开源化给企业带来不可想象的发展机遇。
  • 1. 开源驱动业务创新
  • 企业IT开源化可以驱动业务创新。通过采用开源软件,企业牢牢地把握了IT建设的主动权,不再受商业软件厂商的限制。如果采用商业软件,我们不能对它进行任何修改,以适应我们的商业环境,与其他软件配合无间。受制于商业软件,我们无法按照自己的意志行动。而采用开源软件,一切都有了可能。任何新想法都可以选用开源软件快速实现,如果现有的开源软件不能完全满足需求,我们可以随意对其进行改造。根据企业IT战略进行创新是轻而易举的事情。
  • 2. 开源加快业务响应速度
  • 同样,因为通过采用开源软件,我们有了IT自主权,就可以快速响应业务需求的变化,即时对软件作出调整。如果采用商业软件,我们无法获得这样的快速响应能力。商业软件厂商不会为个别用户对软件作出修改,即使承诺修改也是遥遥无期的。而商机瞬息万变,时间就是金钱,不能快速响应变化的企业将面临被淘汰的命运。采用开源软件,我们不仅能够随意行动,还能随时行动。
  • 3. 打造企业自己的软件生态系统
  • 采购商业软件的另一个风险是:除非企业中所有的软件都是从同一个厂商手中购买,否则所有的软件都是“烟囱系统”——每个软件系统都是从底层到顶层的全栈实现,而软件系统之间没有任何沟通和协作。这造成了两个严重的问题:一个问题是所有的软件都要分别实现本该共用的底层机制,现在用户要分别操作实现(想象这样一个问题:一个员工调动或离职,必须分别在HRM、CRM、OA等系统中分别操作一遍,既导致大量重复劳动,如果某些系统忘记联动,还会引入不一致性和安全性问题)。另一个问题是:软件系统之间无法联动,通过相互协作以实现高层业务目标。通过采用开源软件构建企业自己的IT系统,企业可以打造自己的IT基础组件,所有应用系统都在这些基础组件之上组建,共享相同的数据和事件源,应用系统之间也可以相互协作,以共同实现企业的业务目标。采用开源软件组建企业IT系统,所有软件系统形成一个整体,一个有机的生态系统,为企业的战略目标服务。

    (四)风险

    不可讳言,企业采用IT开源化也有一定的风险。略举如下:
  • 1. 开源要求更高水平的IT人才队伍
  • 如果采用商业软件,企业的IT开发和维护大部分可以仰赖软件供应商,那么就不需要保持很强的软件开发和运行维护人才团队,因而可以削减人员规模,节约成本。而采用开源软件,软件开发和维护主要靠自己,需要投入很多高水平的技术人员。技术问题需要自力更生,出现问题需要自行解决。如果没有这样一支人才队伍,就会面临IT系统崩溃失修的危险。
  • 2. 法律风险
  • 采用开源软件要特别注意版权问题。例如,有些开源软件只对个人或非营利组织免费,而对商业机构收费。另外,GPL协议要求一旦采用其软件,则自己的软件也必须开源免费。如果不注意这些协议,就可能违反法律,或被迫公开自己原本不想公开的源代码。

    开源改变IT生态环境

    企业如何通过开源化降低采购成本,增强自主能力,提高创新能力,快速响应变化?——使用开源软件替代商业软件。

    一、基础设施开源化

    软件基础设施主要是指三大件:操作系统、中间件(应用服务器)和数据库。与商业软件相比,这三大件方面都已经有非常成熟的开源产品,在互联网和企业市场都已经久经考验,完全可以替代现有的商业产品。
    (一)操作系统:Redhat Enterprise Linux
    RHEL是目前Linux服务器产品的标杆,在国内和国际上都占据着主要的Linux服务器市场份额。RHEL产品功能全面,产品认证齐全,用户的接受度比较高。在服务器操作系统市场中,Linux占有约35%的市场份额,其中红帽Linux在该35%开源市场中占有率超过85%。
    Red Hat于2010年11月11日发布Enterprise Linux 6正式版,包含更强大的可伸缩性和虚拟化特性,并全面改进系统资源分配和节能。从理论上讲,RHEL可以在一个单系统中使用64000颗核心。除了更好的多核心支持,RHEL 6还继承了RHEL 5.5版本中对新型芯片架构的支持,其中包括英特尔的Xeon 5600 和7500,以及IBM的Power7。新版带来了一个完全重写的进程调度器和一个全新的多处理器锁定机制,并利用NVIDIA图形处理器的优势对GNOME和KDE做了重大升级,新的系统安全 服务守护程序(SSSD)功能允许集中身份管理,而SELinux的沙盒功能允许管理员更好地处理不受信任的内容。RHEL 6内置的新组件有GCC 4.4(包括向下兼容RHEL 4和5组件)、OpenJDK 6、Tomcat 6、Ruby 1.8.7和Rails 3、PHP 5.3.2与Perl 5.10.1,数据库前端有PostgreSQL 8.4.4, MySQL 5.1.47和SQLite 3.6.20。
    RHEL的主要的功能包括:
    1. 虚拟化技术
    • 在各种平台上支持虚拟化技术;
    • 在Red Hat Enterprise Linux Advanced Platform支持存储与扩展的服务器虚拟化技术;
    • Red Hat Network提供各种虚拟化系统的支持;
    • virt-manager, libvirt/virsh管理工具;
    2. 内核与性能
    • 基于Linux 2.6.18内核;
    • 支持多核处理器;
    • 广泛的新硬件支持;
    • 更新的基于Kexec/Kdump的Dump支持;
    • 支持Intel Network Accelerator Technology (IOAT;)
    • 对于大型SMP系统技持的增强;
    • 增强的管道缓存;
    • 内核缓存接合能力用于改进IO缓存操作;
    3. 安全
    • SELinux增强;
    • 图形化SELinux管理界面;
    • 集成的目录和安全机制;
    • 新的审计机制用于提供新的搜索、报表和实时监控的能力;
    4. 网络与互操作性
    • 支持Autofs, FS-Cache和iSCSI;
    • 增强的IPv6支持;
    • 改进的Microsoft ® 文件/打印和Active Directory集成;
    5. 桌面
    • 更新的管理工具、应用程序和对笔记本的支持;
    • 改进的ACPI支持,包括Suspend to Disk;
    • 智能卡登录,包括PKI/Kerberos认证;
    • 集成的多媒体支持;
    • 增强的即插即用支持;
    • Network Manager提供自动的有线和无线网络配置;
    • 基于AIGLX/Compiz的图形化界面(支持淡化、透明等效果;)
    6. 开发环境
    • 增强的开发工具,包括System Tap和Frysk;
    • GCC4.1和glibc 2.5工具链;
    7. 存储
    • 支持根设置多路IO(MPIO),提高可用性;
    • 服务器产品中包含单系统/客户的Red Hat Global File System支持;
    • 块设备数据加密支持;
    8. 管理
    • 安装过程更新简化系统配;
    • 基于Yum/Pup的Red Hat Network更新;
    • Conga集群和存储管理;
    (二)Java应用服务器: JBoss和Tomcat
  • 1. JBoss
  • 开源Java应用服务器中,JBoss是第一个开源的应用服务器,完全符合JavaEE规范。在应用服务器市场中,JBoss占有超过30%的市场份额。
    在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得JBoss广为流行。
    JBoss的优点包括:
    • (1) JBoss是免费的,开放源代码JavaEE的实现,通过LGPL许可证进行发布。但同时也有闭源的,开源和闭源流入流出的不是同一途径;
    • (2) JBoss需要的内存和硬盘空间比较小;
    • (3) 安装便捷:解压后,只需配置一些环境变量即可;
    • (4) JBoss支持"热部署",部署BEAN时,只拷贝BEAN的JAR文件到部署路径下即可自动加载它;如果有改动,也会自动更新;
    • (5) JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能;
    • (6) 用户可以直接实施J2EE-EAR,而不是以前分别实施EJB-JAR和Web-WAR,非常方便;
    • (7) JBoss支持集群;
    另外,JBoss应用服务器还具有许多优秀的特质。
    • 其一,它将具有革命性的JMX微内核服务作为其总线结构;
    • 其二,它本身就是面向服务的架构(Service-Oriented Architecture,SOA);
    • 其三,它还具有统一的类装载器,从而能够实现应用的热部署和热卸载能力;
    因此,它是高度模块化的和松耦合的。JBoss用户的积极反馈告诉我们,JBoss应用服务器是健壮的、高质量的,而且还具有良好的性能。
    为满足企业级市场日益增长的需求,JBoss公司从2003年开始就推出了24*7、专业级产品支持服务。同时,为拓展JBoss的企业级市场,JBoss公司还签订了许多渠道合作伙伴。比如,JBoss公司同HP、Novell、Computer Associates、Unisys等都是合作伙伴。
    在2004年 6月,JBoss公司宣布,JBoss应用服务器通过了Sun公司的J2EE认证。这是JBoss应用服务器发展史上至今为止最重要的里程碑。与此同时, JBoss一直在紧跟最新的J2EE规范,而且在某些技术领域引领J2EE规范的开发。JBoss公司一直在积极参与EJB 3.0规范的制定,并且在为EJB规范的发展贡献自己的力量。其中,Gavin King(Hibernate[1]的创立者)和Bill Burke(JBoss公司的首席架构师)已经为EJB 3.0规范贡献了很多内容。因此,无论在商业领域,还是在开源社区,JBoss成为了第一个通过J2EE 1.4认证的主流应用服务器。JBoss应用服务器已经真正发展成具有企业强度(即,支持关键级任务的应用)的应用服务器。
  • 2. Tomcat
  • 如果是基于POJO编程,只需要Web容器,不需要EJB,那么可以采用Apache Tomcat作为Java Web容器。
    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat7 支持最新的Servlet 3.0 和JSP 2.1 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是8.0。

    (三)数据库:MySQL和PostgreSQL

    在开源数据库中,得到最广泛采用的数据库有MySQL和PostgreSQL。
  • 1. MySQL
  • MySQL是一个开放源码的关系数据库管理系统,开发者为瑞典MySQL AB公司。MySQL被广泛地应用在Internet上的网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多网站和企业应用为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
    2008年1月16号MySQL AB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。
    MySQL的系统特性有:
    • 1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;
    • 2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统;
    • 3.为多种编程语言提供了API,这些编程语言包括C、C++、Python、Java、Perl、PHP、 Eiffel、Ruby和Tcl等;
    • 4.支持多线程,充分利用CPU资源;
    • 5.优化的SQL查询算法,有效地提高查询速度;
    • 6. 既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中;
    • 7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名;
    • 8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径;
    • 9.提供用于管理、检查、优化数据库操作的管理工具;
    • 10.支持大型的数据库,可以处理拥有上千万条记录的大型数据库;
    • 11.支持多种存储引擎,InnoDB是事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5起成为默认数据库引擎;
    • 12.支持三种应用架构:单点(Single),适合小规模应用;复制(Replication),适合中小规模应用;集群(Cluster),适合大规模应用;
  • 2. PostgreSQL
  • PostgreSQL是另一种得到广泛应用的开源关系数据库管理系统。PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为POSTGRES,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言。并且,因为许可证的灵活,任何人都可以以任何目的免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。
    POSTGRES 已经在许多研究或实际的应用中得到了应用。 这些应用包括: 一个财务数据分析系统,一个喷气引擎性能监控软件包,一个小行星跟踪数据库, 一个医疗信息数据库和一些地理信息系统。 POSTGRES 还被许多大学用于教学用途。 Illustra Information Technologies Illustra Information Technologies (并入 Informix) 拿到代码并使之商业化。在 1992 年 POSTGRES 成为 Sequoia 2000 科学计算计划的首要数据管理器。
    (1) 优点
    事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。
    从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。
    (2) 缺点
    从Postgres 开始,PostgreSQL 就经受了多次变化。
    首先,早期的 PostgreSQL 继承了几乎所有 Ingres, Postgres, Postgres95 的问题:过于学院味,因为首先它的目的是数据库研究,因此不论在稳定性, 性能还是使用方方面面,长期以来一直没有得到重视,直到 PostgreSQL 项目开始以后,情况才越来越好,PostgreSQL 已经完全可以胜任任何中上规模范围内的应用范围的业务。目前有报道的生产数据库的大小已经有 TB 级的数据量,已经逼近 32 位计算的极限。不过学院味也给 PostgreSQL 带来一个意想不到的好处:大概因为各大学的软硬件环境差异太大的缘故,它是目前支持平台最多的数据库管理系统的一种,所支持的平台多达十几种,包括不同的系统,不同的硬件体系。至今,它仍然保持着支持平台最多的数据库管理系统的称号。
    其次,PostgreSQL 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能 等提高数据库性能的机制等。

    (四)Web服务器:Apache和nginx

  • 1. Apache
  • Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
    Apache http server是世界使用排名第一的Web服务器软件,占有约60%的市场份额。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSA httpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
    Apache web服务器软件拥有以下特性:
    • 支持最新的HTTP/1.1通信协议;
    • 拥有简单而强有力的基于文件的配置过程;
    • 支持通用网关接口;
    • 支持基于IP和基于域名的虚拟主机;
    • 支持多种方式的HTTP认证;
    • 支持多种方式的HTTP认证;
    • 集成代理服务器模块;
    • 支持实时监视服务器状态和定制服务器日志;
    • 支持服务器端包含指令(SSI;)
    • 支持安全Socket层(SSL;)
    • 提供用户会话过程的跟踪;
    • 支持FastCGI;
    • 通过第三方模块可以支持Java Servlets;
  • 2. Nginx
  • 另一个得到广泛采用的Web服务器是nginx。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。

    (五)云计算:OpenStack

    OpenStack是一个美国国家航空航天局和Rackspace合作研发的,以Apache许可证授权,并且是一个自由软件和开放源代码项目。OpenStack是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作。
    OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础设施即服务(简称IaaS)资源的通用前端。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。本文希望通过提供必要的指导信息,帮助大家利用OpenStack前端来设置及管理自己的公共云或私有云。
    OpenStack 是由 Rackspace 和 NASA 共同开发的云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基础架构服务(Infrastructure as a Service, IaaS)。OpenStack 包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspace开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack 是开源项目,除了有 Rackspace 和 NASA 的大力支持外,后面还有包括 Dell、Citrix、 Cisco、 Canonical 这些重量级公司的贡献和支持,发展速度非常快,有取代另一个业界领先开源云平台 Eucalyptus 的态势。
    厂商支持:
    • 美国国家航空航天局的Nebula运算平台;
    • 现时已表示支持OpenStack项目的大型硬件厂商包括:AMD、Intel和戴尔等;
    • 微软在2010年10月表示支持OpenStack与Windows Server 2008 R2的整合;
    • 2011年2月,思科系统正式加入OpenStack项目,重点研制OpenStack的网络服务;
    • Ubuntu未来在堆栈方面的云网络化方案;
    • 2012年4月,IBM宣布加入OpenStack项目,并作为主要赞助商;
    • 2012年10月,Viacloud互联云平台加入OpenStack项目,研制OpenStack公有云平台和私有云平台;

    二、基础架构开源化

    企业IT开源化的另一个主要的方面是企业基础架构组件的开源化,也就是选用各种开源的基础架构组件来搭建企业IT架构。

    (一)负载均衡:LVS

    LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
    LVS的宗旨是:
    • 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器;
    • 很好的可伸缩性(Scalability);
    • 很好的可靠性(Reliability);
    • 很好的可管理性(Manageability);
    LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。

    (二)消息中间件:ActiveMQ

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1规范的 JMS Provider实现。使用ActiveMQ作为默认JMS Provider的开源项目有ServiceMix、Geronimo等。
    ActiveMQ有如下的特性:
    • 多种语言和协议编写客户端,语言: Java、C、C++、C#、Ruby、Perl、Python、PHP,应用协议:OpenWire、Stomp REST、WS Notification、XMPP、AMQP;
    • 完全支持 JMS1.1 和 JavaEE 6 规范(持久化,XA消息,事务);
    • 对Spring的支持,ActiveMQ 可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring 3.0的特性;
    • 通过了常见JavaEE服务器(如 Geronimo,JBoss,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容JavaEE商业服务器上;
    • 支持多种传送协议:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA;
    • 支持通过JDBC和journal提供高速的消息持久化;
    • 从设计上保证了高性能的集群,客户端-服务器,点对点;
    • 支持Ajax;
    • 支持与Axis的整合;
    • 可以很容易得调用内嵌JMS provider,进行测试;

    (三)规则引擎:Drools

    规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
    应用背景: 企业级管理者对企业IT系统的开发有着如下的要求:
    • 为提高效率,管理流程必须自动化,即使现代商业规则异常复杂;
    • 市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新;
    • 为了快速、低成本的更新,业务人员应能直接管理IT系统中的规则,不需要程序开发人员参与;
    使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性,降低应用程序的维护和可扩展性成本,其优点如下:
    • 分离商业决策者的商业决策逻辑和应用开发者的技术决策;
    • 能有效的提高实现复杂逻辑的代码的可维护性;
    • 在开发期间或部署后修复代码缺陷;
    • 应付特殊状况,即客户一开始没有提到要将业务逻辑考虑在内;
    • 符合组织对敏捷或迭代开发过程的使用;
    规则引擎是基于规则的专家系统的核心部分,主要由三部分组成:规则库(Knowledge base)、事实(Fact base)和推理机。规则引擎根据既定事实和知识库按照一定的算法执行推理逻辑得到正确的结果。
    Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 Drools 的学习更加吸引人。Drools 还具有其他优点:
    • 非常活跃的社区支持;
    • 易用;
    • 快速的执行速度;
    • 在 Java 开发人员中流行;
    • 与 Java Rule Engine API(JSR 94)兼容;

    (四)业务流程引擎:jBPM和Activiti

    所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。
    JBPM是Redhat开发的基于Java的最流行的开源业务流程引擎。从JBPM 4之后,其创始人Tom Baeyens离开了Redhat,另外创立了Activiti,继续延续JBPM4的技术路线。而JBPM 5则完全放弃了JBPM 4的基础代码,基于Drools Flow重头来过。
    除了基本的流程功能之外,JBPM 5和Activiti都实现了如下特性:
    • 遵循BPMN 2.0流程定义语言规则;
    • 提供基于浏览器的流程设计器和表单设计器;
    • 使用Java语言和动态脚本语言进行功能扩展;
    • 易于与规则引擎和事件处理引擎集成;
    • Web管理控制台;
    • 强大的扩展机制,可以通过扩展实现中国特色的工作流,例如会签、传阅、退回、撤回、自由流等等;

    (五)分布式缓存:memcached和Redis

  • 1. memcached
  • memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款缓存软件,已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。这是一套开放源代码软件,以BSD license授权发布。
    memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
    Memcached 的守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。
  • 2. Redis
  • Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

    (六)分布式计算:Hadoop

    Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 的启发。2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。
    Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。
    Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
    • 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖;
    • 高扩展性。Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中;
    • 高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快;
    • 高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配;
    Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

    (七)分布式存储:HDFS

    Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,从而这样可以实现流式访问文件系统中的数据。HDFS开始是为开源的apache项目nutch的基础结构而创建,是Hadoop项目的一部分,也可以独立使用。
    Hadoop HDFS分布式文件系统具有如下特点:
    • 非常适合PB级以上海量数据的存储和处理,已在Yahoo、亚马逊、Facebook、百度、淘宝等海量数据处理平台上得到了广泛验证;
    • 系统扩展性高,只需要简单添加服务器数量,即可实现存储容量和计算能力的线性增长;
    • 数据冗余度高,缺省每份数据在3台服务器上保留副本;
    • 适合流式访问(Streaming access),即一次写入,多次读取,数据写入后极少修改;
    • 除了数据存储能力外,与HDFS共生的MapReduce分布式计算框架大大简化了分布式计算程序的编程难度,可快速编写分布式计算程序,充分利用各存储节点的CPU计算资源;

    (八)NoSQL数据库:MongoDB

    MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
    它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
    • 面向集合存储,易存储对象类型的数据。所谓“面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema);
    • 模式自由。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里;
    • 支持动态查询;
    • 支持完全索引,包含内部对象;
    • 支持查询;
    • 支持复制和故障恢复;
    • 使用高效的二进制数据存储,包括大型对象(如视频等);
    • 自动处理碎片,以支持云计算层次的扩展性;
    • 支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言;
    • 文件存储格式为BSON(一种JSON的扩展)。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized Document Format);
    • 可通过网络访问;

    (九)门户:Liferay

    Liferay(又称Liferay Portal)是一个开源门户项目,该项目包含了一个完整的JavaEE应用。该项目使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts 框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了Web Services来支持一些远程信息的获取,使用 Apache Lucene实现全文检索功能。
    特点:
    • 1、提供单一登陆接口,多认证模式(LDAP或SQL);
    • 2、管理员能通过用户界面轻松管理用户,组,角色;
    • 3、用户可以根据需要定制个性化的portal layout;
    • 4、能够在主流的J2EE应用服务器上运行,如JBoss+Jetty/Tomcat,JOnAS;
    • 5、支持主流的数据库,如PostgreSQL,MySQL;
    • 6、使用了第三方的开源项目,如Hibernate, Lucene, Struts;
    • 7、支持包括中文在内的多种语言;
    • 8、采用最先进的技术 Java, EJB, JMS, SOAP, XML;

    (十)商业智能(BI):Pentaho, JasperReport

  • 1. Pentaho
  • Pentaho是一个以工作 流为核心的、强调面向解决方案而非工具组件的BI套件,整合了多个开源项目,目标是和商业BI相抗衡。它偏向于与业务流程相结合的BI解决方案,侧重于大 中型企业应用。它允许商业分析人员或开发人员创建报表,仪表盘,分析模型,商业规则和 BI 流程。
    Pentaho是世界上最流行的开源商务智能软件,是一个以工作流为核心的、强调面向解决方案而非工具组件的BI套件,整合了多个开源项目,目标是和商业BI相抗衡。它是一个基于java平台的商业智能(Business Intelligence,BI)套件,之所以说是套件是因为它包括一个web server平台和几个工具软件:报表,分析,图表,数据集成,数据挖掘等,可以说包括了商务智能的方方面面。
    授权协议:
    • 授权分为两个版本:商业版和社区版;
    • 社区版——社区版为开源,授权协议为:GPL,LGPL。社区版代码以从官方网站分离,由sourceforge代为管理;
    • 商业版——商业版需要付费,有试用demo可下载;
  • 2. JasperReports
  • JasperReports是一个用Java开发的开源的程序库,用户能够通过它,利用Java语言来开发具有报告功能的程序。JasperReports配有一个报表编辑器iReport,它可以在Java环境下像其它IDE报表工具一样来制作报表。JasperReports 支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。

    (十一)数据挖掘(DM):Weka

    数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database, KDD),是目前人工智能和数据库领域研究的热点问题,所谓数据挖掘是指从数据库的大量数据中揭示出隐含的、先前未知的并有潜在价值的信息的非平凡过程。数据挖掘是一种决策支持过程,它主要基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等,高度自动化地分析企业的数据,做出归纳性的推理,从中挖掘出潜在的模式,帮助决策者调整市场策略,减少风险,做出正确的决策。数据挖掘是通过分析每个数据,从大量数据中寻找其规律的技术,主要有数据准备、规律寻找和规律表示3个步骤。数据准备是从相关的数据源中选取所需的数据并整合成用于数据挖掘的数据集;规律寻找是用某种方法将数据集所含的规律找出来;规律表示是尽可能以用户可理解的方式(如可视化)将找出的规律表示出来。
    Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化(与之对应的是SPSS公司商业数据挖掘产品--Clementine )的,基于JAVA环境下开源的机器学习(machine learning)以及数据挖掘(data minining)软件。WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。
    2005年8月,在第11届ACM SIGKDD国际会议上,怀卡托大学的Weka小组荣获了数据挖掘和知识探索领域的最高服务奖,Weka系统得到了广泛的认可,被誉为数据挖掘和机器学习 历史上的里程碑,是现今最完备的数据挖掘工具之一(已有11年的发展历史)。Weka的每月下载次数已超过万次。

    (十二)联机分析处理(OLAP):Mondrian

    联机分析处理(On Line Analytical Proccessing,简称OLAP) 概念最早由关系数据库之父E.F.Codd于1993年提出。OLAP应用是目前数据仓库上的重要应用之一,是决策分析的关键。作为数据仓库最重要的多维分析工具,OLAP利用存储在数据仓库中的数据完成各种分析操作,并以直观易懂的形式将分析结果返回给决策人员。它的目标是满足决策支持或多维环境特定的查询和报表需求,技术核心是多维分析。OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对大量复杂数据的分析变得轻松而高效,以利于迅速做出正确的判断,辅助决策。
    Mondrian是一个开放源代码的Rolap服务器,使用java开发的。它实现了xmla和jolap规范,而且自定义了一种使用mdx语言的客户端接口。Mondrian是olap服务器,而不是数据仓库服务器,因此Mondrian的元数据主要包括olap建模的元数据,不包括从外部数据源到数据库转换的元数据。也就是说Mondria的元数据仅仅包括了多维逻辑模型,从关系型数据库到多维逻辑模型的映射,存取权限等信息。在功能上,Mondrian支持共享维和成员计算,支持星型模型和雪花模型的功能。
    Mondrian是一个开源项目。一个用Java写成的OLAP(在线分析性处理)引擎。它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过Java API用多维的方式对结果进行展示。

    (十三)企业服务总线:FuseESB

    ESB全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。
    ESB是SOA(面向服务的架构)的关键组成部分。其基本功能包括:
    • 服务的MetaData管理:在总线范畴内对服务的注册命名及寻址进行管理;
    • 传输服务:确保通过企业总线互连的业务流程间的消息的正确交付,还包括基于内容的路由功能;
    • 中介:提供位置透明的路由和定位服务;提供多种消息传递形式;支持广泛使用的传输协议;
    • 多服务集成方式: 如JCA,Web服务,Messaging ,Adaptor等;
    • 服务和事件管理支持: 调用服务的记录、测量和监控数据;提供事件检测、触发和分布功能;
    其扩展功能包括:
    • 面向服务的元数据管理: 他必须了解被他中介的两端,即服务的请求以及请求者对服务的要求,以及服务的提供者和他所提供的服务的描述;
    • Mediation :它必须具有某种机制能够完成中介的作用,如协议转换;
    • 通信:服务的发布/订阅、响应/请求、同步/异步消息、路由和寻址等;
    • 集成: 遗留系统适配器,服务编排和映射,协议转换,数据变换,企业应用集成中间件的连续等;
    • 服务交互: 服务接口定义,服务实现的置换,服务消息模型,服务目录和发现等;
    • 服务安全: 认证和授权、不可否认和机密性、安全标准的支持等;
    • 服务质量: 事务,服务的可交付性等;
    • 服务等级: 性能、可用性等;
    ESB 中最常提到的两个功能是消息转换和消息路由。
    FUSE Service Framework是一个开源的框架,基于apache的CXF,FUSE Service Framework提供一个引擎可以创建重用的服务,这些服务可以作为一个集成方案的一部分。 在企业集成架构中,你可以使用FUSE SF把新的或者已有的应用变成面向服务的。FUSE ESB可以和很多服务容器集成,支持很多语言,消息系统,和不同的协议。
    Fuse ESB很好的支持了JBI规范,其下产品均是由Apache下的著名开源项目组合而成。其中若干框架均已为开源世界广泛应用,比如Apache Camel和Apache ServiceMix,尤其是其中的Apache ActiveMQ和Apache CXF,且ServiceMix 4之后基于OSGi架构,更能迎合企业动态化、模块化的需求。此外,Fuse有丰富的文档支持,加上其主要框架为大多开源人士所熟知,技术上可控性强,风险较小,是我们推荐的ESB产品。
    Fuse ESB的突出优点是:
    • 支持多种Front End编程;
    • 支持多种数据绑定;
    • 支持多种消息绑定;
    • 支持多种传输协议;
    • 支持部署web服务;

    三、开发框架开源化

    开发框架开源化,是指使用开源的类库和框架来构建应用软件。

    (一)领域层框架:DDDLib

    DDDLib是我们开发的开源软件,目的是推行领域驱动设计(Domain Driven Design,简称DDD)的设计范式,和提供方便的基础工具,减轻程序员的重复劳动。
    领域驱动设计的设计思想是:以业务领域(问题域)中的概念和机制为蓝图建立领域模型,然后用面向对象的机制来实现系统的领域层。领域模型是软件系统的核心,系统其余部分都围绕着领域模型来构建。
    与广为流行的“以数据库为中心的增删改查”(CRUD)设计思想相比,DDD是一种根本不同的设计范式。CRUD以数据库则关系模型为中心,DDD以对象模型为中心。CRUD是面向过程的,DDD是面向对象的。CRUD中的领域对象(业务实体)是个伪对象,只有属性,没有行为,本质上代表数据库中的一行记录;DDD中的领域对象既有属性,也有行为,本质上代表现实存在的一个业务实体。CRUD认为应用软件就是存储和呈现数据,软件的一切操作本质上就是数据的增删改查;DDD认为软件是业务现实的映像,软件中的领域对象的属性和行为和业务实体的属性和行为一一对应。
    DDDLib的一个特点是遵循标准,将IoC和持久化框架隔离在领域层之外,保证领域层纯粹表达业务逻辑,不依赖于任何技术框架。可以在部署时灵活选用不同的持久化框架(JPA、Hibernate等)和IoC框架(Spring、Guice、TapestryIoC等)配合使用。DDDLib已经得到广泛采用。

    (二)应用框架:Koala

    Koala是我们自主研发的开源JavaEE应用框架,基于Apache 2.0开源许可协议发布。其主要设计目标是:
    • 促进领域驱动设计(DDD)思想的普及推广;
    • 简化架构师的系统设计工作;
    • 提高开发人员的工作效率;
    • 降低软件开发成本;
    • 集成JavaEE企业应用开发中常用的技术组件和业务组件,使得开发人员不必自行开发和配置;
    • 提供一个简单、一致的核心,同时不限制开发人员的自由度;
    • 促进面向标准和规范编程,降低框架、类库的耦合度,避免厂商锁定;
    • 促进单元测试、验收测试、自动化构建、持续集成、软件质量度量等软件质量保证措施的广泛采用;
    其功能特性如下:
    • 开源免费的开发平台,允许你任意修改源码并扩展功能;
    • 以DDD领域驱动思想为核心,抛弃传统的以数据库为中心的四层编码模型;
    • 丰富的基础组件支持,包括:国际化、异常、缓存等;
    • 向导式的搭建项目过程,支持各种技术选择:JPA,mybatis,SpringMVC,struts2MVC等;
    • 向导式的数据库到实体的生成过程;
    • 向导式的实体生成CURD功能;
    • 向导式的服务发布一键无缝发布成war、EJB、webservice(SOAP/REST) 多种服务形式;
    • 基于RBAC3模型的权限子系统;
    • 监控子系统轻松协助你监控URL,方法,数据库,内存等状态;
    • 使用通用查询子系统轻松定制完成查询功能;
    • 基于IP过滤,用户名验证及方法权限控制的WS安全子系统;
    • 基于JBPM5的流程子系统;

    咨询服务范围

    一、技术堆栈

    二、服务堆栈