2012-05-15 30 views
6

Giả sử tôi có triển khai sản xuất và dàn dựng đều sử dụng cơ sở dữ liệu (SQL Azure) của riêng họ. Nếu lược đồ trong dàn dựng đã thay đổi và cần phải được triển khai để sản xuất thì có cách xác định để đạt được nâng cấp cơ sở dữ liệu trên cơ sở dữ liệu sản xuất (không có thời gian chết) không?Nâng cấp liền mạch Azure khi thay đổi giản đồ cơ sở dữ liệu

ví dụ: Nếu tôi trao đổi VIP dàn dựng < -> sản xuất (và đồng thời tự động thay đổi chuỗi kết nối bằng cách nào đó) là quá trình tốt nhất để tự động hóa nâng cấp cơ sở dữ liệu Azure sql là gì.

Suy nghĩ của tôi là phát hiện sự thay đổi môi trường trong RoleEnvironmentChanging (mặc dù không chắc chắn rằng VIP swap thậm chí kích hoạt RoleEnvironmentChanginng) và chạy tập lệnh sql dựa vào cơ sở dữ liệu (tức là prod) tại thời điểm đó, tuy nhiên tôi cần phải thực hiện đảm bảo rằng tập lệnh chỉ chạy một lần và sẽ có nhiều phiên bản chuyển đổi.

+0

Câu hỏi hay. Những điều tôi biết (gần như) chắc chắn là: (1) VIP Swapping sẽ không kích hoạt RoleEnvironmentChanging. (2) Cách duy nhất để thay đổi chuỗi kết nối là lập trình chỉnh sửa web.config và có chuỗi kết nối mới ở đâu đó khác (?). (3) Không có tự động hóa cho các thay đổi chuỗi kết nối cho đến nay. Đó là lý do tại sao tôi không sử dụng triển khai dàn dựng. Vì vậy, bạn có thể sống tốt hơn với một số thời gian chết và/hoặc lỗi trong khi nâng cấp dịch vụ (nâng cấp với phiên bản mới của anh ấy trực tiếp đến sản xuất/sau khi thử nghiệm đã trôi qua trên dàn dựng). – astaykov

Trả lời

3

Vì vậy, bạn có triển khai sản xuất có cơ sở dữ liệu SQL Azure riêng và triển khai dàn dựng có cơ sở dữ liệu SQL Azure riêng của mình. Trong tình huống này, cả ứng dụng đều có chuỗi kết nối của họ trỏ đến hai cơ sở dữ liệu khác nhau.

yêu cầu đầu tiên của bạn là để thay đổi giản đồ cơ sở dữ liệu trên bay khi bạn trao đổi việc triển khai hoặc làm điều gì đó và tôi có mối quan tâm sau với thiết kế rằng:

  1. Nếu bạn viết bất kỳ mã bên trong vai trò làm Hành động "ONCE và chỉ ONCE", không có gì đảm bảo rằng điều này sẽ chỉ xảy ra với ONCE. Nó sẽ xảy ra nhiều thời gian phụ thuộc vào nhiều kịch bản như

    1.1 Trong bất kỳ tình huống mà bạn VM cần được reimage bởi hệ thống và mã này sẽ làm chính xác cùng những gì nó đã làm trong Reimage cuối cùng

    1.2 Bạn có thể bảo vệ nó không xảy ra lúc bắt đầu vai trò hoặc VM bắt đầu bằng một số phương pháp đăng ký của một số khóa ngoài nhưng có đầy đủ cơ chế chứng minh không xảy ra.

  2. Do đó tôi sẽ đề nghị khi bạn đã sẵn sàng để trao đổi triển khai của bạn, bạn có thể:

    2.1 Chạy kịch bản để cập nhật cho việc sản xuất liên quan schema SQL Azure (Điều này sẽ không có tác động đối với ứng dụng tải xuống vì nó không được chạm nhưng trong khi lược đồ cơ sở dữ liệu của bạn được cập nhật, bạn có thể biết rõ hơn cách nó tác động đến ứng dụng của bạn)

    2.2 Thay đổi cấu hình trong dàn dựng để trỏ đến sản xuất SQL Azure (Điều này sẽ không có bất kỳ thời gian ngừng ứng dụng sản xuất nào)

    2.3 SWAP deplo yment (Điều này cũng sẽ không có thời gian chết ứng dụng)

Vì vậy, ngay cả khi bạn tự cập nhật các Schema DB và sau đó trao đổi việc triển khai không có thời gian chết đáng kể bên cạnh thời gian mất bởi DB để cập nhật các giản đồ.

+0

Cảm ơn vì điều này. Tôi nghĩ rằng các đề xuất của bạn trong 2 là những gì chúng tôi sẽ làm (chắc chắn ban đầu). Tuy nhiên, đối với các mối quan tâm trong 1, tôi đã nghĩ đến việc sử dụng một bảng phiên bản của một thứ gì đó trong cơ sở dữ liệu để cơ sở dữ liệu luôn biết phiên bản của nó là gì. đã có bảng __MigrationHistory ... hmmm). Tôi sẽ phải giảm thiểu hai trường hợp bắt đầu từ chính xác cùng thời gian của khóa học. – Ian1971

+0

có, nếu bạn đang sử dụng bất cứ thứ gì bên ngoài máy thì nó sẽ hoạt động. tùy chọn 1) chỉ là một mối quan tâm nếu bạn đã làm cho mã phụ thuộc vào một cái gì đó trong bản thân máy ảo mà sẽ không tồn tại. – AvkashChauhan

3

Tôi đã tìm kiếm các phương pháp hay nhất cho tất cả mọi nơi và không tìm thấy. Cho đến nay đây là những gì tôi làm:

  • Triển khai để dàn dựng (sản xuất vẫn đang chạy)
  • Sao chép tập tin app_offline.htm vào thư mục gốc web trên sản xuất. Bằng cách này, tôi chặn người dùng sử dụng ứng dụng, do đó ngăn chặn các thay đổi đối với cơ sở dữ liệu. Tôi chỉ sử dụng một ví dụ.
  • Sao lưu cơ sở dữ liệu.
  • Chạy tập lệnh DDL, DML và SP. Điều này cập nhật cơ sở dữ liệu sản xuất với lược đồ mới nhất.
  • Ứng dụng thử nghiệm trên Dàn dựng.
  • Hoán đổi số VIP. Thao tác này sẽ đưa ứng dụng trở lại trực tuyến vì tệp app_offline.htm không có trong Dàn dựng (Sản xuất mới).
  • Nếu xảy ra sự cố, hãy đổi lại VIP, khôi phục cơ sở dữ liệu và xóa app_offline.htm.

Với phương pháp này, tôi có thời gian ngừng hoạt động ~ 5 phút; cơ sở dữ liệu của tôi là nhỏ, đó là tốt hơn so với chờ đợi cho Vm được tạo ra và người dùng nhận được lỗi.

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