PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

So sánh các công cụ cân bằng tải cho PostgreSQL

Cân bằng tải làm tăng hiệu suất hệ thống, đặc biệt là từ quan điểm ứng dụng, cho phép một số máy tính phục vụ cùng một dữ liệu. Nó hoạt động sao cho tải đang được phân phối giữa các truy vấn của khách hàng đến các nút nhân bản ngoài nút chính hoặc nút chính của nó, trong khi cơ sở dữ liệu định tuyến chỉ sửa đổi cho riêng nút chính. Bất kỳ sửa đổi nào đối với nút chính sau đó sẽ được truyền tới từng bản sao bằng cách sử dụng PostgreSQL Streaming Replication.

Trình cân bằng tải có thể ảnh hưởng đến PostgreSQL như thế nào?

Việc sử dụng cân bằng tải sẽ hướng các ứng dụng khách kết nối với máy chủ cân bằng tải và phân phối các kết nối đã khởi tạo đến các nút PostgreSQL có sẵn tùy thuộc vào loại yêu cầu truy vấn. Điều này giúp nhấn mạnh tải vượt trội trên một máy chủ PostgreSQL cụ thể và thúc đẩy cân bằng tải song song giữa các nút có sẵn trong cụm.

Sử dụng PostgreSQL, đã có một số giải pháp hiện có để làm cho điều này hoạt động. Các giải pháp này có thể hoạt động liền mạch hoặc cân bằng tải có thể hoạt động với cấu trúc liên kết hiện tại - với các nút chính và nút dự phòng - nhưng cân bằng tải được thực hiện trong chính lớp ứng dụng. Cân bằng tải phải đối mặt với những thách thức với các vấn đề đồng bộ hóa, đây là khó khăn cơ bản đối với các máy chủ làm việc cùng nhau. Vì không có giải pháp duy nhất loại bỏ tác động của sự cố đồng bộ hóa cho tất cả các trường hợp sử dụng, nên có nhiều giải pháp. Mỗi giải pháp giải quyết vấn đề này theo một cách khác nhau và giảm thiểu tác động của nó đối với một khối lượng công việc cụ thể.

Trong blog này, chúng ta sẽ xem xét các bộ cân bằng tải đó bằng cách so sánh chúng và nó có lợi như thế nào đối với khối lượng công việc PostgreSQL của bạn.

Cân bằng tải HAProxy cho PostgreSQL

HAProxy là một công cụ hướng sự kiện, không chặn kết hợp proxy với lớp I / O rất nhanh và bộ lập lịch đa luồng dựa trên mức độ ưu tiên. Vì nó được thiết kế với mục tiêu chuyển tiếp dữ liệu, nên kiến ​​trúc của nó được thiết kế để hoạt động trong một quy trình nhẹ được tối ưu hóa để di chuyển dữ liệu nhanh nhất có thể với các thao tác ít nhất có thể. Nó tập trung vào việc tối ưu hóa hiệu quả bộ nhớ cache của CPU bằng cách gắn các kết nối với cùng một CPU càng lâu càng tốt. Do đó, nó thực hiện một mô hình phân lớp cung cấp các cơ chế bỏ qua ở mỗi cấp để đảm bảo dữ liệu không đạt đến các cấp cao hơn trừ khi cần thiết. Hầu hết quá trình xử lý được thực hiện trong hạt nhân. HAProxy cố gắng hết sức để giúp hạt nhân thực hiện công việc nhanh nhất có thể bằng cách đưa ra một số gợi ý hoặc bằng cách tránh các hoạt động nhất định khi nó đoán chúng có thể được nhóm lại sau đó. Do đó, các số liệu điển hình cho thấy 15% thời gian xử lý dành cho HAProxy so với 85% trong nhân ở chế độ đóng TCP hoặc HTTP và khoảng 30% đối với HAProxy so với 70% đối với nhân ở chế độ duy trì HTTP.

