2011-06-06 10 views
5

Giả sử tôi bao gồm một hoạt động khá dài startup task vào vai trò Azure của tôi - chạy vài thứ như sau vài phút. Điều gì sẽ xảy ra nếu tác vụ khởi động chạy "quá dài".Có giới hạn khó về thời gian khởi động vai trò Azure có thể mất không?

Tôi hiện đang thử nghiệm trên Trình mô phỏng tính toán và quan sát những điều sau đây.

Tôi có một tệp .zip 450 megabyte cùng với Info-Zip unzip. Tác vụ khởi động giải nén kho lưu trữ. Triển khai bắt đầu và tôi nhìn vào Task Manager. Nhiều quá trình dịch vụ bắt đầu, sau đó unzip.exe được chạy. Sau khoảng hai phút tất cả các quy trình đó dừng lại và sau đó bắt đầu lại và unzip.exe bắt đầu lại.

Vì vậy, có vẻ như triển khai được phép chạy trong khoảng hai phút, sau đó được đặt lại mạnh và bắt đầu lại.

Đây có phải là hành vi mong đợi không? Nó có tồn tại trên đám mây thực không? Có bất kỳ giới hạn cứng nào về thời gian khởi động của vai trò không? Làm cách nào để giải quyết tình huống này ngoại trừ việc di chuyển giải nén vào RoleEntryPoint.OnStart()?

Trả lời

7

Tôi đã có cùng một câu hỏi, vì vậy đã thử một thử nghiệm. Tôi chạy một nhiệm vụ khởi động - taskType = "đơn giản" để nó sẽ chặn các vai trò từ đầu để thực hiện - và để cho nó chạy trong 50 giờ. Bộ điều khiển vải không phàn nàn và cổng thông tin không hiển thị bất kỳ lỗi nào. Nó đã hoàn thành vòng lặp "không làm gì" dài của nó sau 50 giờ, sau đó Task Startup này đã thoát, và Web Role của tôi khởi động tốt.

Vì vậy, bài kiểm tra emperical của tôi cho biết Công việc khởi động có thể mất nhiều thời gian! Ít nhất 50 giờ.

0

Có một số nhịp đập mà tác nhân vải Azure sẽ thực hiện đối với vai trò. Nếu những điều này không được xác nhận (nói một quy trình chặn dài hạn), điều này có thể khiến vai trò bị gắn cờ là không có sẵn.

Bạn có thể thử đưa quy trình khởi động của mình vào chuỗi nền chạy độc lập. Điều này sẽ giúp bạn giữ vai trò không bị tái chế trong khi quá trình khởi động. Chỉ cần nhớ rằng bạn có thể cần phải thực hiện một số điều chỉnh nếu bạn nhận được yêu cầu trước khi vai trò khởi động hoàn toàn. Ngoài ra còn có một cách (mà tôi dường như không thể nhớ lại ATM) để gắn cờ vai trò và đưa nó ra khỏi cân bằng tải tạm thời trong khi quá trình của bạn hoàn tất.

2

này nên thông báo cho cân bằng tải mà quá trình của bạn vẫn còn bận rộn:

http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstancestatuscheckeventargs.setbusy.aspx

+0

Làm cách nào để gọi phương thức đó từ bên trong một tác vụ khởi động? – sharptooth

+0

Tôi không nghĩ rằng phương pháp SetBusy áp dụng cho Công việc khởi động. Bạn sẽ sử dụng SetBusy với vai trò của bạn nếu mã RoleEntryPoint của bạn (ví dụ, phương thức Run) đã làm việc gì đó tốn thời gian và không muốn Bộ điều khiển Vải nghĩ rằng nó bị treo. Nếu bạn đang sử dụng taskType = "đơn giản" khởi động nhiệm vụ (loại chạy đến hoàn thành trước khi OnStart của bạn được gọi), sau đó cân bằng tải không gửi lưu lượng truy cập cho bạn nào. Và nếu bạn đang sử dụng một trong hai taskType khởi động khác (nền hoặc nền trước), thì chúng sẽ chạy độc lập với các phương thức OnStart và Run của bạn. – codingoutloud

1

tôi đã chạy nhiệm vụ khởi động chạy trong một thời gian khá dài (nghĩ 20-30 phút) và vai trò chỉ đơn giản là trong trạng thái 'Bận'. Tôi không nghĩ rằng có một giới hạn khó khăn cho vai trò sẽ ở lại trong trạng thái đó chừng nào nhiệm vụ Khởi động vẫn đang thực hiện và không thoát với mã trả về khác không (trên thực tế, đây là một bản ghi nhớ cho hầu hết khởi động tác vụ khởi động lần đầu khi họ bật lời nhắc). FC về mặt kỹ thuật vẫn chạy tốt, vì vậy sẽ không có lý do gì để 'phục hồi' vai trò (tức là nhịp tim vẫn đang diễn ra).

Trình giả lập dev chỉ thông báo khi vai trò chưa bắt đầu và cảnh báo bạn. Nếu bạn nhấp vào tùy chọn 'tiếp tục chờ', nó sẽ tiếp tục chạy nhiệm vụ Khởi động để hoàn thành. Đám mây không làm điều này tất nhiên (cảnh báo bạn).

Không bao giờ thử một tác vụ chạy quá lâu, vì vậy có thể có giới hạn rất dài. Tôi dường như nhớ lại 3 giờ là một số ma thuật trong một số trường hợp timeout như tái chế vai trò, nhưng tôi chưa bao giờ thử ...