golang与java容器化不完全对比指北

wu_sphinx · · 878 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

领导听说服务容器化能减少机器,遂让我们做着手服务容器化的事情,最后做下来,发现目前并不能减少机器,因为公司主要使用java技术栈,我比较喜欢golang, 所以做了一个golangjava的容器化对比,个中偏颇,读者自行考量。
闲话不多说,先来一段简单的golang代码如下

package main

import "github.com/gin-gonic/gin"

func setupRouter() *gin.Engine {
    return gin.Default()
}

func main() {
    r := setupRouter()
    r.Run(":8000")
}

编译一下

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main

编写Dockerfile

FROM golang:1.12-alpine
ADD main /
CMD ["/main"]

制作镜像

docker build -t registry.cn-shanghai.aliyuncs.com/testops/hw-go:latest .

so easy

再来看java版的(在idea上起了一个springboot工程)

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

打包

mvn clean package

同样的编写Dockerfile

FROM openjdk:8-jdk-alpine
ADD /target/demo-0.0.1-SNAPSHOT.jar app.jar
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

打镜像

docker build -t registry.cn-shanghai.aliyuncs.com/testops/hw-java:latest .

先来对比一下镜像

image.png

可以看出:golang:1.12-alpine的镜像尺寸要比openjdk:8-jdk-alpine大不少,这也导致最后制作出来的
镜像hw-go要比hw-java大上不少。

是骡子是马拉出来遛遛,先来试一下hw-go

image.png

image.png

再来看一下hw-java

image.png

image.png

内存占用4.328MiB VS 264.2MiB,66倍的差距,这一轮(当然是在我的实验条件下), java是完败的,我没想到这个对比来的这么强烈,有一点点夸张,但至少可以看出springboot是比较吃内存的(啥也没干,只是起了一个http server而已),这样看来,如果用golang来重写java服务,相信内存占用会少很多,届时减少机器也并非不可能,不过想到在某些springboot服务启动时看到佛祖保佑,**项目,永无BUG的字样,就觉得此事任重而道远……


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:wu_sphinx

查看原文:golang与java容器化不完全对比指北

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

878 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传