过去将近十年的电信网管开发中,我们一直在不断的尝试研发一个具有变革性质的网络管理架 构,在华为我们采用Java、C++、ACE等技术来开发大型的N2000网管,在UTStarCom我们采用J2EE来构建Netman4K宽带网络管 理系统,在鼎桥西门子我们尝试采用OSGi技术搭建纯组件化的3G网管系统。但所有这些尝试,始终没有构建出另我们满意的超大规模并发分布式电信网 络管理系统,直到我们采用Erlang技术,终于取得一些突破性的进展。
IT行业变革性的技术与应用是什么?毫无疑问:多核计算、云计算与SaaS应用!多核CPU技术发展迅猛,例如现在 Intel、AMD的CPU正从4核向16核、32核方向发展,四个四核CPU服务器就具备16核。但传统软件架构,例如Java平台等,发展相对落后, 市场上大部分J2EE应用根本无法利用多核带来的性能优势。Erlang在这样的背景下迅速崛起,成为多核计算、云计算和SaaS应用的最佳技术平台,被 业界誉为下一代的Java。在国外,软件大师Kent Beck、Sam Ruby都不约而同的提到Erlang在未来软件开发中的重要地位,今天,您google "erlang 多核与云计算",即使国内的技术专家也开始讨论Erlang在多核与云计算中的重要地位。
Sam Ruby博客:http://intertwingly.net/blog/
Erlang 技术虽然最近几年才迅速兴起,但Erlang语言本身却已发展了将近30年,其诞生甚至早于Java。其历史最早追溯到1981年,瑞典电信巨头 Ericsson 就成立了 CSLab 实验室。其目标之一就是“为未来的软件系统提出一些新的架构(architecture)、概念(concepts)和结构(structure)”,具 体来说,也就是为“未来的电信设备”准备技术。到 1985 年 Joe Armstong ( Erlang 的创始人之一)加入 CSLab 实验室,第二年,他开始着手进行以后被称作 Erlang 的技术的研究工作。这项工作最初的目标被设定为 Prolog 语言增加对并行进程的支持。到了 1987 年,一切进展顺利,雏形之中的 Erlang 被以 Prolog 扩展的形式实现了出来。而在这一年的晚些时候 Erlang 这个名称(来自于瑞典的数学家 Erlang,而不是所谓的 ERicsson-LANGuage )也第一次被人提出。此时的 Erlang尚未成形,只有名字没有语法。
此后 Ericsson 的一个小组开始用 Erlang 来实现一个交换机原型,而 CSLab 的 Erlang 小组则忙于提高语言的性能。到了 1990 年,这些尝试终于有了成果:Erlang 的许多思想在原型项目中得到印证并被确定下来(这就是日后 Erlang 以及 OTP 的核心思想),而 Erlang 也有了自己的虚拟机(不再是 Prolog 的实现)和自己的语法(不再是 Prolog 的方言)。我们可以说,在这个时刻,作为一门计算机语言的 Erlang 正式诞生了。此时的 Ericsson 看到了 Erlang 的潜力,并于 1993 年成立 Erlang System AB 子公司来向合作伙伴们推广 Erlang,同年还发布了 Erlang 的第一个商用版本。
1995 年Erlang的应用取得历史性突破,大名鼎鼎的 AXD301 项目启动(它是迄今为止最为庞大的采用 Erlang 以及最为庞大的采用函数编程语言的商用项目),构造下一代的交换机。Ericsson的研发团队采用Erlang技术完成了这个高达1.7M行代码的庞大 项目, AXD301 项目大获成功,AXD301交换机实现了“9个9的可靠性”。9个9 意味着在一百万秒钟,只有一秒出现故障时间,或者说在一百万分钟,只出现一分钟的故障时间。与此同时,OTP(开放电信平台)库也逐渐成熟。
此 后,Erlang语言以其坚如磐石的稳定性、容错性,大规模的并发和分布能力,随着多核计算、云计算的兴起,迅速向互联网和企业软件市场进军。
Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议 等,因此非常适合于构建分布式,实时软并行计算系统。 使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅只是一两个环 节,比起C程序的线程切换要高效得多得多了。在传统的Java、C++构建的软件系统中往往并发线程只能达到1000的数量级。
Erlang 编写大规模分布式程序非常简单,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。以程控交换机为例子,实际上主控板和业务板构成一 个分布式系统,我们以前在VXWorks等平台上开发这类应用非常复杂。
Erlang运行时环境是一个虚拟机,有点像Java虚拟机, 这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运 行。
(1) 并发性 - Erlang支持超大量级的并发线程,并且不需要操作系统具有并发机制。
(2) 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)
(3) 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。
(4) 软实时性- Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。
(5) 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。
(6) 递增式代码装载-用户能够控制代码如何被装载的细节。
(7) 外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。
AXD301 交换机:Ericsson公司作为Erlang语言的缔造者,AXD301交换机是Erlang语言最大的电信软件项目,有高达1.7M代 码,AXD301在市场上也大获成功。
Amazon云计算:Amazon目前是全球云计算的领导公司,Amazon云计算 的Elastic Cloud、S3等项目中很大部分采用Erlang技术开发。
另外还有大量的企业、互联网应用,不作一一介绍。
OPENGOSS研发团队认为,电信网管系统的变革性未来在于打造:电信网络管理云(The Network Management Cloud)。所以在OPENGOSS的技术选型上,果断的放弃Java、.NET等技术,选择了Erlang技术。从目 前OPENGOSS产品的市场反馈来看,我们基本实现了这个目标,基于OPENGOSS架构的WIFI综合网络管理系统,实现了另人惊艳的性能指标与坚如 磐石的系统稳定性,以某省应用为例,性能指标如下:
1 HP380, 2 CPUs, 4G mem, 8 Cores
1 Oracle, 1 Mysql, 1 OpenLdap, 4 Mongrel,
1 Master, 4Slaves
5 minutes interval
10+ measure items average
Collect 300 Switches, 3000 Aps, 12000 Interfaces
采集系统上线后从未DOWN机,并且实现了国内唯一的 不停机代码升级,支持不中断的数据采集!
Erlang中国开发者年会(ECUG),是 Erlang中国重要的技术会议。OPENGOSS团队赞助了2008年的ECUG上海年会,OPENGOSS首席架构师李长才先生作了〈Erlang开发电信网管项目实践〉的演讲。
ECUG组织网址:http://www.ecug.org
ECUG赞助商:http://www.ecug.org/sponsor/
ECUG演讲议题:http://www.ecug.org /lecturer/
PPT下载:http://ecug.googlecode.com/svn/trunk/cn-erlounge/iii/ery.lee/