Home > misc > CN-Erlounge IV 珍宝

CN-Erlounge IV 珍宝

November 12th, 2009 :: jackyz

CN-Erlounge IV 圆满结束,各路英豪流出宝藏一大堆。经四处放狗,收刮如下:

0. 各位演讲者帅锅精心准备的演讲 slide

2. 由方块帅锅和莫帅锅 “以某种说不清楚的方式合作” 的 现场剧照
update: 对了,还有 zq 同学的 腐败前哨战实录

3. cn-erlounge-iv 现场抢到了 wifi 的幸运星们联袂演出的华丽 推推乐(请自备工具,以翻墙行动纪念柏林20年前那堵同样“伟大”的墙)

4. ZoomQueit 帅锅整理的 现场原声

5. 同样是由 ZoomQueit 从会场第一线发回的 “现场文字报导”(内容太长,放到后面了,点击 more 展开阅读)

6. yufeng 帅锅言简意赅的总结

7. litaocheng 帅锅同样言简意赅的总结

8. 一位我还没有和真人对上号的帅锅的围观观后感
update: 围观观后感下

这就是 ZoomQueit 帅锅的 “有玄机的文字格式” 的笔记( zq 同学的笔记能力确实可怕)。

091107::

~08:55 到达金溪山庄(关键词:西湖边上 杨公堤岸)

~09:30 大家在沉默的等待开始,和会场的WIFI 进行斗争,終于明白是网页登录,不要关闭中国电信的认证网页,才可以继续上网

~09:33 成立涛 - Erlang开发实践
    N多内容,包含了所有 erl 开发过程中的所有关键实践体验..
~09:45 讲演的幻灯在:
    http://ecug.googlecode.com/svn/trunk/cn-erlounge/iv/litao.cheng/
    当然提及OTP, gen_server 在实践中占到80% 的代码覆盖率,而且其它常用模式也都可用 gen_server 模拟出来!
~09:50 gen_server 是个稳固的 S/C 框架,我们可以放心的在其上进行开发;
    - erl 进程是种抽象概念,是应用的最小单位
    - 不要在gen_server 中进行复杂的处理,以免引发阻塞
    - 这时使用 gen_fsm 这是专门进行处理可能有阻塞的进程处理框架
    - 而且可以使用内置的相互监督模型进行进程脆崩后的自动处理
~09:55 昨日的讲师小聚照片:http://www.flickr.com/photos/zoomq/sets/72157622746793958/
    - appmon 内置的应用进程关系观察工具
    - 相当于JAVA的类树图自动分析,只是这里是对真实的网络进程间关系探测!
~10:01 Emakefile 内置的编译工具,比手工逐一make 可以获得一致性的自动统一编译;
    - 遗憾的是:只能编译.erl 的,无法依赖支持
    - 所以,习惯的使用 GNU make,通过makeconf 进一步加强日常的erl 生产编译行为...
    - 而且可移植!...
~10:05 注释约定! 模块用 %%% 前缀,函式用 %% 前缀...
    - 遗憾的是:edoc 对中文支持不好
    - 嗯嗯嗯,建议使用 Doxygen 之类第3方专业文档化编程工具
~10:13 erl 开发中的逻辑问题解决...
    - 编译过,但是运行不过时的调试技巧! -> plt 的进一步自动分析,来定位可能的编辑问题
    - 使用定制的 dialyzer 测试脚本,定位常见问题...
    - 进一步的,充分使用 EUnit 是个好思路...

~10:50 锋爷:Erlang应用优化指南
    - 网游公司,用erl 开发平台!
    - 对于性能的苛求导致发现短连接响应领域 erl 绝对领先!
    - Taskset -c 1 erl +K true +h 99999 +P 99999 -s ehttpd
    - 严格理解了应用需求后,放弃了垃圾收集等等内置行为后,性能增加 110%
~10:57 erl应该来作什么?
    - I/O密集型/先进的SMP多核支持的 *网络服务器*!!!(或是说专用的操作系统)
    - 为了证明这一感觉,进行了真实的OS 对比
    - 各种组件完全可以和一个OS 的各个部件对应起来!~ etop?!?!?
