我正在开发一个预计在发布后不久将为数百万用户提供服务的项目。数据库是 postgres,现在我假设至少需要两台服务器。系统管理员(显然精通可扩展系统)建议在 Web 服务器和数据库服务器之间放置一个负载平衡器。
我的问题是关于负载平衡与连接池的区别。为了保持性能,我应该考虑其中之一,还是两者兼而有之?
使用 PostgreSQL,您有两个不同的区域可以进行池化,要么在应用层(即 jdbc 内置池化等),要么在位于应用程序和数据库之间的中间层,例如 pgbouncer 或 pgpool。
如果您在中间层(如 pgbouncer 或 pgpool)中进行池化,那么该层也可以对选择查询进行负载平衡。此外,在负载平衡时,您可以通过以下两种方式之一进行写入:您可以使用 slony 之类的工具或 pg 9.0 中出现的内置流复制,通过其他方式将单个写入主机复制到您的读取从机及以上,或者您可以让负载平衡器完成所有写入,以便传入读取仅命中一个数据库,但写入命中每个数据库以保持它们全部更新。
或者,如果您喜欢冒险,您可以使用 plproxy 将负载平衡层从另一层移到 postgresql 本身。这是 pgsql 的一种 pl 语言,旨在允许您将一个 pg 数据库放在前端,其中没有实际数据,然后该数据库可以运行在多个可能冗余的数据库之上,以实现令人难以置信的吞吐量。plpoxy 的设置和运行非常复杂,但它也非常具有可扩展性。请注意,您的应用程序必须重新编写以支持它,因此它不能被扔到任何旧应用程序下而只能正常工作。
http://slony.info/ http://wiki.postgresql.org/wiki/PL/Proxy http://pgpool.projects.postgresql.org/
归档时间: |
|
查看次数: |
6726 次 |
最近记录: |