Giới thiệu về Quarkus

Ngày nay, việc phát triển và deploy các ứng dụng lên Cloud không còn là chuyện quá xa lạ. Chúng ta không cần phải lo lắng nhiều về cơ sở hạ tầng để deploy ứng dụng, mọi thứ Cloud Providers đã setup sẵn, chỉ cần tập trung phát triển ứng dụng mà thôi.

Xu hướng của deploy ứng dụng trên Cloud là làm sao có thể adapt được việc scalable, nói nôm na là chúng ta có thể deploy ứng dụng load balancer, có thể handle một số lượng lớn các request từ người dùng tại cùng một thời điểm. Để làm được điều này, deployment strategy của chúng ta phải đáp ứng được việc số lượng instance của application có thể tăng giảm dựa vào traffic tới application và đồng thời, khi start instance mới để handle request người dùng, thời gian start nhanh nhất có thể.

Đối với các script language như JavaScript, PHP, hay Python thì khi start một instance mới của ứng dụng, gần như chúng có thể handle request từ người dùng liền. Thế nhưng với Java, các ứng dụng cần thời gian start mới có thể handle request được.

Hiểu được những hạn chế đó, có nhiều framework, library mới của Java được giới thiệu để giải quyết ít nhiều vấn đề start time này, hướng tới giúp chúng ta có thể phát triển các ứng dụng Cloud Native với Java. Một trong số đó có Quarkus, một Supersonic Subatomic Java, tối ưu hoá để có thể chạy các ứng dụng Java sử dụng các container trên môi trường Cloud.

Trong bài viết này, mình sẽ giới thiệu với các bạn tổng quan về cách up và running một ứng dụng Java sử dụng Quarkus để xem, thời gian chạy lên một ứng dụng với Quarkus mất bao lâu các bạn nhé!

Tạo mới Quarkus project

Tương tự như Spring framework với Spring Initializr https://start.spring.io/, Quarkus cũng có một công cụ giúp chúng ta có thể tạo mới nhanh một Quarkus project tại https://code.quarkus.io/.

Các bạn có thể tạo mới nhanh một ứng dụng Jakarta EE chạy với Quarkus sử dụng trang này.

Ví dụ mình tạo mới một ứng dụng Jakarta EE MVC bằng cách khai báo sử dụng RESTEasy JAX-RS, một implementation của Jakarta EE Java API for RESTful Web Services, như sau:

Nhấn Generate your application:

và download project về máy nhé các bạn.

Kết quả mở project trong IntelliJ:

Mặc định như các bạn thấy, nếu các bạn chọn sử dụng RESTEasy JAX-RS trong project của mình, Quarkus Code sẽ generate một class GreetingResource định nghĩa endpoint “/hello” sử dụng JAX-RS:

Chạy ứng dụng

Các bạn có thể chạy ứng dụng này lên sử dụng ở development mode sử dụng quarkus-maven-plugin được khai báo sẵn với generated project, bằng cách chạy Maven command như sau:

Mở trình duyệt và đi đến địa chỉ http://localhost:8080/, các bạn sẽ thấy kết quả như sau:

Mở Console của IntellJ, các bạn sẽ thấy những dòng log sau:

Ở dòng 10 của đoạn log trên, nếu các bạn để ý thì thời gian start của ứng dụng ví dụ này là 2.791s. Điều này là bình thường, không có gì quá ngạc nhiên phải không các bạn?

Nhưng nếu bây giờ các bạn chạy ứng dụng này bằng command line, với tập tin JAR, bằng cách: mở Terminal trên macOS hoặc Linux hoặc Console trên Window, đi đến thư mục project, chạy command:

sau đó thì vào thư mục tartget/quarkus-app, chạy câu lệnh:

các bạn sẽ thấy kết quả như sau:

Như các bạn thấy, thời gian start ứng dụng bây giờ còn ít hơn cả một nửa lúc chúng ta chạy ở development mode trong IntelliJ, chỉ còn 0.779s.

Nếu các bạn build ứng dụng này với profile native sử dụng GraalVM với native-image component, với command:

thì các bạn có thể chạy trực tiếp ứng dụng sử dụng tập tin quarkus-jakartaee-mvc-1.0.0-SNAPSHOT-runner trong thư mục target của project.

Thời gian start ứng dụng sẽ làm các bạn kinh ngạc như sau:

Nhanh lắm các bạn, chỉ cần nhấn execute command là ứng dụng start liền. Như các bạn thấy, chỉ mất 0.014s là ứng dụng ví dụ của chúng ta đã up và running rồi. Đây cũng chính là thời gian mà ứng dụng có thể up và running trên môi trường Cloud đó các bạn.

Quá ổn phải không các bạn?

One thought on “Giới thiệu về Quarkus

  1. Ngoài startup time ra thì quarkus có gì ưu việt hơn ko bác?
    Dù là deploy lên cloud vẫn luôn có health check các thứ để hỗ trợ rolling deploy mà

Add Comment