Обсуждение: Best practices for preparing an application to (possibly) be sharded (FDW) in the future?

Поиск
Список
Период
Сортировка

Best practices for preparing an application to (possibly) be sharded (FDW) in the future?

От
Jean Baro
Дата:
Hi there,

Just out of curiosity, is there anything that we (as developers) can do on our code to (all together):

- Have maximum performance while running on a single PG 14.1 database (HA) (Google Cloud SQL);
- Be prepared (if needed in the future) to migrate the database to a sharding solution (FDW) once the microservice exceeds the capability of a single machine
- Don't make the code (that access PG database) to be much more complicated compared to one running on a SINGLE Database (ho sharding)
- No need to change the application's code when (and if) the database needs to be sharded in the future (FDW built-in approach).

Our use case is to use PG today and be prepared to scale beyond a single Google Cloud SQL machine max capability (maybe self-hosted Postgres when sharding is necessary)
We are a financial institution/Fintech with over 1MM customers (and growing 50% YoY). The new platform will probably be built on top of PG (as the standard database).
One PG (Cloud SQL) for every microservice.

Any help or suggestion would be appreciated.

Thanks

Re: Best practices for preparing an application to (possibly) be sharded (FDW) in the future?

От
Bruce Momjian
Дата:
On Fri, Feb 11, 2022 at 03:56:03PM -0300, Jean Baro wrote:
> Hi there,
> 
> Just out of curiosity, is there anything that we (as developers) can do on our
> code to (all together):
> 
> - Have maximum performance while running on a single PG 14.1 database (HA)
> (Google Cloud SQL);
> - Be prepared (if needed in the future) to migrate the database to a sharding
> solution (FDW) once the microservice exceeds the capability of a single machine

Good question.  I think it is generally agreed that sharding would
involve using partitions that point to foreign tables on other servers
using foreign data wrappers.   I have a talk here about it:

    https://momjian.us/main/writings/pgsql/sharding.pdf

So, if you are using partitioning, you are probably ready.  In fact,
with PG 14, you can do read-only sharding in parallel for large data
volumes.

> - Don't make the code (that access PG database) to be much more complicated
> compared to one running on a SINGLE Database (ho sharding)

The clients don't know now they are using partitioning, so my guess is
that they wouldn't know they are using sharding either.

> - No need to change the application's code when (and if) the database needs to
> be sharded in the future (FDW built-in approach).

Right, we never required changes for partitioning either.

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  If only the physical world exists, free will is an illusion.




Re: Best practices for preparing an application to (possibly) be sharded (FDW) in the future?

От
Jean Baro
Дата:
Thanks Bruce.

I like this approach. 

PG is great!!

Em sex., 11 de fev. de 2022 17:19, Bruce Momjian <bruce@momjian.us> escreveu:
On Fri, Feb 11, 2022 at 03:56:03PM -0300, Jean Baro wrote:
> Hi there,
>
> Just out of curiosity, is there anything that we (as developers) can do on our
> code to (all together):
>
> - Have maximum performance while running on a single PG 14.1 database (HA)
> (Google Cloud SQL);
> - Be prepared (if needed in the future) to migrate the database to a sharding
> solution (FDW) once the microservice exceeds the capability of a single machine

Good question.  I think it is generally agreed that sharding would
involve using partitions that point to foreign tables on other servers
using foreign data wrappers.   I have a talk here about it:

        https://momjian.us/main/writings/pgsql/sharding.pdf

So, if you are using partitioning, you are probably ready.  In fact,
with PG 14, you can do read-only sharding in parallel for large data
volumes.

> - Don't make the code (that access PG database) to be much more complicated
> compared to one running on a SINGLE Database (ho sharding)

The clients don't know now they are using partitioning, so my guess is
that they wouldn't know they are using sharding either.

> - No need to change the application's code when (and if) the database needs to
> be sharded in the future (FDW built-in approach).

Right, we never required changes for partitioning either.

--
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  If only the physical world exists, free will is an illusion.

Re: Best practices for preparing an application to (possibly) be sharded (FDW) in the future?

От
Bruce Momjian
Дата:
On Fri, Feb 11, 2022 at 06:34:41PM -0300, Jean Baro wrote:
> Thanks Bruce.
> 
> I like this approach. 
> 
> PG is great!!

FYI, you mentioned microservices, and I am working on a microservices
talk now --- here are the draft slides:

    https://momjian.us/main/writings/pgsql/microservices.pdf

I will post the final slides to my blog once I present them somewhere.

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  If only the physical world exists, free will is an illusion.




Re: Best practices for preparing an application to (possibly) be sharded (FDW) in the future?

От
Jean Baro
Дата:
Thanks, I'll take a look. 🙏

On Sat, Feb 12, 2022 at 9:58 AM Bruce Momjian <bruce@momjian.us> wrote:
On Fri, Feb 11, 2022 at 06:34:41PM -0300, Jean Baro wrote:
> Thanks Bruce.
>
> I like this approach. 
>
> PG is great!!

FYI, you mentioned microservices, and I am working on a microservices
talk now --- here are the draft slides:

        https://momjian.us/main/writings/pgsql/microservices.pdf

I will post the final slides to my blog once I present them somewhere.

--
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  If only the physical world exists, free will is an illusion.