连接池很好写,基本架构就是一个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
相关推荐
PGO ... 要尝试pgo只需通过替换要连接到的数据库的host , database , user和password值来修改config/example.config即可: [ { pgo , [{ pools , [{ default , #{ pool_size => 10 , host =>
使用erlang语言实现连接ElasticSearch服务器的客户端代码
erlang 连接学习例子 最简单的通讯例子
ErlPort 是一个Erlang 库,用来帮助连接 Erlang 与其他编程语言。目前支持的是 Python 和 Ruby。Erlang 库使用 Erlang 端口协议 来简化Erlang 语言和 Erlang 外部术语格式 的连接,设置良好的数据类型映射。 ...
1、数据信息采用基于HTML5的大负载架构设计(Erlang)的长连接推送技术,高效且节省资源; 2、提供金融短讯、操作建议、经验秘籍等栏目功能; 3、应用运行时可设置是否待机功能,应用在后台运行时根据设置可关闭在线...
Worker Pool 是一个Erlang进程池,其中的工作进程是Erlang的gen server模式进程。Worker Pool的目标是非常简单: 提供以透明的方式管理一批工作进程并且对分配到池中的任务尽最大努力实现负载均衡。一个 Echo 服务器...
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
erlang 安装包
Erlang及其应用Erlang及其应用Erlang及其应用
erlang25.0 windows版本
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
erlang otp25 win安装包
erlang22最新下载包 erlang22.1.tar.gz erlang22最新下载包 erlang22最新下载包
Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。 Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...
erlang 中文基础教程erlang 中文基础教程
erlang是面向并发的语言。作文erlang官方设计稳定,该文档是erlang初学者的入门必备。中文版,内附简要的erlang安装过程
erlang安装包
erlang 连接 mysql 源码下载
erlang资源,非常值得下载,二郎学习
erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 erlang二进制高效编程 erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 ...