HAProxy cũng có các tính năng bổ sung về cân bằng tải. Ví dụ:tính năng ủy quyền TCP cho phép chúng tôi sử dụng nó cho các kết nối cơ sở dữ liệu, đặc biệt là cho PostgreSQL bằng cách sử dụng hỗ trợ dịch vụ kiểm tra tích hợp của nó. Mặc dù có hỗ trợ dịch vụ cơ sở dữ liệu, nó không đủ để kiểm tra tình trạng mong muốn, đặc biệt là đối với loại cụm sao chép. Cách tiếp cận tiêu chuẩn khi triển khai nó cho sản xuất là sử dụng kiểm tra TCP, sau đó phụ thuộc vào xinetd với HAProxy.

Ưu điểm của việc sử dụng HAProxy cho PostgreSQL

Điều tốt nhất với HAProxy là trọng lượng nhẹ, dễ cấu hình và sử dụng, đồng thời nó thực hiện công việc như mong đợi. Việc sử dụng HAProxy trên đầu một cụm PostgreSQL đã được thực hiện và triển khai nhiều lần từ các tổ chức lớn đến các SME / SMB khác nhau để sử dụng trong sản xuất của họ. Nó từ lâu đã được chứng minh về khả năng sản xuất và khối lượng công việc cao không chỉ đối với cơ sở dữ liệu mà ngay cả với các dịch vụ mạng khác như ứng dụng web hoặc cân bằng tải địa lý (phân phối lưu lượng truy cập qua nhiều trung tâm dữ liệu). Có HAProxy trên đầu PostgreSQL, nó cho phép người dùng khả năng điều chỉnh hoặc giới hạn phản hồi để song song hóa và phân phối tải đúng cách cho tất cả các nút có sẵn trong cụm. Cơ chế tích hợp với HAProxy cũng cho phép người dùng thiết lập tính khả dụng cao một cách liền mạch và dễ dàng mở rộng quy mô hơn nếu cần tải và tránh điểm lỗi duy nhất (SPOF).

Nhược điểm của việc Sử dụng HAProxy cho PostgreSQL

HAProxy không cung cấp tính năng lọc truy vấn cũng như không phân tích truy vấn để xác định loại câu lệnh được yêu cầu. Nó thiếu khả năng thực hiện phân chia đọc / ghi trên một cổng duy nhất. Đặt bộ cân bằng tải trên HAProxy yêu cầu ít nhất bạn phải thiết lập các cổng khác nhau để ghi và các cổng khác nhau để đọc của bạn. Điều này yêu cầu thay đổi ứng dụng để phù hợp với nhu cầu của bạn.

HAProxy cũng hỗ trợ tính năng rất đơn giản với PostgreSQL để kiểm tra tình trạng, tuy nhiên điều này chỉ xác định xem nút có hoạt động hay không, như thể nó chỉ ping nút và chờ phản hồi trả lại. Nó không xác định vai trò của một nút mà nó đang cố gắng chuyển tiếp các kết nối được yêu cầu từ máy khách đến nút mong muốn. Do đó, nó không hiểu hoặc không có tính năng nào trong HAProxy để hiểu cấu trúc liên kết sao chép. Mặc dù, người dùng có thể tạo các trình nghe riêng biệt dựa trên các cổng khác nhau nhưng nó vẫn bổ sung các thay đổi trong ứng dụng để đáp ứng nhu cầu cân bằng tải. Điều này có nghĩa là sử dụng tập lệnh bên ngoài với xinetd có thể là giải pháp thay thế để lấp đầy các yêu cầu, tuy nhiên, nó không được tích hợp với HAProxy và có thể dễ xảy ra lỗi do con người.

Nếu một nút hoặc nhóm nút phải được đặt ở chế độ bảo trì, thì bạn cũng sẽ được yêu cầu áp dụng các thay đổi cho HAProxy của mình, nếu không, nó có thể rất thảm.

Pgpool-II Để Cân bằng Tải cho PostgreSQL của bạn

Pgpool-II là một phần mềm mã nguồn mở và được cộng đồng PostgreSQL khổng lồ chấp nhận để thực hiện cân bằng tải và sử dụng phần mềm này để hoạt động như phần mềm trung gian của họ từ ứng dụng xuống lớp proxy, sau đó phân phối tải sau khi nó đã phân tích đầy đủ loại yêu cầu trên mỗi truy vấn hoặc kết nối cơ sở dữ liệu. Pgpool-II đã ở đó trong một thời gian dài kể từ năm 2003, ban đầu được đặt tên là Pgpool cho đến khi nó trở thành Pgpool-II vào năm 2006, là minh chứng cho một công cụ proxy rất ổn định không chỉ để cân bằng tải mà còn có rất nhiều tính năng thú vị. .

