http://timyang.net/category/erlang/

在云时代,我们需要有更好的能利用多核功能及分布式能力的编程语言,Erlang在这方面具有天生的优势,因此我们始终对它保持强烈关注。

按:此为客座文章,投稿人为新浪微博基础研发工程师赵鹏城(http://weibo.com/iamzpc),以下为原文。

在对一个分布式KV存储系统的研究过程中,我有幸遇到了Erlang语言。因此,我研究工作的第一目标就是快速入门Erlang语言并在实际研究过程中进一步深入理解Erlang的精髓。在为数不多的Erlang中文书籍,我选择了《Erlang编程指南》一书。

首先,我认为此书是一本值得推荐的Erlang入门书籍。第一章的讲解把一头雾水的Erlang门外汉快速带入了Erlang文化中,从中我了解了Erlang的历史、特性及为什么要使用Erlang,还了解了几个Erlang案例,让我对Erlang的兴趣大增。接下来的第二章到第十一章是Erlang的基础部分,从中我学习到了Erlang的基础数据类型,顺序和并发编程及其进程设计模式,在我读membase中的ns_server的过程中,大部分知识点都得到了充分的验证,尤其是Erlang的函数是编程思想和进程设计模式,让我清晰快速的了解了ns_server的基础流程。

其次,我认为此书是一本非常全面和深入的Erlang高级参考手册。在我研究ns_server的过程中,遇到了OTP行为包的使用问题,通过behaviour关键字,我快速定位到了本书的第十二章,第十二章对OTP的原理和使用进行详细的介绍,让我在实践中快速的理清了思路,深刻体会了Erlang在分布式和并发开发上的便捷。在进一步的实践中,我还遇到了Mnesia数据库的问题,此书用专门一章的内容详细阐述了Mnesia的知识,大大提高了我的研究效率。

总之,此书是一本既适合入门学习又适合开发中参考的Erlang权威书籍。

虽然此书如此优秀,但是还是有一些不足的,主要体现在个别中文翻译上,包括名词和一些语句的翻译,着实有些不易理解,望日后能够重新酌定。

CN Erlounge IV tweets

Saturday, Nov 14th, 2009 by Tim | 2 Comments
Filed under: Erlang | Tags: ErlangErlounge

前言

本文整理了Erlounge IV Erlang杭州开发者大会现场的记录的Tweets列表,建议先到 http://ecug.org/agenda/下载演讲文档,以便理解上下文。
Twitter的优势是小之美,整理成一篇大文章比较杂乱,仅希望能给不在现场的读者在阅读演讲稿时提供一些参考的信息。
文中 @user 方式表示用户的 twitter id,下文中提到的部分讲师Twitter id为@litaocheng @eric33yu@zoomq @sj_mackenzie @qiezi @bobcui @xushiwei @houmingyuan @aimingoo 同时也欢迎follow我的twitter: @xmpp

(Erlounge IV第一天参会人员合影)

Day 1

@litaocheng 的《Erlang开发实践》如果要做Erlang具体开发的话(而不是所谓“架构”),建议看看后续公布的视频,这个是非常好的教程。由于当时没抢到无线IP,所以没有twitter记录

@eric33yu 的 《Erlang系统调优》开始了,放弃无线上网,开始用手机发,幸亏BB打字快

Erlang process 调度原则 尽量让一个cpu忙

讲的都是实战精华,比如斑马书中提到进程字典不是一个好的编程习惯,但yufeng从实战角度鼓励用进程字典,因为进程字典性能非常好。

模式匹配相同的标签尽量放在一起 如tuple,以提高效率

讲erlang集群 所有节点都需要相互维持一个tcp连接 并要相互维持一个90s一次的心跳 开销很大

讲erlang大量数据不要用tuple,array,list来存 最好用ets

linux systemtap 来观测程序(profiler)很有用 非侵入式 不需要修改程序

Erlang发送binary时候最好大于256长度,否则每份数据都需要copy,比如一次广播发送多份下行数据。

讲erlang上不要把ulimit -n 设太高 因为每个handler 需要占用约200字节开销 即使没用

yufeng讲他每做一个服务器程序,都投入30%时间编写log代码记录重要参数 以便运行期间观察

讲erlang中如需跨语言通讯 推荐asn.1(不少现场同学也倾向于protocol buffers)

Erlang中config set/get不适合用独立进程去做 推荐ets

发现大部分erlang programmer是c++ 出身, 特别关注IO效率, cpu利用, 多核, 上下文切换开销, 内存分配/回收,总而言之就是性能, 另外一方面也许是 @eric33yu 忽悠成功 

恶狼战役的视频很震撼,这个是在ppt上看不到的 2:20 PM Nov 7th

erlang由于没有共享变量,所以进程间通讯是用message还是ets(memory db)的使用技巧是语言的特色 2:22 PM Nov 7th

恶狼战役的项目专门给初学者练手用,都是用基本语法,没用什么什么高级特性 2:38 PM Nov 7th

现在来自香港的老外Stewart Mackenzie讲 An Erlang Implementation of Restms,中英文夹杂很幽默,引起笑声阵阵 3:12 PM Nov 7th

@sj_mackenzie讲他选择erlang的故事,平时他是靠java make $ 3:14 PM Nov 7th

@sj_mackenzie解释了message queue的作用,并对比了xmpp, AMQP, atompub的一些不足,所以他建议用RestMS 3:34 PM Nov 7th

@sj_mackenzie对key value store 也很感兴趣,他推荐了另外一个erlang based riak, 也是一个dynamo克隆 http://riak.basho.com/ 3:47 PM Nov 7th

@sj_mackenzie 开始介绍 dynamo 理论了,这个是网上ppt没有的,so yet another dynamo fans.  3:49 PM Nov 7th

@sj_mackenzie 介绍 riak performance, 单机上write 18k/s, read 25k/s 3:53 PM Nov 7th
@sj_mackenzie 介绍 riak 还有一个link的特性,就像html的link一样,又向老外了解了一些link的细节 3:59 PM Nov 7th

@sj_mackenzie 现在是trustno1讲cuda变成,开场白是Parallel和concurrent的区别 4:27 PM Nov 7th

trustno1讲concurrent is coarse-grained Parallelism 4:33 PM Nov 7th

trustno1讲”premature optimization is the root of all evil”翻译成“过早优化是万恶之源”是不准确的,premature应该说是草率的优化更准确 4:45 PM Nov 7th

trustno1今天继续走“让听众听不懂”的路线,说是如果大家都听懂了他就给领导交辞呈,现在正在讲直流电平位移转为有符号数,然后突然停下来问大家前面内容有没有疑问,没人回应,然后话题继续 5:17 PM Nov 7th

Day 1, Evening

现在是 @bobcui 和 @qiezi 来分享actor erlang进程模型在c++事件,用51.com好友接口服务来做业务场景说明 8:10 PM Nov 7th

@bobcui 正在介绍51.com底层服务concurrent实现思路,coroutine协程每秒可以切换200万次,比context switch有很大优势 8:27 PM Nov 7th

@bobcui 介绍完coroutine spawn之后,引起听众讨论协程的一些缺陷,比如调度器没法主动调度,没有隔离,单个process出了问题没法像erlang那样隔离保护,伪erlang粉丝与纯erlang粉丝展开了pk 8:51 PM Nov 7th

(插图:51.com C++实现的轻量级进程模型)

纯erlang粉丝Ery Lee质疑这套c++的协程模型ac_actor,“这套模型有商用吗”, @bobcui 急了,”我们51.com已经有一百多台服务器在跑这个” 9:05 PM Nov 7th

@xushiwei 开讲各种服务器编程模型的区别,进程fork方式,Boost ASIO, 轻量process其实都很相似,不管由os还是应用来管理调度,核心问题是看哪个进程够轻量 9:27 PM Nov 7th

@xushiwei 谈到Boost ASIO缺点不够优雅,业务代码被切分支离破碎。但轻量级进程实现简单自然,易于维护且高效,不可避免是服务器编程发展方向 9:35 PM Nov 7th

Day 2

御风行的 @houmingyuan 讲网络程序的压力测试,使用erlang/otp的client比c++/python一样的机器人简单方便很多(原话:舒服太多),一个erlang process一个机器人,代码约1500行,一个星期可以做得非常完善,包括流量监控支持 10:42 AM Nov 8th

(插图:御风行的Erlang连接服务器)

御风行的连接服务器/网关,由c++改成erlang之后,代码由7924减少到2000行,状态机状态及事件都减少到一半以下。以及模式匹配比c++优雅舒适很多,性能和c++差不多,而且erlang是新手写的,c++是老手 11:02 AM Nov 8th

御风行的erlang连接服务器/网关,6500并发下,测试流量达到3w-4w packet/s 11:18 AM Nov 8th

说到erlang连接服务器6500并发下,测试流量达到3w-4w packet/s,不少提问没找到缺陷,又伤害了现场不少c++, boost asio粉丝脆弱的心灵 11:26 AM Nov 8th

@eric33yu 补充erlang内存分配的方式,erlang有200多种内存分配的方式,比一般同学自己写的内存池有不可比拟的优势。另外由于大部分erlang大牛都是c++/erlang双剑客,所以大部分c++粉丝的质疑都被轻松驳回 11:36 AM Nov 8th

发现erlang缺少一本类似effective java/c++这样的书,现场工程师有很多类似问题    12:48 PM Nov 8th

参加Erlang开发者大会一些记录

Friday, Dec 26th, 2008 by Tim | 0 Comments
Filed under: Erlang | Tags: Erlounge

Erlang开发者大会是我参与过的最温馨的一个小规模会议,没有赞助商广告,不用抢网络,有免费午餐和下午茶(水果),第二天还有免费的中午大餐。感谢xushiwei和赞助商们(盛大,金山及 opengoss),让大家能够在这么一个温馨的场所进行交流。

第一天有2个有关web game的session, 其中jackyz的麻将程序业务逻辑竟然是用JS完成的,“用Erlang写业务逻辑太繁琐了”,他是如是说。另外一个是金山的韩拓的基于Flash的象棋程 序,同时里面还实现了一个AI的机器人,他这个demo已经在google code上开源了,见 erl-chess

前文提到过的一次演讲陈杰谈网游服务器的后端技术,演讲是在第一天下午分组讨论会上。分组讨论的遗憾是很难取舍,嫌自己分身无术。周敏的MapReduce和另外一个Topic Erlang VM我也很感兴趣,但没法同时参与了。

另外还有几个相对深奥的Topic, 比如TrustNo1谈的冯诺依曼机的缺陷,Mryufeng的Inside the erlang VME2dynomo, 光听名字就很深奥。听众听完都没胆量提问了。

尾声是在ery.lee讲的Erlang电信网管软件应用, EryLee走得比较前沿,他已经用Erlang开发出大规模的商用软件了。他讲述了他从繁琐的Java EE,SOA转向轻量级的Erlang后端+Ruby on Rails前端的经历。Ery的观点比较激进,但是我比较认可。他提到目前主流的应用程序实际上都是在处理数据,实际上是一个数据流的处理,但是使用流行 的OO方式去解决问题,首先经常考虑的却是我怎么样写一个class, 或者我要用一个什么样的设计模式。但是FP语言如Erlang从第一行开始就是对数据真正的业务处理,可以更精简的完成任务。

其中我也很荣幸在大会中讲了一个XMPP Jabber的话题,于在场的开发高手进行了探讨,获益颇多。

Archive for the ‘Erlang’ Category 《Erlang编程指南》读后感的更多相关文章

  1. erlang 编程指南 第三章-顺序编程 课后练习

    1. sum(3) => 6; sum(1,3) => 6; sum(6,6) => 6; sum(N) when is_integer(N) -> sum_acc(N,0); ...

  2. Erlang 101 Erlang环境和顺序编程

    笔记系列 Erlang环境和顺序编程 Erlang并发编程 Erlang分布式编程 Yaws Erlang/OTP 日期              变更说明2014-10-12 A outline, ...

  3. Erlang 102 Erlang并发编程

    笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-02 A outline 2014 ...

  4. Erlang 103 Erlang分布式编程

    Outline 笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-23 A Outl ...

  5. [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集

    很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索.      小站地址: http://site.douban.com/204209/     ...

  6. [Erlang 0129] Erlang 杂记 VI

    把之前阅读资料的时候记下的东西,整理了一下. Adding special-purpose processor support to the Erlang VM   P23 简单介绍了Erlang C ...

  7. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  8. <译>Spark Sreaming 编程指南

    Spark Streaming 编程指南 Overview A Quick Example Basic Concepts Linking Initializing StreamingContext D ...

  9. Apache Spark 2.2.0 中文文档 - Structured Streaming 编程指南 | ApacheCN

    Structured Streaming 编程指南 概述 快速示例 Programming Model (编程模型) 基本概念 处理 Event-time 和延迟数据 容错语义 API 使用 Data ...

随机推荐

  1. UML学习之初步总结

    UML(Unified Modeling Language)即统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了一系列最 ...

  2. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第六篇:拦截器

    摘要      本文将对“MVC公告发布系统”的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题      我们继续完善“MVC公告发布系统”, ...

  3. (转)oracle 启动监听 报“监听程序不支持服务” 解决

    转自 http://www.51testing.com/html/99/478599-842622.html 今天安装了oracle后,启动监听,报错如下:    启动tnslsnr: 请稍候... ...

  4. GO语言学习(十八)Go 语言接口

    Go 语言接口 Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface ...

  5. php-wamp环境搭建

    wamp(Windows,Apache,Mysql,PHP) win8.1下搭建apache2.4(64位)  php5.6.11(64位)  mysql5.6.24(32位) d盘创建文件结构为: ...

  6. JS学习笔记 - 面向对象 - 选项卡 (普通选项卡改写)

    选项卡3 <script> window.onload=function () { new TabSwitch('div1'); }; function TabSwitch(id) // ...

  7. echarts同一页面四个图表切换的js数据交互

    需求:点击tab页,切换四个不同的图表,ajax向后台请求数据,展示在四个不同的图表中. 其余的就不多说,直接上js代码了 $(function() { $("#heart").o ...

  8. 支付宝支付返回通知时 notify_url和return_url的选择

    页面跳转同步通知页面特性(return_url特性) 买家在支付成功后会看到一个支付宝交易提示成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url) 该页面中 ...

  9. [RxJS] Subject: an Observable and Observer hybrid

    This lesson teaches you how a Subject is simply a hybrid of Observable and Observer which can act as ...

  10. 3D 应用程序性能

    原文:3D 应用程序性能 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/74595999 3 ...