我公司的一些网络服务是使用不同的网络应用程序构建的。(Rails,Django,PHP)
分享会话状态的最佳做法是什么
这样用户就不必在不同服务器之间反复登录。
我在AWS自动缩放组中构建了我的Rails应用程序。
即使我浏览同一个网站,但下次我可能在另一台服务器上浏览,所以我必须再次登录。因为服务器没有我的会话状态。
我需要一些更好的主意或关键字来搜索这类问题。
提前致谢
答案 0 :(得分:1)
我可以想到两种方法可以实现这个目标
如果您环顾四周,许多人可能会推荐选项1,但可能也是一种过度杀伤,因为您需要在每个服务器中进行自定义会话管理。但是,您的选择可能取决于您希望实现的具体目标,系统架构的整体灵活性以及您掌握的时间。 CAS可能是解决问题的一种更直接的方式。
答案 1 :(得分:0)
在您的应用程序数据库中存储用户会话不是AWS的推荐选项。
使用数据库的最大问题是,您需要编写一些每隔一段时间运行一次的清理脚本,以清除所有过期用户会话的表。这很麻烦,会产生更多开销,并给您的数据库带来更多压力。
但是,如果您确实想要使用实际数据库,则应使用像Dynamo这样的NoSQL数据库。这将为您提供比关系数据库更好的性能。在数据传输方面,它也可能更具成本效益。但是,最大的问题是你仍然需要那个烦人的清理脚本。注意SDK中内置了支持,可以使用PHP和Dynamo来存储用户的会话:
http://docs.aws.amazon.com/aws-sdk-php/v2/guide/feature-dynamodb-session-handler.html
最好但成本最高的解决方案是使用ElastiCache群集。您可以设置您选择的TTL,这意味着您不必担心清理脚本。此外,ElastiCache将比Dynamo或任何关系数据库获得更好的性能,因为数据存储在ElastiCache节点的RAM中。 ElastiCache的主要缺点是目前它无法动态扩展。因此,如果有太多用户同时登录,如果您没有配置足够大的群集,事情就会变得很难看。
http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/WhatIs.html
但是你可以打赌,在AWS上托管的所有最大,最糟糕和最好的应用程序要么使用Dynamo,ElastiCache,要么使用自定义NoSQL或Cache集群解决方案来存储用户会话。
请注意,所有AWS开发工具包都支持这两种服务:
https://aws.amazon.com/tools/