Bài viết trước mình có đề cập đến một tính năng nổi bật của Citus Data đó là việc mở rộng multi-tenants. Bạn có thể đọc lại tại đây
Ở bài viết này mình sẽ giúp bạn việc mà citus scale multi-tenants thông qua việc xây dựng một ứng dụng nhỏ được viết băng aspnet core kết hợp với postgres.
Bắt đầu thôi!
Khi một ứng dụng multi tenants được xây dựng có khả năng mở rộng lớn thì việc chọn asp net platform là một lựa chọn không tồi. Cũng như những platform phổ biến khác như Express và Django thì Asp Net được sử dụng để xây dựng một ứng dụng web application và api cực kỳ mạnh mẽ.
Trong quá khứ, ứng dụng Asp Net chỉ hoạt động được trên nền windows servers, nhưng đối với phiên bản mới của AspNet Core thì nó lại có thể chạy được trên mọi nền tàng (cross platfrom) bên cạnh việc nó còn là mã nguồn mở và tăng hiệu suất đáng kinh ngạc nữa chứ.
Như mình đã đề cập ở bài viết trước thì vấn đề scale database chúng ta cần tổ chức kiến trúc tốt ngay từ ban đầu. Ngày trước các bạn thường biết đến với 2 kiểu tổ chức kiến trúc đó là dồn tất cả tenants vào chung một database, hoặc mỗi tenants bạn có thể để một database riêng (Cơ sở dữ liệu phân tán theo chiều dọc với khóa chốt là tenant)
Trong bài viết này mình sẽ sử dụng sharding để chia mỗi tenant thành khóa để các câu lệnh query sau đó sẽ được gắn tenant id vào khi đó sẽ truy vấn nhanh hơn. Bên cạnh đó sau này cũng dễ dàng mở rộng theo tenant mới trên từng node.
Đầu tiên, bạn phải cài docker trước đã, có nhiều trang hướng dẫn cài docker rồi nên mình cũng không đề cập nó tại đây nữa.
Đến đây bạn có 2 cách để có thể cài đặt postgres citus
Cách 1: Sử dụng trực tiếp psql
> psql connection-string
> docker exec -it citus_master psql -U postgres
Cho những ai chưa biết về 2 file này:
Docker compose là một công cụ vô cùng đơn giản để thực thi nhiều container cùng một lúc cho ứng dụng của bạn. Để có thể dùng được docker compose, bạn cần tạo một compose file như docker-compose.yml để thiết lập các container cần cho ứng dụng của bạn.
Và sau đó để build, run và stop các container, các bạn có thể sử dụng các command sau:
- "docker-compose build" dùng để build tất cả container được định nghĩa trong compose file.
- "docker-compose up" dùng để thực hiện tạo và khởi chạy các container.
- "docker-compose down" dùng để dừng các container và xóa hết những gì được tạo từ lệnh up.
Còn Docker compose override thì như cái tên của nó, nó dùng để ghi đè những biến môi trường mà mình định nghĩa khi chạy docker compose thôi.

Vậy là khi chạy mình chỉ sử dụng duy nhất 1 câu lệnh cmd này thôi
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d --build
Mình thích sử dụng cách thứ 2 hơn vì mỗi lần restart lại máy và docker thì các containers này tự động restart up theo. Chứ cách 1 chỉ dùng ở tại thời điểm đó thôi. Nhưng cách 2 thì bạn lại phải giữ một image trong máy, càng về sau dữ liệu càng phình to thì máy bạn sẽ phình theo nếu bạn không pune image (xóa nó đi).
Sau khi chạy câu lệnh trên thì bạn đã có một môi trường postgres citus

...
P/s: Do bài viết chứa rất nhiều code nên khó có thể trích dẫn qua quotes được. Bạn có thể đọc tiếp tại
Source code: