Tôi hiện đang thiết lập một hệ thống tương tự (ở cấp độ chuyên nghiệp) và đây là thiết kế tôi đã chọn:
- Hai bộ cân bằng Nginx (cả hoạt động, cả chuyển đổi dự phòng cho cái kia, cân bằng với vòng tròn DNS)
- Hai cơ sở dữ liệu MySQL trong chế độ sao chép chính chủ
- Hai trường hợp Tomcat như một cụm tomcat
- Hai phiên bản Memcached cho cả bộ nhớ đệm và chia sẻ trạng thái phiên cho cụm Tomcat
Điều này sẽ đạt được một giải pháp dự phòng, có tính sẵn sàng cao, có thể mở rộng.
Các bộ cân bằng tải (trên phần cứng tốt) sẽ dễ dàng cân bằng một dòng 1gbit bão hòa mỗi dòng. Đây cũng là một nơi tuyệt vời để giảm tải SSL.
Bạn có thể lưu thông tin phiên của bạn trong memcached. Trong trường hợp một trường hợp tomcat không thành công, một phiên bản tomcat khác có thể truy xuất thông tin phiên có liên quan và khách hàng sẽ không nhận thấy điều gì. Đừng quên kết hợp điều này với các phiên dính quá. (Để giảm lưu lượng mạng)
Phân cụm Tomcat cũng có một tùy chọn để chia sẻ thông tin phiên giữa các cụm trong thời gian thực mà không cần sử dụng memcached. Mặc dù tôi nghĩ hiệu suất là khôn ngoan, sử dụng Memcached sẽ tốt hơn.
Nếu bạn cần thêm năng lượng trong bất kỳ ứng dụng nào sau đây:
- Nginx: Thêm nhiều bộ cân bằng tải hơn, mặc dù tôi không nghĩ rằng đây sẽ là nút cổ chai rất sớm.
- Tomcat: bạn có thể dễ dàng tăng kích thước của cụm Tomcat hoặc thêm nhiều cụm
- Mysql: Thêm một số nô lệ chỉ đọc hoặc tăng kích thước cụm (tùy thuộc vào ứng dụng của bạn, nhưng vì bạn đã viết một ứng dụng dựa trên REST, nên điều này không thành vấn đề)
- Tôi tin rằng Memcached: Thêm nhiều nút hơn, quy mô Memcached khá tốt.
Tôi không biết ứng dụng của bạn được xây dựng như thế nào và nguồn tài nguyên lớn là gì, nhưng nếu bạn thấy tải cơ sở dữ liệu cao (trong quá trình tải của bạn!), Việc thêm bộ đệm giữa ứng dụng và cơ sở dữ liệu chắc chắn có thể cải thiện hiệu năng rất nhiều. Nhưng đừng quên rằng không phải mọi thứ đều có thể lưu trong bộ nhớ cache, nếu các truy vấn của bạn luôn khác nhau, bộ nhớ đệm sẽ không giúp ích (nhiều)
Lời khuyên của tôi là tải xuống VMware Workbench (hoặc phần mềm ảo hóa similair) và cố gắng tạo một thiết lập đơn giản. Không cân bằng tải hoặc phân cụm, chỉ là những điều cơ bản và làm việc từ đó. Từng người một thêm nhiều tính năng (cân bằng, lưu trữ, phân cụm, v.v.) và đảm bảo thực hiện một số nghiên cứu về từng chủ đề, vì vậy bạn sẽ biết bạn đã chọn đúng.
Nếu bạn tiếp tục chạy các bài kiểm tra hiệu suất tương tự trong quá trình này, bạn có thể tự mình xem nếu sử dụng X tốt hơn so với sử dụng Y trong thiết lập của bạn, hoặc bộ nhớ đệm tác động sẽ có gì, v.v.
Cuối cùng, một thiết lập như thế này thực sự phụ thuộc vào yêu cầu của ứng dụng và ứng dụng khách của bạn, mọi thứ có thể được thực hiện theo nhiều cách khác nhau, mỗi cách đều có điểm mạnh và điểm yếu riêng.
Còn câu hỏi nào nữa không?
Chúc may mắn!
Wesley