5

Tôi cần phải ghi một số dữ liệu vào cơ sở dữ liệu sau mỗi 50 giây. Nó tương tự như một dịch vụ Windows đang chạy trên nền và âm thầm thực hiện công việc của mình. Bắt đầu và dừng không phải là một tùy chọn trong trường hợp của tôi vì tôi cần một lượng nhỏ dữ liệu được chèn trước đó để được lưu trữ trong bộ nhớ. Giải pháp tốt nhất cho điều này khi sử dụng Windows Azure hoặc AWS là gì?Tác vụ chạy dài (hoặc mãi mãi) trên Windows Azure

Cảm ơn bạn.

Trả lời

7

Với Windows Azure, bạn có thể chọn vai trò Web hoặc Công nhân (cả về cơ bản Windows 2008 Server R2 hoặc SP2) và có một số loại sự kiện theo thời gian, như @Lucifure đề xuất. Bạn cũng có thể chạy một bộ lập lịch, như Quartz.net, hoặc tận dụng lợi thế của các cửa sổ Azure hàng đợi hoặc hàng đợi dịch vụ xe buýt để có tin nhắn hiển thị tại một thời điểm nhất định. Tuy nhiên: Bạn không thể có tác vụ "mãi mãi" trong một cá thể vai trò đã cho, trong trường hợp đó, các cá thể VM của bạn sẽ được khởi động lại định kỳ (ví dụ: bảo trì máy chủ lưu trữ mỗi tháng). Khi tắt vai trò, bạn sẽ nhận được thông báo, bạn có thể xử lý các thông báo tắt này trong Stopping() hoặc OnStop(). Nếu bạn có nhiều phiên bản, bạn có thể sử dụng bộ lập lịch hoặc hàng đợi để đảm bảo sự kiện của bạn vẫn kích hoạt sau mỗi 50 giây hoặc được xử lý trên nhiều phiên bản (nhưng chỉ bằng một phiên bản tại bất kỳ thời điểm nào).

Để bảo vệ thông tin trong bộ nhớ của bạn, một ý tưởng là lưu trữ thông tin đó trong bộ nhớ cache. Bạn có 2 lựa chọn:

  • Dịch vụ lưu trữ được phân phối (đã chia sẻ), đã được sử dụng một thời gian. Nó chạy độc lập với các thể hiện vai trò của bạn.
  • Bộ nhớ cache trong bộ nhớ, vừa được giới thiệu vào tháng 6 năm 2012. Giả sử bạn có nhiều hơn một thể hiện, bộ nhớ cache được trải rộng trên các trường hợp đó. Bạn thậm chí có thể chạy bộ nhớ đệm bên trong bộ nhớ của các vai trò hiện có của bạn.

Thông tin thêm về lưu vào bộ nhớ cache là here.

Có một vài câu trả lời StackOverflow liên quan đến Quartz.net và Windows Azure, chẳng hạn như this one.

1

Bạn có thể thiết lập System.Threading.Timer để kích hoạt sau mỗi 50 giây hoặc lâu hơn và thực hiện công việc của bạn bất cứ khi nào sự kiện xảy ra.

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