~11:05 R12B~R13B 最大的变化在进程调度方面,增长了上万行代码!
    - 智能的进行了逻辑CPU 间的协同调度..
    - erl进程是使用操作系统的真实线程
    - 10000/s 的请求,引发的OS消息可以达到 600000/s 内核消息...
    - 调度的单位是 Port 引发的一组I/O事件 ~ erl的调度是由进程和Port 组成的...
~11:11 OS方面的选择优化:
    - 32位性能比64位好(64位没有内存限制,但是性能低20~30%)
    - RHEL 致力于高性能的挖掘>..
    - 配置系统的swapness ,内存的OS预留等默认配置要向已知业务倾斜!
    - 绝大多数erl 死亡都是内存耗光...
~11:15 Hipe 虽然社区认为不稳定,但是实际应用时性能增强非常多!建议使用...
    - 可以省略很多系统特性
    - 未公开的特性: 调度器绑定! ~ 高级特性,可以预先配置CPU 行为..
~12:00 业务方面的优化:
    - 小消息大计算!
    - IO和计算的时间开销比,就是应用的性能收益比!
    - 对CPU和内存及早进行明显的分配!
        - 将业务和实际CPU 对应上,以免引发切换时间消耗...
    - 进程和物理世界的对象尽量 1:1 (erl 的对象控制级别是百万级别的!)
    - 多用ets ~ 大数据量推荐
    - tuple/list/array 只能应作小数据量
    - 尽量 *无锁结构*
~11:40 性能测量的关注:
    + erl/Erts/OS 的热点
        - systemtap ~ 非入侵式旁观
        - Erlang 工具集,非常丰富,非常关注内存的分配...
            - 十多种调度模式
            - 200多种内存锁 lockcounter 就可以观察到问题集中点
            - dbg ~ "ETrace";-)
            ... snmp 综合运行期情况
    + 延迟变化
    + 响应时间的抖动
~11:49 总结优化最佳体验
    - 多用:
        + list comprehension
        + iolist /gather write
        + Binart > 256时,才引用计数(不用复制的!)
        + Hipe_bif 也可以考虑
        - 不要用昂贵的BIF:
            - now()
            - io_lib:format
~11:59 CPU亲缘性利用!
    - Taskset ~ 如果业务明确后,令CPU 对于业务运行从来没有竞争锁,性能将提高 50%以上!
    - 启动OS的内置特性
        + Futex
        + VDSO
        + TCP/IP 协议桟...
            - 大文件句柄(只应微调,根据业务的) 有两面性.. port 等数据结构会自动调整,引发意外操作..
    - 基于测试的持续调优!
~12:05 可诊断的系统
    - 有内部信息暴露的,参数可动态调节的!
    - 测试自动的,有高压力环境的
    - 尽可能的发挥 erts 的优势::
        + 用Ports 整合不同语言系统
        + 用 driver 改写关键性能苛求部分
        + 使用标准协议方便erl 自然处理(Asn.1),使用内置的高级特性...
    - 锁是实际存在的...
        + 尽量减少这方面的代码...
~12:17 Q&A:
    - Q:ets 的使用策略?
    - A:策略!业务决定,在理解erl运行本质后,就容易判决了...

    - Q:百万级应用中,总是有单点node 怎么搞?
    - A:OTP 本身就一直存在这种问题!
        + 尝试使用多个进程来解决
        + 建议在另外一个VM 中进行处理...进行批量的消息移交(共享内存...),而且可以不用erl 的消息处理
    - xiu+A:如果请求间关联不大时,可以使用进程池;
        + 如果有关联时(同资源操作时),晚上有说
    - Q:小消息原则,怎么把握?
    - A:是指消息传递开销小! <5ms
        - 消息传递时间和计算时间比例 > 1:10 才有意义
    - Q:DB方面的操作有不?
    - A:有很多:
        + ets 内存DB;
        + Monisa 内置K/V DB
        + 外部关系数据库的支持不在Erl 哲学中...
