java - 哪种方法更适合将微服务应用程序迁移到云端? Kubernetes、AWS Lambda等,如何取舍?

标签 java amazon-web-services spring-boot kubernetes microservices

<分区>

我想开始构建微服务应用程序。到目前为止,我已经确定了每个项目以及它们相互交互的方式,以及与数据库的关系。 我主要使用 Java 8AngularSpring BootHibernatePostgreSQL .

在我的本地环境中一切正常!但现在我需要把所有东西都搬到云端。

我想在 AWS 上的 EC2 免费套餐 中测试该应用程序。

  • 为每个微服务部署一个 docker 容器 零停机时间,无需使用 Elastic Beanstalk 或 ECS。 (只是在免费套餐中测试)
  • 在 EC2 中本地运行的 PostgreSQL。

但最后我需要一种正确的方法在云端执行此操作

有什么想法吗?

最佳答案

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

围绕业务需求选择服务

Cloud 有太多产品可供选择,而且可能会让人感到困惑。我同时使用过 Kubernetes 和 AWS lambda,我认为应该根据业务需求来选择服务和架构,而不是因为我们听说过它们。您需要考虑应用程序的使用情况、可用性、可扩展性和开发生命周期。 不要过度设计 如果某个应用程序不是业务关键型应用程序并且被少数人使用,您可以简单地将其部署在 Elastic beanstalk 或 lambda 上。你不需要 Kubernetes 。始终尝试使用管理服务而不是重新发明轮子。

Lambda 与 Kubernetes (k8s)

Lambda 和 API 网关是一个非常强大的选择,只要您了解无服务器架构和相关注意事项,例如与其他语言(如 Goland、C#、nodejs 等)相比,lambda 上的 java 冷启动时间和性能并不好。根据我的经验,大多数时候使用 Lambda 可以获得如此巨大的成本效益,以至于你可以摆脱免费套餐。您可以快速部署代码,无需担心可用性、可扩展性或停机时间。这是绿地项目的绝佳选择。

Kubernetes (k8s) 每个人都在跟风,却没有意识到他们是否真的需要它。 Kubernetes 是一种非常强大的容器编排,但这是一项全新的技能,您仍然需要进行容量规划并学习许多围绕它的 Activity 部分。如果您想打包依赖项并希望与云无关,则容器是不错的选择。如果您想将遗留应用程序移动到云端,甚至同时运行遗留应用程序和现代应用程序,这也是一个不错的选择。

选择数据存储

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

希望对您有所帮助!

关于java - 哪种方法更适合将微服务应用程序迁移到云端? Kubernetes、AWS Lambda等,如何取舍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59655628/

相关文章:

java - 根据配置文件中的变量使用不同的bean实现

java - Spring Boot Controller 测试 - Mockito 当 thenReturn 列表不起作用时

java - 如何让 Java 应用程序在 PC 启动时自动启动?

java - AES/CBC/PKCS5填充问题

java - 不要用 if else 比较两个值

java - 比较 Java 中的字符、整数和类似类型 : Use equals or ==?

amazon-web-services - Cloudformation 从参数中删除破折号

java - 如何在 Java Spring Boot MVC 中使用 Ajax 删除多个项目

node.js - Docker 容器与主机不同步

amazon-web-services - 是否可以在 AWS 中为 Lambda 函数配置可用区 (AZ)?