golang微服务框架(哪个Golang的Web框架好一点,可以推荐一下吗)
- 哪个Golang的Web框架好一点,可以推荐一下吗
- Go语言为什么在国内很火
- 如何使用Go语言框架进行项目开发
- 现在想再学习一门编程语言,应该选择go还是python
- 系统软件架构中,现在很流行微服务,那么使用微服务就一定好么微服务有哪些缺点呢
- golang前景怎么样
可以看一下 GitHub 上的 awesome-go
( awesome 很酷的意思。可以理解为优质golang资源大全)
这里整理了基于golang的优质的web框架列表,很多开发者都在关注。
你可以从中选择适合你的。
awesome-go 中文版:
https://github.com/hackstoic/golang-open-source-projects/blob/master/README.md
awesome-go 中文版 web框架推荐列表
https://github.com/hackstoic/golang-open-source-projects/blob/master/README.md#web框架
谢谢邀请!
Go语言不只是在国内很火,在全球范围了也有不少的大名鼎鼎的公司在使用,比较著名的是全球发展最快的移动互联网公司字节跳动,以及国内最好的二次元视频网站bilibili都在使用Go语言作为主要的后端开发语言,你天天在用的抖音、今日头条、哔哩哔哩背后离不开Go语言的功劳。
全球有哪些公司在使用Go语言
目前在全球范围内使用Go语言的科技公司并不在少数,很多企业更是将Go语言作为自己的核心技术栈,这其中就包括了Google、Facebook、Amazon、Docker、腾讯、百度、阿里、字节跳动、哔哩哔哩视频网站等等。
Google作为开发Go语言的企业,自然是要支持Go语言的,Google的开源项目里面不少就是使用Go语言开发的,Google的GitHub开源主页里面,至少有五分之一的项目都是用Go语言开发的。
Facebook也将Go语言作为主要开发语言,在Facebook内部,PHP、Go都占据了很大的比例,其中大名鼎鼎的grace就是用Go语言开发的。亚马逊的AWS能够成为全球最大的云计算公司,Go语言功不可没,现在阿里云也在追寻AWS的脚步,开始大规模使用Go语言开发自己的云计算产品。
Docker相信已经不需要我过多介绍了,作为目前全行业最好的容器,Go是Docker公司最重要的编程语言。相应的腾讯在也曾做过万台规模的Docker实验,因此腾讯在这一块也做出了很多尝试,大名鼎鼎的腾讯游戏蓝鲸平台就需要很多的Go语言工程师来做容器开发,腾讯的核心技术栈是C/C++,不过很多业务用Go语言做起来方便很多,可是腾讯的技术栈很多都基于C/C++,重构难度极大,因此腾讯在很多新业务都在尝试用Go语言来开发。
春晚的时候大家应该都见识了百度技术的强大,估计不少人都被百度强大的技术实力折服了,这里面百度底层架构的稳定起了很大的作用。百度运维的BFE项目,主要是负责前段流量的介入,以及百度的消息系统,这两块非常重要的业务的后端服务器开发和维护都是使用Go语言。
最后说一说比较年轻的三家中国公司,一家是七牛云,是目前最好的云计算公司之一,七牛云的老板许式玮是原来雷军时代金山WPS的架构师,也是中国最早的Go语言布道者。字节跳动旗下的抖音、今日头条等产品线的后端开发很大比例都是通过Go语言来实现的,因此字节跳动也是Go语言大户。最后是上一次哔哩哔哩的代码泄漏,大家也看到了,哔哩哔哩的核心代码几乎全是Go语言写的。
Go语言有哪些优势
性能极其出色:Go语言的性能非常出色,最关键的是在性能强劲的同时还能像Python语言一样高效地进行开发,要知道Go语言是静态语言,而Python是动态语言。
编译方便、部署简单:Go语言可以直接编译为机器码,编译生成的是一个静态可知从文件,除了glibc之外没有不依赖其他外部库。部署就直接扔一个文件就可以了,目标机器上只需要基础的系统,必要的管理、监控工具就可以了,完全可以不用考虑各种包、库的以来关系,维护成本也大大降低。
出色的并发性能:这一点对于后端语言还是很重要的,曾经Java最大的杀手锏,一个是跨平台、一个就是强大的并发能力。Go语言是语言层面的支持并发,这一点你可以充分利用多核,也可以非常容易的使用并发。
良好工程语言:Go语言可能不具备很好的学术特性,很多高级编程语言有的特性Go语言都没有,可这却让Go语言成为一个非常好的工程语言,没有任何多余的,规范非常简单灵活,这一点你用Java就知道了,也有完善的工具链,几乎就是为工程而生的。
Go语言的应用场景
Go语言在消息推送、监控、容器、处理日志、数据打包、虚拟机处理、文件系统等领域非常有优势,并且非常适合用来做网络并发服务。
服务器编程、分布式系统、数据库代理起、网络编程、内存数据库、以及各种各样的云平台,这都是Go语言的主战场。
说了这么多,我觉得作为一个程序员,你或许真的有必要学习一下Go语言,这真的是一门非常优秀的编程语言。
本文为字节跳动签约作者EmacserVimer悟空问答原创文章,未经允许转载、抄袭必究!
项目背景:前后端分离,使用RestAPI通信。
后端使用Go做API,Gin+Xorm+Redis+Mysql。是标配
谢邀。首先,不要限制住你的思维。现在想学习一门编程语言,不一定是go或是Python,而是根据你想要做什么、具体是什么而定,这取决于你的目标,真的。
如果您想进行Web编程,请学习Javascript,因为它允许您对前端和后端进行编码(通过Node.js)。
如果你想进行系统编程,请学习C。Microsoft Windows和Unix / Linux / OSX都是C语言的核心,因此可以从C语言无缝地与大部分系统接口。如果您愿意,可以让您进入嵌入式编程。
如果您对算法体系结构背后的数学理论以及学习构建高效,可组合,解耦,可维护系统背后的科学感兴趣,并使用类型系统来证明代码的正确性以获得最终的安全性和稳定性,那么请学习Haskell。 Haskell强调使用纯数学函数构建软件,IMO是有史以来设计最好的语言之一。
但是,如果您对代码和算法的结构感兴趣,并且编写它们的方式与编写lambda演算时的方式非常相似,并且有兴趣学习将代码作为数据和数据处理为代码,那么请学习Lisp。有趣的是,Lisp很容易在非常快的速度上变得疯狂。 Lisp是非常高级的,所以掌握这种语言我认为给你最好的机会,能够很快写出很多有用的东西(我建议使用常见的Lisp方言来实用)。
如果您有兴趣在跨平台遗留系统和大型企业环境中工作,并且学习一种在企业软件开发中根深蒂固的语言,至少在接下来的20年内它可能不会消失,那么学习Java。
如果您对大数据感兴趣并构建处理数PB数据的机器学习和分析应用程序,请学习Scala。这里有人会说Java,但我在这个领域的经验是Java在这个问题领域的扩展性不够好。 Scala在不牺牲性能的情况下为您提供更大的灵活性,并且在这个领域迅速普及。
但是,如果您只是对大数据的数据科学和发现部分感兴趣,请学习Python,因为它拥有统计建模和分析大数据集样本特征的最佳工具。 Python还为您提供服务器端Web编程和系统脚本。
正如您所看到的,您应该学习的1种语言取决于您想要做什么。
这并没有一个正确的答案,永远都不要限制住自己的思维,希望我的问题对您有一定帮助。
我会在这里发布所有与科技、科学有关的有趣文章,欢迎订阅我的头条号。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论。
(码字不易,若文章对你帮助可点赞支持~)
下面简单回答下这个问题。在回答这个问题前还是先回顾下微服务架构。
微服务架构概述
微服务架构本质是单个业务系统彻底的组件化(前端,逻辑层,数据库)解耦,同时相互之间通过轻量的服务接口和协议进行协同。这和很早就谈到的组件化架构思想是一致的,实现微服务架构后,你会看到没有传统业务系统的概念了,有的只是微服务模块或小应用。
微服务架构最近又炒的相当活,很多人会说SOA过时了,ESB过时了,甚至还有人用微服务架构去彻底的否定SOA和ESB,这些都是相当危险的信号。在我12,13年写企业私有云PaaS平台的一系列文章的时候,已经提出了业务能力组件化,组件服务化的微服务架构思想,但是实际应用实施效果并不太理想。
我们可以先看下从单体应用到微服务架构的变化图。
把这个核心搞清楚后,再来看下网上找到的对微服务架构的一些定义和阐述:
微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。
微服务不需要像普通服务那样成为一种独立的功能或者独立的资源。定义中称,微服务是需要与业务能力相匹配,这种说法完全正确。不幸的是,仍然意味着,如果能力模型粒度的设计是错误的,那么,我们就必须付出很多代价。如果你阅读了Fowler的整篇文章,你会发现,其中的指导建议是非常实用的。在决定将所有组件组合到一起时,开发人员需要非常确信这些组件都会有所改变,并且规模也会发生变化。服务粒度越粗,就越难以符合规定原则。服务粒度越细,就越能够灵活地降低变化和负载所带来的影响。然而,利弊之间的权衡过程是非常复杂的,我们要在配置和资金模型的基础上考虑到基础设施的成本问题。
在了解了微服务架构后,我们来分析下微服务架构又哪些缺点和难点。
微服务模块拆分后,各微服务间集成复杂度指数级增加
简单举例来说,一个企业已经实施了5个业务系统,业务系统之间有10个接口。如果全部微服务化则可能设计到50个微服务模块,上100个接口和集成点。可想而知,在彻底实施微服务后,我们前期架构设计,后期集成和管控的复杂度增加10倍以上。
这种集成难度会远超大多数人想象,如果拿真实做的项目来说,如果谈业务系统只有3个,而到微服务模块级别则有接近60个,而实际涉及到的集成接口上1000个。我们做任何一个复杂端到端业务的联调基本就需要花2,3周甚至更长的时间。
互联网企业为何适合做微服务架构,其重要的一个原因就是互联网企业如电商平台,在进行了微服务化后各个模块之间耦合性很低,并不会有太多的集成和协同点。或者简单来说,各个微服务模块更多的是向上面的PC端或APP端提供服务能力,而模块横向间接口协同很少。
正是在这种低耦合情况下,协同和集成相对来说容易。而转回到企业内部你会发现,在微服务模块化后,各个模块之间的集成点相当多,特别是业务系统拆分到模块或组件这一个级别后,很多原有内部的集成和依赖点全部暴露出来了,你都需要去很好的管理。由于这里面有大量的横向集成和协同点,因此导致的就是微服务模块间的横向集成异常复杂,远超很多互联网应用,这是实际你会面临的问题。
微服务模块拆分后,各微服务间集成复杂度指数级增加
只谈微服务架构的松耦合和高扩展性,而不谈开发和集成复杂度的都是耍流氓。
实际上当前很多企业对微服务架构并没有如此迫切,互联网很多企业推行微服务架构更多的还是考虑到巨大的业务并发量下的系统弹性扩展能力,而实际大多数企业内应用往往并没有如此海量并发。其次,即使在并发量增加的情况下通过进行代码本身的优化,数据库调优或者升级硬件服务器资源都可以较好的解决性能问题。而做这些事情投入的成本远远小于微服务架构带来的开发复杂度增加成本,后期的运维管控成本。
要做到完全微服务模块独立,微服务架构下最大的一个变化就是数据库也拆分开了,原来的一个业务系统如果分为5个微服务模块,那理论上就是5个独立的后台数据库,而且数据库间还不能随便相互连接和访问。只有这样微服务模块才能做到独立部署和管理。
由于数据库拆分带来两个问题,其一是我们原来很简单的一个跨表查询操作现在无法做了,我们必须调用两个微服务模块提供的服务,查询到数据后再到逻辑层进行组合。其次最大的问题就是如果一个业务操作需要同时更新两个微服务模块的数据,由于服务本身无状态,导致了这种分布式事务问题很难解决。
企业内业务系统很大一个特点就是业务逻辑和规则相对互联网更加复杂,而且有更高的事务一致性要求。正是由于这个原因,无法解决好分布式事务的问题都将直接导致后续数据不一致和业务错误。
原来通过调用项目内一个API方法就能解决的问题,现在要调用远程WS接口才能解决,这本身就增加了开发和调试的复杂度。一个微服务模块与外部其它模块的集成和协同越少,你会发现该微服务模块和传统业务系统开发没太大区别,但是当其涉及到完成任何一个功能都需要调用外部微服务模块的服务接口时候,其开发模式和效率上就会带来巨大的变化。
微服务架构下运维难度增加
在实施了微服务架构后,运维的复杂度也是成倍增加,任何一个微服务模块出问题都可能影响到整个业务应用的功能使用。我们在运维时候不仅仅要健康单个微服务模块,还需要健康所有的接口服务监控状态。
如果跟Docker集成了,我们看到整个性能监控和问题分析都会变麻烦了,没有实施微服务架构前发现问题,我们直接可以看应用服务器上类似tomcat或jboss日志,而实施了微服务架构后,应用容器已经是自动部署和动态分配的,原有的故障诊断模式行不通,而需要PaaS平台本身提供完整的预警和日志分析能力。
再次,如果发现了性能问题或故障,我们的解决方案是如何的?我们如何保证不影响到业务运行,不出现数据的丢失,或者在微服务模块扩展的时候不出现业务中断等。这些已经不是简单的部署架构层面的冗余能解决的问题,而涉及到我们在整个微服务架构中的消息策略,事务管理机制,持久化机制等问题。
引入微服务后的实施难度增加
一个企业所涉及到的IT开发和架构能力以及企业本身的IT治理管控成熟度都将直接影响到微服务架构能否实施成功,要知道引入微服务架构后集成和后续运维等的复杂度都会成指数级增长。
方式1:引入的外部开发商进行微服务架构化
如果一个企业本身IT部门规模小,软件以外购为主,那么势必在对ERP等各类软件的选型评估后引入不同的软件产品提供商或软件开发商。那么软件商本身都有了成熟的产品或架构,其产品内部的模块是否符合组件化和微服务架构的要求,我们不得而知。
即使招标要求写明软件提供商提供产品需要基于SOA或微服务参考架构,但是实际上由于企业本身的IT能力和水平往往也无法验证,而对于软件厂商来说一定希望是卖现有产品,减少改造和定制实现利润的最大化。
对于软件开发厂商来说对已有的软件产品是没有微服务架构改造的动力的。那在这种情况下要推动微服务架构实施落地必须的就是企业本身有很强的架构管控能力和甲方话语权。
在曾经实施的案例里面可以看到,甲方在有较强的IT规划和架构设计能力情况下,才可能一开始就划分好微服务模块并且设计好微服务模块间的接口,在进行招标和选型。同时甲方话语权强的情况下,可以完全要求软件供应商按照自己定义好的标准,规范,架构进行微服务模块的开发。
简单点来说顶层架构分解和接口设计能力不在单个微服务模块开发商手里面,而是在甲方手里,或者在甲方请的专门负责规划架构设计的技术咨询团队手里。
在这种模式下,技术咨询团队应该对整体模块划分和后续集成负责,技术咨询团队就需要有业务和技术两方面的能力,同时有类似领域的规划设计经验,系统开发建设经验等。这些本身就对技术咨询团队提出了相当高的要求,可以来讲很少有技术咨询团队达到这个水平,包括埃森哲或德勤等也难。
在微服务架构下,我们希望的是一个业务系统如果由三个微服务模块组成,在我们进行了前期的架构和接口设计后,我们完全可以将三个模块发标给不同的软件开发商建设和实施,然后在根据预先定义的服务接口进行集成。这个从理论上是行得通的,但是实际上出现两个问题。
其一是刚开始的模块划分或接口设计不合理,在后面开发过程中才发现又很难再大变更。
其二是微服务模块间的接口服务太多,导致了模块间的集成和联调异常复杂。
从上面也看到引入微服务架构后,企业本身可以削弱单个软件供应商对企业本身的约束,防止被单一厂商绑定。因此企业没有特色要求,从软件厂商来说没有任何动力和意愿推微服务架构。
方式2:企业自由开发团队实践微服务架构
如果企业本身的IT成熟度没有达到一定阶段,显然是不可能推行实施微服务架构的。这个道理前面已经谈到过,在企业IT建设中,如果连粗粒度的业务系统以及它们之间的集成都管理不好,那么更没有能力管理细粒度的微服务模块。那么如果企业IT成熟度达到一定水平,在推广微服务架构还存在的难点如下:
首先是架构设计能力的显性化,即架构设计这个工作的输入,输出和过程需要更加的显性化出来形成团队都认同的标准工件。一个业务系统没有拆分开时候,虽然有架构设计和组件划分,但是这个工作是属于团队内部的事情,即使架构设计不合理,在后期集成也可以通过诸多变通方式解决掉。而现在是不同的微服务模块可能分派到两个独立的团队开发,原来属于自己内部黑盒的问题变为团队间问题。
简单来说你原来藏着或没做规范的东西太多,而现在这些不能再藏着掖着了,当真要把这些东西拿出来的时候,你才会发现你原来架构能力是有欠缺的。正如我们理解了一个东西,那么要让我们清楚的讲出来困难,那么我们的理解有欠缺。对于我们能讲清楚的东西,要系统的写下来有困难,那么说明我们讲的结构和条理有欠缺。
其次管控要求和规范体系的建立,对于管控要求可以看到如果两个微服务模块分给同一个团队开发,如何才能保证开发的团队保持两个模块的完全独立和解耦,两个模块间不会出现相互交叉的数据库直接调用,也不会存在直接绕开Service接口的其它耦合调用?这些如果没有完整的管控和检查体系我们很难约束。以上即是引入微服务架构后带来的难点或缺点,供参考。自己也长期专注于SOA,微服务,DevOps支撑平台建设实施,欢迎交流。
golang前景很广阔
go(又称golang)是google的三位大牛罗伯特·格瑞史莫(Robert Griesemer), 罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)在2009年推出的编程语言,它是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,golang很方面的支持协程,非常适合做高并发的后端服务,在性能方面可以比肩c++。
golang广泛应用如下场景:
1、后端服务开发
golang很方面的支持协程,非常适合做高并发的后端服务,性能不比c/c++差,开发效率比 c/c++高,目前国内很多一线互联网公司例如BAT,京东、美团、滴滴都在用golang搭建自己的后端服务。
2、微服务
近两年微服务架构流行,主流互联网厂商内部都已经微服务化,基于golang开发很对优秀的微服务组件
1)Istio 微服务治理组件,可以很方便的管理微服务
2)go-grpc golang版本的grpc组件,可以很方面的进行微服务调用
3)Consul 服务发现和配置的工具,分布式, 高度可用,并且具有非常好的可伸缩性。
3、云计算
可以说随着云计算的兴起,golang才逐渐兴起,因为基于golang开发云计算两个重要的基础软件
1)docker
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。现在很多云计算厂商的虚机都是基于docker构建的。
2)kubernetes
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
4、区块链
以太坊就是用golang构建的,现在很多区块链项目都是用golang构建的。
随着微服务、云计算、区块链逐渐流行后,golang就会更广阔。
标签:服务 语言