2011-09-22 35 views
6

Tôi đã đọc rất nhiều bài đăng trên đây và lướt web, nhưng có lẽ tôi không hỏi đúng câu hỏi. Tôi biết rằng Redis hiện là Master/slave cho đến khi Cluster có sẵn. Tuy nhiên, tôi đã tự hỏi nếu ai đó có thể cho tôi biết làm thế nào tôi sẽ muốn cấu hình Redis logistically để đáp ứng nhu cầu của tôi (hoặc nếu nó không phải là công cụ thích hợp).Redis bắt chước MASTER/MASTER? hoặc cái gì khác?

Scenerio:

chúng tôi có 2 trang web ở đầu đối diện của Hoa Kỳ. Chúng tôi muốn khách hàng có thể viết tại mỗi trang web với số lượng lớn. Sau đó, chúng tôi muốn mỗi khách hàng có thể thực hiện đọc tại trang web của họ. Tuy nhiên, chúng tôi muốn các dữ liệu có sẵn từ một viết tại trang web chị em trong < 50ms. Do chúng tôi có nhiều băng thông. Có cách nào để cấu hình redis để đáp ứng nhu cầu của chúng tôi? kích thước tối đa của chúng tôi viết sẽ là theo thứ tự 5k thường ít hơn nhiều. Điểm chính là làm thế nào tôi có thể có 2 bậc thầy đang đồng bộ với nhau ngay cả khi nó không được hỗ trợ theo mặc định.

Trả lời

11

Việc nắm bắt với câu trả lời của Tom là bạn không chạy bất kỳ loại cụm, bạn chỉ bằng văn bản cho hai máy chủ. Đây là vấn đề nếu bạn muốn đảm bảo tính nhất quán giữa chúng. Hãy xem xét điều gì sẽ xảy ra khi máy khách của bạn không ghi được vào máy chủ từ xa. Bạn có hoàn tác viết thư cho địa phương không? Điều gì sẽ xảy ra với ứng dụng khi bạn không thể ghi vào máy chủ từ xa? Điều gì xảy ra khi bạn không thể đọc từ địa phương?

Đợt thứ hai là vấn đề vật lý cơ bản mà Joshua đặt ra. Đối với một chuyến đi vòng bạn đang nói một lý thuyết tối thiểu là 38ms để lại một thời gian xử lý tối đa lý thuyết trên cả hai đầu (của ba hệ thống) của 12ms. Tôi muốn nói rằng kỳ vọng là một chút quá nhiều và băng thông không có gì để làm với độ trễ trong trường hợp này. Bạn có thể có một ống 10GB và những thời gian đó vẫn còn tồn tại. Điều đó nói rằng, chuyển 5k trên khắp lục địa trong 12ms cũng đang yêu cầu rất nhiều. Bạn có chắc là bạn đã có khả năng kết nối để truyền 5k dữ liệu trong 50ms, hãy để một mình 12? Tôi đã sử dụng các mạch không sử dụng riêng trên khắp lục địa và thấy thời gian ping vượt quá 50ms - và ping không truyền 5k dữ liệu.

Làm cách nào để giữ cho hai máy chủ không đồng bộ hóa đồng bộ hóa? Nếu bạn thực sự cần độ trễ phụ 50ms trên toàn lục địa, trường hợp tốt nhất lý thuyết trên có nghĩa là bạn có 12ms để chạy các thuật toán đồng bộ hóa. Ngay cả một truy vấn để kiểm tra dữ liệu trên máy chủ khác có nghĩa là bạn đang ở bên ngoài cửa sổ 50ms. Nếu dữ liệu không đồng bộ, bạn sẽ sửa chữa như thế nào? Với thời gian trên, tôi không thấy cách có thể đồng bộ hóa dưới 50ms.

Tôi khuyên bạn nên xem lại các yêu cầu thiết kế cơ bản. Cụ thể, lý do tại sao yêu cầu này? Yêu cầu về độ trễ của chuyến đi khứ hồi 50ms trên khắp lục địa thường là dấu hiệu của việc tiếp thị hoặc thiếu sự chú ý đến từng chi tiết. Tôi muốn cược rằng nếu bạn phân tích các yêu cầu bạn sẽ thấy rằng cửa sổ 50ms này là quá mức và không cần thiết. Nếu không, và đồng bộ hóa dữ liệu thực sự quan trọng (có thể), hơn ai đó sẽ cần phải xác định xem nỗ lực đáng kể để viết mã đồng bộ có đáng hay thậm chí có thể giữ trong cửa sổ 50ms. Đồng bộ hóa dữ liệu độ trễ phụ 50 độ liên lục địa không phải là vấn đề đơn giản.

Nếu bạn không cần đồng bộ hóa, tại sao không chỉ chạy một máy chủ?Bạn có thể sử dụng một nô lệ ở phía bên kia lục địa để phục vụ mục đích duy nhất. Tất nhiên, điều đó vẫn có nghĩa là trường hợp tốt nhất bạn có 12ms để lấy dữ liệu ở đó và quay lại. Tôi sẽ không tính vào các hoạt động chuyến đi khứ hồi + độ trễ 502 + 50 độ + 5k/10k chuyển dữ liệu trên khắp lục địa.

+1

Tôi muốn cảm ơn bạn đã dành thời gian để viết tất cả những điều đó. Tôi nghĩ rằng câu hỏi đã được nêu ra có thể được thực hiện để chỉ hỏi một điều gì đó không thể (không chắc chắn) để lấy đi ý tưởng sử dụng một cái gì đó mới. Vấn đề là chúng tôi có nhiều địa điểm và muốn người dùng viết thư cho một bậc thầy gần nhất với họ, sau đó có một quy trình để đảm bảo rằng có thời gian thực (càng nhanh càng tốt) nhất quán giữa cả hai trang. Bạn có gợi ý nào có thể phù hợp với kịch bản này không? – DvideBy0

+1

Tôi sẽ hỏi đó là khía cạnh quan trọng hơn, viết gần bên hoặc đọc gần bên. Tốc độ nhanh nhất có thể sẽ là nô lệ đơn và tổng thể đọc cục bộ. Bạn có đọc chuyên sâu hay viết nhiều hay khoảng 50-50? Nếu bạn có các trang trung tâm dữ liệu thì tôi sẽ đặt một bài kiểm tra chính và chạy thử nghiệm. Đa chủ, đặc biệt là lục địa xa đơn giản. May mắn thay, trong hầu hết các trường hợp, nó không thực sự cần thiết. Tôi sẽ thiết lập một bộ kiểm tra và khám phá nó để xác nhận hợp lệ. Đừng tập trung vào đa phương tiện nếu có một cách đơn giản hơn. Tôi nghi ngờ 1Master và nô lệ phân phối sẽ làm việc cho bạn. –

2

Điều này có lẽ được xử lý tốt nhất như là một phần của ứng dụng khách - chỉ cần có ứng dụng khách ghi vào cả hai nút. Viết chung thường không cần phải đồng bộ, vì vậy việc gửi lệnh bổ sung không ảnh hưởng đến hiệu năng bạn nhận được từ việc có nút cục bộ.

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