近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务。IBM 也于近日开源了轻量级 Java 微服务应用服务器 Open Liberty 。但是采用 Java 开发微服务真的是最好的选择吗?来自 JPmorgan 的高级工程师 Elliot Forbes 基于自身的经历,从成本角度进行分析,并与其他语言的微服务做了对比,很好地回答了这个问题。
Elliot 所在的团队最初使用 Java 开发了一个单体系统。他们的生产环境总共有 12 台服务器,每台服务器上部署了 20 到 30 个实例,每个实例使用 8G 内存。这样,总共耗费了 1.5T 到 2.5T 内存。后来,他们将单体拆解成 5 个微服务,并使用容器来部署微服务。每个容器运行一个微服务,因为是基于 JVM 的,所以至少需要 1G 内存。原先的一个单体实例使用 8G 内存,拆成微服务后总共只需要 5G 到 6G 内存,省下了至少 2G 内存。
但事情不会就这么简单。他们当中的一个微服务负责对外提供 REST API,是整个系统最为关键的部分。为了提高可用性,他们在欧洲、北美和亚洲分别部署了 4 个实例。这样一来,这个微服务总共使用了 12G 内存,所以整体的内存使用反而增加了不少。
而如果使用 Go 语言替代 Java 开发微服务会怎样呢?每个微服务的内存可以从 1G 降到 64M,那么之前那个部署了 12 个实例的微服务总共只需要 768M 内存,这比之前的单个 Java 微服务实例用的内存还要少。
假设微服务是部署在谷歌云平台上的,按照 GCP 的收费标准,1G 内存每小时收费在 1 美分到 2 美分之间,一年大概需要 87 美元到 175 美元,那么 12G 内存一年至少要花费 1000 美元。5 个微服务加起来一年至少需要 5000 美元。而如果使用 Go 语言,这个数字差不多在 500 美元左右,可以说是减少了一个数量级。
不过 Elliot 也解释说,成本只是在采用微服务时需要考虑的众多因素当中的一个。除了成本,还需要考虑开发语言适用性等方面的问题。不过对于大型企业来说,他们拥有大量的微服务,成本仍然是一个重要的考虑因素,毕竟一年下来,有可能为他们节省数百万美元。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论