0
0
Lập trình
Admin Team
Admin Teamtechmely

Ứng dụng Serverless với Java và Aurora DSQL - Phần 2: Kết nối JDBC

Đăng vào 3 tuần trước

• 5 phút đọc

Giới thiệu

Trong phần 1 của chuỗi bài viết này, chúng ta đã tìm hiểu về các khái niệm cơ bản liên quan đến Amazon Aurora DSQL và khám phá cách tạo một cụm DSQL tương thích với PostgreSQL trong một vùng và kết nối với nó thông qua ứng dụng mẫu dùng để tạo và truy xuất đơn hàng và các mặt hàng trong đơn hàng, sử dụng API Gateway và Lambda với runtime Java 21 quản lý.

Một trong những phụ thuộc tại thời điểm biên dịch duy nhất của ứng dụng mẫu của chúng ta là phụ thuộc vào lớp software.amazon.awssdk.services.dsql.DsqlUtilities trong tệp DsqlDataSourceConfig.java. Lý do chúng ta cần phụ thuộc này là để xây dựng một thể hiện của DsqlUtilities nhằm tạo ra token xác thực kết nối cơ sở dữ liệu (DsqlUtilities.generateDbConnectAdminAuthToken()), hãy xem cách triển khai của getAuthTokenForAdminUser() trong DsqlDataSourceConfig.java. Chúng ta cần token này để thiết lập nó như mật khẩu kết nối ở hai nơi trong DsqlDataSourceConfig.java:

  1. Khi chúng ta xây dựng HikariDataSource
java Copy
private static HikariDataSource hds;
static {
    final HikariConfig config = new HikariConfig();
    config.setUsername("admin");
    config.setJdbcUrl(JDBC_URL);
    config.setMaxLifetime(1500 * 1000); // Thời gian hết hạn kết nối trong mili giây, mặc định là 30
    config.setMaximumPoolSize(1); // Mặc định là 10
    
    String authToken = getAuthTokenForAdminUser();
    config.setPassword(authToken);
    hds = new HikariDataSource(config);
}
  1. Mỗi lần khi chúng ta muốn thực thi câu lệnh SQL và cần lấy kết nối cơ sở dữ liệu từ HikariDataSource
java Copy
public static Connection getPooledConnection() throws SQLException {
    String authToken = getAuthTokenForAdminUser();
    hds.setPassword(authToken);
    return hds.getConnection();
}

Hãy đọc bài viết tuyệt vời của Marc Bowes có tiêu đề "Aurora DSQL: Cách xác thực và ủy quyền hoạt động" để hiểu cách các kết nối đến Aurora DSQL được xác thực và ủy quyền. Chúng ta đã thấy rằng trải nghiệm người dùng không tốt khi tạo ra một số mã lặp lại. Để cải thiện điều đó, AWS đã phát hành Aurora DSQL JDBC Connector.

Aurora DSQL JDBC Connector

Ý tưởng chính đằng sau Aurora DSQL JDBC Connector là thêm một lớp xác thực lên trên trình điều khiển JDBC PostgreSQL, giúp xử lý việc tạo token IAM, cho phép người dùng kết nối với Aurora DSQL mà không cần thay đổi quy trình làm việc JDBC hiện tại của họ.

Mặc dù Aurora DSQL cung cấp giao diện tương thích với PostgreSQL, nhưng các trình điều khiển PostgreSQL hiện tại không hỗ trợ yêu cầu xác thực IAM của Aurora DSQL. Aurora DSQL JDBC Connector cho phép khách hàng tiếp tục sử dụng quy trình làm việc PostgreSQL hiện tại trong khi cho phép xác thực IAM thông qua:

  • Tạo Token Tự Động: Token IAM được tạo tự động bằng cách sử dụng thông tin xác thực AWS.
  • Tích Hợp Mượt Mà: Hoạt động với các mẫu kết nối JDBC hiện có.
  • Hỗ Trợ Thông Tin Xác Thực AWS: Hỗ trợ nhiều trình cung cấp thông tin xác thực AWS khác nhau (mặc định, theo hồ sơ, v.v.)
  • Tương Thích với Thư Viện Kết Nối: Aurora DSQL JDBC Connector hoạt động với các thư viện kết nối như HikariCP. Connector này xử lý việc tạo token IAM trong quá trình thiết lập kết nối, cho phép các nhóm kết nối hoạt động bình thường.

