首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无状态和实例数据库

无状态和实例数据库
EN

Stack Overflow用户
提问于 2016-09-25 00:03:08
回答 2查看 129关注 0票数 1

我是AWS新手,我开始测试创建一个EC2实例。我计划部署一个简单的ASP.Net网站,我将直接在EC2实例上托管我的数据库。

现在,我听说在“云”中,我在开发ASP.Net应用程序时需要小心,因为它需要“无状态”,所以我不能依靠ASP.Net SessionState来维护数据。

我通常的方法是将状态存储在数据库中,因为(理论上)任何ASP.net应用程序都会访问相同的数据库。

这是我的主要问题:

  1. 在我的例子中,我将把数据库托管在同一个EC2实例中,会发生会话状态问题吗?

还有另一个附带的问题:

  1. 我现在甚至不需要担心这一点,因为我只有一个EC2实例?
  2. 将来,我可能会将我的“实例”数据库移到RDS中。在这种情况下,我可以安全地将会话状态存储在数据库上,或者有更好的解决方案?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-25 02:04:40

  1. 在我的例子中,我将把数据库托管在同一个EC2实例中,会发生会话状态问题吗?

不,在这种情况下不会出现会话状态问题。当单个用户的HTTP请求跨多个web服务器分发时,您会遇到会话状态问题。即使您有多个web服务器,也可以使用粘性会话,或者使用Redis之类的分布式会话存储来缓解这个问题,如果您不想完全无状态的话。

我建议您花时间了解什么是无状态web体系结构,以及它正试图解决的问题。仅将会话从一个位置(web服务器)移到另一个位置(数据库服务器)并不会使您的应用程序无状态,可能只会导致您的可伸缩性瓶颈从一个位置转移到另一个位置。

  1. 我现在甚至不需要担心这一点,因为我只有一个EC2实例?

正确,您不需要只使用一个EC2实例来担心它。就像当你在一台笔记本电脑上运行的时候测试你的应用程序时,你不用担心它。

但是,如果您认为将来需要跨多个服务器扩展应用程序以处理更高的负载,那么您至少需要考虑如何在设计应用程序的早期阶段完成这一任务。

  1. 将来,我可能会将我的“实例”数据库移到RDS中。在这种情况下,我可以安全地将会话状态存储在数据库上,或者有更好的解决方案?

如果您打算将会话状态存储在web层之外(这将使web层的水平扩展和加载分布变得容易),那么您可以使用RDS数据库。但是,如果每次处理请求时都必须加载和更新该记录,这可能会导致相当大的数据库IO。我能看出这是一个真正的瓶颈。

我强烈建议在这个场景中使用Redis服务器,而不是使用关系数据库。亚马逊管理的Redis服务被称为ElastiCache。

票数 3
EN

Stack Overflow用户

发布于 2016-09-25 00:35:31

是的,您可以在同一个实例中安装/宿主数据库。唯一的要求是在启动实例时,确保AMI得到EBS的支持。当您启动一个实例时,您将从一个AMI启动它。如果AMI是支持EBS的,那么即使在停止实例时,根卷仍然存在。亚马逊EC2根设备卷

如果您的DB不需要大量的计算和内存资源,那么如果您在同一个实例中运行数据库,就不会有任何问题。我建议你:

  • 启动实例时附加卷,并在附加卷中安装数据库。为了获得更高的性能,您可以选择提供快速I/O的磁盘类型。
  • 选择具有足够CPU和内存的实例类型。即使在启动实例之后(在停止实例之后),也可以增加CPU/内存。
  • 稍后可以将数据库迁移到RDS。
  • 您可以考虑DyanamoDB,但它是一个NoSQL DB
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39682118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档