我想开始构建微服务应用程序。到目前为止,我已经确定了每个项目以及它们相互交互的方式,以及与数据库的关系。
我主要使用 Java 8、Angular、Spring Boot、Hibernate 和 PostgreSQL .
在我的本地环境中一切正常!但现在我需要把所有东西都搬到云端。
我想在 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 现在也提供无服务器层。
希望对您有所帮助!