.
考虑到现有的项目使用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应用优化指南 Erlang应用优化指南
Erlang及其应用Erlang及其应用Erlang及其应用
gcm-erlang, 用于Google云消息传递的Erlang应用程序 gcm 软件提供了一个用于 Google Cloud Messaging的Erlang客户机。,你可以对 gcm-erlang做什么:你可以以使用 gcm-erlang:启动几个代表由不同 GCM API keys 定义...
chronica, Erlang应用程序的日志框架 [This document translated on russian] ( https://github.com/eltex-ecss/chronica/blob/master/README_RU.md )概述Chro
erlang-in-docker-from-scratch, 在一个 Docker 容器中,一个Erlang应用 当将应用程序打包为 Docker 容器时,很容易将它的惰性化,并将它的放置在 FROM debian 。 虽然你已经加入了许多库和二进制文件,但是你的应用...
这是第一卷。 在2008 CN Erlounge III的“Erlang应用程序接口”讲演的视频。PPT等其它资料在这里: http://blog.csdn.net/aimingoo/archive/2009/01/14/3777765.aspx 有关信息参见: ...
这是第四卷。 在2008 CN Erlounge III的“Erlang应用程序接口”讲演的视频。PPT等其它资料在这里: http://blog.csdn.net/aimingoo/archive/2009/01/14/3777765.aspx 有关信息参见: ...
这是第三卷。 在2008 CN Erlounge III的“Erlang应用程序接口”讲演的视频。PPT等其它资料在这里: http://blog.csdn.net/aimingoo/archive/2009/01/14/3777765.aspx 有关信息参见: ...
这是第二卷。 在2008 CN Erlounge III的“Erlang应用程序接口”讲演的视频。PPT等其它资料在这里: http://blog.csdn.net/aimingoo/archive/2009/01/14/3777765.aspx 有关信息参见: ...
erlastic_search, 一个Erlang应用程序,用于与搜索接口的弹性其余部分通信 ErlasticSearch用于 Elasticsearch的Erlang客户机。构建和运行$./rebar3 shell==> mimetypes (compile)==> hackney (compi
我在Erlounge III大会上的讲演PPT。 相关的视频在这里: http://groups.google.com/group/erlang-china/browse_thread/thread/2154c39503795edc
Guess Erlang应用程序散布 Geas : (In Irish folklore) an obligation or prohibition magically imposed on a person. 通过扩展,由Erlang应用程序或模块施加的义务或禁止,可能会更改其散布。 概述 Geas是检测...
NULL 博文链接:https://langzhe.iteye.com/blog/682425
vmstats 是一个小型的 Erlang 应用程序,它收集 Erlang VM 上的指标并将它们发送到一个可配置的接收器(例如,StatsD)。 特征 vmstats 收集的不同指标包括: error_logger队列长度 加载的模块数 进程数 进程限制 ...
书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...
tsefft是一个基于元组空间的erlang应用程序,用于计算快速傅立叶变换。 关于该项目 主要目的是演示/发现espace在并发数值应用程序中的表现,尤其是那些具有明确定义的算法(例如FFT)的应用程序。 关于espace和元组...
rebar3:Erlang构建工具,可轻松编译和测试Erlang应用程序和发行版
Erlang 应用程序,它解析文本并处理它们(如果它们是数学表达式) 这是一个 IntelliJ IDEA 项目,可以使用 .iml 文件导入。 您将需要 IDEA Erlang 插件。 该应用程序解析诸如 1+(2/2) 之类的输入,根据 BODMAS 对...
erlang-systemd:用于Erlang应用程序的systemd实用程序