这里给不了解历史的同学先介绍一下背景。EdgeX的前身是Dell的Fuse项目(它是一个开源的物联网平台,包含超过12个微服务以及125000行净代码量),后由Dell将源码捐赠给Linux基金会并发起了EdgeXFoundry。
说得更直白一点,Fuse(也即EdgeX早期)主要是基于Java语言(JVM平台)来实现的,微服务采用的是Spring Boot来构建。但到目前为止,已基本确定用Go语言(Golang)来改写或重新实现,目前基于Go语言实现的主项目为edgex-go( https://github.com/edgexfoundry/edgex-go ,其他的仓库可以不必关注了,除非你对历史比较感兴趣),这也是即将在6月份发布的加利福利亚版本的主要任务之一。
那么,EdgeX为什么要做出弃Java转Go的决定呢(要知道原先的Java版本从功能层面上来看已经比较完备了)?其实EdgeXFoundry官网早已解释过这个原因(点击“阅读原文”查看),这里我们摘取其中的核心点进行说明。
由于Go编译为可执行文件,因此即使先不考虑Java应用程序的运行需要JVM,单就应用程序的大小而言Go的可执行文件也远远小于Java的可执行文件。 下面给出了一幅图来对比EdgeX核心微服务的原始Java JAR与Go可执行文件大小,Docker容器中这些相同微服务的大小也显示在图表的右侧。 Java容器镜像大小的确包含Java的JVM - 因此,在查看Java容器时,它们占用的空间更大:
另外还有关于微服务如何使用内存或CPU等关键资源的对比。得出的结论也令人震惊: Go Lang微服务使用的内存减少了97%,并且通常情况下CPU开销少了5到40倍,如下图:
最后,也是极为关键的,启动时间的对比。结果显示Go服务的启动时间相比Java有接近100%的提升。 通常测量Java微服务的启动时间是以秒为单位,但测量Go Lang微服务的启动时间是以毫秒为单位,如下图:
由此可见,就技术层面而言,Go Lang实现的EdgeX将比原先采用Java语言实现的EdgeX更能适应真实的边缘物联网环境。
但是Java作为一个存在了如此之久的语言,它有生态优势,这一点很显然是新兴的Go Lang语言所无法相提并论的,这是项目主导者Jim White担心的点之一。
无论如何,在EdgeX项目上,Java与Go之战的大局已定,采用Go Lang来重写绝大部分的EdgeX微服务已是板上钉钉。
其实除了EdgeX,Go Lang也正在成为服务端、网络、IoT等开发领域的新宠。而且语言本身开发效率也非常高,值得大家学习。
微信搜索:EdgeXFoundry 即可关注EdgeXFoundry公众号。