2008-09-22 21 views
7

Tôi đang đánh giá Terracotta để giúp tôi mở rộng ứng dụng hiện đang được giới hạn RAM. Nó là một bộ lọc hợp tác và lưu trữ khoảng 2 kilobyte dữ liệu cho mỗi người dùng. Tôi muốn sử dụng EC2 của Amazon, điều đó có nghĩa là tôi bị giới hạn ở mức 14GB RAM, điều này mang lại cho tôi hiệu quả cao hơn cho mỗi máy chủ trên 7 triệu người dùng. Tôi cần có khả năng mở rộng quy mô này.Tôi có thể sử dụng Terracotta để mở rộng ứng dụng chuyên sâu RAM không?

Dựa trên đọc của tôi cho đến nay tôi thu thập rằng Terracotta có thể có một cụm đống lớn hơn RAM có sẵn trên mỗi máy chủ. Nó sẽ có khả năng để có một cụm đống hiệu quả của 30GB hoặc nhiều hơn, nơi mà mỗi máy chủ chỉ hỗ trợ 14GB?

Dữ liệu cho mỗi người dùng (phần lớn trong số đó là mảng nổi) thay đổi rất thường xuyên, có khả năng hàng trăm nghìn lần mỗi phút. Nó không phải là cần thiết cho mỗi một trong những thay đổi này sẽ được đồng bộ hóa với các nút khác trong cụm thời điểm chúng xảy ra. Có thể chỉ đồng bộ hóa một số trường đối tượng định kỳ không?

+0

Cụm redis bị hỏng có thể là cách tiếp cận đơn giản hơn, có thể đã hoạt động trong trường hợp này không? – cobbzilla

Trả lời

4

Tôi muốn nói câu trả lời là đủ điều kiện cho điều này. Terracotta cho phép bạn làm việc với các cụm đống lớn hơn kích thước của một JVM duy nhất mặc dù đó không phải là trường hợp sử dụng phổ biến nhất.

Bạn vẫn cần ghi nhớ a) kích thước bộ làm việc và b) lượng lưu lượng dữ liệu. Đối với a), có một số bộ dữ liệu phải có trong bộ nhớ để thực hiện công việc tại bất kỳ thời điểm nào và nếu kích thước bộ làm việc đó> kích thước heap, hiệu suất rõ ràng sẽ bị ảnh hưởng. Đối với b), mỗi phần dữ liệu được thêm vào/cập nhật trong nhóm phân cụm phải được gửi đến máy chủ. Đất nung là tốt nhất khi bạn đang thay đổi các lĩnh vực hạt mịn trong đồ thị pojo. Làm việc với các mảng lớn không tận dụng tối đa khả năng của Terracotta (không phải để nói rằng đôi khi người ta không sử dụng nó theo cách đó).

Nếu bạn đang tạo nhiều rác, thì người quản lý bộ nhớ Terracotta và bộ thu gom rác phân tán phải có khả năng theo kịp điều đó. Thật khó để nói mà không thử nó cho dù khối lượng dữ liệu của bạn vượt quá băng thông có sẵn ở đó.

Ứng dụng của bạn sẽ được hưởng lợi vô cùng nếu bạn chạy nhiều máy chủ và dữ liệu được phân vùng theo máy chủ hoặc có một số địa phương tham chiếu. Trong trường hợp đó, bạn chỉ cần dữ liệu cho một phân vùng của máy chủ trong heap và phần còn lại không cần phải bị lỗi trong bộ nhớ. Tất nhiên nó sẽ bị lỗi nếu cần thiết cho chuyển đổi dự phòng/tính khả dụng nếu các máy chủ khác bị hỏng. Điều này có nghĩa là trong trường hợp dữ liệu được phân đoạn, bạn không phát sóng tới tất cả các nút, chỉ gửi các giao dịch đến máy chủ.

Từ quan điểm số, có thể lập chỉ mục 30GB dữ liệu, do đó không gần với bất kỳ giới hạn cứng nào.

+0

Theo dõi nhanh: Tôi đã nghe nói rằng nếu bạn sử dụng HashMap với Terracotta, thì các giá trị có thể được phân phối, nhưng các phím sẽ được nhân đôi ở mọi nơi. Điều này có đúng không? Một bộ sưu tập Bản đồ khác có hoạt động khác nhau không? – sanity

+0

Chính xác. HashMap, ConcurrentHashMap, vv sẽ duy trì một bộ khóa đầy đủ trên tất cả các nút. Nếu chúng tôi không làm điều này, rất khó để biết liệu sự vắng mặt của một khóa là do một khóa không phải là địa phương hoặc một khóa thiếu. Một lựa chọn phổ biến là xây dựng Maps of Maps để cho phép nhiều dữ liệu được phân trang hơn. –

+0

Tôi nên chỉ ra rằng đó là một chi tiết thực hiện đó là điểm trong thời gian. Alex là đúng nó dễ dàng hơn để làm theo cách này nhưng làm cho keyset ảo không phải là không thể nó chỉ làm việc;) –