Mục lục
Spring boot cho phép chúng ta xây dựng các ứng dụng web dễ dàng và có thể sử dụng 3 embedded servlet container phổ biến nhất hiện có: Tomcat, Undertow, và Jetty.
Trong bài viết này chúng ta sẽ tìm hiểu cách sử dụng 3 embedded servlet container trong một project spring boot.
Dependencies
Trong một ứng dụng web sử dụng Spring boot chúng ta luôn cần phải khai báo spring-boot-starter-web dependency trong file pom.xml. Ngoài ra spring-boot-starter-parent là dependency là dependency mặc định trong các project Spring boot.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.0</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
Tomcat
Đối với Tomcat chúng ta không cần thêm bất kỳ một dependency nào nữa vì mặc định nó đã được chỉ định trong spring-boot-starter-web.
Jetty
Để sử dụng Jetty thay vì Tomcat như mặc định chúng ta cần loại bỏ spring-boot-starter-tomcat ra khỏi spring-boot-starter-web và thêm pring-boot-starter-jetty dependency vào file pom.xml.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
Undertow
Tương tự Jetty, chúng ta sẽ có spring-boot-starter-undertow dependency để sử dụng.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
So sánh performance giữa Tomcat, Jetty và Undertow
Kết quả benchmark cho thấy Undertow cho hiệu năng tốt nhất kế đến là Jetty và kém nhất là Tomcat.
Metric | Tomcat | Jetty | Undertow |
---|---|---|---|
jvm.memory.used (MB) | 168 | 155 | 164 |
jvm.classes.loaded | 9869 | 9784 | 9787 |
jvm.threads.live | 25 | 17 | 19 |
Requests per second | 1542 | 1627 | 1650 |
Average time per request (ms) | 6.483 | 6.148 | 6.059 |
Lưu ý là các chỉ số này chỉ được thực hiện trên các ứng dụng đơn giản, đối với các ứng dụng phức tạp có thể kết quả này sẽ khác.
Tóm lược
Như vậy là chúng ta đã so sánh giữa 3 embedded servlet container phổ biến nhất hiện có: Tomcat, Undertow, và Jetty. Trong đó Undertow có hiệu năng tốt nhất. Tuy nhiên Tomcat vẫn là container phổ biến nhất và được sử dụng mặc định bởi Spring boot. Nếu không có quá nhiều nhu cầu về hiệu xuất hoặc đang trong quá trình tìm hiểu về Spring boot thì các bạn nên bỏ qua vấn đề này.