我是AWS新手,我开始测试创建一个EC2实例。我计划部署一个简单的ASP.Net网站,我将直接在EC2实例上托管我的数据库。
现在,我听说在“云”中,我在开发ASP.Net应用程序时需要小心,因为它需要“无状态”,所以我不能依靠ASP.Net SessionState来维护数据。
我通常的方法是将状态存储在数据库中,因为(理论上)任何ASP.net应用程序都会访问相同的数据库。
这是我的主要问题:
还有另一个附带的问题:
发布于 2016-09-25 02:04:40
不,在这种情况下不会出现会话状态问题。当单个用户的HTTP请求跨多个web服务器分发时,您会遇到会话状态问题。即使您有多个web服务器,也可以使用粘性会话,或者使用Redis之类的分布式会话存储来缓解这个问题,如果您不想完全无状态的话。
我建议您花时间了解什么是无状态web体系结构,以及它正试图解决的问题。仅将会话从一个位置(web服务器)移到另一个位置(数据库服务器)并不会使您的应用程序无状态,可能只会导致您的可伸缩性瓶颈从一个位置转移到另一个位置。
正确,您不需要只使用一个EC2实例来担心它。就像当你在一台笔记本电脑上运行的时候测试你的应用程序时,你不用担心它。
但是,如果您认为将来需要跨多个服务器扩展应用程序以处理更高的负载,那么您至少需要考虑如何在设计应用程序的早期阶段完成这一任务。
如果您打算将会话状态存储在web层之外(这将使web层的水平扩展和加载分布变得容易),那么您可以使用RDS数据库。但是,如果每次处理请求时都必须加载和更新该记录,这可能会导致相当大的数据库IO。我能看出这是一个真正的瓶颈。
我强烈建议在这个场景中使用Redis服务器,而不是使用关系数据库。亚马逊管理的Redis服务被称为ElastiCache。
发布于 2016-09-25 00:35:31
是的,您可以在同一个实例中安装/宿主数据库。唯一的要求是在启动实例时,确保AMI得到EBS的支持。当您启动一个实例时,您将从一个AMI启动它。如果AMI是支持EBS的,那么即使在停止实例时,根卷仍然存在。亚马逊EC2根设备卷
如果您的DB不需要大量的计算和内存资源,那么如果您在同一个实例中运行数据库,就不会有任何问题。我建议你:
https://stackoverflow.com/questions/39682118
复制相似问题