Java 哪种方法更适合将microservices应用程序移动到云端?Kubernetes、AWS Lambda等。如何选择?

Java 哪种方法更适合将microservices应用程序移动到云端?Kubernetes、AWS Lambda等。如何选择?,java,amazon-web-services,spring-boot,kubernetes,microservices,Java,Amazon Web Services,Spring Boot,Kubernetes,Microservices,我想开始构建一个Microservices应用程序。到目前为止,我已经确定了每个项目及其相互作用的方式,以及与DB的关系。 我主要使用Java 8、Angular、Spring Boot、Hibernate和PostgreSQL 在我当地的环境中,一切都很好!但现在我需要把所有东西都转移到云端 我想在AWS上的EC2免费层中测试应用程序 为每个微服务部署一个docker容器 零停机时间无需使用弹性豆茎或ECS。(仅在免费层中测试) 在EC2中运行本地的PostgreSQL 但最后,我需要一种

我想开始构建一个Microservices应用程序。到目前为止,我已经确定了每个项目及其相互作用的方式,以及与DB的关系。 我主要使用Java 8、Angular、Spring Boot、Hibernate和PostgreSQL

在我当地的环境中,一切都很好!但现在我需要把所有东西都转移到云端

我想在AWS上的EC2免费层中测试应用程序

  • 为每个微服务部署一个docker容器 零停机时间无需使用
    弹性豆茎
    或ECS。(仅在免费层中测试)
  • 在EC2中运行本地的PostgreSQL
但最后,我需要一种正确的方法在云中实现这一点


有什么想法吗?

注意:这个问题可能属于

我假设您只有以下组件:

  • 网络应用
  • Postgresql数据库
为了防止停机,您应该将通信量分散到您的资源上(1)这样它们就不会过载,(2)您必须有一种方法来检测它们何时变得不健康(无响应、CPU过高等)

您可以将您的webapp部署到EC2,并通过使用和(2)通过配置和解决(1)。由于您使用的是Spring Boot,因此可以使用

对于您的数据库,我建议查看RDS。它提供了一个托管的Postgresql数据库,这意味着您不必处理一些管理任务

这篇博客文章介绍:如果负载包含大量读取(选择),可以使用垂直缩放(需要时使用更大的数据库)或增加读取副本的数量

如果您的数据库流量很少,您可能会感兴趣。此服务自动缩放,甚至在数据库未使用时关闭


AWS免费层允许您启动EC2和RDS t2.micro实例。

学习技术是一回事,将应用程序用于生产是另一回事。我分享我的答案,将涵盖生产使用的应用程序

围绕业务需求选择服务

云有太多的产品可供选择,可能会让人困惑。我已经使用了Kubernetes和AWS lambda,我相信服务和体系结构应该围绕业务需求进行选择,而不是因为我们听说过它们。您需要考虑应用程序的使用、可用性、可伸缩性和开发生命周期不要过度设计如果一个应用程序不是业务关键型的,并且被少数人使用,您只需将其部署在Elastic beanstalk或lambdas上即可。你不需要库伯内特斯。始终尝试使用管理服务,而不是重新发明轮子

Lambda vs Kubernetes(k8s)

Lambda只要您了解无服务器体系结构及其相关注意事项(例如java冷启动时间和Lambda上的性能),API网关是一个非常强大的选择,与Goland、C#等其他语言相比,根据我的经验,大部分时间使用Lambda都可以获得巨大的成本效益,因此您可以免费使用tier。您可以快速部署代码,而不必担心可用性、可扩展性或停机时间。对于绿地项目来说,这是一个很好的选择

Kubernetes(k8s)每个人都在赶时髦,却没有意识到自己是否真的需要它。Kubernetes是一个非常强大的容器编排,但这是一项全新的技能,您仍然需要进行容量规划,并学习围绕它的许多活动部分。如果您想打包依赖项并想成为云不可知论者,容器是很好的选择。如果您想将遗留应用程序移动到云端,甚至想与现代应用程序并排运行遗留应用程序,这也是一个不错的选择

选择数据存储

同样,这应该是围绕业务需要。对于不需要复杂报告和连接的简单应用程序,您甚至可以使用像Dynamo db这样的NoSQL,这更便宜、更简单。但是,如果您拥有强大的关系数据,那么您必须关注托管服务,如Aurora(MySQL/Posgres)或AWS RDS。Aurora现在也提供无服务器层


希望有帮助

你能描述一下你想移动到云上的架构吗?你有你的应用程序、数据库等的图表吗。?为什么您认为您需要Lambda或API网关?感谢您的兴趣:)目前我没有任何正式文档。我只是想找出最好的方法,用最好的方法将所有东西移动到云上。基本上有4个独立的项目,它们相互作用,并具有一些微服务通信的良好实践。还实现了断路器模式。服务1和服务2各有独立的DB。服务3和服务4共享其他DBFor AWS最佳实践,请查看他们的白皮书,尤其是设计良好的白皮书。拥有多个EC2和数据库实例可减少停机的机会,因此,在我看来,减少断路器的发生。对于Web应用程序不可用的服务,您可以考虑将Web服务器更改为队列用户(使用SQL)。如果服务器停机,它们将停止从队列中消费,消息(相当于http请求)将堆积起来,直到应用程序再次唤醒并开始从队列中消费。使用HTTP,负载平衡器可以确保HTTP请求不会发送到不健康的服务器。到目前为止,我喜欢您的响应,但这正是我的想法。因为我只是在做一些测试,我不敢使用,因为我已经有一个EC2运行,AWS免费层可以使用多达750个实例小时每个t2。微实例正在运行。所以我决定让PostgreSQL本地化