我希望将许多Java服务(WAR文件)分解为单独的容器--即"MicroServices“--这样我就可以按需扩展服务、隔离应用程序、松散耦合、方便云部署、等、等 (目前在ESB/运行在同一个JVM中的大约100个服务)。
我看过一个 一些 Docker教程,我担心每个容器的容量大约为150 is (由于JRE本身并不大),但是如果我需要扩展到成百上千个(/or更多)的服务实例,就会有很多多余的磁盘空间被使用.
目前正在调查JavaSE8 (compact1) - 这是一个更令人愉快的40是 (包括操作系统)
发布于 2016-11-07 13:46:57
Docker共享同一容器实例之间的冗余磁盘空间,以及不同容器实例之间的冗余图像层。例如,如果您有两个不同的微服务,但它们都从Dockerfile顶部的FROM openjdk:8-jre-alpine开始,那么Docker将在同一主机上的所有实例之间共享JRE磁盘空间。
即使Docker没有这样做,这也是您经常使用微服务所做的基本交易。许多微服务体系结构技术都是这样工作的。例如,卡桑德拉( Cassandra )这样的NoSQL数据库通常会创建数十个数据副本。你不应该害怕交换便宜的磁盘空间来获得更大的容量。
至于你的“适合工作的工具”的问题,很多人在类似的情况下成功地使用了Docker,但是很多人也使用了您列出的其他技术。最终,你必须为自己做这个决定。
发布于 2016-11-08 22:29:29
你在分解的时候,管理100件跑步的东西(比如码头工人,橡皮筋豆茎,等等)可能比它更有价值。
我会在这里看两件不同的东西。首先,我会考虑将服务分组为较小的“子服务”。不要认为一个服务必须是一个单一的机器/码头形象。例如,我可能倾向于将所有安全服务组合在一个服务中,并确定部署该服务的最佳方法。
第二,我使用AWS Lambda和ElasticBean秸秆进行服务分发。弹性豆柄是很好的长时间运行/高CPU服务。它有很多种方式(CPU使用量、网络I/O、SQS队列长度等)。Lambda有很多相同的东西,但是现在您在一个更受限的环境中运行。Lambda可以很好的工作,但在我看来,它可以处理适度的流量或cron类型的活动最好。
作为一个警告-一个经常运行的Lambda每次运行一段时间可能会很快变得比弹性豆柄机更昂贵。
总之,IMHO,微服务的好处是既可以轻松地更新代码的小部分,又可以轻松地缩放代码的部分。但不利之处在于你所处的位置--什么样的服务分工才是有意义的?对100个容器的构建/测试/部署/监视可能超出了一些组织所能管理的范围。但是把它们分成10到20个容器,现在你有了一个更容易处理的问题。
发布于 2016-11-08 00:48:27
Java 9模块的设计是为了解决其中一些问题:http://www.theserverside.com/news/2240242583/Java-9-promises-modularity-and-new-value-types
但是,也许您应该迁移到内存占用较小的JavaScript。
https://softwareengineering.stackexchange.com/questions/335539
复制相似问题