以下文章来源于AustinDatabases ,作者carol11
事情的起因是,一家比较大的公司,要使用kong网关,就职的朋友问我postgresql 最简单的高可用方式有什么, 所以才有了此文PostgreSQL 的复制默认是异步的方式,如果primary server crash了一些已经commited的事务在primary server 但还没有传送到 standby server 则主从就会不一致,数据就丢失了,所以这是异步复制的模式。
但Postgresql 提供了一种同步的模式,保证primary 和 standby 库的数据是一致的,这样的方式将所有的事务改变必须传送到standby server wal_log 后在确认commit。这也就使得数据丢失的唯一可能性是主库和从库同时无法正常工作。
当然这样操作的缺点也是显而易见
1 性能一定是要大打折扣,因为明明在一个服务器上写操作就可以继续的事情,现在要两台服务器之间要确认,自然性能要损失。
2 从库如果因为某些原因无法写入数据,或者网络出现问题,则数据库的对外服务就会出现问题。
所以这样的高可用的搭建,基本上在现实中很少见。但今天为什么要提他。
任何架构的使用都与他所处的使用的环境和应用的逻辑有关,在某些情况这样的高可用是可以被接受的。
举个例子,现在热门的微服务网关 kong, 使用它就要使用数据库,而这样的情况下,有两种选择postgresql or cassandra 。 如果让你选怎么选,传统的人士估计大概率还是选择 postgresql, 不会选择cassandra(其实cassandra很有意思)。其中的原因如果你知道cassandra 的原理就明白。