我有一个Azure Web Job,它在TimerTrigger上运行,将一些消息放在服务总线队列上。我在两个不同的区域上部署了这个Web Job,以便在一个区域出现故障时获得高可用性。根据https://github.com/Azure/azure-webjobs-sdk-extensions/wiki/TimerTrigger,我可以看到分布式锁机制工作得很好,计时器一次只在一个区域执行,所以没有重复的请求通过。
但是,两个区域中的Web job使用相同的公共存储帐户,并且该存储帐户仅部署到一个区域。我不能使用两个单独的存储帐户,因为那样我就失去了分布式锁的功能。我知道Azure为我的存储帐户提供了异地冗余存储,因此数据被复制到辅助区域。
我的问题是—在一个区域(特别是存储帐户的主区域)发生灾难的情况下,是否有一种方法可以使web作业自动故障转移到辅助端点?现在,我有azurewebjobsstorage;指定为存储帐户的共享访问密钥之一的应用程序设置。
感谢任何提示!
我不是存储SDK方面的专家,但我链接了两个文档,可以帮助您了解如何使您的应用程序高可用性。
- https://learn.microsoft.com/en-us/azure/storage/common/storage-disaster-recovery-guidance?toc=/azure/storage/blobs/toc.json
- https://learn.microsoft.com/en-us/azure/storage/common/geo-redundant-design?tabs=legacy
- https://learn.microsoft.com/en-us/azure/storage/blobs/storage-create-geo-redundant-storage?tabs=dotnet11
由于异地冗余存储的警告是它在辅助服务器上是只读的,除非您发出请求,否则我确实发现BlobClientOptions的GeoRedundantSecondaryUri属性部分将使用辅助地址作为重试策略的一部分。