`
AvinDev
  • 浏览: 113375 次
社区版块
存档分类
最新评论

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

阅读更多
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程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

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

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

    分布式应用Erlang:Erlang_OTP_19_win64

    Erlang OTP 19_win64是一款专为Windows 64位系统设计的Erlang软件开发工具包,它包含Erlang编程语言和OTP(Open Telecom Platform)框架。Erlang是一种强大的、动态类型的函数式编程语言,特别适合构建高可用性、...

    Erlang程序设计,包含完整目录和全套源码

    这个压缩包包含了Erlang程序设计的完整目录和源码,是学习和理解Erlang编程的重要资源。 Erlang的并发特性源于其轻量级进程模型,每个进程都有自己的内存空间,进程间通信通过消息传递实现,这种设计降低了并发执行...

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

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

    Erlang程序设计中文版

    **Erlang程序设计中文版**是一本深入探讨Erlang编程语言的书籍,旨在帮助开发者理解和掌握这种在并发处理和分布式系统中广泛使用的语言。Erlang以其强大的错误恢复能力、热代码替换以及对大规模并发的支持而闻名,是...

    [Erlang程序设计]源代码

    **Erlang程序设计源代码详解** Erlang是一种面向并发、函数式编程语言,尤其在分布式系统和高可用性领域表现出色。本资源包含了《Erlang程序设计》一书的所有实例代码,旨在帮助读者深入理解Erlang语言的核心特性和...

    Erlang程序设计及源码

    本资源包含了一本Erlang程序设计的入门经典书籍及其配套源码,适合初学者深入理解Erlang编程。 1. **Erlang简介** Erlang以其强大的并发处理能力而闻名,它采用了轻量级进程模型,使得在单个系统中可以同时运行...

    erlang程序设计与入门

    **Erlang程序设计与入门** Erlang是一种并发、函数式编程语言,主要用于构建分布式、高可用性、容错性强的系统。它的设计灵感来源于电信行业的需求,由瑞典爱立信公司于1986年开发。Erlang以其独特的并发模型、轻量...

    Erlang程序设计].源代码

    在"Erlang程序设计"].源代码这个压缩包中,我们可以找到学习和实践Erlang编程的相关材料。这些源代码可能是书中实例的实现,或者是针对Erlang编程技巧和概念的示例。通过阅读和分析这些源代码,你可以深入理解Erlang...

    Erlang程序设计及源代码打包

    **Erlang程序设计概述** Erlang是一种面向并发的、...总的来说,Erlang程序设计是一门深入探讨Erlang语言及其应用的课程,结合源代码实践,可以帮助你建立起坚实的基础,进而探索更高级的并发和分布式系统构建技术。

    erlang 程序设计 源码

    在深入理解Erlang程序设计的源码之前,我们需要了解Erlang的一些核心概念和特性。 1. **并发性**:Erlang的并发模型基于轻量级进程(Lightweight Processes,LWP),它们类似于操作系统中的线程,但资源消耗小得多...

    erlang程序设计

    在深入探讨Erlang程序设计之前,我们先来了解一下Erlang的基础概念。 1. 函数式编程:Erlang是一种纯函数式编程语言,这意味着函数不具有副作用,它们仅根据输入产生输出,不改变外部状态。这种特性使得代码更容易...

    erlang程序设计第二版课后习题答案(精简版).zip

    《Erlang程序设计第二版》是一本深入探讨Erlang编程语言的书籍,它旨在帮助读者掌握Erlang的核心概念和技术,以实现高并发、容错性和分布式系统的开发。课后习题是学习过程中不可或缺的一部分,它们能够检验并巩固...

    erlang程序设计(第二版)随书源码

    《Erlang程序设计(第二版)》是一本深入探讨Erlang编程技术的书籍,其随书源码提供了丰富的实例,帮助读者更好地理解和实践Erlang编程。 在学习Erlang时,源码是极其宝贵的资源。通过阅读和分析这些代码,我们可以...

    erlang程序设计中文版

    Joe Armstrong是Erlang的创始人,他在这本书中深入讲解了Erlang程序设计的核心概念和应用。Erlang语言特别适合需要并发处理和高可靠性的场合,例如电信行业、实时交易系统、云服务等。 Erlang的设计理念来自于对...

Global site tag (gtag.js) - Google Analytics