跟不少同事谈起来为什么公司要使用go,大多是言语不详,答非所问,支支吾吾。遂决定自己找到答案。
答案很简单:云原生大环境下,我们的代码只会运行在docker容器中,要占用尽量小的资源来满足k8s的调度要求。go语言符合这些特性,并且凑合能用,于是go便鸡犬升天了。
补充:
1、云原生是什么
云原生是一种思想,主要目的:面对海量c端用户、业务复杂、需求迭代快速、沟通成本增大等场景下,快速提供稳定、可靠、易扩展的服务。它有几个关键技术:微服务、容器、服务网格、不可变基础设施、声明式 API。其中以k8s最为重要,几乎是围绕着它来构建云原生的生态。(注意:这里的容器特指docker)
2、’容器‘是接口,有多种实现。docker已经成为事实上的容器代名词了。docker的特点是:1、基于linux开发的,所以只能运行linux容器,所以代码别无选择,只能编译成特定发行版本的linux代码。这就可以排除’一次编写多出运行‘的优势。2、运行在docker engine上的容器是轻量级的,基于进程隔离的,公用底层资源。所以运行在容器中的代码必定要小、快、轻。
3、java的劣势
基于以上事实,多一层jvm依赖是冗余的;java占用过多资源;启动速度慢;
4、go的决定性优势
启动快;微服务架构下占用资源少;能够更好满足k8s快速调度的需求;google等大厂的推广。至于其它博客说的语法简单、原生支持并发等,是一门工业语言必备的条件,是次要优势
5、go劣势
发展时间过短,语法层面支持不够、三方库质量不好
5、java前景
java已经在快速做出改变,模块化、spring native都是为了云原生做的改造
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)