前言
本文整理了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