~12:30 热烈的进行提问,锋爷的实战体验分享,引爆了好奇心...
    - Q: 加密怎好?
    - A: driver 沟通外部NB模块!
    - Q: 小消息原则应用策略?
    - A: cfg 要特别关注...(原先的 get 方式消耗非常不合算)
        + 先 ets 读入 cfg ,并代理进行维护
        + 其它进程来读ets
    - ~ 分享自个儿的经验:
        + 关系DB 的访问,策略
            - MySQL 的erl 驱动可以用
            - 先用erl 的DB
            - 尽量用 存储过程来计算
        + Asn.1 的标准比 SOAP 要靠谱!得多用!
            - 门槛是 概念和一般的不同
            - 电信工业标准,资料也少...

~14:00 xiu shiwei引言,预告明日的沙龙...

~14:09 老范 开讲EB:
    - 先用实况录像来开始,讲解EB 的实际情景
    - 有机会使用Erl 的情景非常稀少,所以,通过一个简单的程序智力游戏实例来学习,有效,而且可行
~14:25 EB架构的演化:
    - 无名 ets 表,发布战场时况
    - 各种游戏运营过程中的情景
    - 同时行动时的内置顺序聲明
    - 战队算法>..

~15:27 Stewart Mackenzie - An Erlang Implementation of Restms
    - 来自HK 的年轻程序员; 用白人的特色表情,夸张的开始自个儿的 erl 体验分享
    - 也是从Python/Django 过来的,最后选择了 erl 挑战自个儿,对 消息的处置方式...
    - erl 是有近20年的历史了, OTP 却没有被所有人及时的认可...
    - 消息的现实需求和技术解决历史...
~15:40 RestMS 开始忽悠:
    - Twitter 曰: RestMS=AMQP+AtomPub
    - 工作场景基本是对订阅的各种消息进行集约化的处理
    - 并基于路由算法快速使用各种规则进行聚合!
    - 当然的基于HTTP 协议的
~15:50 RestMS.org
    - fireflymq 是 RestMQ 的erl 实现
    - Riak 当然的也支持 MapReduce 模式的计算...
    - Links 式的发布和消息組織形式支持的!
~16:05 创建自个儿的web应用时的思索:
    - RabbitMQ 是 AMQP 的实现
    - RestMQ 是新标准
    - Riak 是RestMQ 的可用实现之一
    - fireflymq 是...

091108::

~09:30 悠然开始...
    - 焜工坊 ! 完全自个儿摸索出来的山寨型"分布式"架构的经验!
~09:45 CMS 在VPS环境中的分布式:
    - 利用老旧的本地机器,形成本地的静态页面工厂,然后自动上传到主机发布
    - 在主机上就地生成网页的话,有峰值现象,无法承受
    - 但是,下面有规模运营体验的同学,就反射式的给出了N多方案...
~09:55 Blender3D渲染工厂
    - 分布式分帧渲染...
    - hypershot 分布式处理; Blender-obj-py-erl-bip-分配给多台hypershot进行渲染
    - 选择erl 另外的原因是:可以最大限度的激发CPU 的所有能力
~10:03 网游原型中的探索:
    - "不开发,只组合"~这一策略来推行
    - 虽然可以找到各种可用的组件,但是总有一些缺憾
    - 使用了各种语言和工具,虽然很乱,但是很有效率!
~10:13 如何用erl简化编程?
    - 现实应用场景,对所有连接进行网关认证...
    - 进入具体方案后,大家直接利用昨天分享的思路进行了分析,非常犀利
    - 进程时间成本已经在本次大会中成立!
~10:17 3D 设计世界的非主流工具体验:
    - Modo 在Nexus 中的强大虚拟系统,可以快速生成各种指定系统中可用的东西?
    小结:
    - 分布式处理的对象:数据或是功能
    - 注意: 细颗粒的裁决;日志记录...

~10:33 MMO(链接管理服务器)侯明园 御风行数码科技有限公司
    - 需求的要求和原有的基本相同,但是要求了高可用性
    - 是要求整合入现有集群?!:
        + DB 使用原生 mysql-erl 驱动
        + 协议要标准!否则一定会反复...但是,已经通过原创的协议解析代码生成器囧解决
