Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core AWS Lambda vs Kestrel.NET核心性能_Asp.net Core_Aws Lambda_Kestrel Http Server - Fatal编程技术网

Asp.net core AWS Lambda vs Kestrel.NET核心性能

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服务器和使用异步/等待模式的应用程序可以处理大量并发请求。数据库连接池意味着可

我想使用.NETCore开发一个Web API,它需要能够处理大量并发请求。此外,WebAPI需要连接到数据库。Web API将是内部的,不会在Internet上公开

我正在考虑两种可能性:

  • 在Kestrel中的一个或多个容器/EC2实例中托管ASP.NET核心应用程序,无论是否使用IIS
  • 使用AWS Lambda的无服务器解决方案
我试图了解我需要注意哪些因素会影响这些解决方案的性能和成本

  • 我知道Kestrel服务器和使用异步/等待模式的应用程序可以处理大量并发请求。数据库连接池意味着可以在请求之间高效地共享数据库连接

  • 我在信中读到:

我对这个问题的理解更多的是“如果AWS Lambda调用: 响应=函数(请求)是线程安全的”

答案是肯定的

原因很简单AWS Lambda不允许 在前一个线程之前调用同一个lambda实例的另一个线程 线程退出。并且由于同一函数的多个lambda实例 不要共享资源,这也不是问题

我理解并解释为:

  • 每个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代理进行连接池。