考虑到现有的项目使用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是不是线程安全的?如果不是,我可能要做个发送线程去处理发送队列了。
分享到:
相关推荐
在Erlang开发中,rebar是一个非常重要的构建工具,它可以帮助我们管理和编译Erlang应用程序,同时支持发布功能。本文以nitrogen_2.0.4框架为例,详细阐述使用rebar进行Erlang项目开发和发布的全过程。 ### 一、环境...
标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...
2. **分布式特性**:Erlang的分布式节点通信,分布式数据管理,以及如何在多台机器上部署和运行Erlang应用。 3. **故障恢复与容错**:Erlang的错误处理模式,如监控树(supervision trees)和故障检测,以及如何...
**Erlang 在国外的成功项目** 1. Ejabberd - 开源XMPP服务器 2. RabbitMQ - 开源消息代理和队列服务器 3. CouchDB - 开源JSON文档型数据库 4. Mochiweb - 用于构建高效的Web服务器和HTTP客户端的Erlang库 5. Disco -...
视频可能详细展示了如何在实际项目中实施热代码替换。通常,开发者会在新版本的代码中实现`code_change/3`函数,这是一个关键组件,用于处理从旧版本到新版本的数据转换。该函数接收旧状态、旧版本号和新版本号作为...
在Erlang mode中,还可以进行一些其他的配置,例如设置Erlang shell的节点名、添加Erlang函数到imenu菜单等。 readers可以根据需要进行相应的配置。 搭建Erlang开发环境需要安装Erlang OTP、Emacs W32、Distel等...
标题中的“使用rebar工具开发erlang工程项目和发布erlang工程项目借鉴”指的是使用名为rebar的Erlang构建工具来管理和构建Erlang项目的过程,以及如何使用该工具来发布Erlang应用。描述中提到的是通过nigrogen2框架...
6. 热代码升级:学习如何在不中断服务的情况下更新运行中的Erlang应用程序。 7. 源码分析:书中可能包含一些实际项目或示例代码,帮助读者深入理解Erlang和OTP的实践应用。 书中的"Manning.Erlang.and.OTP.in....
在建立一个 Erlang 工程项目时,需要首先安装 Erlang 和 Git 代码管理系统。在 Ubuntu 10.04 下,可以使用以下命令安装 Erlang 和 Git: ``` $ sudo apt-get install erlang $ sudo apt-get install git-core ``` ...
总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以支持像RabbitMQ这样的Erlang应用。Erlang以其独特的并发模型和强大的错误恢复能力,广泛应用于需要高...
- **Rebar3**:Erlang的构建和依赖管理工具,帮助你组织项目结构、编译代码和管理依赖。 - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、...
Erlang以其强大的并行处理能力、容错性和易于构建大规模分布式系统的特点,在电信、金融和互联网等领域广泛应用。Erlang22是Erlang的第22个主要版本,它包含了对语言特性的改进、性能优化以及一些新的库和工具。 在...
- 在Erlang应用程序中,加载NIF并进行测试。 7. **性能与调试**: - 谈论如何评估NIF的性能,并可能涉及一些基准测试。 - 提供了一些调试NIF的技巧,比如使用`erl_nif_trace`和日志记录。 通过学习Rustler编写...
【Erlang编程语言及其应用】 Erlang是一种并发式、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,...通过实际操练这些课后习题,学习者不仅可以深入理解Erlang语言,还能培养出在实际项目中解决问题的能力。
安装完成后,可以通过RabbitMQ的管理界面或Erlang应用程序来管理和操作消息队列。 总的来说,Erlang在Windows 64位系统上的安装是搭建RabbitMQ等基于Erlang技术栈项目的第一步。理解Erlang语言特性和其与RabbitMQ的...
最后,第三部分通过构建实际项目,演示如何在实际环境中应用Erlang和OTP,涵盖了从系统设计到部署的全过程。 《Erlang程序设计》则更侧重于Erlang语言本身,适合初学者入门。书中会详细解释Erlang的语法和编程范式...
总的来说,“erlang_mysql编译好了”意味着你已经具备了在Erlang应用程序中与MySQL数据库交互的基础。接下来,你可以利用这个库来设计和实现数据密集型的应用,充分利用Erlang的并发特性和MySQL的高性能数据库功能。...
在Erlang开发中,最佳实践包括使用模式匹配、递归、消息传递、进程间通信等。同时要特别注意避免竞态条件和死锁,以及利用Erlang的分布式特性进行设计。 #### 4. 工具介绍 Erlang社区提供了多种工具帮助开发和调试...