`
Tamino
  • 浏览: 35143 次
  • 来自: ...
社区版块
存档分类
最新评论

读《谈分布式网络程序设计》,思Erlang

阅读更多

(本文转帖自:http://avindev.iteye.com/blog/67116

读《谈分布式网络程序设计》,思Erlang

关键字: erlang networking

163的zhousen写了几篇文章,《谈分布式网络程序设计》
http://q.163.com/dirgroup/blog/zhousen.zju/1802920067811231290/#1802920067811231290
http://q.163.com/dirgroup/blog/zhousen.zju/1802920067123113984/#1802920067123113984
http://q.163.com/dirgroup/blog/zhousen.zju/18029200672093930660/#18029200672093930660

简单谈谈感想。

1.网络数据的收发的设计方式
文中说:
引用
使用select,一个线程专门负责所有的连接的接受和发送

引用
通常在高性能的服务器程序 则使用的是第二种方式,占系统资源少,而且性能也很好。此外,流水线技术是目前cpu中最基本的技术之一,若将此用于网络程序设计,也可以大幅提高性能。 它在网络程序中的表现实际上就是使用队列,若请求的处理过程分好几步,那么在每一步都设置一个队列,性能比将大大提升。cpu的流水线技术的原因在于各个 部件都处于繁忙状态,所以cpu单位时间内处理性能提高。而网络程序采用流水线技术(队列)则能尽量促使各个节点处于繁忙状态,从而提高程序的性能


这种做法,目前我从事的项目也在使用,将逻辑转换为大量的Task,然后放在多个线程中以流水线方式执行,以此充分利用CPU。但是这种方法存在 问题,就是将对于每个连接,本应按照同步进行处理的逻辑,拆成了异步执行,在调错方面存在难度,而且程序也复杂了难于理解。如果使用Erlang,大可以 一个Process对应于一个连接,由于Erlang的进程调度都是在用户态完成,因此能够最大化使用CPU,而且调试等也是很方便。

作者说了三个问题,超时,锁,网络发送瓶颈。在我的项目中,也碰到了超时和锁的问题。如果使用Erlang,锁和网络发送瓶颈的问题,都很好解 决。消息通讯机制,不再需要锁;发送瓶颈,Erlang中可以一个Process对应于一个Socket。对于超时,可以在Process中监测一个 Task处理的时间,汇总后计算。


2.网络协议
无论使用什么语言开发分布式网络程序,协议这方面都需要下功夫,只是Erlang在通讯的层面提供了很大的便利,可以省不少功夫。

3.字符编码
Erlang在字符编码这方面的支持是比较薄弱的。文中提的是Java和C++通讯,如果换成Java和Erlang通讯,在这方面需要谨慎处理。
举个想到的例子,比如Java端要发送一个含中文字符串的数据包到Erlang端,使用 Length + Body 的格式发送,那么Java代码就需要计算出正确的Length,使用 getBytes("UTF-8") 来获得字符串长度,Erlang代码要使用 iconv 来将二进制流编码为正确的UTF8串。

4.字节序
“通过网络字节序进行传输”这个确实是最好的办法。

5.单元测试
Erlang也有单元测试的,可以看看 wiki.trapexit.org 上面的 Test Driven Development 一文。

6.集成测试
啥系统都要做的,避免不了的,不多说了。

7.内存测试
有VM的语言就胜在这方面,但是糟糕的程序也一样会造成内存溢出。Erlang就要注意Atom表的问题,此外一些set,dict也要注意容量 别太大了,超过系统内存,会抛出一个错误的,我碰过这个。另外Erlang的内存模型是私有堆,理论上回收效率,延时等方面,可以比Java这样的命令式 语言的VM做的更好。
分享到:
评论

相关推荐

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...

    Erlang程序设计(第二版)及源码

    书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...

    Erlang程序设计(第2版)1

    2前言用消息传递的分布式并发系统,如何在多核CPU上自动加速程序,如何编写让人们互相交流的分布式应用程序。还介绍了如何编写容错和分布式系统的设计模式,如何给并发

    Erlang程序设计中文版和英文原版

    《Erlang程序设计》是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。《Erlang程序设计》将帮助读者在消息...

    Erlang程序设计

    本书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发...

    Erlang程序设计【高清扫描版】【完整书签】

    书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...

    Erlang程序设计中文版(完整书签)

    书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...

    Erlang程序设计[英文版]

    Erlang是一种编程语言,而且它具有比编程语言更加贴近操作系统的一些特性:并发线程、作业调度、内存管理、分布式、网络化等。

    erlang-18.0-win64

    最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。...

    Elixir程序设计语言.pdf

    2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 3.1 3.2 3.3 3.4 4.1 4.2 4.3 和Erlang互操作 错误处理 可执⾏⽂件 并发OTP并发 OTP Supervisors OTP 分布式 元编程 Umbrella Projects ...

    opt_win64_21最新

    使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时...

    Elixir erlang的书籍

    包含Elixir in Action,Elixir中文入门文档,Erlang and Elixir for Imperative Programmers,Erlang OTP并发编程实战-中文版,Erlang程序设计(第2版),Erlang编程指南,Functional.Web.Development.with.Elixir....

    ErlangOTP并发编程实战(高清PDF版)

    书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...

    Erlang/OTP:构建可大规模扩展的软实时系统-开源

    它包括自己的分布式数据库、与其他语言接口的应用程序、调试和发布处理工具。 Erlang/OTP 可用作大多数操作系统包管理器的预构建二进制包。 您可以使用 Kerl,该脚本可让您使用一些命令轻松构建 Erlang。 我们认真...

    Microsoft开源Orleans云计算web框架 Orleans.zip

     虽然已经存在 Erlang 和 Akka 这样利用 Actor Model 的框架,用户仍然需要做很多工作来确保那些 actors 保持在线以及能够处理故障和恢复。Orleans 框架着眼复杂项目和 actor 管理,让用户能够编写分布式项目而无需...

Global site tag (gtag.js) - Google Analytics