2011-08-25 33 views
20

Tôi đang phát triển một ứng dụng SMS trong Java. Khách hàng của tôi gửi các truy vấn qua SMS sẽ được chuyển tiếp đến máy chủ của tôi dưới dạng các yêu cầu http qua SMS Gateway. Bây giờ ứng dụng của tôi xử lý các yêu cầu và gửi trả lời lại cho khách hàng thông qua SMS Gateway. Tối đa chỉ 300 ký tự được gửi dưới dạng phản hồi. Tôi đang mong đợi lưu lượng truy cập rất cao (2000 yêu cầu/giây). Tôi muốn lưu trữ ứng dụng của mình với một số công ty webhosting (xem xét mochahost). Những yếu tố nào tôi nên cân nhắc trước khi lưu trữ (interms RAM, CPU, vv) và cũng có những gì sẽ là những tắc nghẽn lớn? Máy chủ tomcat chuyên dụng có thể xử lý lưu lượng truy cập cao như vậy nếu được điều chỉnh đúng không? Đề xuất của bạn là gì?cách xử lý 2000+ yêu cầu/giây trên tomcat?

Không có tương tác cơ sở dữ liệu (Tôi chỉ sử dụng bộ nhớ heap Java). Tôi chạy một thử nghiệm với JMeter (100 yêu cầu/giây). Sử dụng bộ nhớ heap của tôi là 35MB và thời gian phản hồi trung bình là 532ms. Và tôi cũng không sử dụng bất kỳ biến phiên nào.

+0

Bạn cần thực hiện loại xử lý nào cho mỗi yêu cầu? Bất kỳ tương tác cơ sở dữ liệu nào? –

+0

@Mike Không có tương tác cơ sở dữ liệu nào có liên quan gì cả. Tôi chỉ sử dụng bộ nhớ java. – ravi

+0

Tôi đã chạy thử nghiệm với jmeter (100 yêu cầu/giây) .Lưu trữ bộ nhớ heap của tôi là 35MB và thời gian phản hồi trung bình là 532ms. – ravi

Trả lời

23

Rất khó để trả lời câu hỏi của bạn mà không biết bạn đang làm gì đang thực hiện trong servlet của mình. Nhưng câu trả lời ngắn gọn là nó thực sự không liên quan gì đến tomcat.

Hiện tại chúng tôi sử dụng Dell R410s (lõi tứ kép, 32G ram) cho các máy chủ Tomcat của chúng tôi. Đối với một dịch vụ REST nói chuyện với một cụm membase ở mặt sau, chúng ta có thể dễ dàng xử lý ~ 15k req/second trên một máy chủ duy nhất (điều này đang sử dụng triển khai Jersey JAX-RS). Chúng tôi hiện có 4 trong số này sau một cân bằng tải F5. Mỗi yêu cầu này được phục vụ trong khoảng 10ms trung bình.

Điều thực sự xảy ra là đồng thời; Mất bao lâu để servlet của bạn làm những gì cần làm với một yêu cầu. Bạn đã có một thread đi cho mỗi yêu cầu đồng thời, vì vậy nếu bạn đang cố gắng để 2000 req/sec và một yêu cầu duy nhất mất 500ms để xử lý ... bạn sẽ cần một chút phần cứng. Vấn đề không phải là tomcat, mà là một trong những tài nguyên có sẵn cho servlet của bạn.

+1

Tôi đã bắt đầu chủ đề này về bài đăng của bạn: http://stackoverflow.com/questions/7970803/tomcat-doing-15k-req-second-on-a-single-server-using-jersey-jax-rs hy vọng bạn có thể kêu vang in. – codecompleting

+0

bạn đã chỉnh sửa bất cứ điều gì ở cấp độ os cho TIME_WAIT? những gì về cài đặt cấu hình tomcat cho: connectionTimeout, keepAliveTimeout, maxKeepAliveRequests. Có một ứng dụng tương tự với yêu cầu 2K mỗi giây nhưng tomcat chậm chạp sau một thời gian. – codecompleting

+0

Tôi thích câu trả lời này – thonnor

1

Dường như bạn có thể phải triển khai phương pháp cân bằng tải cụm/tải. Hãy xem this để biết ví dụ.

6

Một máy chủ Tomcat duy nhất có cài đặt mặc định trên phần cứng khiêm tốn sẽ dễ dàng xử lý yêu cầu 2k/giây, giả sử nó không có quá nhiều việc phải làm theo yêu cầu. Nếu việc xử lý một yêu cầu mất 500+ ms, có thể bạn sẽ cần phải tăng số lượng luồng trong nhóm luồng và bạn có thể bắt đầu đẩy các giới hạn. Cách khác, nếu bạn có thể giảm bớt một số công việc đó cho một số chủ đề khác, nó sẽ tăng tốc thời gian đáp ứng và bạn có thể giữ lại 200 chủ đề mặc định. Sau đó, nó chỉ là một câu hỏi liệu thread công nhân của bạn (s) có thể theo kịp với các yêu cầu đến. Điều đó sẽ phụ thuộc vào việc tải của bạn là không đổi hoặc bursty và bao nhiêu chậm trễ bạn có thể chấp nhận trong chế biến. Điều này thậm chí không giải quyết được HA, DR và ​​thời gian chết của bạn là bao nhiêu. Đó là một hành động cân bằng lớn, và có quá nhiều biến để chỉ đưa ra một câu trả lời được cắt khô.

Các vấn đề liên quan