我在 Azure 中的 Web 应用程序在应用程序设置环境变量中具有键/值。
问题 - Azure 如何存储这些值?更具体地说,当我获取每个值时,它是从小型内存缓存中获取的,还是有一些内部文件可以通过查看来获取该值?
我的担忧 - 如果我开始在我的网站上收到大量流量,并且从环境变量中获取键/值(Sendgrid、Stripe、Cloudinary)的频率很高,这是否会导致应用程序速度变慢如果这些值存储在文件中还是内存中?
下面是我获取这些值的两种方法,第一种方法在启动时获取一次,将值保存在缓存对象“SendGridOptions”中,另一种方法在每次需要值时获取。第一种方法的缺点是,如果值发生变化,我必须重新启动 Web 应用程序,而第二种方法 Azure 会给我一条消息,说它可能必须重新启动,但我担心的是,如果获取应用程序的频率很高,速度会变慢因为它必须从一些内部配置文件而不是内存中获取?
// fetch all values needed once at startup
public void ConfigureServices(IServiceCollection services) {
services.Configure <SendGridOptions> (_config.GetSection("SendGrid"));
}
private readonly IConfiguration _config;
public CalendarController(IConfiguration config) {
_config = config;
}
ControllerFunction() {
var secretKey = = _config["SendGrid:SecretKey"];
}
存储在 Azure 应用服务的环境变量中的应用程序/连接字符串设置在 KUDU 控制台中可用作
AppSettings
(具有相同名称)和 Environment variables
(以 APPSETTING_ 为前缀)。
我的应用程序设置:
库杜
检索值:
Using Environment variable:
@Environment.GetEnvironmentVariable("TitleSwagger")
上述值可以直接从环境变量部分检索。
AFAIK,您可以存储 N 个配置值,没有任何问题。
如果您仅在
appsettings.json
文件中进行设置,而不是在 Azure 配置部分中进行设置,则 appsettings.json 的设置将被注入到 IConfiguration 部分中。
这些值可以直接从 Iconfiguration 中检索。
@inject IConfiguration myconfig;
@myconfig["TestVal"]
输出:
如果获取频率很高,应用程序会变慢,因为它必须从某些内部配置文件而不是内存中获取?
如果值的更改比较频繁并且您觉得性能非常低,那么最好避免在启动时缓存该值并选择其他选项(Azure 应用程序配置或 Key Vault)。
但是据我所知,Azure App Service 能够处理高频获取的缓存。
如果值发生变化,我必须重新启动网络应用程序,
为了避免这种情况,您可以将应用程序设置的值存储在 Key Vault 中,而不是直接将它们存储在配置部分中。
请参阅此SO解决方案以获取有关如何避免频繁重启的更多详细信息。