Pgpool-II được biết đến như con dao quân đội Thụy Sĩ cho PostgreSQL và là một phần mềm proxy nằm giữa các máy chủ PostgreSQL và một máy khách cơ sở dữ liệu PostgreSQL. Ý tưởng cơ bản của PgPool-II là nó nằm trên máy khách, sau đó các truy vấn đọc phải được gửi đến các nút dự phòng, trong khi việc ghi hoặc sửa đổi được chuyển thẳng đến nút chính. Đây là một giải pháp cân bằng tải rất thông minh, không chỉ cân bằng tải mà còn hỗ trợ tính khả dụng cao và cung cấp tổng hợp kết nối. Cơ chế thông minh cho phép cân bằng tải giữa chủ và nô lệ. Vì vậy, các bản ghi được tải đến cái chính, trong khi quá trình đọc được chuyển hướng đến các máy chủ chỉ đọc có sẵn, đó là các nút chờ nóng được cho là của bạn. Pgpool-II cũng cung cấp tính năng sao chép hợp lý. Mặc dù việc sử dụng và tầm quan trọng của nó đã giảm đi khi các tùy chọn sao chép sẵn được cải thiện ở phía máy chủ PostgreSQL, nhưng đây vẫn là một lựa chọn có giá trị cho các phiên bản cũ hơn của PostgreSQL. Trên hết, nó cũng cung cấp tính năng tổng hợp kết nối.

Pgpool-II có kiến ​​trúc liên quan hơn PgBouncer để hỗ trợ tất cả các tính năng mà nó có. Vì cả hai đều hỗ trợ gộp kết nối nên cái sau không có tính năng cân bằng tải.

Pgpool-II có thể quản lý nhiều máy chủ PostgreSQL. Sử dụng chức năng nhân bản cho phép tạo bản sao lưu thời gian thực trên 2 hoặc nhiều đĩa vật lý, để dịch vụ có thể tiếp tục mà không cần dừng máy chủ trong trường hợp đĩa bị lỗi. Vì Pgpool-II cũng là một kết nối có khả năng tổng hợp kết nối, nó có thể cung cấp hạn chế về các kết nối vượt quá. Có giới hạn về số lượng kết nối đồng thời tối đa với PostgreSQL và các kết nối bị từ chối sau nhiều kết nối này. Tuy nhiên, việc đặt số lượng kết nối tối đa sẽ làm tăng mức tiêu thụ tài nguyên và ảnh hưởng đến hiệu suất hệ thống. pgpool-II cũng có giới hạn về số lượng kết nối tối đa, nhưng các kết nối bổ sung sẽ được xếp hàng đợi thay vì trả về lỗi ngay lập tức.

Trong cân bằng tải, Nếu cơ sở dữ liệu được sao chép, thực hiện truy vấn SELECT trên bất kỳ máy chủ nào sẽ trả về cùng một kết quả. pgpool-II tận dụng tính năng nhân bản để giảm tải trên mỗi máy chủ PostgreSQL bằng cách phân phối các truy vấn CHỌN giữa nhiều máy chủ, cải thiện thông lượng tổng thể của hệ thống. Tốt nhất, hiệu suất được cải thiện tương ứng với số lượng máy chủ PostgreSQL. Cân bằng tải hoạt động tốt nhất trong tình huống có nhiều người dùng thực hiện nhiều truy vấn cùng một lúc.

Sử dụng chức năng truy vấn song song, dữ liệu có thể được chia cho nhiều máy chủ, do đó, truy vấn có thể được thực hiện đồng thời trên tất cả các máy chủ để giảm thời gian thực thi tổng thể. Truy vấn song song hoạt động tốt nhất khi tìm kiếm dữ liệu quy mô lớn.

Ưu điểm của việc sử dụng Pgpool cho PostgreSQL