~10:44 压力测试测控
    - 之前C++/Py 非常痛苦...
    - 现在,可视化的分布式测试配置/变更/启动/收集
    - GUI 也是用 erl 开发的!(一周就完善)
    - erl 可以理解 wxPy 的wxFormBuild 生成的布局描述文件! xrc
    - 山寨的 loadrunner ...
~11:20 Q&A
    - 进程是消息,要在两处消耗,发现的秘密是  256 时,erl 不进行复制....
    + erl在游戏中的展望:
    - 热部署非常非常必要和贴心!
    - AI 中的协程,erl 大有可为...
    - 运营接口
    - 整合工具 ~ 转接各种运营商的接口标准...

~11:50 午饭
    - 这次按时送到,Pisa ....

~12:50 周爱民 - 谈谈erlang网络环境下的几种数据流转形式
    - 从10试不第的晩唐诗人开始...上马还是下马,进门还是出门?
    - 时间可以证明一切!
    - 踱步而侃...
    - 算法+数据结构 = 程序
    - 所以,程序不是系统也不是软件!
    - PME 中,P属性和M 方法才在软件中,Events ~ 事件是外星来客...
    - 程序是不考虑时序的系统的静态特定数据结构的抽象...
~13:13 计算机语言范型分类理解...
    - 纯理论的解析了各种语言的目标领域...
    - 在语言层面通过某种组合进行了对时序的理解和处理,但是在OS 呢?
    - erl 领域中的讨论核心是: 网络环境中的数据流转..
    结构化 = 使之成为结构...
        - 1972 年"结构程序设计"牛书 中的内容回顾
            - 数据结构,逻辑结构,...
            - 层次化结构,就是 OOP
~13:21 数据和时间的关系
    - 在途与历史...
    - 由于在途数据有严格的顺序关系,所以一般只能进行事务聚包
    - 数据流动 == 时间流动
    - 即时性系统中好象不重要的:
        - 完整性: 正确性/有效性/一致性
    - AMQP 是有序的吗?
        - 当然不是!
        - 所以,对于有关联的消息队列,应该进行聚包!
        - 后续的:聚合的包,逐一解决时,也通过 MQ 逻辑的话...
        - Sent-ReceiveProxy-Receive
~13:57 即时且有序数据情景的分析
    - 既往和将来
    嗯嗯嗯,纯理性思维不是谁都可以享受的...
    - 映射到系统层面的数据时间角度理解和对策...
    - 简单的系统(聊天室)有可能必须考虑多种数据时序类型的对策..
    对策之一:
        - 顺序消息在 App 处聚包
        - 通过MQ
        - 处理机,解开处理其中之一,然后剩余的打包,继续丢回MQ(头部)
        - 继续...
~14:04 超时 30分钟,到达最后的 Alibaba 实际项目
    - XEngine 的原因...需要中国的 GAE/EC2
    - 几乎每40秒中就说一声,"后面就说" Apsara ~ 飞天系统
    - Alibaba 将独立开发一个独立的内部 Google API 集群,提供B2B 应用服务商的所有关键服务..
~14:44 瓶颈在于 AJAV 原生VM无法加载多应用!
    - 后羿 系统已经完成论证,3年内覆盖 2.5万台主机运营
        - XEngine 当前 就2人,其中一名实习生
        - 后羿 有10人左右
    - erlang 入门和使用非常快
    - 明年, taobao 非关键业务将使用这一体系...
    - 先降低 taobao 支付宝 的硬件成本

t2t格式很整洁很强大,不是嘛?

my 2 cents:
1. 没去成,很后悔。
2. 帅锅太多,聚会要低调。

misc

  1. john
    November 15th, 2009 at 13:55 | #1

    还以为在北京 所以打算没去 谁知道这么近 后悔呀!有没视频的?

  2. langxianzhe
    May 10th, 2010 at 14:29 | #2

    “遗憾的是:edoc 对中文支持不好”什么叫不好,到底支持还是不支持。

  1. No trackbacks yet.