如何将使用 apache tomcat 托管的 java 应用程序迁移到云端?
How to move java application hosting with apache tomcat to cloud?
我想将我的应用程序移动到云端。为此,我需要学习哪些额外的东西?我必须对我的代码进行哪些修改?
提前致谢!!
要学习的东西:
- 水平可伸缩性和自动缩放。
- 以队列为中心的工作流模式。
- 最终一致性。
- 数据库分片。
- NoSQL 数据库。
- 网络延迟及其对性能的影响。
- CDN.
- 持续集成和持续部署。
我向您推荐 "Cloud Architecture Patterns: Using Microsoft Azure" 这本书 http://www.amazon.com/Cloud-Architecture-Patterns-Using-Microsoft/dp/1449319777
您可能需要在应用程序中进行的修改:
- 使应用程序节点无状态:无需在您的应用程序中保留任何会话。看看 Spring 会话 http://projects.spring.io/spring-session/。它可以使用 Redis 作为会话存储。另一种选择是使用粘性会话,但这种方法会降低可伸缩性。
- 由于您的应用程序节点是无状态的,并且随时可能因活动扩展而被删除,因此您不能将硬盘驱动器用于用户上传的图像(其他文件)。您可能需要使用外部文件存储,例如 S3 http://aws.amazon.com/s3/.
- 您的数据库必须位于单独的节点上。
- 您需要使用集中式缓存,因为其他节点发生更改时本地缓存不会失效,从而导致数据不一致。看看亚马逊 ElastiCache http://aws.amazon.com/elasticache/ or Hazelcast http://hazelcast.com/
- 如果你现在使用Java同步机制如synchronized block或Lock来控制并发你必须记住你需要在多个节点之间进行同步。您可能需要使用分布式锁服务(Terracotta 或 Hazelcast)
- 您需要良好的迁移和回滚计划。
我想将我的应用程序移动到云端。为此,我需要学习哪些额外的东西?我必须对我的代码进行哪些修改? 提前致谢!!
要学习的东西:
- 水平可伸缩性和自动缩放。
- 以队列为中心的工作流模式。
- 最终一致性。
- 数据库分片。
- NoSQL 数据库。
- 网络延迟及其对性能的影响。
- CDN.
- 持续集成和持续部署。
我向您推荐 "Cloud Architecture Patterns: Using Microsoft Azure" 这本书 http://www.amazon.com/Cloud-Architecture-Patterns-Using-Microsoft/dp/1449319777
您可能需要在应用程序中进行的修改:
- 使应用程序节点无状态:无需在您的应用程序中保留任何会话。看看 Spring 会话 http://projects.spring.io/spring-session/。它可以使用 Redis 作为会话存储。另一种选择是使用粘性会话,但这种方法会降低可伸缩性。
- 由于您的应用程序节点是无状态的,并且随时可能因活动扩展而被删除,因此您不能将硬盘驱动器用于用户上传的图像(其他文件)。您可能需要使用外部文件存储,例如 S3 http://aws.amazon.com/s3/.
- 您的数据库必须位于单独的节点上。
- 您需要使用集中式缓存,因为其他节点发生更改时本地缓存不会失效,从而导致数据不一致。看看亚马逊 ElastiCache http://aws.amazon.com/elasticache/ or Hazelcast http://hazelcast.com/
- 如果你现在使用Java同步机制如synchronized block或Lock来控制并发你必须记住你需要在多个节点之间进行同步。您可能需要使用分布式锁服务(Terracotta 或 Hazelcast)
- 您需要良好的迁移和回滚计划。