Hãy cùng xem nó hoạt động như thế nào. Để làm điều đó, tôi đã công bố một phiên bản được làm lại của ứng dụng mẫu. Hãy khám phá những khác biệt:

Trong tệp pom.xml, chúng ta cần nhập phụ thuộc sau:

xml Copy
<dependency>
    <groupId>software.amazon.dsql</groupId>
    <artifactId>aurora-dsql-jdbc-connector</artifactId>
    <version>1.0.0</version>
</dependency>

Tất cả các khác biệt còn lại nằm trong DsqlDataSourceConfig.java:

  1. URL JDBC được xây dựng như sau:
java Copy
private static final String AURORA_DSQL_CLUSTER_ENDPOINT = System.getenv("AURORA_DSQL_CLUSTER_ENDPOINT");

private static final String JDBC_URL = "jdbc:aws-dsql:postgresql://"
    + AURORA_DSQL_CLUSTER_ENDPOINT
    + ":5432/postgres?sslmode=verify-full&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory"
    + "&token-duration-secs=900";

Chúng ta sử dụng định dạng jdbc:aws-dsql:postgresql như một URL để kết nối với các cụm Aurora DSQL và thêm tham số URL token-duration-secs=900 để xác định thời gian tồn tại của token.

  1. Chúng ta không cần phải tạo token xác thực và thiết lập nó như mật khẩu vì điều này sẽ được Aurora DSQL JDBC Connector xử lý cho chúng ta, giúp đơn giản hóa mã để tạo HikariDataSource và lấy kết nối cơ sở dữ liệu từ nó:
java Copy
private static HikariDataSource hds;
static {
    final HikariConfig config = new HikariConfig();
    config.setUsername("admin");
    config.setJdbcUrl(JDBC_URL);
    config.setMaxLifetime(1500 * 1000); // Thời gian hết hạn kết nối trong mili giây, mặc định là 30
    config.setMaximumPoolSize(1); // Mặc định là 10
}

java Copy
public static Connection getPooledConnection() throws SQLException {
    return hds.getConnection();
}

Vì vậy, chúng ta cũng không cần tạo thể hiện của DsqlUtilities và không cần bất kỳ phụ thuộc tại thời điểm biên dịch nào vào các thư viện DSQL, vì vậy mã của chúng ta trông giống như một triển khai JDBC thuần túy. Tất nhiên, chúng ta có một phụ thuộc tại thời điểm chạy vào Aurora DSQL JDBC Connector và chúng ta sử dụng jdbc:aws-dsql:postgresql như một định dạng URL để cho phép connector này hoạt động như một trình điều khiển JDBC.

Vậy là xong. Chúng ta không cần thêm bất kỳ thay đổi nào nữa.

Thực hành tốt

  • Kiểm tra kỹ lưỡng: Hãy chắc chắn rằng bạn đã kiểm tra mã của mình sau khi chuyển sang sử dụng Aurora DSQL JDBC Connector để đảm bảo mọi thứ hoạt động như mong đợi.
  • Quản lý kết nối: Sử dụng thư viện kết nối như HikariCP để quản lý kết nối của bạn một cách hiệu quả.
  • Theo dõi hiệu suất: Theo dõi hiệu suất ứng dụng của bạn sau khi chuyển đổi để phát hiện bất kỳ vấn đề nào có thể xảy ra.

Những cạm bẫy thường gặp

  • Không thiết lập đúng biến môi trường: Đảm bảo rằng biến môi trường AURORA_DSQL_CLUSTER_ENDPOINT được thiết lập chính xác.
  • Thiếu thông tin xác thực AWS phù hợp: Kiểm tra xem thông tin xác thực AWS của bạn có quyền truy cập vào Aurora DSQL hay không.

Mẹo hiệu suất

  • Tối ưu hóa số lượng kết nối: Cân nhắc sử dụng các cấu hình phù hợp cho MaximumPoolSize để tối ưu hóa hiệu suất.
  • Sử dụng token với thời gian tồn tại hợp lý: Đảm bảo rằng bạn đã thiết lập thời gian tồn tại token hợp lý để không gặp phải vấn đề hết hạn token.

Kết luận

Trong phần này của chuỗi bài viết, chúng ta đã giải thích cách dễ dàng để điều chỉnh mã của mình để sử dụng Aurora DSQL JDBC Connector và nhận thấy rõ những lợi ích của nó như đơn giản hóa mã và cải thiện trải nghiệm người dùng. Hãy thử nghiệm và trải nghiệm sự khác biệt mà nó mang lại nhé!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào