Erlang | 云计算 百闻不如一见 第一印象 阶乘 fac(N) when N > 0 ->     N * fac(N-1); fac(0) ->     1. 第一印象 快速排序 sort([Pivot|T]) ->     sort([X||X <- T, X < Pivot]) ++     [Pivot] ++     sort([X||X <- T, X >= Pivot]); sort([]) ->     []. 第一印象 创建进程 Pid = spawn(fun() -> loop(0) end).  第一印象 收发消息 Pid ! Message, ... receive     Message1 -> DoActions1;     Message2 -> DoActions2;     ... after Time ->     DoTimeOutActions end 第一印象 内置分布式 ... Pid = spawn(Fun@Node) ... alive(Node) ... not_alive(Node) Map-Reduce 超短Map-Reduce Map-Reduce Map map(F, L) ->     S = self(),     Pids = lists:map(fun(I) ->             spawn(fun() -> do(S, F, I) end)         end, L),     reduce(Pids). Map-Reduce Reduce reduce([H|T]) ->     receive         {H, Ret} -> [Ret|reduce(T)]     end; reduce([]) ->     []. do(Parent, F, I) ->     Parent ! {self(), (catch F(I))}. 云计算? 理想篇 另一个“技术改变世界”的美好梦想 更美好的世界 云计算的蓝图 更平等 云计算的蓝图 更节约 云计算的蓝图 更环保 云计算@现状 云计算的现状 信任还未建立 云计算的现状 炒作还在继续 云计算的现状 技术尚不清晰 云里雾里! 前云计算时代 前云计算时代 前云计算时代 改代码 前云计算时代 改架构 前云计算时代 改数据库 前云计算时代 辛苦了 前云计算时代 处处是瓶颈——共享带来瓶颈 单点故障——共享意味着单点 优化措施有限——缓存、切分   是的,通过各种措施,我们能够“扩 容”,但,每一次都要“伤筋动骨”, 基本上,我们的系统还谈不上伸缩性。 伸缩,难道就应该是这么痛苦的么? 伸缩性? 云计算时代?? 计算的迁移 云计算的特征 可伸缩 云计算的特征 大规模的分布 云计算的特征 基于互联网 云计算的特征 基于开放标准 一个运行环境! 对代码而言,云计算的本质就是…… 实际上,这样的运行环境20多年前就有了 虽说,其中运行的并不是我们熟悉的语言 发音 二郎? 厄朗? no!埃尔朗![Air-Lang] 释名 A.K.Erlang 数学家埃尔朗,排队理论创始 人。此理论广泛应用于电话/ 电信系统。 设计目标 容错——交互机不允许停机 “硬件故障” “软件故障” “在线升级” 并发——交换机必须能够并发 软实时——交换机的反应时间 分布式——负载和容错   多核?——那时不流行,但是也easy 开发下一代交换机的语言 软件哲学 另辟蹊径 任务分解 可并发的任务 任务分层 更清晰的错误处理,容错能力 大量并发 轻量进程,多核性能优势 进程隔离 故障隔离,易于调试 消息交互 无锁结构 针对现实世界建模 一切皆为进程 超轻量 基础机制,大量使用 强隔离 隔离错误,垃圾回收 靠消息交互 还是隔离,避免共享 进程故障立即退出 速错,由其他进程处理 OTP ——通用,而且成熟 文件:io/file/... 数据库:ets/dets/mnesia... 网络: socket/tcp/sctp/udp/ssh/http/ftp/snmp/corba... 基础设施: stdlib/kernal/logger/eunit/debug/yecc... 其他:lists/proplist/dicts/xml... GUI:wxErlang/... behavior:gen_server/gen_fsm/gen_event...   用 Erlang 来打造 计算云? 用事实说话。 开源项目 CouchDB 云存储框架 一个大 hashmap   JSON, Rest, HTTP, JavaScript 开源项目 Scalaris 云存储框架too 又一个大 hashmap   Transaction, Java API, Erlang API, DHT, P2P 开源项目 Disco 云运算框架 Python Map-Reduce 框架 Nokia, Amazon EC2 开源项目 Ejabberd 云通讯框架 Top XMPP server 领域老大 开源项目 RabbitMQ 云通讯框架 AMQP Server JPMorgan, AMQP, binary, C#/.NET, Java, 开源项目 mochiweb 云的web"前端" Erlang web server 积木 高性能,高可定制,toolkit 开源项目 Riea, LFE 云上的计算语言? Script Language on Erlang VM! Riea ~~ Ruby Python LFE ~~ Lisp Clojure 商业应用 amazon 云存储 SimpleDB Erlang powered 商业应用 facebook 云应用? 超大型在线聊天系统 Ejabberd powerd 商业应用 Yahoo! delicious 2.0   重写已有系统 用 Erlang 重写部分服务 商业应用 Last.fm 进行中的聊天项目 通过 Erlang + libevent 达到 C1024K 负载指标 这些正在发生! 抓住“云”中的机遇! 挑战?机遇! 中文社区 http://erlang-china.org 学习资料 Joe Armstrong 亲自编写 谢谢 | Q&A 赵东炜 (jackyz) erlang-china.org 好吧,再 谈多一点 赵东炜 (jackyz) erlang-china.org 关于 Erlang 的种种传闻 流言终结者 函数式 单次赋值 动态类型 模式匹配 跨平台 实时垃圾搜集 超轻量进程 异步消息 OpenSource 统一模型 流言终结者 高性能/大型机 学院派/实验性 电信业专用 缺乏商业支持 语法怪异 超级难学 架构师的语言 尾递归 小众 不成熟 “工业主流技术”有啥问题? 容错 容错 容错? 容错 只有 try catch ...... 是不够的 错误,我自己能修复么? 从错误中恢复? 硬件错误? 分布 分布 分布? 分布 你的意思是 RPC?   这个世界上究竟有多少种 RPC 协议? 位置透明还是位置不透明? 同步还是异步? 数据格式? 松散耦合? 并发 并发 并发? 并发 线程,进程,锁,怕怕。 人肉并发? 体形也很重要。 什么妨碍了并发? 并行 并行 并行? 并行 照理说,多了几个核,应该快几倍……。 (可是,为什么我不是很确信呢?)   多了几个核,咋就不能快几倍呢? 多核加速,我自己能做什么? 不是吧? 问题在哪儿? 一句超简单的代码:     for(int i=0; i<100; i++){         do_some_thing();     }   顺序代码! “工业主流技术”的尴尬 都是 ____ 惹的祸 不重视错误。 混乱的分布式模型。 不考虑并发。 建立在顺序代码之上。锁无处不在。   命令式语言的“上帝视角”? “工业主流技术”的尴尬 有多严重? Amdahl's law “工业主流技术”的尴尬 轻量内核线程(LWKT) 乐观线程并发(OTC) 软件事务内存(STM) DragonFly BSD Azul Machine 864cpu*768G JVM Clojure 怎么办? 而且很成熟! Erlang 是唯一一个有可靠实现和完 善类库的成熟的并行开发语言! 另一条路? Ralph Johnson "四人帮" 基于消息的并发(ActorModel) xxMQ Server 并行开发语言 八卦:北京不是一天建起来的 1985 Erlang 的创世纪 1986 Prolog 方言 1988 有了自己的语法 1989 第一个虚拟机 JAM 1993 用 C 实现的 BEAM 1997 开始 OTP 1998 宣布 AXD301 1998 遭 ericsson 弃用   八卦:北京不是一天建起来的 1998 Erlang 开源 1998 BlueTail 2001 第一次互联网寒冬 2004 过冬,发芽 2006 SMP Erlang 2007 出版 The Book 2007 回到 ericsson 2007 Erlang 中文社区   今天 一个好汉三个帮 节点——简单、清晰 开放的通讯协议 端口——标准、稳定 标准输入输出 内联驱动——高效但危险 深入Erlang核心 殊途同归 面向并发编程? (COP vs OOP) Alan Kay OOP 之父 对我而言,面向对象程序设计 只意味着消息发送,状态处理的 局部保存、保护和隐藏,还有 一切东西的极端迟绑定。这些 在 Smalltalk 和 LISP 中都可 以实现。可能还有其他系统, 但我不知道。 Alan Kay  ----Clarification of "object-oriented", 2003  殊途同归 面向并发编程? (COP vs OOP) Joe Armstrong COP 之父 每一项独立的活动都在一个完 全独立的进程中来执行。这些 进程不共享任何数据,彼此之 间只通过消息传递进行通信。 COP同样也具有OOP的两个主要 优点,即:多态以及可以预定 义的接口。 Joe Armstrong  ----Joe thesis 2003 
还剩81页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 7 人已下载

下载pdf

pdf贡献者

pyred5

贡献于2011-02-14

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf