Tăng hiệu năng ứng dụng Java Spring trên Tomcat

Mình có làm một ứng dụng nhỏ bằng Spring MVC và chạy trên Tomcat 8.
Server là VPS Ubuntu Server với 2GB RAM.

Ứng dụng Spring của mình chỉ có một endpoint là webservice và hiện tại đang chịu tải ~20 requests/sec. Database mình sử dụng là Mariadb. Ứng dụng có đọc, thêm, xóa dữ liệu liên tục ở dữ liệu phía database.

Hiện tại các request đến server mình chưa biết cách xử lý nó bằng queue hoặc một kỹ thuật nâng cao nào. Mình mở duy nhất 1 connection đến database và để mysql tự xử lý các tranh chấp trong đó cho nên vẫn còn có khá nhiều sai sót về dữ liệu do không được quản lý đúng cách.

Vậy nếu mình muốn server của mình có thể chịu tải ~100 req/s với môi trường như trên liệu có khả thi không?

  • Mình phải cấu hình Tomcat như thế nào để có hiệu năng tốt nhất?
  • Mình cần sử dụng kỹ thuật gì của Spring để xử lý lượng request này tối ưu nhất (Mình mới chỉ là Beginner Spring)?

Mong những người có kinh nghiệm giúp đỡ. Mình xin cảm ơn! :smiley:

Phương thức kết nối là gì thế? Http à ?

Vê RAM thì thì nó không là yếu tố duy nhất quyết định số lượng request tải, mà là các ESTABLISHED connection, nếu quá cao cũng ảnh hưởng tới RAM, CPU cao thì RAM có 100GB cũng không giải quyết được, DISK I/O cũng là một vấn đề. Nhưng nếu chỉ làm các tác vụ nhỏ thì 2GB RAm là dư sức, tính ra bằng ngàn request vẫn còn được.

Tiếp theo là cách tổ chức dữ liệu, các dữ liệu quan hệ chồng chéo phức tạp cũng gây lỗi, hoặc Query đòi hỏi phải vào trước nhưng lại xử lý sau các Query khác cũng là yếu tố gây lỗi. Vấn đề này có thể giải bằng transaction.

Nữa là chỉ 1 connection tới DB, thì sẽ bị bài toán nghẽn cổ chai, khi đầu vào quá cao, nhưng đầu ra lại quá ít, đầu voi đít chuột. Có thể think tới connection pool, tránh việc khỏi tạo connection quá nhiều, thay vì vậy, dùng xong trả về pool, vì việc khởi tạo rất tốn resource.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?