论坛首页 综合技术论坛

如何把erlang应用在项目中?

浏览 30838 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-07-12  
考虑到现有的项目使用erlang重写的复杂性和erlang对于某些数据库支持的弱点,想结合erlang的分布式、代码热加载、处理高并发方面的优势,和C++在性能上以及大量现有项目上的优势,实现集群部署。

考察了erlang和C进行交互的几种方式,ports受限于物理服务器分布,port_driver没测试成功,应该也是受限于本机,最后选定C nodes方式。

测试了c server和c client两种方式,感觉如果是server方式,还得用C写一套处理高并发的网络模块,也不方便升级,erlang的优势完全没发挥上,所以选定client方式。

大致的想法是这样的:
* erlang监听一个本地端口和一个对外的端口,本地的用于和c node通讯,对外的通过协议和客户交互。
* c node连接到本地端口后,就在erlang里面注册一个名字,这时候对外的端口上收到的数据就根据这个名字发给c node。
* c node上接收到数据以后就放队列,给线程池去消化,线程池处理完以后就通过端口发回给erlang节点,当然是使用erl_send (问题1)。
* erlang上面当然是由process“阻塞”处理,它收到结果以后,就发回给客户端,这个阻塞当然是假的,也正是利用erlang编程的便利。
* c node升级,只需要另开一个程序,注册另一个名字,比如名字加上版本号,连到erlang节点,再使用热加载把erlang代码更新,就可以在不停机的情况下更新服务器。更新完了再停掉旧版本的c node。
* 增加协议格式等操作都交给erlang了,C node保持不变。

不知道erlang应用于这种项目,上面这种方式是不是最优的?请有经验的朋友指点。

问题1:
erl_send是不是线程安全的?如果不是,我可能要做个发送线程去处理发送队列了。
   发表时间:2007-07-12  
哎咳。忽然发现,我怎么把一个服务器写成客户端了呢?有点服务的意思了,连接上去申告一下“我开始提供服务了”,于是前面的请求就转发过来了。
0 请登录后投票
   发表时间:2007-07-12  
erl_send应该是线程安全的 没有什么上下文 只是通过fd发数据而已
0 请登录后投票
   发表时间:2007-07-12  
为什么不把c程序做成hidden node那样不是更方便 自己就不用出来端口监听之类的事情
0 请登录后投票
   发表时间:2007-07-13  
找了源代码看了,应该不是线程安全的,一个消息发送就有多个写操作,并发的写FD肯定有问题的。

HIDDEN NODE没有提供更多东西,只是隐藏而已,其它没区别。

这个架构准备在项目中试用一下了,以后服务调用、服务器间通讯都是走erlang节点了。
0 请登录后投票
   发表时间:2007-07-15  
羡慕啊,偶还是找不到切入点用到项目里去,郁闷~
0 请登录后投票
   发表时间:2007-07-16  
qiezi 写道
找了源代码看了,应该不是线程安全的,一个消息发送就有多个写操作,并发的写FD肯定有问题的。

HIDDEN NODE没有提供更多东西,只是隐藏而已,其它没区别。

这个架构准备在项目中试用一下了,以后服务调用、服务器间通讯都是走erlang节点了。


qiezi 是怎么说服公司使用 erlang 的?我对这一点比较好奇
0 请登录后投票
   发表时间:2007-07-16  
iunknown 写道
qiezi 写道
找了源代码看了,应该不是线程安全的,一个消息发送就有多个写操作,并发的写FD肯定有问题的。

HIDDEN NODE没有提供更多东西,只是隐藏而已,其它没区别。

这个架构准备在项目中试用一下了,以后服务调用、服务器间通讯都是走erlang节点了。


qiezi 是怎么说服公司使用 erlang 的?我对这一点比较好奇

还没说服啊,公司并不看我写代码,项目搞稳定就行了,我已经把一部分用python写了,其它部分则使用了一些第三方库比如log4cxx,同事项目有问题就会看我怎么做,看了也会学着用的。目前有些部分本来就是独立的进程,用配置文件去定义功能,然后组合到新的服务器中,用什么语言实现都没多大差别了,稳定、高效就是唯一追求。
0 请登录后投票
   发表时间:2007-07-17  
qiezi 写道

还没说服啊,公司并不看我写代码,项目搞稳定就行了,我已经把一部分用python写了,其它部分则使用了一些第三方库比如log4cxx,同事项目有问题就会看我怎么做,看了也会学着用的。目前有些部分本来就是独立的进程,用配置文件去定义功能,然后组合到新的服务器中,用什么语言实现都没多大差别了,稳定、高效就是唯一追求。

qiezi你在实现哪些功能的时候用了python?说说看,我想借鉴你的经验。
0 请登录后投票
   发表时间:2007-07-17  
javavsnet 写道
qiezi 写道

还没说服啊,公司并不看我写代码,项目搞稳定就行了,我已经把一部分用python写了,其它部分则使用了一些第三方库比如log4cxx,同事项目有问题就会看我怎么做,看了也会学着用的。目前有些部分本来就是独立的进程,用配置文件去定义功能,然后组合到新的服务器中,用什么语言实现都没多大差别了,稳定、高效就是唯一追求。

qiezi你在实现哪些功能的时候用了python?说说看,我想借鉴你的经验。

运行效率要求不是特别高的地方都可以用,比如日志服务器、文件服务器、大量的压力测试程序、文本处理等。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics