当前位置: 首页 > 科技观察

助你掌控微服务架构的20个Go语言项目

时间:2023-03-14 19:10:05 科技观察

20个Go项目,助你掌握微服务架构应有尽有。当谷歌的编码团队在2007年审视计算机语言时,他们看到了数百种非常好的编写软件的工具,但没有一个为谷歌提供了合适的功能,一种可以支持大量构建谷歌所有需求的语言服务器集合中的包。有些语言过于专注于栈的底层。有些太复杂了,充满了阻碍的功能。谷歌开发人员想要一种语言,既简单到可以在几个小时内学会,又要复杂到可以处理现代互联网上的信息流。解决方案是Go,这是伴随着C、Java或JavaScript长大的程序员所熟悉的语言——换句话说,几乎每个程序员都熟悉。Go具有足够的功能来编写一些循环和编码块,但很少有高级功能需要您花费大量时间来掌握。内置优化程序可以轻松从互联网上获取数据。而其他一切,无论看起来多么巧妙,都被忽略了。对于基于微服务架构构建应用程序的团队来说,Go是一个很好的选择,因为这些服务的数量对于谷歌今天运行的服务来说不值一提。你的项目可能不会向全世界提供电子邮件、地图、搜索和无数其他云服务,但它最终可能仍然会为用户提供几十种不同的小信息服务。相比之下,每个微服务项目都是Google服务的微版本或纳米版本。Google决定开源Go是一个明智之举。这种语言催生了数以千计的项目,最终为您的Web项目奠定了基础。这种丰富的传统使并行工作的团队更容易创建自己的服务集群。这里有20个最有趣的开源项目,可用于帮助您构建自己的Go微服务网络。从专注于消息传递、路由、错误处理或API的小型工具包,到用于构建MVCWeb应用程序的完整框架,您会发现许多基于Go的微服务工具包。1.BeegoBeego框架包括许多具有额外标准的附加功能,例如功能齐全的路由器和具有CRUD操作的对象到数据库映射器,几乎是开箱即用的。许多Beego粉丝最喜欢的工具是Bee工具,这是一个快速而强大的命令行工具,用于构建、更新、打包和部署应用程序。Bee工具能够从模板生成源代码,并始终保持最新的数据库。2.Buffalo的很多微服务框架所提供的功能都只是冰山一角。但是Buffalo团队需要的是能够组装Web应用程序所有部分的东西,包括应用程序本身的一些设计。他们喜欢称其为“生态系统”,因为许多部分可以组合在一起。如果你想要路由功能(很少有人不想要),你可以将Gorilla/Mux项目打包进去。如果你需要模板,Buffalo会更喜欢Plush而不是内置的Go机器。一个名为Pop的泛数据库连接模块将帮助您将数据库信息转换为Go对象。您还将找到连接到数据库、处理cookie以及执行您能想到的任何其他事情的标准方法。3.Cobra有时,您只想为您的代码提供一个命令行界面。Cobra已准备好处理CLI的所有标准功能,因此您无需浪费时间实现代码来寻找-h或-help标志。如果您的微服务将响应带有大量标志和其他功能的命令行调用,那么您将需要集成Cobra。4.Docker你可以在任何机器上运行你的微服务代码,包括你办公室早已被遗忘的服务器机房里的旧机器,但越来越多的人选择将他们的代码打包在Docker容器中,并将这些容器发送到云端.这些小包可以更轻松地处理大量不同的代码片段——当您对微服务架构的愿景要求您创建许多独立的小代码片段时,这是一项有价值的服务。值得一提的是,Docker是用Go编写的,尽管在部署Docker容器时您可能永远不需要关心这一点。DockerCommunityEdition是开源的,因此您可以根据需要继续使用它,但很可能您只需要将Docker作为部署自己的微服务项目的工具。Go爱好者会想记住Doker是用Go编写的,而Doker无处不在的真正原因是对该语言的强大支持。5.EchoEcho是一个极简主义的框架,但它有许多最重要的组件来传递信息。它的路由器会解析URL并将一些数据转换为参数,因此您无需解析它们。然后,您可以混合使用身份验证、表单解析、压缩和其他合理的限制。这使您可以专注于从函数返回正确的信息。6.错误有时,API的用户会传递需要标记的错误参数。您可以自己处理,也可以将其传递给Errors,这是一个自动执行大部分跟踪以帮助调试的库。发生错误时,Errors会用注释将其包装起来,详细说明出错的地方和位置。7.Gin听起来可能不是一个显而易见的名字,但Gin项目实际上是流行的Martini框架的下一代。可以说,Gin只是扔掉了一些多余的东西,专注于最吸引人的部分。但是,花费大量时间构建Node.js微服务应用程序的开发人员会感到宾至如归。通过实例化一个对象然后附加一个函数来处理特定调用,您可以在Gin中创建一个微服务。Gin处理路由,而您的函数提供业务逻辑。如果省略一些标点符号,它甚至看起来像Node.js代码。8.Ginkgo测试可能是微服务开发中最具挑战性的领域。Ginkgo通过行为驱动测试扩展了标准Go发行版的内置测试机制。它的测试语言提供了一种高级机制,用于阐明特定功能或服务应生成的内容。结果通常使用Ginkgo自己的Gomega匹配器进行评估,但如果您愿意,也可以使用不同的匹配器库。Ginkgo是一个复杂的框架,具有用于设置测试数据、运行测试和事后切割测试数据的各种选项。这种结构鼓励您描述结果,让Ginkgo处理其他一切。9.Goa如果你是一个过去使用过Ruby和Praxis框架的开发者,或者你只是想欣赏设计语言的力量和纪律的人,你会发现Goa有很多值得喜欢的地方。您不需要自己编写Go代码。您可以在GoaDSL中为API编写设计规范,Goa会将其翻译成完成工作的Go代码。DSL针对微服务API进行了优化,并将强制您的设计符合标准架构。10.GorillaGorilla项目是另一个大型集合,旨在帮助您快速交付所需的大部分模块。Gorilla的Mux路由模块被许多其他框架使用,因为它工作得非常好。许多用户指出websocket代码是他们采用Gorilla的主要原因。11.Gotify同步一组微服务的挑战之一是设置高效的消息传递节点。Gotify是一个用于发送和接收消息的简单服务器,将您的微服务集合与消息的持久存储相结合。可能最有用的部分是用于帮助调试的Web界面,这是一项非常困难的任务。12.Hugo使用像Hugo这样的静态站点生成器可以构建的微服务并不多,但是当你对重复查询的答案数量有限时,这是一个值得考虑的选项。雨果会一次次吐出答案,一次又一次地端上来。当您的答案已经以HTML格式提供时,此项目非常有用。13.Kite如果你想建立一个更严格控制的服务组,又不想服务之间的交互超过通常的量,请看一看Kite。Kite的诞生就是为了让微服务通信的协调变得更简单。来自非Kites的API调用通过websockets进入,然后使用更快、更低级别的套接字连接(基于dnodes)来传递新消息。称为Kontal的服务注册和身份验证服务位于中间。如果你需要经常交换信息,协调许多操作,在不同服务器之间添加这一层互连可以让一切变得更快。14.Logrus跟踪流入和流出API的数据及其可能产生的错误通常意味着写入日志文件。这个过程可以像将一行数据写入一个打开的文件一样简单,但包含一个具有所有额外功能和结构的完整日志记录框架通常是有意义的。Logrus提供了一个格式化程序来标准化您的输出,并使将来的任何日志文件分析自动化变得更加容易。请不要编写您自己的快速而肮脏的日志记录代码。请改用像Logros这样的库。15.Nano构建微服务并不需要太多。简单的Nano项目就是一个很好的例子。实际代码不超过200行,算上注释也就400多行。但是,您可以使用自己的几行代码构建一个微服务——一个将封装处理请求所需的业务逻辑的微服务。该框架还有其他一些优势,例如语言中立的API结构,因此您的Go代码可以很好地与用其他语言编写的任何其他服务一起使用。那么你还需要有一个良好的测试流程来嵌入你自己的本地测试程序。没有更多,但这就是重点。16.Negroni有些人不满足于马提尼的复杂,决定走更简单的方向。他们剥离了路由功能和一些其他部分来创建Negroni,这是一个非常小的工具,除了提供一些标准文件、处理您的自定义请求、从基本问题中恢复并保留日志之外,它没有做更多的工作。如果你想要额外的,你可以自己混合。Negroni团队提供了一系列可供合作的小型项目。17.渲染器当你准备好输出时,你需要获取数据并将其插入到模板中。Renderer是一个提供各种输出格式(JSON、JSONP、XML、YAML、HTML)和一个漂亮、快速和标准的模板引擎的项目。18.Revel从Node.js的Webpack世界中借用了一个简洁的功能,它允许Revel像IDE一样工作,或者至少是IDE的一部分,它会在您每次更改代码时不断重建您的项目。一旦你按下保存,框架就会感知到变化,编译代码,如果没有编译错误,就会启动应用程序。因此,Revel服务器将自动部署对其代码的更改——这对于桌面开发非常有用,但对于生产代码来说可能有点太诱人了。该框架本身功能齐全,所有主要和次要机制都功能最丰富。这意味着模板、缓存、验证器和过滤器在数据流经请求管道时对其进行操作。如果您正在构建许多微服务,还有一个模块系统允许您在项目之间共享一些MVC组件。19.Testify使用经典断言测试的最简单方法之一是使用Testify,这是一个Go项目,它还提供模拟工具来快速测试大量微服务的一部分。您只需几行就可以编写一些基本测试,然后自动检查您的代码是否返回了正确的响应。20.收费站当你第一次发布你的API时,你希望世界上的每个人都能调用它。但是,当您的服务器崩溃时——或者您看到云托管的弹性服务账单飙升时——您会改变主意。Tollbooth是一个轻量级系统,用于将传入请求限制在每秒一定数量。切断入口的需要减少了对管道下游微服务或数据库的需求,使您能够保持一切顺利运行。21.None“None”,我的意思是有时候你根本不需要使用任何框架。您只需从头开始编写Go代码,而无需导入任何内容或实例化某些控制对象。在Go中创建微服务很容易,因为Go已经内置了很多基础代码。这就是为什么像Nano这样的框架可以用几百行代码构建。侦听套接字、解包HTTP请求的所有工作都在标准发行版中包含的标准库中完成。当然,有些框架可以添加一些规则或者特性,但是很多时候,如果你只是写一个非常基础的微服务,是不需要的。因为所有“附加功能”都会妨碍并导致一些Go开发人员最终编写更复杂的代码。如果您只是在线收听并根据收到的信息做出一些基本决定,那么您可能不需要做任何事情。原标题:精通微服务的20个Go语言项目,作者:PeterWayner