- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PostgreSQL PL/Proxy 原理与实践Digoal.Zhou11/26/2011目录背景PL/Proxy运行原理语法应用场景扩容举例性能测试HA探讨背景扩容难题如何处理大数据量,大活跃数据如何满足大并发读写请求如何满足数据库请求的平均响应速度传统数据库(如Oracle)解决方案硬件扩容(存储,服务器,内存,CPU),总会到顶。Key-Value 数据最终一致。应用层缓存,数据库复制,对读有效。数据拆分到多个数据库,业务层来解决拆分的问题。缺点成本昂贵,投入产出比很难计算,花多少钱能满足需求,感觉是个无底洞。不支持事务,适应范围小。无法解决写需求。应用层更加复杂,需要同时连多个数据库,支持数据路由,支持并发查询。同时更多的数据库意味着更多的软件许可。背景PostgreSQL PL/Proxy解决方案水平扩展,对硬件要求不高,投入产出比非常容易计算。PL/Proxy通过调用PostgreSQL函数支持事务,在PG中函数操作具有原子性,因此需要用到事务的操作可以封装在一个PG函数中。PL/Proxy路由选择非常灵活,非常容易做到读写的负载均衡。PL/Proxy与PostgreSQL免费。PL/Proxy耦合度不高,如果应用不想通过PL/Proxy而想直连数据库可以不需要修改代码。因为代理函数与实体函数的输入输出参数是一致的。调用函数的好处 : 安全性提高, 应用连接的为代理数据库,要操作实体数据必须在数据节点有对应的函数,或者只有SELECT权限(甚至编译时可以选择不支持SELECT)。业务逻辑的代码放在数据端使处理效率更高。PL/Proxy运行原理1. PL/Proxy是一个PostgreSQL数据库插件,2. 应用层使用PL/Proxy就是调用plproxy函数.APPAPPPG-jdbcPG-jdbcFunction(args)Function(args)PL/ProxyPL/Proxyserver_lifetime = 1200dns_max_ttl = 15server_check_delay = 30server_check_query = select 1CONNPOOLCONNPOOLDNSs数据节点Function(args)Function(args)Function(args)Function(args)DB-p0DB-p1DB-p2DB-p3SlaveSlaveSlaveSlavePL/Proxy运行原理层次 : PL/Proxy节点(s), 连接池(s), 数据节点(s)PL/Proxy接收应用程序发起的SQL请求(调用plproxy函数),解析为提交给数据节点的SQL,PL/Proxy函数, CREATE FUNCTION get_data(IN first_name text, IN last_name text, OUT bdate date, OUT balance numeric(20,10))调用该函数被解析为, SELECT bdate::date, balance::numeric(20,10) FROM public.get_data($1::text, $2::text);Explicite 类型转换, 指定输出顺序. 旁路(CONNECT模式)或者选择数据节点(CLUSTER模式), (CLUSTER模式1)查询SQL/MED配置的集群信息,选择数据节点通过libpq async API发送解析的SQL给数据节点(多个则并行),等待所有数据节点返回结果,返回结果给应用程序.(CLUSTER模式2)查询集群配置版本,是否更新集群配置缓存,选择数据节点通过libpq async API发送解析的SQL给数据节点(多个则并行),等待所有数据节点返回结果,返回结果给应用程序.PL/Proxy运行原理连接池提高连接效率,复用连接.PL/Proxy 2以后代理和连接池的模块拆分了, 因此PL/Proxy不依赖连接池或连接池的类型.数据节点存放实体数据,实体函数(plpgsql),接收并执行plproxy发送的SQL请求,将执行结果返回给plproxy.PL/Proxy语法plproxy函数的用法。代理函数用法:应用程序传递参数, 选择远程数据库节点, 参数传递给远程数据库相同名字及参数类型的函数执行(或者target指定的数据节点函数),收集数据节点返回结果发送给应用程序。不代理函数用法:在PL/Proxy函数中直接写SELECT查询, 收集返回结果发送给应用程序。使用SELECT需要考虑转义字符的问题。PL/Proxy 函数支持的命令.CONNECTCONNECT libpq connstr ; | connect_func(...) | argnameCLUSTER, [RUN
文档评论(0)