Asp.net core AWS Lambda vs Kestrel.NET核心性能
我想使用.NETCore开发一个Web API,它需要能够处理大量并发请求。此外,WebAPI需要连接到数据库。Web API将是内部的,不会在Internet上公开 我正在考虑两种可能性:Asp.net core AWS Lambda vs Kestrel.NET核心性能,asp.net-core,aws-lambda,kestrel-http-server,Asp.net Core,Aws Lambda,Kestrel Http Server,我想使用.NETCore开发一个Web API,它需要能够处理大量并发请求。此外,WebAPI需要连接到数据库。Web API将是内部的,不会在Internet上公开 我正在考虑两种可能性: 在Kestrel中的一个或多个容器/EC2实例中托管ASP.NET核心应用程序,无论是否使用IIS 使用AWS Lambda的无服务器解决方案 我试图了解我需要注意哪些因素会影响这些解决方案的性能和成本 我知道Kestrel服务器和使用异步/等待模式的应用程序可以处理大量并发请求。数据库连接池意味着可
- 在Kestrel中的一个或多个容器/EC2实例中托管ASP.NET核心应用程序,无论是否使用IIS
- 使用AWS Lambda的无服务器解决方案
- 我知道Kestrel服务器和使用异步/等待模式的应用程序可以处理大量并发请求。数据库连接池意味着可以在请求之间高效地共享数据库连接
- 我在信中读到:
- 每个lambda实例一次只能处理一个请求
- 这意味着需要大量实例来处理大量并发请求
- 每个lambda实例都有自己的数据库连接池(可能只有一个连接)
- 因此,数据库连接的总数可能会更高,受Lambda函数级并发限制的限制
- 此外,随着通信量的增加和创建新的lambda实例以响应需求,由于每个lambda实例的冷启动时间,某些请求将出现显著的延迟
这种理解正确吗 是的,每个lambda实例都是完全隔离的,并且作为单个线程运行。因此,在您的情况下,将有很多数据库连接 您的体系结构的一个问题是,您试图将可伸缩资源(在本例中为lambda)与不可伸缩资源(在本例中为关系数据库)混合使用。我见过这样的设置以非常壮观的方式爆炸
因此,在您的案例中,我要么使用大量运行Kestrel或其他高性能web服务器的静态服务器,要么使用能够平滑扩展的东西来替换关系数据库,比如DynamoDB或AWS Aurora是的,每个lambda实例都是完全隔离的,并且作为单个线程运行。因此,在您的情况下,将有很多数据库连接 您的体系结构的一个问题是,您试图将可伸缩资源(在本例中为lambda)与不可伸缩资源(在本例中为关系数据库)混合使用。我见过这样的设置以非常壮观的方式爆炸
因此,在您的情况下,我要么使用大量运行Kestrel的静态服务器,要么使用另一个高性能web服务器,要么用一些可以顺利扩展的东西取代关系数据库,比如DynamoDB,或者AWS Aurora,谢谢。替换数据库不是一个选项;我倾向于使用静态Kestrel服务器。我有兴趣阅读有关lambda的经验,特别是关于以壮观的方式爆炸的设置。这绝对是我想避免的。谢谢你。替换数据库不是一个选项;我倾向于使用静态Kestrel服务器。我有兴趣阅读有关lambda的经验,特别是关于以壮观的方式爆炸的设置。这绝对是我想要避免的。根据您使用的数据库类型,您可以在Lambda中使用RDS代理进行连接池。根据您使用的数据库类型,您可以在Lambda中使用RDS代理进行连接池。