`
mryufeng
  • 浏览: 982318 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

erlang driver和热部署(重要)

阅读更多
erlang的热部署包括2个方便的 beam(.beam)级别的和driver(.dll .so)级别的. beam级别的就简单。但是driver级别的就相对复杂很多。

先看下erl_ddll的说明:
Loading and reloading for code replacement
This scenario occurs when the driver code might need replacement during operation of the Erlang emulator. Implementing driver code replacement is somewhat more tedious than beam code replacement, as one driver cannot be loaded as both "old" and "new" code. All users of a driver must have it closed (no open ports) before the old code can be unloaded and the new code can be loaded.
The actual unloading/loading is done as one atomic operation, blocking all processes in the system from using the driver concerned while in progress.
The preferred way to do driver code replacement is to let one single process keep track of the driver. When the process start, the driver is loaded. When replacement is required, the driver is reloaded. Unload is probably never done, or done when the process exits. If more than one user has a driver loaded when code replacement is demanded, the replacement cannot occur until the last "other" user has unloaded the driver.
Demanding reload when a reload is already in progress is always an error. Using the high level functions, it is also an error to demand reloading when more than one user has the driver loaded. To simplify driver replacement, avoid designing your system so that more than than one user has the driver loaded.
由于动态库不能在操作系统进程内存里面 有新旧之分  所以最好的方法就是让 唯一 的erlang进程 管理这个port  由这个process 代理所有的请求和响应。这种情况下 更换driver就很简单 因为系统中只有一个driver的使用者, 非常容易作load unload reload的操作。而且在process异常终止的时候 emulator自动会释放driver的资源。

这个回答了我许久以来困惑我的问题: 为什么erlang kernel里面的file->file_server, code->code_server这样的架构, 终于在这个时候真相大白。看来erlang比我们考虑的要周道。

有兴趣的同学可以参考下release_handling的实现,相信会对hot deployment 有很深的理解。 
分享到:
评论

相关推荐

    Erlang 中的Module级别热部署

    它的独特之处在于支持轻量级进程(也称为协程)和热部署能力。本文将深入探讨Erlang 中的 Module 级别热部署技术,并通过示例代码展示如何实现这一功能。 #### 二、什么是热部署? 热部署(Hot Deployment)是指在...

    erlang port driver test

    标题 "erlang port driver test" 指的是一个测试项目,这个项目专注于验证和测试 Erlang 的 Port Driver 功能。测试的目标可能是确保 Port Driver 能够正确地在 Linux 操作系统上运行,因为描述中提到 "can run on ...

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

    其强大的错误恢复能力和热代码替换(code change)机制是其独特之处。本篇将深入探讨Erlang应用的部署与热代码替换。 一、Erlang应用部署 在Erlang环境中,应用通常被打包成一个`.app`文件,包含应用元数据,以及...

    erlang代码热替换与应用部署

    本文将深入探讨Erlang中的代码热替换(Code Replacement)技术及其在应用部署中的重要性。 代码热替换是Erlang的一大特色,它允许在不中断运行服务的情况下更新和替换正在运行的代码。这一特性使得Elang系统可以在...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    Erlang和RabbitMQ安装包

    Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是基于Erlang构建的一个开源消息代理,用于实现应用程序之间的异步通信。 **Erlang** Erlang由瑞典电信设备制造商Ericsson...

    erlang深度分析.pdf

    以上总结了Erlang深度分析的主要知识点,涵盖了虚拟机、性能分析、编码实践、分布式系统开发、内存管理、高可用性设计、网络通信、热部署、并发模型、本地接口设计、系统监控以及社区资源等多个方面。这些知识能够...

    Erlang Mysql Driver

    总的来说,Erlang MySQL Driver为Erlang开发者提供了一种在分布式、高并发环境下与MySQL数据库进行交互的工具,利用Erlang的并发特性和强大的错误处理机制,能够构建出稳定且高效的数据库应用。

    RabbitMQ3.9.13和ErLang24.2版本

    2. **容错性**:Erlang的错误恢复机制和热代码升级功能使得Erlang程序能在出现错误时优雅地重启,而不影响整个系统。这对于保持RabbitMQ的稳定性至关重要。 3. **分布式特性**:Erlang的分布式特性使得构建分布式...

    Erlang22.3和RabbitMQ3.8.4.zip

    Erlang22.3和RabbitMQ3.8.4是两个紧密相关的技术组件,它们在分布式系统和消息队列领域中发挥着至关重要的作用。Erlang是一种并发性极强、容错性良好的编程语言,而RabbitMQ则是一个基于AMQP(Advanced Message ...

    erlang编程 Introducing Erlang

    "Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心概念和特性。 ### 1. 函数式编程基础 Erlang基于函数式编程范式,这意味着程序由纯函数构成,没有副作用。...

    erlang programming

    6. **热升级与无中断服务**:Erlang支持代码热升级,即在不中断运行的情况下更新应用程序代码,这对于保持高可用性和服务连续性至关重要。 7. **并发性能优化**:Erlang的并发性能优化涉及进程数量的控制、消息队列...

    图书:Erlang和OTP实战

    《Erlang和OTP实战》是一本专注于Erlang编程语言和OTP(Open Telecom Platform)框架的专业书籍。这本书深入浅出地介绍了Erlang在分布式系统、并发处理以及高可用性设计中的应用,同时结合 OTP 提供了强大的工具和库...

    erlang和rabbitmq.zip

    【标题】"erlang和rabbitmq.zip" 涉及到的是两个关键技术:Erlang编程语言和RabbitMQ消息队列系统。Erlang是一种并发性极强、容错性出色的函数式编程语言,而RabbitMQ是基于Erlang开发的开源消息代理和队列服务器。 ...

    windows下安装Erlang环境

    **热代码升级**:Erlang允许在运行时升级代码,新旧版本的代码可以同时存在,直到所有进程都切换到新版本,保证了系统的连续运行。 **外部接口**:Erlang进程与外部世界的交互也依赖于消息传递,这保持了一致性,...

    Erlang:并行计算和云计算

    - **服务导向架构**:Erlang的模块化设计便于构建微服务架构,每个服务可以独立部署和升级,增强了系统的可维护性和可扩展性。 - **高可用性**:Erlang的容错机制使得云服务能够在硬件故障或软件错误时保持高可用性...

    Erlang_CNode用户指

    Erlang是一种高级并发编程语言,由爱立信开发,主要用于构建高可用性、容错性强、可热更新的分布式系统。它以其独特的进程模型、消息传递机制以及轻量级的分布式特性而闻名。Erlang的并发模型基于轻量级进程...

    erlang高级原理和应用PPT

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

Global site tag (gtag.js) - Google Analytics