Erlang到底好在哪里 -- 聊聊我使用Erlang的经历与感受

时间:2022-06-01 17:55:33

http://www.imgeek.org/question/136

08年开始接触Erlang,组里正好来了一位Erlang专家--余峰同学http://blog.yufeng.info/(现在**担任核心系统资深技术专家,花名褚霸),在霸爷的大力传教下,我立即就被Erlang的强大与优美迷住了。当时我正在为实现一个分布式语音服务集群头痛,开发语言是C++,在需要跨界研究语音处理、语音传输的情况下,实在没有精力去搞高性能高可**的分布式网络服务。

  在霸爷的推荐下,我花了2周业余时间熟悉Erlang语言,就开始尝试用她实现语音服务的通信层,三周时间,一个比原来花了2个月时间的C++版本性能更好、更可**、真正分布式、可扩展,而且代码量只有一半的服务端就完成了,经过一个月**,再一个月完善就上线提供服务了,而那个粗糙的C++版本服务要实现相同的功能,没个半年是不行的,而且还不一定稳定可**。

  同样的场景,在为我厂开发分布式服务框架时(后面简称DSF),再次重现。DSF要为应用服务的高性能与高可**提供可配置的路由策略与失败处理策略,客户端驱动的开发是重点中的重点,即使在我们将Thrift作为框架的RPC解决方案的前提下,仍然需要投入极大的精力与时间,更何况,还要求我们的驱动设计必须用Java和C#都能较容易的实现。

  这时候,作为分布式服务系统中必不可少的应用注册服务器,同时要进行开发,对于孤军奋战的我就显得力不从心了。在我们的设计中,应用注册服务器必须提供实时的服务状态通知与分发能力,尽量让不健康的服务的切除更加及时,而且,应用注册服务器作为所有应用服务的基础服务,其可**性的重要也是毋庸置疑的。在这种情景下,Erlang再次成为我的救星与坚实的**山,让我敢于同时在DSF框架与与应用注册服务的开发中双线开战。

  应该说在整个的开发过程中,应用注册服务器并没有花费我太多时间,三周,一个真正的分布式无中心节点的高可**服务雏形就此成型,其后只是零星的bug修改与功能补充了,这种力量来自哪里?还是Erlang!

  经常有人问我,Erlang到底好在哪里?因为能力有限,对Erlang的了解仅限皮毛,专业的分析可以到霸爷的“Erlang非业余研究”http://blog.yufeng.info/archives/category/erlang 找相关普及贴看看,我这里仅根据这几年实践说说自己的感受。

  从技术上说,Erlang是一个平台,她提供了一套完整的高性能、高可**网络服务开发所需要的基础设施,并提供了原语给开发人员使用,她降低了开发类似系统的难度与门槛。有一个说法,Erlang让一个中高级程序员,用一半的时间,一半的代码量,就能提供顶尖C程序员开发的网络服务80%性能的类似系统,并且可**性不输于甚至超过前者。我的实践让我确信,这是真的。

  另一方面,Erlang也给了开发人员强大的自信,就如同前面开发DSF时的场景所述。有开发维护过线上系统的人应该可以深刻的感受到,开发一个高可**的网络服务有多困难,维护一个线上系统有多劳心,当一个服务上线时,我们的运维与程序员即使睡觉都恨不得睁着一只眼睛。

  根据我的经验,采用Erlang开发的系统,其出现的bug量与用常规语言开发的绝对不是一个数量级;Erlang的监控树机制,更是让我们的服务,天生就具备了高可**的基因,只要稍花精力,仔细规划我们的监控树与重启策略,就可以让本来就少了很多的bug及一些无法预料的外部故障,在即使出现时也有很大的几率迅速恢复,给你修复bug排除故障一个缓冲的时间,更何况,Erlang可是具备热更新能力的,那真的可以让你延寿啊!延寿!

  如果你的老板问你,为什么要用Erlang,Erlang好在哪里,你可以这样总结:省钱呐!你想想,一个资深的、顶尖的程序员与中高级普通程序员之间的成本差,普通的系统就只要普通的程序员就好啦,那不仅仅是省钱,是省很多很多的钱,这个回答,一定可以让你的老板眼睛像手电筒一样闪闪发光!