首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有更好的方法将Java服务分解为容器

是否有更好的方法将Java服务分解为容器
EN

Software Engineering用户
提问于 2016-11-07 12:29:44
回答 4查看 660关注 0票数 5

我希望将许多Java服务(WAR文件)分解为单独的容器--即"MicroServices“--这样我就可以按需扩展服务、隔离应用程序、松散耦合、方便云部署、 (目前在ESB/运行在同一个JVM中的大约100个服务)。

我看过一个 一些 Docker教程,我担心每个容器的容量大约为150 is (由于JRE本身并不大),但是如果我需要扩展到成百上千个(/or更多)的服务实例,就会有很多多余的磁盘空间被使用.

有更好的方法将Java服务分解成容器吗?

  • 我是不是用了合适的工具来做这份工作?(Docker vs AWS ElasticBeanstalk vs AWS Lambda vs Java应用服务器(/s) vs??)
  • 共享资源方面的最佳实践是什么?(隔离一切或共享一切(以独立换取较低资源)?例如,我是否可以/应该从主机系统安装一个共享驱动器,其中包含JRE的一个共享副本?)

目前正在调查JavaSE8 (compact1) - 这是一个更令人愉快的40是 (包括操作系统)

EN

回答 4

Software Engineering用户

发布于 2016-11-07 13:46:57

Docker共享同一容器实例之间的冗余磁盘空间,以及不同容器实例之间的冗余图像层。例如,如果您有两个不同的微服务,但它们都从Dockerfile顶部的FROM openjdk:8-jre-alpine开始,那么Docker将在同一主机上的所有实例之间共享JRE磁盘空间。

即使Docker没有这样做,这也是您经常使用微服务所做的基本交易。许多微服务体系结构技术都是这样工作的。例如,卡桑德拉( Cassandra )这样的NoSQL数据库通常会创建数十个数据副本。你不应该害怕交换便宜的磁盘空间来获得更大的容量。

至于你的“适合工作的工具”的问题,很多人在类似的情况下成功地使用了Docker,但是很多人也使用了您列出的其他技术。最终,你必须为自己做这个决定。

票数 2
EN

Software Engineering用户

发布于 2016-11-08 22:29:29

你在分解的时候,管理100件跑步的东西(比如码头工人,橡皮筋豆茎,等等)可能比它更有价值。

我会在这里看两件不同的东西。首先,我会考虑将服务分组为较小的“子服务”。不要认为一个服务必须是一个单一的机器/码头形象。例如,我可能倾向于将所有安全服务组合在一个服务中,并确定部署该服务的最佳方法。

第二,我使用AWS Lambda和ElasticBean秸秆进行服务分发。弹性豆柄是很好的长时间运行/高CPU服务。它有很多种方式(CPU使用量、网络I/O、SQS队列长度等)。Lambda有很多相同的东西,但是现在您在一个更受限的环境中运行。Lambda可以很好的工作,但在我看来,它可以处理适度的流量或cron类型的活动最好。

作为一个警告-一个经常运行的Lambda每次运行一段时间可能会很快变得比弹性豆柄机更昂贵。

总之,IMHO,微服务的好处是既可以轻松地更新代码的小部分,又可以轻松地缩放代码的部分。但不利之处在于你所处的位置--什么样的服务分工才是有意义的?对100个容器的构建/测试/部署/监视可能超出了一些组织所能管理的范围。但是把它们分成10到20个容器,现在你有了一个更容易处理的问题。

票数 1
EN

Software Engineering用户

发布于 2016-11-08 00:48:27

Java 9模块的设计是为了解决其中一些问题:http://www.theserverside.com/news/2240242583/Java-9-promises-modularity-and-new-value-types

但是,也许您应该迁移到内存占用较小的JavaScript。

票数 -1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/335539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档