Đây là một loại phần mềm giàu tính năng không chỉ để cân bằng tải. Các tính năng cốt lõi và sự hỗ trợ của công cụ này theo yêu cầu cao, cung cấp kết nối tổng hợp, một PgBouncer đi thay thế, sao chép gốc, khôi phục trực tuyến, lưu vào bộ nhớ đệm truy vấn trong bộ nhớ, chuyển đổi dự phòng tự động và tính khả dụng cao với quy trình phụ của nó bằng cách sử dụng cơ quan giám sát. Công cụ này đã quá cũ và liên tục được hỗ trợ rộng rãi bởi cộng đồng PostgreSQL, vì vậy việc xử lý các vấn đề không thể khó tìm kiếm sự trợ giúp. Tài liệu là người bạn của bạn ở đây khi tìm kiếm câu hỏi nhưng tìm kiếm trợ giúp trong cộng đồng không khó và thực tế công cụ này là nguồn mở nên bạn có thể thoải mái sử dụng miễn là bạn tuân thủ giấy phép BSD.

Pgpool-II cũng có trình phân tích cú pháp SQL. Điều này có nghĩa là nó có thể phân tích cú pháp chính xác các SQL và viết lại truy vấn. Điều này cho phép Pgpool-II tăng cường tính song song tùy thuộc vào yêu cầu truy vấn.

Nhược điểm của việc sử dụng Pgpool cho PostgreSQL

Pgpool-II không cung cấp STONITH (bắn vào đầu nút khác) mà cung cấp cơ chế rào nút. Nếu máy chủ PostgreSQL không thành công, nó sẽ duy trì tính khả dụng của dịch vụ. Pgpool-II cũng có thể là điểm lỗi duy nhất (SPOF). Khi nút gặp sự cố, kết nối cơ sở dữ liệu và tính khả dụng của bạn sẽ dừng từ thời điểm đó. Mặc dù điều này có thể được khắc phục bằng cách dự phòng với Pgpool-II và phải sử dụng cơ quan giám sát để điều phối nhiều nút Pgpool-II, điều đó sẽ làm tăng thêm công việc.

Đối với tính năng tổng hợp kết nối, thật không may, đối với những người chỉ tập trung vào tính năng tổng hợp kết nối, điều mà Pgpool-II làm không tốt là tính năng tổng hợp kết nối, đặc biệt là đối với một số ít khách hàng. Bởi vì mỗi quy trình con có nhóm riêng của nó và không có cách nào để kiểm soát ứng dụng khách nào kết nối với quy trình con nào, nên quá may mắn khi sử dụng lại các kết nối.

Sử dụng Trình điều khiển JDBC để Cân bằng tải PostgreSQL của bạn

Java Database Connectivity (JDBC) là một giao diện lập trình ứng dụng (API) cho ngôn ngữ lập trình Java, xác định cách thức khách hàng có thể truy cập cơ sở dữ liệu. Nó là một phần của nền tảng Java Standard Edition và cung cấp các phương pháp để truy vấn và cập nhật dữ liệu trong cơ sở dữ liệu, đồng thời hướng tới cơ sở dữ liệu quan hệ.

PostgreSQL JDBC Driver (viết tắt là PgJDBC) cho phép các chương trình Java kết nối với cơ sở dữ liệu PostgreSQL bằng cách sử dụng mã Java tiêu chuẩn, độc lập với cơ sở dữ liệu. Là một trình điều khiển JDBC mã nguồn mở được viết bằng Pure Java (Loại 4) và giao tiếp trong giao thức mạng gốc PostgreSQL. Bởi vì điều này, trình điều khiển là nền tảng độc lập; sau khi được biên dịch, trình điều khiển có thể được sử dụng trên bất kỳ hệ thống nào.

Nó không thể so sánh với các giải pháp cân bằng tải mà chúng tôi đã chỉ ra trước đây. Do đó, công cụ này là API giao diện lập trình ứng dụng của bạn, cho phép bạn kết nối từ ứng dụng của mình cho bất kỳ loại ngôn ngữ lập trình nào được viết hỗ trợ JDBC hoặc ít nhất có bộ điều hợp để kết nối với JDBC. Mặt khác, nó thuận lợi hơn với các ứng dụng Java.

