最近我退出了一个应用Go语言的项目组。因为此前对Go语言的理解还停留在实践意识的阶段,没有大型项目的教训,退出这个项目组让我算是真正体验了一把Go语言,职业技能树也更加丰盛了起来。
Go语言的很多语言个性让人耳目一新,而最让我感到震撼的莫过于Go语言服务开发流程的简略便捷,通过Go Build进去的二进制文件,公布到服务器后,间接就能够运行。
相比C/C++语言进去的二进制文件来说,无需治理一大堆依赖、解决各种动静库、动态库等等的问题,且C/C++语言的开发流程,如果是和性能平台相干的程序,光是开发环境、编译环境就可能折腾集体几天,相比之下,Go语言的开发流程让人感觉难受。
当然了,我也不是无脑宣扬Go语言,在Go语言的应用过程中也有一些不解和纳闷,为此也专门横向地比照了一下本人相熟的语言:Java、C/C++、Python,次要是后盾的语言。
开发环境
就开发环境而言,Go语言是最让人省心的;当然Java也很省心,只须要在本地和生产环境别离装置了JDK,其余根本和Go相似了,Java因为JVM中间层能够随处运行,Go的二进制可能须要依据二进制平台从新编译,然而当初支流的平台根本都曾经对立了Linux版本,所以Go语言二进制我目前是没有遇到须要别离编译的状况。
C/C++、Python的开发环境就有点一言难尽了,先说Python,尽管Python应用简略,然而短暂依赖历史版本2.x和3.x互相不兼容以及各种依赖包的问题,也是让很多开发者感到困扰,尽管有pyenv等环境治理的工具,为凌乱的环境治理隔离出一片平静之地。然而,只能说没有比照就没有挫伤。
再说C/C++,因为是和平台强相干的语言,所以就链接库、门路、符号表等等,都和底层操作系统的关联更加亲密一些,对开发者的要求也绝对更高,但即便是优良的开发者,也时常得被C/C++搞得焦头烂额,特地是波及对他人的依赖的时候,因为编译时的平台、依赖等等,局部函数的符号信息不统一、菱形依赖等问题是最难搞定的,大型的C/C++我的项目须要弱小的业余的团队进行环境治理。
运行性能
性能这个陈词滥调了,其实就当初的开发而言,服务对性能的要求曾经没有前辈们的那个时代那么高了,此前看过小时候玩的那些马里奥、魂斗罗等的游戏的实现,看他们是如何把图片素材、逻辑压缩到128k、64k的卡带内存外面,真的是精益求精。
明天就服务而言,即便对于大流量的服务,往往在谋求极致性能和老本之间,更多的会抉择扩服务、加机器来撑持起相干容量的服务;当然,不是说性能不重要,而是说在明天,性能的问题曾经能够从更高的维度或者说从更多的维度解决了。
就具体语言的性能,没有对C/C++、Go语言的进行过压测,但从原理上来说,两者相差应该不大,而对于Java、Python,两者都有虚拟机,然而Python是解释型语言,Java尽管是由中间层,然而也有JIT技术的加持,性能也是更上一个台阶,但Java的GC问题和Stop The World的机制,也使得一些服务不会抉择Java。
横向比照来说,各种语言就开发环境、运行性能而言,都有他们的特点,也各有短处、各有短板。这也使得这些语言在不同场景下,会有不同的应用频率。
Java、Python、Go、C/C++这几门语言,次要的利用都在后端开发这里,尽管后端开发是一个比拟明确的方向,但也仍然能够有很多细分的畛域,不同畛域常应用的语言也仍然有很大的差异。
对于不同的岗位,写之前专门看了慕课网的首页,慕课网首页做了十分具体的划分,这个分类对以后行业的划分也是十分精确的。
下面提到的Java、Python、Go、C/C++这几门语言,次要的利用也都在后端开发这里,尽管后端开发是一个比拟明确的方向,然而在后端开发里,也仍然能够有很多细分的畛域,不同畛域常应用的语言也仍然有很大的差异。
Web后盾
最常见的,也是大学期间常做的后端开发的工作,大部分都是Web开发,也即是面向数据库增删改查,编写接口的业务逻辑,向上承接前端(Web、安卓、iOS、H5等)的申请,实现数据组装并返回,兼顾性能的思考,退出缓存层、分库分表等设计。
在Web后盾,Java、Python都是常应用的语言,其中尤以Java见长,这与Java的生态相干,Java以及Web生态的Spring Boot、MyBatis等,曾经成为中小企业Web开发必不可少的技术栈,在企业招聘岗位当中,对Java这一类的技术要求也是最多的。
其次是Python,尽管Python有丰盛的Web框架反对:Flask、Tornado、Django等等,但做小网站还行,用Python做大型项目的不多,早年Python Web技术的经典案件——知乎,因为性能,一些外围的服务,也曾经改成Go。Python的Web多见于一些访问量不大的网站,比方一些经营平台、流动平台等。
微服务
微服务是近几年火起来的概念,随着云技术的一直成熟,当初都提倡把大服务拆成微服务,通过服务注册、服务发现来实现调用链关系,兼顾云的动静伸缩来实现无状态服务的扩容缩容,也曾经是比拟成熟的技术了。
在微服务外面,Java也是用得比拟多的,Spring Cloud曾经为微服务环境提供了十分多的功能齐全的工具,上手便捷,开箱即用;但因为JVM过程自身的耗费,在一些应用微服务架构外面的要害模块,为了缩小资源的应用和调度的老本,仍然会应用C/C++来实现,通过通用协定对外提供服务。
微服务在这里提及,和Web后盾这些不齐全是并列的关系,微服务是架构,自身是不含逻辑的,Web后盾也能够通过微服务架构来实现,因此在这须要强调下,这里次要是针对微服务生态提到Java Spring Cloud,Java提供了比拟齐备的微服务生态。
中间件
中间件是一个比拟大的概念,在这里把与业务无关的服务对立视为中间件服务,常见的比方消息中间件。
中间件的开发工作在大厂也都被认为是后盾开发;对于中间件,Java也是最常见的语言,Go语言也比拟常见;其实中间件的存在次要依靠于生态环境,一个开发的生态环境只有足够的简单,也才须要中间件的存在,所以这也解释了为什么Java、Go才是最常见的语言。
存储服务
存储服务,如数据库、文件系统、kv存储等,次要是应用C/C++。
因为存储服务和操作系统、硬件设施是强相干的,所以这项工作也只有C/C++容易胜任;在存储服务的实现过程,大量的零碎调用、零碎参数调优,在理论开发的时候还须要看相干的内核源码,所以人造C/C++是最适宜的;当然了,也有应用Go语言的也有一些,这次要是在开发效率和性能之间做的取舍。
云基础设施
云基础设施到明天根本是Go的天下了,依靠kubernetes,明天十分多的云基础设施应用的都是Go语言,在资源调度、资源隔离等方面,Go都有十分成熟的应用。要说资源调度,原本Go语言就没多少年,当初的云基础设施为什么会成为Go的天下?
在早年Google Big Table论文大行其道的时代,Hadoop、Yarn是进行大数据平台资源管理调度的外围,不过那个时候也只有大数据平台平台须要这么多的资源,那时候的容器都是交给yarn托管的;起初docker技术呈现、成熟,再到容器编排、kubernetes,Go语言也胜利夺位,成为云基础设施外面最常应用的语言。所以,明天咱们看到的腾讯云、阿里云这么丰盛封装对外的产品,在它们的背地,都肯定有Go语言与其相干的服务在撑持着。
工具平台
工具平台多指测试、运维等的平台,在理论场景中也有着十分外围的作用,对于这种工具平台,不要求很高的性能,然而个别会有很多临时性的需要,整体的布局也更含糊一些,对于这种场景,Python这种短平快的语言就很排得上用场,所以Python多见于这些工具平台的实现外面。
最初,对于编程语言,除了语言自身的生态,团队的技术栈也是影响你抉择语言的重要起因,在有抉择的状况下,还是须要依据大的生态做出更好的抉择,对的语言做对的事件,事倍功半。
作者:咚咚呛
简介:
全栈工程师,目前就任于BAT的大数据部门,超过4年的技术研发教训,相熟java、python研发,负责过多个零碎研发主程,目前专一于分布式系统研发,在高并发、分布式系统有丰盛的教训
本文由mdnice多平台公布
发表回复