`
arksea
  • 浏览: 63483 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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

阅读更多
        08年开始接触Erlang,组里正好来了一位Erlang专家--余峰同学(现在淘宝担任核心系统资深技术专家,花名褚霸),在霸爷的大力传教下,我立即就被Erlang的强大与优美迷住了。当时我正在为实现一个分布式语音服务集群头痛,开发语言是C++,在需要跨界研究语音处理、语音传输的情况下,实在没有精力去搞高性能高可靠的分布式网络服务。
        在霸爷的推荐下,我花了2周业余时间熟悉Erlang语言,就开始尝试用她实现语音服务的通信层,三周时间,一个比原来花了2个月时间的C++版本性能更好、更可靠、真正分布式、可扩展,而且代码量只有一半的服务端就完成了,经过一个月测试,再一个月完善就上线提供服务了,而那个粗糙的C++版本服务要实现相同的功能,没个半年是不行的,而且还不一定稳定可靠。
        同样的场景,在为我厂开发分布式服务框架时(后面简称DSF),再次重现。DSF要为应用服务的高性能与高可靠提供可配置的路由策略与失败处理策略,客户端驱动的开发是重点中的重点,即使在我们将Thrift作为框架的RPC解决方案的前提下,仍然需要投入极大的精力与时间,更何况,还要求我们的驱动设计必须用Java和C#都能较容易的实现。
        这时候,作为分布式服务系统中必不可少的应用注册服务器,同时要进行开发,对于孤军奋战的我就显得力不从心了。在我们的设计中,应用注册服务器必须提供实时的服务状态通知与分发能力,尽量让不健康的服务的切除更加及时,而且,应用注册服务器作为所有应用服务的基础服务,其可靠性的重要也是毋庸置疑的。在这种情景下,Erlang再次成为我的救星与坚实的靠山,让我敢于同时在DSF框架与与应用注册服务的开发中双线开战。
        应该说在整个的开发过程中,应用注册服务器并没有花费我太多时间,三周,一个真正的分布式无中心节点的高可靠服务雏形就此成型,其后只是零星的bug修改与功能补充了,这种力量来自哪里?还是Erlang!
        经常有人问我,Erlang到底好在哪里?因为能力有限,对Erlang的了解仅限皮毛,专业的分析可以到霸爷的“Erlang非业余研究”找相关普及贴看看,我这里仅根据这几年实践说说自己的感受。
        从技术上说,Erlang是一个平台,她提供了一套完整的高性能、高可靠网络服务开发所需要的基础设施,并提供了原语给开发人员使用,她降低了开发类似系统的难度与门槛。有一个说法,Erlang让一个中高级程序员,用一半的时间,一半的代码量,就能提供顶尖C程序员开发的网络服务80%性能的类似系统,并且可靠性不输于甚至超过前者。我的实践让我确信,这是真的。
        另一方面,Erlang也给了开发人员强大的自信,就如同前面开发DSF时的场景所述。有开发维护过线上系统的人应该可以深刻的感受到,开发一个高可靠的网络服务有多困难,维护一个线上系统有多劳心,当一个服务上线时,我们的运维与程序员即使睡觉都恨不得睁着一只眼睛。
        根据我的经验,采用Erlang开发的系统,其出现的bug量与用常规语言开发的绝对不是一个数量级;Erlang的监控树机制,更是让我们的服务,天生就具备了高可靠的基因,只要稍花精力,仔细规划我们的监控树与重启策略,就可以让本来就少了很多的bug及一些无法预料的外部故障,在即使出现时也有很大的几率迅速恢复,给你修复bug排除故障一个缓冲的时间,更何况,Erlang可是具备热更新能力的,那真的可以让你延寿啊!延寿!
        如果你的老板问你,为什么要用Erlang,Erlang好在哪里,你可以这样总结:省钱呐!你想想,一个资深的、顶尖的程序员与中高级普通程序员之间的成本差,普通的系统就只要普通的程序员就好啦,那不仅仅是省钱,是省很多很多的钱,这个回答,一定可以让你的老板眼睛像手电筒一样闪闪发光!
 
分享到:
评论

相关推荐

    erlang-irc-bot:Erlang中的一个简单的可扩展irc机器人

    当我决定需要学习Erlang时,一切就开始了。 同时,我需要一个简单的ircbot来处理我经常访问的某些频道。 这两件事放在一起,我决定开始这个项目。 从的历史可以最好地看出我的知识的发展。 现在,该机器人可以...

    erlang-mgf:Erlang分布矩生成函数(MGF)

    要在浏览器中使用,请使用 。 用法 var mgf = require ( 'distributions-erlang-mgf' ) ; mgf(t [,选项]) 评估分布的(MGF)。 t可以是 , array ,typed array或matrix 。 var matrix = require ( '...

    RabbitMQ.zip

    在实际应用中,RabbitMQ可以与其他技术结合使用,如Spring框架的RabbitTemplate,Python的pika库,或者是Java的AMQP库,它们都提供了与RabbitMQ交互的接口。同时,RabbitMQ支持多种工作模式,如简单模式、Direct模式...

    erlang_twitter:一个Erlang Twitter客户端

    erlang_twitter是Twitter API的客户端库。 使用它很简单: 1> inets:start(). ... 2> Auth = {"ngerakines", "secretpassword!"}. 3> twitter_client:status_mentions(Auth, []). twitter_client:status_mentions({...

    SChat:一个erlang写的即时通信服务

    计划将实现 单聊 群聊 以及 订阅/发布 等功能此项目是为了自己学习Erlang而写的,欢迎大家一起交流计划v0.01 完成客户端的链接与消息的接收(Done)v0.02 添加指定用户个人信息,以及获取当前服务器所有在线用户的功能

    面向文档存储数据库系统Apache CouchDB入门到精通视频教程

    CouchDB 最初是用 C++ 编写的,但在 2008 年 4 月,这个项目转移到 Erlang OTP 平台进行容错测试。 CouchDB官方网站是:http://couchdb.apache.org/ 2、适应人群 有一定的Java基础,JavaWeb基础,并对数据库管理...

    超级课程表的技术选型

    ### 超级课程表的技术选型与架构变迁 #### 技术背景及挑战 超级课程表是一款面向大学生群体的应用程序,旨在提供便捷的课程管理、查询服务,并逐渐拓展到社交功能,如“下课聊”等。面对庞大的用户基数(1000万+...

    ouchdb:具有直观HTTPJSON API的无缝多主同步数据库,旨在提高可靠性

    除了Erlang,ouchdb还提供了JavaScript接口,使得在Web环境中使用变得更加方便。开发者可以直接在浏览器端进行数据操作,减少了服务器与客户端之间的数据传输,提高了应用的响应速度和用户体验。 5. **大数据处理*...

    guardian_auth:使用EctoPostgresql Elixir Phoenix的Guardian身份验证实现[用户身份验证]

    在此示例中,我使用默认的localhost进行实时数据库的实时身份验证。 特征 用户注册列表编辑和删除 用户会话的创建/删除 如果创建了新用户,则会自动创建一个会话,并自动将该用户视为已登录用户。 身份验证网址...

    hillel_budget:韦恩·希勒(Wayne Hillel)的预算问题

    标题“hillel_budget:韦恩·希勒(Wayne Hillel)的预算问题”指的是一个与个人或组织财务预算相关的项目,由韦恩·希勒(Wayne Hillel)创建或面临。这个项目可能是一个案例研究、软件应用或者是一个开源代码库,...

    imgout:使用ElixirOTP的动态缩略图生成器微服务。 (带有Heroku部署按钮)

    Elixir是基于Erlang VM(BEAM)的函数式编程语言,具有并发性和分布式处理能力。OTP提供了诸如进程管理、错误处理、状态机和分布式通信等工具,使得开发者能够构建高可用性和容错性的系统。 **Heroku部署** Heroku...

    lager_backends:啤酒的自定义后端

    lager_backends (v0.1.0) 啤酒的自定义后端: 较大的后端电子邮件 啤酒后端_rabbitmq lager_backends 是根据许可条款发布的 版权所有 2012-2014 Kivra tl;博士 示例 app.config: { lager , [{ handlers ...

Global site tag (gtag.js) - Google Analytics