Cân bằng tải với JDBC khá đơn giản nhưng có thể thực hiện được công việc. Được cung cấp các tham số kết nối có thể kích hoạt cơ chế cân bằng tải mà công cụ này cung cấp,

  • targetServerType - cho phép chỉ mở các kết nối tới các máy chủ có trạng thái / vai trò được yêu cầu phù hợp với yếu tố xác định cho các máy chủ PostgreSQL. Các giá trị được phép là bất kỳ, chính, chính (không được dùng nữa), nô lệ (không được dùng nữa), thứ cấp, preferSlave và preferSecondary. Trạng thái hoặc vai trò được xác định bằng cách quan sát xem máy chủ có cho phép ghi hay không.
  • hostRecheckSeconds - kiểm soát thời gian tính bằng giây kiến ​​thức về trạng thái máy chủ được lưu vào bộ nhớ cache toàn cầu rộng JVM. Giá trị mặc định là 10 giây.
  • loadBalanceHosts - cho phép bạn định cấu hình nếu máy chủ đầu tiên luôn được thử (khi được đặt thành false) hoặc nếu các kết nối được chọn ngẫu nhiên (khi được đặt thành true)

Vì vậy, sử dụng loadBalanceHosts chấp nhận một giá trị boolean. loadBalanceHosts bị tắt trong chế độ mặc định của nó và các máy chủ được kết nối theo thứ tự nhất định. Nếu các máy chủ được kích hoạt sẽ được chọn ngẫu nhiên từ tập hợp các ứng viên phù hợp. Cú pháp cơ bản khi kết nối với cơ sở dữ liệu bằng jdbc như sau,

  • jdbc:postgresql:database
  • jdbc:postgresql:/
  • jdbc:postgresql:// host / database
  • jdbc:postgresql:// host /
  • jdbc:postgresql:// host:port / database
  • jdbc:postgresql:// host:port /

Cho rằng loadBalanceHosts và kết nối nhận được nhiều máy chủ được định cấu hình giống như bên dưới,

jdbc:postgresql://host1:port1,host2:port2,host3:port3/database

Điều này cho phép JDBC chọn ngẫu nhiên từ nhóm các ứng cử viên phù hợp.

Ưu điểm của việc sử dụng PgJDBC cho PostgreSQL

Không cần yêu cầu phần mềm trung gian hoặc proxy làm bộ cân bằng tải. Quá trình này giúp tăng hiệu suất nhiều hơn từ giao diện người dùng ứng dụng vì không có lớp bổ sung nào cho mỗi yêu cầu đi qua. Nếu bạn có các ứng dụng đã sẵn sàng và được viết để hỗ trợ giao tiếp với JDBC, điều này có thể có lợi và nếu bạn không cần thêm phần mềm trung gian, đặc biệt nếu ngân sách của bạn eo hẹp và chỉ muốn giới hạn các quy trình dành riêng cho mục đích và chức năng duy nhất của nó. Không giống như các ứng dụng có lưu lượng truy cập cao và yêu cầu lớn, nó có thể yêu cầu máy chủ proxy hoạt động như bộ cân bằng tải của bạn và có thể yêu cầu thêm tài nguyên để xử lý đúng các yêu cầu cao về kết nối cũng yêu cầu xử lý CPU và bộ nhớ.

Nhược điểm của việc sử dụng PgJDBC cho PostgreSQL

Bạn phải thiết lập mã của mình cho mỗi và mọi kết nối được yêu cầu. Đó là một giao diện lập trình ứng dụng có nghĩa là, có nhiều công việc phía sau để giải quyết, đặc biệt nếu ứng dụng của bạn đòi hỏi rất nhiều trên mỗi yêu cầu được gửi đến các máy chủ thích hợp. Không có tính khả dụng cao, khả năng mở rộng tự động và có một điểm lỗi duy nhất.

Giới thiệu về Trình gói hoặc Công cụ được triển khai với libpq Để Cân bằng tải PostgreSQL của bạn như thế nào?

libpq là giao diện của lập trình viên ứng dụng C cho PostgreSQL. libpq là một tập hợp các hàm thư viện cho phép các chương trình khách chuyển các truy vấn đến máy chủ phụ trợ PostgreSQL và nhận kết quả của các truy vấn này.

libpq cũng là công cụ cơ bản cho một số giao diện ứng dụng PostgreSQL khác, bao gồm những giao diện được viết cho C ++, PHP, Perl, Python, Tcl, Swift và ECPG. Vì vậy, một số khía cạnh về hành vi của libpq sẽ quan trọng đối với bạn nếu bạn sử dụng một trong những gói đó.

