it-swarm-vi.com

Những vấn đề tiềm năng nào tôi cần phải nhận thức được trong một môi trường nhiều máy chủ / cụm?

Tôi đã làm việc trên một trang web với một khách hàng một thời gian và bản thân trang web đã phát triển ồ ạt. Chúng tôi hiện đang ở giai đoạn mà một máy duy nhất chúng tôi đang lưu trữ trang web đang vật lộn để theo kịp các yêu cầu và chúng tôi đã tối ưu hóa chính trang web đó theo khả năng của chúng tôi (bộ nhớ đệm, v.v.).

Bây giờ chúng tôi đang ở giai đoạn chúng tôi cần thêm một máy chủ khác để tăng thêm sức căng dẫn đến câu hỏi của tôi - những cạm bẫy và cảnh báo tiềm năng nào tôi cần phải biết hoặc kiểm tra trang web khi chuyển đến trang trại web hoặc lưu trữ cụm môi trường?

3
Wolfwyrd

Có một số cảnh báo có thể xảy ra:

Phiên

Nếu các phiên được lưu trữ phía máy chủ, (tức là PHP), cả hai máy chủ sẽ cần quyền truy cập vào đường dẫn lưu trữ phiên chia sẻ. Mặt khác, bạn sẽ mất phiên vì bộ cân bằng tải gửi yêu cầu từ máy chủ này sang máy chủ khác hoặc có thể (gasp) có một người dùng với hai phiên duy nhất. Điều này có thể gây khó chịu đặc biệt với AJAX. Các phiên 'dính' cũng có thể có thể, tùy thuộc vào bộ cân bằng tải của bạn.

Tệp tạm thời

Cả hai máy chủ nên chia sẻ cùng một thư mục/tmp, nếu thực sự bạn sử dụng bất kỳ loại tệp tạm thời nào trong khi làm việc để phục vụ các yêu cầu. Đây có thể là một kho lưu trữ tạm thời được nén để tải xuống, DB tệp phẳng theo dõi bất cứ thứ gì, bất cứ thứ gì.

Khóa SQLite

Nếu bạn sử dụng SQLite3, bạn có thể nhận thấy một số quirks chưa từng xuất hiện trước đó, đặc biệt nếu bạn đang sử dụng một cái gì đó như NFS để chia sẻ các tệp cơ sở dữ liệu giữa các máy chủ. NFS chậm với điều này, vì vậy tôi khuyên bạn nên sử dụng cái gì đó khác. Các hệ thống tệp phân tán như Luster rất dễ thiết lập hoặc bạn có thể sử dụng GFS/OCFS2.

SSL

Bạn có thể muốn bộ cân bằng tải là thứ xử lý bắt tay SSL, sau đó thực hiện yêu cầu đến các máy chủ phía sau bằng bất kỳ chứng chỉ tự ký cũ nào.

Một số lưu ý chung:

  • Như đã lưu ý, sử dụng hệ thống tệp hiệu suất cao để chia sẻ thư mục. Tất cả các tệp được chia sẻ phải nằm trên bộ lưu trữ mạng, không phải là một trong các máy chủ web. Mặt khác, nếu một người đi xuống, cả hai đều vô dụng, loại đánh bại mục đích.

  • Nếu trang web sử dụng RDBMS, bạn có hai tùy chọn. Chạy nó trên cả hai nút và sử dụng đồng bộ chủ-chủ hoặc đặt máy chủ DB trên chính nhà của nó. Tôi khuyên bạn nên thứ hai vì điều đó mang lại cho máy chủ web của bạn nhiều phòng khuỷu tay hơn để hoạt động.

  • Cân bằng tải cũng cần dự phòng.

Trong hầu hết các trường hợp, bạn có thể đi từ một máy chủ đến một trang trại cân bằng tải mà không có nhiều thay đổi đối với trang web/ứng dụng thực tế, nhưng bạn sẽ cần đảm bảo rằng tất cả các nút có thể đọc và ghi vào cùng một tệp. Điều này có thể yêu cầu bạn thêm một số logic để khóa trong chính ứng dụng.

1
Tim Post

Trạng thái phiên (nếu đó là một vấn đề) là một vấn đề tiềm năng. Hầu hết các thiết bị cân bằng tải có thể sử dụng các phiên dính, nghĩa là người dùng kết thúc trên SERVER1 để bắt đầu sẽ vẫn ở trên SERVER1, thường thông qua việc sử dụng cookie được lưu trữ trong bộ nhớ trình duyệt. Nhắc nhở duy nhất với điều này là khi SERVER1 ngoại tuyến vì bất kỳ lý do gì, người dùng đó sẽ phải đăng nhập lại trên một máy chủ khác.

Tôi đã bắt đầu bỏ qua điều này trên các ứng dụng của mình (chúng là ứng dụng CF) bằng cách chia sẻ các phiên trong cụm máy chủ. Vì vậy, một máy đi xuống sẽ không ảnh hưởng đến trải nghiệm người dùng.

Thách thức duy nhất khác mà tôi gặp phải là sao chép chính xác nội dung cho tất cả các máy chủ trong trang trại. Có phần mềm ngoài đó để thực hiện việc này (robocopy, Fling từ phần mềm NCH là hai phần mềm tôi đã sử dụng), nhưng tôi vẫn có những trường hợp đồng bộ hóa không hoạt động 100%.

0
Milner

Ứng dụng của bạn có quan tâm đến nhà nước không? Nếu người dùng có một yêu cầu được phục vụ bởi một máy và sau đó một yêu cầu khác được phục vụ, điều đó có quan trọng không? Nếu bạn cần duy trì một số dạng trạng thái giữa các yêu cầu, thì mọi thứ sẽ phức tạp hơn và có nhiều cách khác nhau để giải quyết vấn đề.

Nếu bạn không cần phải lo lắng về trạng thái, thì hãy xây dựng trang web của bạn thật tốt và mọi thứ sẽ tương đối ổn với proxy và một vài máy chủ phụ trợ.

Nếu bạn cần duy trì trạng thái, có nhiều cách khác nhau để tạo phiên dính thông qua proxy để cùng một máy chủ phụ trợ xử lý tất cả các yêu cầu từ một người dùng, nhưng cũng có rất nhiều điều khiến các phiên đó khó giữ .

Bạn cũng có thể duy trì trạng thái trong một phương tiện chung trên phụ trợ, vì vậy mỗi máy chủ sẽ tải cùng một trạng thái cho cùng một người dùng. Bạn có thể làm điều này với cơ sở dữ liệu (có thể quá chậm) hoặc đại loại như memcached .

Bạn có đang mở rộng số lượng máy chủ cơ sở dữ liệu không? Điều đó sẽ mang lại một loạt các vấn đề phải lo lắng.

Một số vấn đề về phiên được thảo luận trong Podcast Stack Overflow Số 6

Để kiểm tra, hãy đảm bảo bạn nhấn mạnh vào cụm kiểm tra tương tự để bạn có thể xem các yêu cầu của mình thực hiện như thế nào khi chúng được chuyển hướng qua nhiều máy chủ, bởi vì nhiều yêu cầu từ cùng một máy khách đến các phụ trợ khác nhau là nơi bạn có thể gặp sự cố, vì vậy hãy chắc chắn một cái gì đó trong kế hoạch kiểm tra của bạn gây ra điều đó xảy ra.

Bạn cũng có thể muốn đọc về Stack Overflow's cấu hình mạng

0
danivovich