哪种方法更好地将微服务应用程序迁移到云? Kubernetes,AWS Lambda等如何选择一个? - java

Improve this question

我想开始构建微服务应用程序。到目前为止,我已经确定了每个项目及其相互交互的方式,以及与数据库的关系。
我主要使用Java 8,Angular,Spring Boot,Hibernate和PostgreSQL。

在我的本地环境中一切正常!但是现在我需要将所有内容移到云中。

我当时正在考虑在AWS的EC2免费套餐中测试该应用程序。

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

但是最后,我需要一种正确的方法来在云中执行此操作。

任何想法?

参考方案

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

根据业务需求选择服务

云有很多产品可供选择,可能会造成混淆。我已经使用过Kubernetes和AWS lambda,并且我相信应该根据业务需求选择服务和架构,而不是因为我们听说过它们。您需要考虑应用程序的使用,可用性,可伸缩性和开发生命周期。不要过度工程师如果某个应用程序不是业务关键型应用程序,并且被少数人使用,则可以轻松地将其部署在Elastic beantalk或lambda上。您不需要Kubernetes。始终尝试使用管理服务,而不是重新发明轮子。

Lambda vs Kubernetes(k8s)

只要您知道无服务器架构及其周围的注意事项,Lambda和API网关就是一个非常强大的选择。与Goland,C#,nodejs等其他语言相比,Java在lambda上的冷启动时间和性能并不理想。以我的经验,大部分时间使用Lambda都可以获得如此巨大的成本优势,您可以免费获得免费许可。您可以快速部署代码,而不必担心可用性,可伸缩性或停机时间。这是新建项目的绝佳选择。

Kubernetes(k8s)每个人都在旅行车上,而没有意识到他们是否真的需要它。 Kubernetes是一个非常强大的容器编排,但这是一项全新的技能,您仍然必须进行容量规划并学习很多围绕它的活动部件。如果您想打包依赖项并希望与云无关,那么容器是绝佳的选择。如果要将旧版应用程序迁移到云中,甚至与现代应用程序并排运行旧版应用程序,这也是一个不错的选择。

选择数据存储

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

希望能有所帮助!

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java DefaultSslContextFactory密钥库动态更新 - java

我有一个使用org.restlet.engine.ssl.DefaultSslContextFactory的现有应用程序和一个在服务器启动时加载的密钥库文件。我有另一个应用程序,该应用程序创建必须添加的证书服务器运行时动态地更新到密钥库文件。为此,我在代码中创建了证书和私钥,然后将其写入到目录。该目录由bash脚本监视,该脚本检查是否有新文件,如果出现,它将…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…