libpq không tự động hóa việc cân bằng tải và không được coi là một công cụ cho các giải pháp cân bằng tải. Tuy nhiên, nó có khả năng kết nối với các máy chủ có sẵn tiếp theo nếu các máy chủ trước đó được liệt kê để kết nối không thành công. Ví dụ:nếu bạn có hai nút chờ nóng khả dụng, nếu nút đầu tiên quá bận và không đáp ứng với giá trị thời gian chờ tương ứng, thì nút đó sẽ kết nối với nút sẵn có tiếp theo trong kết nối đã cho. Nó dựa vào loại thuộc tính phiên bạn đã chỉ định. Điều này dựa vào tham số target_session_attrs.

Tham số target_session_attrs chấp nhận các giá trị đọc-ghi và bất kỳ giá trị nào là giá trị mặc định nếu không được chỉ định. Tham số target_session_attrs là gì, nếu được đặt thành đọc-ghi, thì chỉ một kết nối trong đó các giao dịch đọc-ghi được chấp nhận trong quá trình kết nối. Truy vấn SHOW transaction_read_only sẽ được gửi khi có bất kỳ kết nối thành công nào. Nếu kết quả được bật, thì kết nối sẽ bị đóng, có nghĩa là nút được xác định là bản sao hoặc không xử lý ghi. Nếu nhiều máy chủ được chỉ định trong chuỗi kết nối, thì bất kỳ máy chủ nào còn lại sẽ được thử giống như khi nỗ lực kết nối không thành công. Giá trị mặc định của tham số này, bất kỳ, có nghĩa là tất cả các kết nối đều được chấp nhận. Mặc dù dựa vào target_session_attrs là không đủ để cân bằng tải, nhưng bạn có thể mô phỏng theo kiểu vòng tròn. Xem mã C ví dụ của tôi bên dưới bằng cách sử dụng libpq,

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

#include <unistd.h>

#include <libpq-fe.h>




const char* _getRoundRobinConn() {

   char* h[2];

   h[0] = "dbname=node40 host=192.168.30.40,192.168.30.50";

   h[1] = "dbname=node50 host=192.168.30.50,192.168.30.40";



   time_t t;

   //srand((unsigned)time(&t));

   sleep(1.85);

   srand((unsigned)time(NULL));



   return h[rand() % 2];

}



void

_connect()

{

  PGconn *conn;

  PGresult *res;

  char strConn[120];




  snprintf(strConn, 1000, "user=dbapgadmin password=dbapgadmin %s target_session_attrs=any", _getRoundRobinConn());

  //printf("\nstrConn value is: %s\n", strConn);



  conn = PQconnectdb(strConn);



  res = PQexec(conn, "SELECT current_database(), inet_client_addr();");



  if ( PQresultStatus(res)==PGRES_TUPLES_OK )

  {

    printf("current_database = %s on %s\n", PQgetvalue(res, 0, 0),

PQhost(conn));

  } else {



    printf("\nFailed... Message Code is: %d\n", PQresultStatus(res));

  }



  PQclear(res);

  PQfinish(conn);



}



int main(void)

{

  int i;

  for (i=0 ; i<5 ; i++)

    _connect();



  return 0;

}

Kết quả cho thấy,

[email protected]:/home/vagrant# gcc -I/usr/include/postgresql -L/usr/lib/postgresql/12/lib libpq_conn.c -lpq -o libpq_conn; ./libpq_conn

current_database = node40 on 192.168.30.40

current_database = node40 on 192.168.30.40

current_database = node50 on 192.168.30.50

current_database = node40 on 192.168.30.40

current_database = node50 on 192.168.30.50

Hãy lưu ý rằng, nếu nút .40 (nút chính) gặp trục trặc, nó sẽ luôn hướng kết nối đến .50 miễn là giá trị target_session_attrs của bạn là bất kỳ.

