我的项目正在寻求将新的j2ee应用程序部署到亚马逊的云端。 ElasticBeanstalk支持Tomcat应用程序,这看起来很完美。在编写可能与服务器上的独立tomcat不同的应用程序时,是否需要记住任何特定的设计注意事项?
例如,我了解服务器是自动扩展的。这就像群集吗?我们的应用程序框架倾向于在HttpSession中坚持状态,这是一个问题吗?或者当它说它自动缩放时,这只是意味着内存和CPU吗?
答案 0 :(得分:1)
AWS上的自动扩展是通过添加更多服务器完成的,而不是添加更多的CPU / RAM。您可以手动添加更多CPU / RAM,但需要关闭服务器一分钟才能进行更改,然后配置服务器上运行的任何软件以利用添加的RAM,这样就不会自动进行缩放
Elastic Beanstalk基本上是Amazon EC2服务器,Elastic Load Balancers和Auto Scaling Groups的管理界面。它为您设置了所有这些功能,并提供了一种轻松部署应用程序新版本的便捷方式。 Elastic Beanstalk将在Elastic Load Balancer后面创建EC2服务器,并在应用程序负载增加时使用Auto Scaling配置添加更多服务器。它处理准备好接收流量时将服务器添加到负载均衡器,并将其从负载均衡器中删除,并在不再需要时删除额外的服务器。
对于在Tomcat上运行的Java应用程序,您有几个选项可以很好地处理水平扩展。您可以在Load Balancer上启用粘性会话,以便来自特定用户的所有请求都将转到同一服务器,从而使HttpSession与用户保持联系。这样做的主要问题是,如果从池中删除服务器,您可能会丢失一些HttpSession,并导致任何“卡住”该服务器的用户从您的应用程序中注销。解决方案是将Tomcat实例配置为在共享位置存储会话。有一些Tomcat会话商店实现可以与ElastiCache(Redis)和DynamoDB等AWS服务一起使用。如果您还不熟悉DynamoDB,我建议使用其中一个,可能是Redis实现。
将Java应用程序移动到AWS的另一个考虑因素是您不能使用依赖于多播的任何工具或库。您可能没有使用多播进行任何操作,但根据我的经验,我必须迁移到AWS的每个Java应用程序都依赖于多播来进行群集,我不得不修改它以使用不同的群集方法。
此外,为了成功迁移到AWS,我建议您阅读有关VPC,私有IP与公共IP以及安全组的内容。对这些主题的充分理解是设置网络的关键,这样您的Web服务器就能以安全,高效的方式与您的数据库和缓存服务器进行通信。