Re: Using PostgreSQL for service discovery and health-check - Mailing list pgsql-general

From Adrian Klaver
Subject Re: Using PostgreSQL for service discovery and health-check
Date
Msg-id a7bc901a-a191-9504-c5be-41de7128c5b9@aklaver.com
Whole thread Raw
In response to Using PostgreSQL for service discovery and health-check  (Dominique Devienne <ddevienne@gmail.com>)
Responses Re: Using PostgreSQL for service discovery and health-check  (Dominique Devienne <ddevienne@gmail.com>)
List pgsql-general
On 2/9/23 07:30, Dominique Devienne wrote:
> Hi. I'm requesting advice on something I'm about to start on.
> 
> In a normally 2-tier system, where "desktop" native apps connect 
> directly to PostgreSQL to access data, some things must be mediated via 
> a middle-tier service (i.e. 3-tier architecture). That service is HTTP 
> based thus clients (the "desktop" native apps) must know the URL 
> (host+port+path) of a server providing the requested service.

Is there more then one server providing the same service?

> 
> Since clients must already have access to PostgreSQL to operate, I 
> wanted to add a table in PostgreSQL for services, and server(s) on 
> startup (probably using a random port) would register in that table, and 
> deregister on shutdown. Also, since crashes are a fact of life, the 
> server would regularly update the DB with a "heartbeat" on some 
> frequency (e.g. 1s?), so clients would select (or see) only registered 
> services with a "fresh enough" heartbeat timestamp.

Would it no be easier to not have random ports and just attempt 
connections to the servers either:

1) In the client with reattempt to different port on failure.

2) From Postgres server and update table to have current up servers.

> 
> That's basically my plan. Now come the questions:
> 1) will updating a row every second (for example) create issues?
> 2) if yes to #1 above, what would be good mitigation tactics? Use 
> different table for service vs heartbeat? Special kind of table? or 
> configured in a particular way?
> 3) if a service crashes, it won't remove its row(s), obviously. What 
> kind of mechanism exists to "reap" "zombie" services?
> 4) Related to #3 above, I think built-in "cron"-like services are only 
> available via extensions, not in PostgreSQL proper. Why? Seems like such 
> an essential service.
> 5) Which cron-like extension to use? Especially since we run both 
> on-prem but also in managed-PostgreSQL on the cloud?
> 
> I'd appreciate community input. Thanks, --DD
> 
> PS: Note that there could be more than 1 server registered, for the same 
> service, possibly on the same machine, for redundancy. But I think 
> that's mostly orthogonal to my questions above.

-- 
Adrian Klaver
adrian.klaver@aklaver.com




pgsql-general by date:

Previous
From: Dominique Devienne
Date:
Subject: Re: WHERE col = ANY($1) extended to 2 or more columns?
Next
From: Dominique Devienne
Date:
Subject: Re: WHERE col = ANY($1) extended to 2 or more columns?