Trong trường hợp đó, bạn có thể chỉ cần tạo của riêng mình một cách tự do với sự trợ giúp của libpq. Mặc dù quá trình dựa vào libpq và / hoặc các trình bao bọc của nó vẫn còn quá thô để nói rằng điều này có thể cung cấp cơ chế cân bằng tải mong muốn với sự phân phối đồng đều cho các nút bạn có. Chắc chắn, cách tiếp cận và mã hóa này có thể được cải thiện nhưng ý nghĩ là đây là mã nguồn mở và miễn phí, và bạn có thể viết mã mà không cần dựa vào phần mềm trung gian và tự do thiết kế cách cân bằng tải của bạn sẽ hoạt động.

Ưu điểm của việc sử dụng libpq cho PostgresQL

Thư viện

libpq là giao diện ứng dụng của lập trình viên được xây dựng bằng ngôn ngữ lập trình C. Tuy nhiên, thư viện đã được triển khai bằng nhiều ngôn ngữ khác nhau dưới dạng trình bao bọc để các lập trình viên có thể giao tiếp với cơ sở dữ liệu PostgreSQL bằng các ngôn ngữ yêu thích của họ. Bạn có thể trực tiếp tạo ứng dụng của riêng mình bằng các ngôn ngữ yêu thích của mình và sau đó liệt kê xuống các máy chủ mà bạn dự định các truy vấn sẽ được gửi nhưng chỉ sau máy chủ khác, nếu lỗi hoặc hết thời gian, hãy gửi tải của bạn đến các nút có sẵn mà bạn định phân phối tải. Nó có sẵn bằng các ngôn ngữ như Python, Perl, PHP, Ruby, Tcl hoặc Rust.

Nhược điểm của việc sử dụng libpq cho PostgresQL

Việc triển khai áp dụng song song tải là không hoàn hảo và bạn phải viết cơ chế cân bằng tải của riêng mình bằng mã. Không có cấu hình nào mà bạn có thể sử dụng hoặc tùy chỉnh vì tất cả chỉ có một giao diện lập trình cho cơ sở dữ liệu PostgreSQL với sự trợ giúp của target_session_attrs param. Điều đó có nghĩa là, khi soạn một kết nối cơ sở dữ liệu, bạn phải có một loạt các kết nối đọc đến các nút bản sao / dự phòng của bạn, sau đó viết các truy vấn đến trình ghi hoặc nút chính trong mã của bạn, cho dù đó là trong ứng dụng của bạn hay bạn phải tạo API của riêng bạn để quản lý giải pháp cân bằng tải.

Sử dụng cách tiếp cận này chắc chắn không cần hoặc dựa vào phần mềm trung gian từ quan điểm ứng dụng front-end đến cơ sở dữ liệu làm chương trình phụ trợ. Tất nhiên là nhẹ nhưng khi gửi danh sách các máy chủ khi kết nối, điều đó không có nghĩa là tải được hiểu và gửi đồng đều trừ khi bạn phải thêm mã của mình cho cách tiếp cận này. Điều này chỉ thêm rắc rối, tuy nhiên, đã có các giải pháp hiện có, vậy tại sao cần phải phát minh lại bánh xe?

Kết luận

Việc triển khai bộ cân bằng tải của bạn với PostgreSQL có thể đòi hỏi nhiều yêu cầu nhưng tùy thuộc vào loại ứng dụng và chi phí mà bạn đang xử lý. Đôi khi, đối với nhu cầu tải cao, nó đòi hỏi phần mềm trung gian hoạt động như một proxy để phân phối tải đúng cách và cũng giám sát trạng thái hoặc trạng thái nút của nó. Mặt khác, nó có thể yêu cầu tài nguyên máy chủ hoặc nó phải được chạy trên một máy chủ chuyên dụng hoặc yêu cầu thêm CPU và bộ nhớ để đáp ứng nhu cầu và điều này làm tăng thêm chi phí. Do đó, cũng có một cách đơn giản nhưng tốn thời gian nhưng cung cấp phân phối tải cho các máy chủ có sẵn mà bạn đã có. Tuy nhiên, nó đòi hỏi kỹ năng lập trình và hiểu biết về chức năng của API.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các công cụ sao lưu hàng đầu cho PostgreSQL

  2. Hibernate + PostgreSQL + Loại địa chỉ mạng (inet, cdir)

  3. PostgreSQL:vai trò không được phép đăng nhập

  4. Giá trị sử dụng PostgreSQL từ hàng trước nếu thiếu

  5. Lược đồ Django và postgresql