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

读《谈分布式网络程序设计》,思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_OTP_19_win64

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

    erlang 程序设计 源码

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

    erlang 设计指南

    在分布式系统方面,Erlang节点可以在网络中互相发现并通信,形成一个集群。节点之间的通信几乎透明,允许构建跨越多个物理机器的分布式应用程序。Erlang的分布式特性还包括分布式进程和分布式数据库Mnesia,后者是一...

    编写分布式的Erlang程序_陷阱和对策(中文版)

    在编写分布式的Erlang程序时,开发者会遇到各种陷阱和挑战,需要掌握特定的策略来克服。 1. **分布式概念**:Erlang支持跨节点的分布式计算,这意味着程序可以在多个物理或虚拟机上运行。这需要理解如何启动和管理...

    图书:Erlang和OTP实战

    这本书深入浅出地介绍了Erlang在分布式系统、并发处理以及高可用性设计中的应用,同时结合 OTP 提供了强大的工具和库支持。通过阅读此书,读者可以掌握如何利用Erlang和OTP构建高效、容错的实时系统。 Erlang是一种...

    erlang 语言程序设计

    ### Erlang语言程序设计 #### 一、Erlang语言简介与重要性 Erlang是一种功能强大且灵活的编程语言,它最初由爱立信公司开发,旨在为电信系统提供高并发、分布式处理能力。随着时间的发展,Erlang不仅在电信领域...

    erlang编程 Introducing Erlang

    Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心...

    erlang中文基础教程

    5. **分布式**:Erlang天生支持分布式计算,可以轻松地在多台机器上部署和扩展应用程序。 **Erlang的语法基础** 1. **变量**:Erlang变量以大写字母开头,且赋值后不可变。 2. **列表**:Erlang中的列表用方括号...

    两本erlang电子书

    这两本电子书——《Erlang and OTP in Action》和《Erlang程序设计》——都是深入学习Erlang语言和OTP的宝贵资源。 《Erlang and OTP in Action》这本书主要分为三个部分。第一部分介绍Erlang语言的基础知识,包括...

    erlang资源

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入...

    erlang programming

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在“erlang programming”这个主题下,我们可以深入探讨以下几个关键知识点: 1. **Erlang语言基础**:Erlang是瑞典...

    erlang_面对软件错误构建可靠的分布式系统

    1. **并发与并行处理**:Erlang的设计核心之一是并发,它通过轻量级进程(Lightweight Processes, LWP)实现。每个进程拥有独立的内存空间,通信通过消息传递完成,这种方式减少了锁竞争,提高了系统的并发性能。 2...

    erlang23.2版windows64位.zip

    在标题"erlang23.2版windows64位.zip"中,我们了解到这是Erlang的一个特定版本——23.2,专为Windows 64位操作系统设计的安装包。这个版本可能包含了对Windows平台的优化,以确保在该系统上高效运行。 描述中的...

    erlang25.0 windows版本

    - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、分布式计算和监控。 - **行为模式**:如GenServer、GenEvent和Gen_fsm,它们定义了Erlang中...

    erlang参考手册

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。Erlang因其在处理大量并发连接和容错能力上的优秀表现,尤其在电信、银行、互联网服务等领域得到...

    Erlang 程序设计 中文 + 英文 pdf

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson于1986年开发,主要用于构建高可用性...《Erlang程序设计》这本书,无论是中文版还是英文版,都为学习者提供了深入了解和掌握Erlang的宝贵资源。

    Erlang_win32_win64.zip

    8. **Mnesia数据库**:OTP中包含Mnesia,这是一个分布式数据库管理系统,专为Erlang设计,支持事务和实时查询,适合用于构建分布式应用程序。 9. **Erlang Shell**:Erlang提供了一个交互式的命令行shell,允许...

    Programming Erlang

    在分布式编程方面,《Programming Erlang》涵盖了节点间通信、分布式进程和分布式应用程序的构建。Erlang的BEAM虚拟机允许跨节点通信,使得构建分布式系统变得相对简单和高效。 除此之外,书中还会涉及错误处理和...

Global site tag (gtag.js) - Google Analytics