2013-07-15 39 views
5

Chúng tôi có một ứng dụng cần duy trì trạng thái để một số đối tượng có chứa dữ liệu (có thể rất nhiều) có thể được một khách hàng (trình duyệt) thẩm vấn trong tương tác 'đàm thoại'. Sẽ không hiệu quả khi tải lại dữ liệu với mỗi yêu cầu.Tôi có nên sử dụng Spring Session Scoped beans hoặc cache chẳng hạn như ehcache không?

Chúng tôi sử dụng hạt đậu theo mùa và phiên để duy trì một số dữ liệu được kiểm soát phiên. Tuy nhiên những hạt cà phê mới này sẽ lớn hơn.

Đây có phải là cách sử dụng thích hợp các hạt cà phê có phiên hoặc bộ đệm (ehcache) có phù hợp hơn không?

Chúng tôi không muốn sử dụng công nghệ lưu bộ nhớ đệm trừ khi chúng tôi thực sự phải thực hiện.

Yếu tố khác là ứng dụng sẽ cần phải được triển khai trong một cụm. Trong trường hợp nào thì phiên scoped bean sẽ được nhân rộng bởi bản sao phiên của máy chủ ứng dụng hoặc, sẽ hiệu quả hơn khi sử dụng ehcache (mà tôi tin có thể được phân phối trong một cụm)?

Bất kỳ hướng dẫn nào được đánh giá cao.

+0

Bạn có thể làm rõ ý của mình với "máy chủ ứng dụng" hay không. Nó có phải là một máy chủ đầy đủ, ví dụ như. JBoss, hoặc nó có thể là Tomcat không? – davidcyp

Trả lời

1

Vài suy nghĩ về vấn đề này (từ chối trách nhiệm: Tôi làm việc cho đất nung/ehcache ... để giữ cho rằng trong tâm trí ... nhưng vẫn cố tỏ ra không thiên vị ở đây):

1 - Có bất kỳ dữ liệu dư thừa trong mỗi phiên? Bất kỳ thứ gì có thể được chia sẻ qua các phiên? Nếu có, +1 cho ehcache để lưu trữ nội dung được chia sẻ (vì ehcache được tối ưu hóa cho tương tranh nặng)

2 - Các đối tượng phiên của bạn lớn đến mức nào? Và bạn đang mong đợi bao nhiêu người dùng đồng thời trên cơ sở trạng thái ổn định? (nói cách khác, bạn sẽ phải dành bao nhiêu bộ nhớ để lưu trữ phiên trên máy chủ ứng dụng của mình?)

Nếu dấu chân phiên không lớn và có thể vừa vặn trong đống của bạn mà không có vấn đề GC, thì sử dụng phiên nên là một giải pháp tốt.

Nhưng lớn hơn nó nhận được, lớn hơn đống java của bạn sẽ cần phải ... và bạn càng phải sử dụng thủ thuật voodoo để giữ bộ sưu tập rác và thời gian tạm dừng gc trong kiểm tra. Bằng cách sử dụng ehcache, bạn có thể lưu trữ một số đối tượng trung tâm mà nhiều phiên có thể truy cập ... do đó củng cố dấu chân bộ nhớ của bạn (giống như 1) Ngoài ra, bằng cách sử dụng phần mở rộng doanh nghiệp cho ehcache (BigMemory = http://terracotta.org/products/bigmemory), bạn có thể bỏ qua Heap hạn chế và lưu trữ dữ liệu của bạn off-heap (nhiều khi cần - 10s, 100s GB hoặc hơn). Với điều đó, kích thước của các đối tượng cần có trong bộ nhớ trở nên không liên quan (miễn là bạn có thể thêm RAM vào máy chủ của mình)

3 - Để sao chép phiên, máy chủ ứng dụng như JBOSS, Weblogic, hỗ trợ Websphere nó. Một lần nữa, đó là vấn đề của kích thước phiên một lần nữa (bao nhiêu dữ liệu sẽ cần phải được nhân rộng trên dây). Nếu các đối tượng phiên của bạn là lớn, và bạn có nhiều đối tượng trong số đó, sẽ có rất nhiều lưu lượng mạng trên cụm của bạn ... có thể hoặc không thể hoạt động tốt. Có đối tượng lõi trong lớp EhCache được phân phối tối ưu để lưu trữ dữ liệu, trong khi vẫn giữ phiên của bạn ở mức tối thiểu (tức là thông tin đăng nhập/xác thực) chắc chắn sẽ tăng cường cơ chế sao chép phiên đó theo ý kiến ​​của tôi.

Hy vọng điều đó sẽ hữu ích.

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