Proxy prece vidi co za dotaz provedete. A klidne muze prekladat i DB vrstvu na jiny protokol.
Proxy neví, jestli když na začátku provádím nějaké čtení, tak jestli bude v transakci následovat zápis. Ono dokonce to nejde ani zaručit analýzou dotazu - (pokud teda nemá ta proxy plnou informaci o struktuře DB a neprováděla by nad tím "zběsilou analýzu").
Jediné, na co se jde "spolehnout" je explicitní označování transakcí "BEGIN TRANSACTION READ ONLY" - a to ještě musí programátor "slíbit", že ji nepřepne do RW. A to už se v podstatě neliší od toho, když programátor explicitně vybere datový zdroj.
- ktera bude resit klidne i failover behem zpracovani jednoho vnejsiho requestu.
To právě IMHO není tak jednoduché, jak se to zdá. Pokud není aplikace jen čisté zobrazovadlo pro DB logiku, tak asi jo, ale jinak mi přijde, že je to principiálně nemožné. Protože ten failover znamená spustit transakci znovu: tedy výsledek dotazů může být jiný než v původní transakci, takže by aplikace prováděla něco jiného. V okamžiku, kdy mám byť nějakou logiku v aplikaci, tak failover (ve smyslu "replay" dotazů) prostě musí dělat aplikace, ne? Proxy nemůže udělat nic chytřejšího, než aktivní transakce ukončit. Nebo se pletu?
IMHO "Manuálnímu" rozdělení transakcí na read-only a read-write se nevyhnu tak jako tak, v tom mne PgPool IMHO nepomůže - jde jen o formu, jestli ji označím pomocí READ ONLY, nebo použiju k připojení jinej endpoint.
A co se týče rychlého failoveru, tak ten se přeci nemusí dělat "rekonfigurací aplikace", ale např. za pomocí IP směrování nebo..... Tím nechci říkat, že PgPool nemá své výhody. Má. Jen, že dilema buďto proxy, nebo nutnost rekonfigurace aplikace se mi zdá, že tak úplně neplatí - že Proxy je pouze jedna z variant (byť osvědčená a dobrá, takže proč vymejšlet kolo), jak se dá failover řešit, aniž by to "aplikace viděla".
Koneckonců - PGPool je signle point of failure, což samotnej PGPool řeší pomocí přehazování "virtuální" IP. Což je přesně řešení, které se nabízí pro řešení failover i bez použití proxy.