`
wudixiaotie
  • 浏览: 138860 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

erlang的稳定连接池

 
阅读更多

连接池很好写,基本架构就是一个manager,在manager启动的时候负责创建链接并把连接存储到一个地方,然后每次请求过来都给出一个有效的连接。

 

为了保证效率,我采用了ets表,而没有用进程字典和queue作为存储连接的地方,为什么呢?因为ets表可以并发读和并发写,进程字典和queue速度是比ets快,但是只能有manager去访问,这样无形当中就形成了性能瓶颈,ets则可以N多个进程同时去读,没有瓶颈,在并发的情况下比进程字典和queue快了不是1倍2倍。

 

在erlang中大部分数据库driver的连接都是一个进程,我们拿到的都是这个进程的PID,拿postgresql的driver举例子。他的单个连接可以支持并发访问,所以连接池不需要加锁。

 

当我们给其他进程连接的时候,由于未知错误导致这个数据库连接进程挂掉了怎么办?所以我们需要一个supervisor进程来监督这些连接。每当有个连接死掉的话,就通知supervisor让他去重启,所以我们的重启策略就是永久的也就是permanent,然后由于所有的链接都是一样的所以监控策略就是simple_one_for_one,每5秒中重启10次就dawn掉整个supervisor。

 

当我们一个连接挂掉,我们要求重启的时候也能通知manager,告诉他替换新的连接,所以我们还需要在每次重启前执行一段代码,这样就需要个worker,由他负责启动连接替换旧的连接,然后把新链接注册到supervisor上。

 

当supervisor挂掉后怎么确保manager也重启呢?我的做法是把manager注册到最顶层的supervisor上,然后supervisor link到manager上,这样保证了manager和supervisor任何一个挂掉,整个连接池都会重启。

 

真个架构最终形态应该是:



 

具体的代码在这里:postgresql pool

  • 大小: 40.9 KB
0
2
分享到:
评论

相关推荐

    erlang tcp_server

    8. **连接池**:为了优化性能,可能会采用连接池策略,预先创建一定数量的进程来处理连接,避免频繁创建和销毁进程的开销。 9. **协议解析**:根据应用需求,可能需要对收到的数据进行特定协议的解析。Erlang的模式...

    Erlang与Mysql对接

    在实际开发中,你可能还会考虑性能优化,如连接池管理,以及使用预编译的SQL语句来提高效率。此外,如果需要处理大量数据,可能还需要设计合理的数据模型和索引策略,以充分利用MySQL的性能。 总之,Erlang与MySQL...

    tcp_client:一个Erlang TCP客户端连接管理器

    - 连接池:tcp_client可能包含一个连接池策略,根据需求创建一定数量的预建连接,以便快速响应新的服务请求。 - 错误处理:对连接异常情况进行处理,例如超时、断开连接等,确保系统稳定。 - 监控和恢复:Erlang...

    erlang并发编程

    9. 连接池(Connection Pools):在并发编程中,连接池是管理数据库或其他资源连接的有效策略,它可以提高性能并减少资源消耗。 10. GenServer行为:GenServer是OTP行为之一,它提供了一种标准的方式来实现状态管理...

    pgsql:Erlang PostgreSQL驱动程序

    1. 连接管理:pgsql驱动程序允许Erlang应用创建到PostgreSQL服务器的连接,处理连接池和断线重连逻辑。开发者可以轻松地打开、关闭和监控数据库连接。 2. 查询执行:通过pgsql,Erlang应用可以发送SQL查询到...

    sockerl:Sockerl是用于TCP协议的高级ErlangElixir套接字框架,并提供了快速,有用和易于使用的API,用于实现服务器,客户端和客户端连接池

    它提供了一套高效、实用且易于使用的API,使得开发者能够快速构建网络服务器、客户端以及客户端连接池。Sockerl充分利用了Erlang和Elixir的并发特性,OTP(开放电信平台)的设计原则,确保了系统的健壮性和高可用性...

    Erlang的HTTP2服务器。男孩,那家伙是个真正的话痨_Erlang_JavaSc.zip

    3. **性能优化**:考虑到Erlang的并发优势,服务器可能实现了高效的资源管理,如连接池和流管理,以充分利用硬件资源并提高吞吐量。 4. **测试和调试**:为了确保服务器的稳定性和正确性,项目可能包括了全面的单元...

    ogame:由Erlang语言编写的游戏服务器

    数据库选用mysql,应该会用到第三方库去连接,用一些进程池去处理IO操作 逻辑模块: 包含场景管理、怪物管理、人物管理、战斗逻辑等相关的游戏逻辑 项目编译和运行脚本都在'script'文件夹下,暂时只支持windows和...

    聊天室(自己实现HTTP长连接)

    服务器需要维护一个连接池,管理这些长连接,而客户端在发送请求时指定Keep-Alive头,表示希望保持连接。服务器接收到此头后,会在适当的时候关闭连接,或者在没有新的请求时保持连接。 6. 源码分析:由于提供的...

    mabuerl:erlang 网络基础库

    `mabuerl`提供了连接池管理功能,可以有效地控制并发连接的数量,避免过多连接导致的资源消耗。连接池的使用也简化了连接的生命周期管理,使得应用程序更加健壮。 5. **协议封装** 库不仅提供底层的套接字操作,...

    erldis:redis erlang客户端库(从bitbucket导入)

    4. **连接池管理**:erldis 提供连接池机制,可以有效地管理和复用连接,减少网络延迟,提升性能。 5. **原子操作**:Erlang 的并发特性结合 Redis 的单线程模型,使得 erldis 能够在多进程环境中安全地执行原子...

    ckle锁:高性能Erlang网络客户端框架

    总结来说,`ckle锁`,即Shackle,是一个基于Erlang的高性能网络客户端框架,它支持TCP和UDP,内置SSL/TLS,提供了高效的并发处理和连接池管理,是构建大规模并发网络应用的理想选择。通过深入理解和使用Shackle,...

    epgsql:Erlang PostgreSQL客户端库

    它支持连接池管理,能有效地复用已建立的连接,减少数据库的开销。此外,`epgsql`利用Erlang的轻量级进程(processes)来处理每个数据库会话,确保了系统的高可用性和可扩展性。 **主要功能** 1. **连接管理**:`...

    kofta:Erlang 中的 Kafka 0.8.x 客户端

    5. **配置灵活性**:kofta 允许用户自定义各种配置参数,如超时时间、重试次数、连接池大小等,以适应不同的系统需求和环境。 6. **错误处理和监控**:kofta 提供了丰富的错误处理机制,能够捕获和报告通信过程中的...

    cpp-mongodberlangErlang的MongoDB驱动器

    7. **连接池**:为了提高性能和资源利用,驱动通常会包含连接池机制,允许多个并发请求共享一组打开的数据库连接。 8. **错误处理和容错**:Erlang的容错特性使得驱动能够在网络故障或其他错误发生时优雅地处理问题...

    springboot + rabbit + hikari

    HikariCP则是一款高性能的数据库连接池,它在Spring Boot中被广泛用来提升数据访问的效率。以下将详细阐述这三个技术的集成与应用。 首先,Spring Boot 2.0引入了大量的改进和新特性,比如对Java 8的全面支持、新的...

    gen_http:具有可插拔客户端实现的实验性通用HTTP接口

    例如,如果需要提高并发性能,可以实现一个基于连接池的客户端;如果关注低延迟,可能需要优化TCP参数或采用HTTP/2的多路复用技术。 gen_http库的使用通常包括以下几个步骤: 1. **定义客户端行为**:实现gen_http...

    华为云服务器部署springboot项目,并进行压力测试

    通过压力测试,我们可以获取系统的吞吐量、响应时间和失败率等指标,进一步优化系统性能,比如调整线程池大小、数据库连接池配置、Redis和RabbitMQ的参数等。 总之,本项目展示了如何在华为云服务器上部署一个基于...

    machine_gun:Elixir的HTTP1和HTTP2客户端。 基于Gun和Poolboy

    在Machine Gun的上下文中,Poolboy用来管理多个Gun实例,创建一个连接池。这样可以确保在并发请求时有效地复用连接,避免频繁创建和销毁连接带来的开销,同时提高系统的整体性能和稳定性。 **HTTPElixir标签:...

    springBoot整合nacos、sentinel、SpringSecurity、RabbitMQ、redis、nginx

    对于`Redis`,配置连接池并使用`Jedis`或`RedisTemplate`操作数据;最后,`Nginx`的配置文件中,定义服务器块,设定路由规则。 以上是整合各组件的基础步骤,实际应用中可能需要根据业务需求进行更复杂的定制和优化...

Global site tag (gtag.js) - Google Analytics