`
qiezi
  • 浏览: 497262 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何把erlang应用在项目中?

阅读更多
考虑到现有的项目使用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是不是线程安全的?如果不是,我可能要做个发送线程去处理发送队列了。
分享到:
评论
8 楼 javavsnet 2007-07-17  
qiezi 写道

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

qiezi你在实现哪些功能的时候用了python?说说看,我想借鉴你的经验。
7 楼 qiezi 2007-07-16  
iunknown 写道
qiezi 写道
找了源代码看了,应该不是线程安全的,一个消息发送就有多个写操作,并发的写FD肯定有问题的。

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

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


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

还没说服啊,公司并不看我写代码,项目搞稳定就行了,我已经把一部分用python写了,其它部分则使用了一些第三方库比如log4cxx,同事项目有问题就会看我怎么做,看了也会学着用的。目前有些部分本来就是独立的进程,用配置文件去定义功能,然后组合到新的服务器中,用什么语言实现都没多大差别了,稳定、高效就是唯一追求。
6 楼 iunknown 2007-07-16  
qiezi 写道
找了源代码看了,应该不是线程安全的,一个消息发送就有多个写操作,并发的写FD肯定有问题的。

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

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


qiezi 是怎么说服公司使用 erlang 的?我对这一点比较好奇
5 楼 cookoo 2007-07-15  
羡慕啊,偶还是找不到切入点用到项目里去,郁闷~
4 楼 qiezi 2007-07-13  
找了源代码看了,应该不是线程安全的,一个消息发送就有多个写操作,并发的写FD肯定有问题的。

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

这个架构准备在项目中试用一下了,以后服务调用、服务器间通讯都是走erlang节点了。
3 楼 mryufeng 2007-07-12  
为什么不把c程序做成hidden node那样不是更方便 自己就不用出来端口监听之类的事情
2 楼 mryufeng 2007-07-12  
erl_send应该是线程安全的 没有什么上下文 只是通过fd发数据而已
1 楼 qiezi 2007-07-12  
哎咳。忽然发现,我怎么把一个服务器写成客户端了呢?有点服务的意思了,连接上去申告一下“我开始提供服务了”,于是前面的请求就转发过来了。

相关推荐

    rebar工具开发erlang工程项目和发布erlang工程项目

    在Erlang开发中,rebar是一个非常重要的构建工具,它可以帮助我们管理和编译Erlang应用程序,同时支持发布功能。本文以nitrogen_2.0.4框架为例,详细阐述使用rebar进行Erlang项目开发和发布的全过程。 ### 一、环境...

    在erlang项目中使用protobuf例子

    标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...

    erlang高级原理和应用PPT

    2. **分布式特性**:Erlang的分布式节点通信,分布式数据管理,以及如何在多台机器上部署和运行Erlang应用。 3. **故障恢复与容错**:Erlang的错误处理模式,如监控树(supervision trees)和故障检测,以及如何...

    Erlang的高级特性和应用

    **Erlang 在国外的成功项目** 1. Ejabberd - 开源XMPP服务器 2. RabbitMQ - 开源消息代理和队列服务器 3. CouchDB - 开源JSON文档型数据库 4. Mochiweb - 用于构建高效的Web服务器和HTTP客户端的Erlang库 5. Disco -...

    Erlang应用部署与热代码替换--理解2

    视频可能详细展示了如何在实际项目中实施热代码替换。通常,开发者会在新版本的代码中实现`code_change/3`函数,这是一个关键组件,用于处理从旧版本到新版本的数据转换。该函数接收旧状态、旧版本号和新版本号作为...

    Erlang开发环境搭建

    在Erlang mode中,还可以进行一些其他的配置,例如设置Erlang shell的节点名、添加Erlang函数到imenu菜单等。 readers可以根据需要进行相应的配置。 搭建Erlang开发环境需要安装Erlang OTP、Emacs W32、Distel等...

    使用rebar工具开发erlang工程项目和发布erlang工程项目借鉴.pdf

    标题中的“使用rebar工具开发erlang工程项目和发布erlang工程项目借鉴”指的是使用名为rebar的Erlang构建工具来管理和构建Erlang项目的过程,以及如何使用该工具来发布Erlang应用。描述中提到的是通过nigrogen2框架...

    图书:Erlang和OTP实战

    6. 热代码升级:学习如何在不中断服务的情况下更新运行中的Erlang应用程序。 7. 源码分析:书中可能包含一些实际项目或示例代码,帮助读者深入理解Erlang和OTP的实践应用。 书中的"Manning.Erlang.and.OTP.in....

    使用rebar工具开发erlang工程项目和发布erlang工程项目学习.pdf

    在建立一个 Erlang 工程项目时,需要首先安装 Erlang 和 Git 代码管理系统。在 Ubuntu 10.04 下,可以使用以下命令安装 Erlang 和 Git: ``` $ sudo apt-get install erlang $ sudo apt-get install git-core ``` ...

    erlang9.rar

    总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以支持像RabbitMQ这样的Erlang应用。Erlang以其独特的并发模型和强大的错误恢复能力,广泛应用于需要高...

    erlang25.0 windows版本

    - **Rebar3**:Erlang的构建和依赖管理工具,帮助你组织项目结构、编译代码和管理依赖。 - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、...

    erlang22最新下载包

    Erlang以其强大的并行处理能力、容错性和易于构建大规模分布式系统的特点,在电信、金融和互联网等领域广泛应用。Erlang22是Erlang的第22个主要版本,它包含了对语言特性的改进、性能优化以及一些新的库和工具。 在...

    rustler编写erlang nif

    - 在Erlang应用程序中,加载NIF并进行测试。 7. **性能与调试**: - 谈论如何评估NIF的性能,并可能涉及一些基准测试。 - 提供了一些调试NIF的技巧,比如使用`erl_nif_trace`和日志记录。 通过学习Rustler编写...

    xiandiao_erlang_Erlang课后习题_

    【Erlang编程语言及其应用】 Erlang是一种并发式、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,...通过实际操练这些课后习题,学习者不仅可以深入理解Erlang语言,还能培养出在实际项目中解决问题的能力。

    Erlang Windows 64位 安装包

    安装完成后,可以通过RabbitMQ的管理界面或Erlang应用程序来管理和操作消息队列。 总的来说,Erlang在Windows 64位系统上的安装是搭建RabbitMQ等基于Erlang技术栈项目的第一步。理解Erlang语言特性和其与RabbitMQ的...

    两本erlang电子书

    最后,第三部分通过构建实际项目,演示如何在实际环境中应用Erlang和OTP,涵盖了从系统设计到部署的全过程。 《Erlang程序设计》则更侧重于Erlang语言本身,适合初学者入门。书中会详细解释Erlang的语法和编程范式...

    erlang_mysql编译好了

    总的来说,“erlang_mysql编译好了”意味着你已经具备了在Erlang应用程序中与MySQL数据库交互的基础。接下来,你可以利用这个库来设计和实现数据密集型的应用,充分利用Erlang的并发特性和MySQL的高性能数据库功能。...

    erlang深度分析.pdf

    在Erlang开发中,最佳实践包括使用模式匹配、递归、消息传递、进程间通信等。同时要特别注意避免竞态条件和死锁,以及利用Erlang的分布式特性进行设计。 #### 4. 工具介绍 Erlang社区提供了多种工具帮助开发和调试...

Global site tag (gtag.js) - Google Analytics