在几年以前,对中国开源软件发展了解的人甚少,随着中国政府对开源系统Linux的扶持,企业对安全和成本的要求,开源软件的应用已经越演越烈,开始走进了所有软件从业者的视野。目前,开源软件的加速增长引起了市场的重视,最新的IDC公司的研究报告表明,独立的开源软件总的市场将在2011年价值58亿美元。
什么是开源软件?它有着这样的几个主要特征:
1. 免费
任何人都可以不受任何限制地使用软件,LAMP平台之所以能够流行于企业,163、腾讯等大公司会采用这样的平台,就是因为其低廉的成本和高性能与良好的安全性。Linux、Apache、MySQL、PHP整套的建站解决方案,降低企业的投入成本。
2. 源代码开放
任何人都可以获得软件的源代码、研究软件运作方式,软件被社区接受的代码都经过了众多用户最挑剔的检验;所有的用户都可以随时查看源代码,任何软件漏洞都 无藏身之地。在LAMP平台中我们甚至不用部署杀毒软件,也不用担心是否有系统木马,因为“足够多的眼睛就可以让问题浮现”。
3. 散布与改良
任何人可以自由复制开源软件并散布给他人,Ubuntu就是一个成功的案例,一个分享的理念。同时,我们还可以对开源软件进行改良,并散布改良后的软件,可从中获利同时为社区贡献。这也是开源软件能够持续发展,并吸引众多优秀程序员的源动力。
开源软件要走的路还很长,但是我们很高兴的看到,已经有越来越多的程序员意识到开源软件的价值,已经有越来越多的企业采用开源平台推广开源软件。
6月27日国际报道 本周二,Untangle使其核心产品实现了开放源代码化。Untangle销售用于网络安全设备的软件。
Untangle已经使用了一些开放源代码项目,其中包括SpamAssassin垃圾邮件屏蔽软件、Snort网络入侵探测软件、阻止钓鱼式攻击的ClamAV软件。
现在,Untangle使其框架也成为了开放源代码软件。
Untangle CEO沃特斯表示,使产品成为开放源代码产品有助于提升微软在新客户中的影响,提高产品质量,将软件翻译为其它语言,吸引新的软件模块。他说,我们将公司的未来押在了开放源代码上。
Untangle拥有25名员工,其产品面向小公司,在周二以GPL 2发布了其软件。
沃特斯说,Untangle竞争对手主要包括SonicWall、Barracuda Networks、WatchGuard等专有代码公司。
与许多其它开放源代码厂商一样,Untangle将通过销售支持服务的方式获得收入,交易的平均规模为3000美元。
沃特斯表示,我们将在2009年年中实现盈利。
IT Wire列出了SourceForge上最活跃最热门的开源项目,并分析了它们受欢迎的原因。1.Azureus:基于Java的BitTorrent客户端,名字源自一种有毒的蓝色树蛙。
2.Openbravo ERP:基于web的企业管理应用程序,类似SAP。
3.Zenoss Core:高效的企业网络管理工具。
4.Stellarium:强大的星图程序,使用OpenGL实时渲染3D太空图像。
5.ZK:易用的Ajax网页开发框架。
另IT Wire一共整理出了10大开源热门软件,除了上面的还有:
6.vMukti:网络会议软件,只能运行在XP或Vistal。
7.FileZilla:FTP客户端。
8.OrangeHRM:基于web的PHP/MySQL应用程序。
9.phpMyAdmin:PHPNuke或WordPress数据库备份工具,颇受欢迎。
10.FCKeditor:严格来说是一款在线文字编辑器。
Unisys专家预测,由于开放源代码软件具备了架构及分销渠道支持,降低了成本,2007年将获得企业广泛采用以促进业务与推动创新。
Unisys副总裁兼开放源代码业务部总经理Anthony Gold表示:"目前,全球共有几十万个开放源代码项目,而且这些项目所使用的技术也越趋先进与受到欢迎。迄今为止,Linux 一直是最成熟、采用最广泛的开放源代码软件之一。2007年,整个开放源代码堆栈将迎来一个新的转折点,它将在一些关键的主流业务解决方案中得到采用,例如商业智能和企业内容管理。"
如果你不是依照通用公共许可证(GPL)来构建代码的话,那么在开放源码基础上建立一个私有公司就很容易。例如,BSD许可证的PostgreSQL。因此,EnterpriseDB公司可以建立私有的扩展件并将它们推向市场。
它们是一个开源的企业吗?不是,它们没有社区,也不想要。它们应该被允许进入“开放源码大会”吗?这由会议的组织者决定,这些组织者在冒惹来麻烦的风险之前也应该和他们的团体商议。
EnterpriseDB在BSD领域是一个良民吗?答案是肯定的,并且BSD是一种开放源码许可证。EnterpriseDB在BSD数据库PostgreSQL上花费了时间和精力。它们只是将自己的东西变成私有的,这也正是BSD的目的。
许多人错误地认为开放源码和GPL是同样的东西。并非如此。 实际上,整个开放源码运动就是为了反对由Richard Stallman和其他一些人提倡的自由和开源软件运动(FOSS)。
但是经验告诉我们,你的许可越开放——它就更遵守GPL框架——你也就会获得更多的团体的支持。如果你不需要或不想要这些支持,那么就使用BSD代码,让你自己的东西成为私有财产吧。
EnterpriseDB对这一点直言不讳。 鲨鱼并不像我们和开放源码联系在一起的吉祥物那么可爱,招人喜欢。如果你从一个鲨鱼作为吉祥物的商店买了东西,那么就应该知道自己进入什么境地。
2006-6-17 于敦德
上次我们以LiveJournal为例详细分析了一个小网站在一步一步的发展成为大规模的网站中性能优化的方案,以解决在发展中由于负载增长而引起的性能问题,同时在设计网站架构的时候就从根本上避免或者解决这些问题。
今天我们来看一下在网站的设计上一些通常使用的解决大规模访问,高负载的方法。我们将主要涉及到以下几方面:
1、 前端负载
2、 业务逻辑层
3、 数据层
在LJ性能优化文章中 我们提到对服务器分组是解决负载问题,实现无限扩展的解决方案。通常中我们会采用类似LDAP的方案来解决,这在邮件的服务器以及个人网站,博客的应用中 都有使用,在Windows下面有类似的Active Directory解决方案。有的应用(例如博客或者个人网页)会要求在二级域名解析的时候就将用户定位到所属的服务器群组,这个时候请求还没到应用上 面,我们需要在DNS里解决这个问题。这个时候可以用到一款软件bind dlz,这是bind的一个插件,用于取代bind的文本解析配置文件。它支持包括LDAP,BDB在内的多种数据存储方式,可以比较好的解决这个问题。
另外一种涉及到DNS的问题就是目前普遍存在的南北互联互通的问题,通过bind9内置的视图功能可以根据不同的IP来源解析出不同的结果,从而将 南方的用户解析到南方的服务器,北方的用户解析到北方的服务器。这个过程中会碰到两个问题,一是取得南北IP的分布列表,二是保证南北服务器之间的通讯顺 畅。第一个问题有个笨办法解决,从日志里取出所有的访问者IP,写一个脚本,从南北的服务器分别ping回去,然后分析结果,可以得到一个大致准确的列 表,当然最好的办法还是直到从运营商那里拿到这份列表(update:参见这篇文章)。后一个问题解决办法比较多,最好的办法就是租用双线机房,同一台机器,双IP,南北同时接入,差一些的办法就是南北各自找机房,通过大量的测试找出中间通讯顺畅的两个机房,后一种通常来说成本较低,但效果较差,维护不便。
另外DNS负载均衡也是广泛使用的一种负载均衡方法,通过并列的多条A记录将访问随即的分布到多台前端服务器上,这种通常使用在静态页面居多的应用上,几大门户内容部分的前端很多都是用的这种方法。
用户被定位到正确的服务器群组后,应用程序就接手用户的请求,并开始沿着定义好的业务逻辑进行处理。这些请求主要包括两类静态文件(图片,js脚本,css等),动态请求。
静态请求一般使用squid进行缓存处理,可以根据应用的规模采用不同的缓存配置方案,可以是一级缓存,也可以是多级缓存,一般情况下cache的 命中率可以达到70%左右,能够比较有效的提升服务器处理能力。Apache的deflate模块可以压缩传输数据,提高速度,2.0版本以后的 cache模块也内置实现磁盘和内存的缓存,而不必要一定做反向代理。
动态请求目前一般有两种处理方式,一种是静态化,在页面发生变化时重新静态页面,现在大量的CMS,BBS都采用这种方案,加上cache,可以提供较快的访问速度。这种通常是写操作较少的应用比较适合的解决方案。
另一种解决办法是动态缓存,所有的访问都仍然通过应用处理,只是应用处理的时候会更多的使用内存,而不是数据库。通常访问数据库的操作是极慢的,而访问内存的操作很快,至少是一个数量级的差距,使用memcached可以实现这一解决方案,做的好的memcache甚至可以达到90%以上的缓存命中率。10年前我用的还是2M的内存,那时的一本杂事上曾经风趣的描述一对父子的对话:
儿子:爸爸,我想要1G的内存。
爸爸:儿子,不行,即使是你过生日也不行。
时至今日,大内存的成本已经完全可以承受。Google使用了大量的PC机建立集群用于数据处理,而我一直觉得,使用大内存PC可以很低成本的解决 前端甚至中间的负载问题。由于PC硬盘寿命比较短,速度比较慢,CPU也稍慢,用于做web前端既便宜,又能充分发挥大内存的优势,而且坏了的话只需要替 换即可,不存在数据的迁移问题。
下面就是应用的设计。应用在设计的时候应当尽量的设计成支持可扩展的数据库设计,数据库可以动态的添加,同时支持内存缓存,这样的成本是最低的。另外一种应用设计的方法是采用中间件,例如ICE。这种方案的优点是前端应用可以设计的相对简单,数据层对于前端应用透明,由ICE提供,数据库分布式的设计在后端实现,使用ICE封装后给前端应用使用,这路设计对每一部分设计的要求较低,将业务更好的分层,但由于引入了中间件,分了更多层,实现起来成本也相对较高。
在数据库的设计上一方面可以使用集群,一方面进行分组。同时在细节上将数据库优化的原则尽量应用,数据库结构和数据层应用在设计上尽量避免临时表的 创建、死锁的产生。数据库优化的原则在网上比较常见,多google一下就能解决问题。在数据库的选择上可以根据自己的习惯选择,Oracle, MySQL等,并非Oracle就够解决所有的问题,也并非MySQL就代表小应用,合适的就是最好的。
前面讲的都是基于软件的性能设计方案,实际上硬件的良好搭配使用也可以有效的降低时间成本,以及开发维护成本,只是在这里我们不再展开。
网站架构的设计是一个整体的工程,在设计的时候需要考虑到性能,可括展性,硬件成本,时间成本等等,如何根据业务的定位,资金,时间,人员的条件设 计合适的方案是件比较困难的事情,但多想多实践,终究会建立一套适合自己的网站设计理念,用于指导网站的设计工作,为网站的发展奠定良好的基础。
开源软件市场目前在软件开发和技术支持服务方面都处于火热时期。最近有风险投资公司对开源软件市场加大投注,为预期盈利的开源软件公司注入成百上千万美元的资金——其中仅Red Hat在今年六月就获得了整整3.5亿美元投资。
“与两年前相比,我觉得对开源有兴趣的风险投资增长了两到三倍。”Intel的投资分公司负责开源投资的主管布拉迪普?塔加雷表示。指针投资公司合伙人贝 纳德?达里对此表示赞同,他也认为今年经手的对开源软件公司的投资比去年增长了两到三倍。贝纳德?达里表示:“原因是许多软件公司的创始者们都已经意识 到,如果没有开源业务,你是很难进入软件业的。”——相比之下,几年前的主流是保护代码的知识产权以及商业软件。
Hibernate 【Java开源 持久层框架】
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来 操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中 使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的 Hibernate辅助开发工具:【Hibernate Synchronizer】【MiddlegenIDE】
Quartz 【Java开源 日程安排(Job Schedulers)】
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单 独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 1.5.0。
Velocity 【Java开源 模板引擎】
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言 (template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发 人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。 Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方 案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可 以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务 (template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 【VeloEclipse :Velocity在Eclipse平台下的一个辅助开发插件】
以JBoss、JOnAS等为代表的应用服务器软件在商业软件激烈拼杀的环境中,撑起了另外一道亮丽的风景。
目前,在企业级应用中不可或缺的应用服务器产品也出现了一些开源产品,以JBoss、JOnAS、JFox、Geronimo等为代表的应用服务器软件提供了丰富的特性,在商业软件激烈拼杀的环境中,撑起了另外一道亮丽的风景。
鲍尔默的一席话,把LAMP推上了风口浪尖。
Java与.net 工具一统商业软件 开发领域已数年,但是由Linux 操作系统、Apache网络服务器、MySQL 数据库和PHP (Perl或Python)脚本语言组合而成的—— LAMP (四种技术的开头字母组成)集体吹响向主流计算市场发起进攻的号角。
这个新的势力正在被强大的竞争对手所关注。在最近一次TechEd大会上,微软总裁鲍尔默将LAMP列为Windows 和它的.net 开发软件的竞争者。鲍尔默的用词是“微软有能力抵挡LAMP的进攻”,LAMP的潜在力量从对手口中得到了印证。