AWS Lambda 与 Kestrel .NET Core 性能对比
AWS Lambda vs Kestrel .NET Core performance
我想使用 .NET Core 开发一个需要能够处理大量并发请求的 Web API。此外,WebAPI 需要连接到数据库。 Web API 将是内部的,不会在 Internet 上公开。
我正在考虑两种可能性:
- 在一个或多个容器/EC2 实例中托管一个 ASP.NET Kestrel 核心应用程序,有或没有 IIS。
- 使用 AWS Lambda 的无服务器解决方案
我试图了解我需要注意哪些注意事项会影响每个解决方案的性能和成本。
我了解到,带有使用异步/等待模式的应用程序的 Kestrel 服务器有望处理大量并发请求。数据库连接池意味着可以在请求之间有效地共享数据库连接。
I understand this questions more in terms “if AWS Lambda calls:
response = Function(request) are thread-safe”.
The answer is yes.
It is because of one very simple reason. AWS Lambda does not allow for
another thread to invoke the same lambda instance before the previous
thread exits. And since multiple lambda instances of the same function
do not share resources, this is not an issue also.
我理解并解释为:
- 每个 lambda 实例一次只能处理一个请求。
- 这意味着需要大量的实例来处理大量的并发请求。
- 每个 lambda 实例都有自己的数据库连接池(可能只有一个连接)。
- 因此,数据库连接总数可能会更高,受 Lambda 函数级并发限制限制。
- 此外,随着流量增加和创建新的 lambda 实例以响应需求,由于每个 lambda 实例的冷启动时间,某些请求将出现显着延迟。
这个理解对吗?
是的,每个 lambda 实例都是完全隔离的,并且 运行 作为一个线程。所以在你的情况下会有很多数据库连接。
您的体系结构的一个问题是您试图将可扩展资源(在本例中为 lambda)与不可扩展资源(在本例中为关系数据库)混合。我见过这样的设置以非常壮观的方式爆炸。
所以在你的情况下,我要么使用一些静态服务器 运行 Kestrel 或其他高性能网络服务器,要么用可以平滑扩展的东西替换关系数据库,比如 DynamoDB 或者 AWS极光
我想使用 .NET Core 开发一个需要能够处理大量并发请求的 Web API。此外,WebAPI 需要连接到数据库。 Web API 将是内部的,不会在 Internet 上公开。
我正在考虑两种可能性:
- 在一个或多个容器/EC2 实例中托管一个 ASP.NET Kestrel 核心应用程序,有或没有 IIS。
- 使用 AWS Lambda 的无服务器解决方案
我试图了解我需要注意哪些注意事项会影响每个解决方案的性能和成本。
我了解到,带有使用异步/等待模式的应用程序的 Kestrel 服务器有望处理大量并发请求。数据库连接池意味着可以在请求之间有效地共享数据库连接。
I understand this questions more in terms “if AWS Lambda calls: response = Function(request) are thread-safe”.
The answer is yes.
It is because of one very simple reason. AWS Lambda does not allow for another thread to invoke the same lambda instance before the previous thread exits. And since multiple lambda instances of the same function do not share resources, this is not an issue also.
我理解并解释为:
- 每个 lambda 实例一次只能处理一个请求。
- 这意味着需要大量的实例来处理大量的并发请求。
- 每个 lambda 实例都有自己的数据库连接池(可能只有一个连接)。
- 因此,数据库连接总数可能会更高,受 Lambda 函数级并发限制限制。
- 此外,随着流量增加和创建新的 lambda 实例以响应需求,由于每个 lambda 实例的冷启动时间,某些请求将出现显着延迟。
这个理解对吗?
是的,每个 lambda 实例都是完全隔离的,并且 运行 作为一个线程。所以在你的情况下会有很多数据库连接。
您的体系结构的一个问题是您试图将可扩展资源(在本例中为 lambda)与不可扩展资源(在本例中为关系数据库)混合。我见过这样的设置以非常壮观的方式爆炸。
所以在你的情况下,我要么使用一些静态服务器 运行 Kestrel 或其他高性能网络服务器,要么用可以平滑扩展的东西替换关系数据库,比如 DynamoDB 或者 AWS极光