自由软件和新浪网
作者:徐继哲、夏清然
1 前言
自由软件强调的是用户运行、拷贝、发行、学习和改进软件的自由。自由软件赋予了用户如下4个自由度:
- 0. 出于任何目的,运行软件的自由。
- 1. 学习软件如何工作,以及为了满足自己的需要修改软件的自由。(显然,这个自由度的前提是能够访问软件的源代码)
- 2. 为了帮助你的邻居,将软件拷贝给他的自由。
- 3. 为了能够让整个社团受益,公开发行改进之后的软件的自由。(显然,这个自由度的前提是能够访问软件的源代码)
Richard Stallman在1983年发起了自由软件运动(关于自由软件的早期历史参见 自由软件运动:从创始纪到GNU GPL Version 2 )。经过25年的发展,催生出了大量优秀、成熟的自由软件,应用领域涵盖桌面、服务器、娱乐、办公、企业信息系统、编程语言开发平台和软件工程管理,特别是在研发和运营支撑海量用户复杂互联网应用的互联网公司中有着极为广泛的使用。
新浪做为服务于中国及全球华人社群的领先在线媒体及增值资讯服务提供商,也大规模的使用了自由软件来构建整个网站系统和服务平台,满足超过2.6亿的注册用户和每天超过8亿次的浏览量。下面我们将以新浪为例讲述自由软件在其产品研发和服务的关键做用。
所有的互联网应用从技术上都可以抽象为以下的3个层次:
- 存储层:用来保存各种数据,包括用户的信息、行为等各种数据。是一切上层系统的基础。
- 应用层:包含了展示给用户的产品用户界面、产品应用逻辑。
- 接入层:在网络层为用户提供了通过Internet访问的接口。
接下来我们将按照这样的逻辑框架来介绍新浪软件研发。同时有了软件研发就必然有软件研发管理,我们也会专门论述。
2 存储层
在web2.0以“用户创造内容”为核心的互联网应用时代存储的重要性凸现,并成为了互联网应用的核心。大容量邮件系统、个人blog、相册和视频分享都需要海量、高性能、可扩展和易管理的存储系统为基石。
在存储系统中可以划分为数据库系统和为满足特殊需求的定制存储系统。新浪在数据库系统的使用上既包含关系数据库也有“目录服务”。在关系数据库中我 们大量的使用了MySQL,做为目前最流行的数据库系统,由于其自身自由软件的开放性,使其很容易获得了自由软件社区为其开发的包括数据库设计管理、编程 接口、分布式部署和集群应用等巨大的应用环境支持。有了这些基础组件,我们就很容易集成和优化这些技术,并构建服务于新浪产品和业务逻辑的MySQL集群 和周边的应用系统。同时由于全世界大量用户在不停的使用并“测试”,且有活跃的开发社区的持续跟进,整个系统的可定制性、健壮性和可靠性也有了很好的保 障。由于没有商业数据库软件的巨额软件采购费用使得整套系统的单位存储成本非常的低廉。所有的这些都是专有厂商的封闭数据库系统所无法比拟的。
同时在一些应用领域,“目录服务”也被大量的使用。目录服务我们使用了LDAP(Light Directory Access Protocol),其系统特点决定了它极其适合在一些需要大量只读访问而少量的写入请求的地方使用,比如用户的信息的查询和用户身份认证。在这方面 OpenLDAP又给我们提供了优秀的编程接口和服务器端实现。
在一些高访问量、大数据量的存储应用中Berkeley DB和SQLite等嵌入式数据库产品被广泛的使用来构建高性能、大并发的数据存储服务。
3 应用层
在应用层的开发中,自由软件的解决方案几乎已经成了事实上的工业标准。PHP在web开发上的简洁、快速、高效以及和MySQL的无缝结合使之成为web开发领域的首选编程语言。PHP占据了新浪90%以上的web开发。
4 网络接入层
网络接入层包括负载均衡、缓存系统和应用服务器。负载均衡包括网络层和应用层的。由于在大型互联网应用中,为了节约成本一般采用基于x86架构的 PC server,而单机毫无疑问无法承受一天数亿次的访问,这样就需要我们采用多机并行的集群策略来响应海量的用户请求,这就需要有一台“负载均衡”服务器 做为“管家”把来访的用户请求恰当的指向集群中的某一台机器。网络层的负载均衡一般是处理网络连接请求的均衡,现在成熟的解决方案包括Linux下的 LVS和OpenBSD的Packet Filter;应用层的负载均衡和应用层协议http、smtp和pop3密切相关,用于把某一个新浪用户的访问请求分配到与之相关的服务单元上,在这个 领域nginx为我们提供了很好的实现。以上这些在新浪中大范围的应用。
缓存是提高互联网服务质量提升用户体验的关键,在web应用中有被用户大量请求的热数据需要被缓存以提升服务的吞土能力,老牌的自由软件Squid以及新兴的Varnish等都提供了很好的解决方案。
应用服务器包含了web系统、邮件系统等。占据了近60% 互联网webserver市场份额的Apache是这个领域的事实标准,并且和应用层的PHP有着非常好的结合,在新浪几乎所有的web应用均运行于 Apache之上,并且随着开发社区的活跃程度的持续提升和软件的成熟度的提高,被人诟病的性能问题在Apache 2.2版本之后也有了很大的改善。在邮件系统领域sendmail、Postfix等也为我们提供了成熟的解决方案。
5 操作系统平台
除了以上提到的这些开发和应用系统之外不得不提到运行这些软件的操作系统平台。GNU/Linux凭借于其良好的硬件支持(几乎所有的硬件厂商都提 供了良好的GNU/Linux运行支持)和飞速的发展速度,在新浪占据了最大的系统份额,大量的新浪的关键应用运行于其上,包括新闻和各种互动产品例如博 客、播客等。此外在其他的一些特殊领域*BSD和OpenSolaris凭借其自身特点也有着成功的使用案例。
同时为了管理数千台服务器,还需要有很好的机群管理和监控,这时cfengine、Nagios和net-snmp等系统管理平台为我们做出了卓越的贡献,大大提高了管理效率节省了管理成本。
6 软件研发管理
除了上面所说的技术之外,在软件研发管理上自由软件社区也为我们贡献了很好的思想、流程和工具。
自由软件社区这种松散的协作模式汇集了全世界的软件开发爱好者参与其中,并且得到这样高素质的软件产品。开发模式和与之相关的工程思想功不可没,笔者正在创作中的《互联网企业的研发管理》将对此有专门的阐述。这里我们只谈辅助其工作的支撑软件系统。
代码管理和缺陷管理作为软件研发管理的重要组成部分都有非常优秀的自由软件配合其实现。CVS/SVN做为目前最流行的源代码并行管理工具本身就源 自自由软件社区的开发实践,其设计之初就为满足自由软件社区成员异地、多人并行开发复杂软件系统所的目标,当然也很容易符合商业公司的本地软件团队的工作 需求。同时在此周边产生了大量周边支持系统丰富其功能、方便其使用,所以得到了包括新浪等大多数商业公司的青睐。在缺陷管理方面也有Bugzilla为我 们的软件质量保驾护航。
此外还有集大成者-- Trac 。 他本身包含了WIKI、事务追踪系统、缺陷管理系统还有方便的访问SVN代码库的接口以及报表系统。他能让我们把WIKI中描述的想法变为任务并进入事物 追踪系统分配给某个人,同时对应到了其在代码库中的代码和相应的缺陷库中的缺陷,并能用报表系统按照时间线清晰的标识出所有工程事件发生的顺序和过程,能 让我们清晰的看到这个项目的全貌并方便我们分析和追踪。
有了以上这些软件工程管理系统为我们的开发保驾护航,推动了我们以更高的效率创造高质量的软件产品。
7 展望未来,从专有走向开放
有了以上的这些工具之后,我们还需要展望未来。我们必须要注意到互联网行业正在从“专有”走向“开放”,这不是简单的更迭,而是游戏规则的颠覆。在 这个过程中,包括新浪在内的“专有互联网公司”正在经受着来自内部和外部的严峻挑战。传统的专有互联网公司控制着一切:他们控制着用户信息、内容和用户产 生的数据;控制着提供什么样的服务;控制着一切服务的源代码;控制着下一次升级的计划。当用户渴望新的服务(功能)或解决安全漏洞时,唯一能做的就是等 待。当时这一切看起来是多么的自然,而如今却要被淘汰。
互联网新贵颠覆了旧的游戏规则,不再专有,开始尝试开放,更多的将自己定位成“平台”的角色,这是一个广义的操作系统的概念。在这个平台之下,蕴含 着用户信息、内容和用户产生的数据等宝贵资源;平台的表面布满了设计精密的 API;通过开放 API,容许任何人在开放平台之上开发应用程序(服务),而不再是自己控制一切。新的游戏规则可谓是一举多得,在赋予用户更大的自由度的同时,还降低了自 己的研发成本,使得整个平台生机勃勃,同时也催生了新的服务整合模式和盈利模式。相比于“专有互联网公司”,我们将互联网新贵们定义为“开放互联网公司 ”。
不管是什么互联网公司,现在都开始明白一个道理:“互联网就是软件”(同时,软件公司也开始明白一个道理:“软件就是互联网”)。如今的互联网应用 已经呈现出功能化、复杂化的趋势,用户的生活也越来越倚重互联网,而这一切的基础就是软件。所以,互联网公司比以前更加看重软件和技术,都在呼喊自己是技 术型公司。这一转变正在考验互联网公司的应变能力。在过去的 10 年历,涌现了大批成功的专有互联网公司,他们基于专有的理念积累了大量的经验,包括:产品(服务)设计、研发、运营、管理、盈利模式等。面对这一新的竞争 环境,专有互联网公司会渐渐发现昨天的经验可能会成为今天的毒药。为什么呢?原因非常简单,游戏规则发生了变化。专有互联网公司再强大的研发和运营的能 力,也很难满足用户对于功能和内容的多元化、个性化需求,反而,在这个方向上努力越多,可能输的越惨。这就好比开发操作系统的公司在拼命提供千奇百怪的应 用程序,其结果不言而喻。相反,开放的互联网公司天生就能应对这一竞争环境,并如鱼得水。
新浪也敏锐的意识到了这个新的变化和挑战,并将会积极应对,以此打造我们未来的核心竞争力。
说明:本文发表在2008年6月《程序员》杂志
暂时没有评论