2013-01-21 25 views
7

Chúng tôi chưa có thiết lập tích hợp liên tục (chưa). Nhưng muốn triển khai rất thường xuyên. Mỗi ngày một lần.Triển khai ứng dụng Django mà không gián đoạn dịch vụ/không có thời gian ngừng hoạt động

Chúng tôi có một ứng dụng Django khá chuẩn với một máy chủ Postgres riêng biệt. Chúng tôi sử dụng máy ảo cho thuê bình thường (KHÔNG có Amazon hoặc Rackspace).

Làm cách nào để giảm thiểu thời gian ngừng hoạt động của ứng dụng? Tốt nhất là để không thời gian chết. Chúng tôi đã nghĩ về một thiết lập với hai ứng dụng bằng nhau và hai máy chủ cơ sở dữ liệu và triển khai một cặp máy chủ ứng dụng/máy chủ db sau một cặp khác.

Sự cố đang giữ nguyên dữ liệu. Trong khi một cặp ứng dụng/máy chủ db đang cập nhật cặp máy chủ với mã cũ có thể phục vụ người dùng. Nhưng nếu người dùng ghi vào db, chúng tôi sẽ mất dữ liệu khi chuyển sang cặp cập nhật. Đặc biệt là khi chúng tôi đẩy di chuyển giản đồ.

Làm cách nào chúng tôi có thể xử lý việc này? Đây phải là một vấn đề rất phổ biến nhưng tôi không thể tìm thấy câu trả lời hay. Làm thế nào để bạn xử lý vấn đề này?

Trả lời

1

Trong trường hợp bạn không có sự di cư của lược đồ, tôi sẽ cung cấp cho bạn một kịch bản thực tế:

Giữ hai phiên bản của quá trình django (A và B), mà bạn kiểm soát với, chúng ta hãy nói, người giám sát. Giữ một quá trình nginx trước các quy trình django của bạn, chuyển tiếp tất cả các yêu cầu đến A. Vì vậy, bạn tải phiên bản B lên máy chủ, bắt đầu quá trình django B với người giám sát, sau đó thay đổi tệp conf của nginx để trỏ tới B, sau đó tải lại nginx quá trình ..

Trong trường hợp bạn có di chuyển giản đồ, mọi thứ trở nên phức tạp. Các tùy chọn của bạn bao gồm:

  • Bạn có thể xem xét sử dụng giải pháp NoSQL, như mongoDB (trong trường hợp này bạn có thể giữ một phiên bản DB).
  • Tìm hiểu cách ghi lại tất cả các yêu cầu ghi trong khi tải lên theo cách thủ công, để đẩy chúng vào cơ sở dữ liệu mới của bạn sau này.
+2

Tôi đã bỏ phiếu, nhưng chỉ vì bạn có di chuyển giản đồ không phải là cơ sở tức thì để di chuyển sang MongoDB. Chỉ cần viết (các) di chuyển lược đồ của bạn để bạn có thể làm điều này: nâng cấp lược đồ, triển khai ứng dụng mới, nâng cấp lại lược đồ để thêm bất kỳ ràng buộc nào không tương thích với phiên bản cũ của ứng dụng. Bây giờ mối quan tâm lớn nhất của bạn sẽ bị khóa: bạn không muốn ứng dụng không phản hồi trong khi di chuyển của bạn đang chạy. Làm một số thử nghiệm thường sẽ cho biết nếu đây là một vấn đề (di chuyển dài hạn có nghĩa là nó có thể sẽ được). Nếu vậy, bạn cần sao chép ... –

+0

Và sau đó bạn sẽ di chuyển không chính trước tiên, sau đó quảng bá nó thành chính và đẩy tiểu học cũ thành không chính, sau đó di chuyển nó. Các chi tiết về điều đó sẽ phụ thuộc vào giải pháp sao chép của bạn, nhưng nó sẽ khả thi. –

+0

Vâng noSQL không phải là một lựa chọn. Chúng tôi khá hài lòng với postgres. Bạn có thể đề xuất giải pháp sao chép tốt không? – j7nn7k

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