专栏名称: 狗厂
目录
51好读  ›  专栏  ›  狗厂

[译]Go语言微服务介绍及理论基础

狗厂  · 掘金  ·  · 2018-05-18 08:55

正文

Go微服务理论基础介绍

蓝图概述

下图是我们整个系列文章中构建的系统蓝图整体视图。然而,我们将从头开始写我们的第一个Go微服务,然后当我们沿着博客系列的各部分进展时,我们将会越来越接近下面的图所代表的结构。

clipboard.png

图例基本如下:

  • 虚线白框: 在一个或多个节点上运行的逻辑Docker Swarm集群。
  • 蓝色框: 来自Spring Cloud/Netflix OSS栈或其他服务例如Zipkin的支持服务。
  • 沙色/白盒: 实际的微服务。

它或多或少和Magnus Larssons微服务博客系列中使用的蓝图相同,主要区别在于实际微服务是使用Go嵌入Java来实现的。qutoes-service是一个例外,它为我们提供了基于JVM的微服务, 我们可以用于和我们的基于Go的微服务的无缝集成对比以及测试平台。

理论基础: 运行信息

有人会问,为什么我们要使用Go来写微服务呢? 除了可以使用这么有趣和具有创造性的语言干活之外,使用Go构建微服务的主要理由是具有微小的内存占用。让我们看看下面的截图,我们正运行在Docker Swarm下的Go微服务以及基于Spring Bot和Spring Cloud架构的微服务。

clipboard.png

quotes-service是Spring启动的,而compservice和accountservice是基于Go的。两者都是使用大量类库部署和Spring Cloud基础设施集成起来用于处理HTTP的服务器。

2017年真的重要吗? 看看Java实现的微服务和Go实现的微服务所占的内存大小,就会让我们感觉到吃惊, 相差几十倍。确实如此,对于大型企业来说,运行数十个服务都是少的,很多公司会运行成千上万的放在云提供上的微服务。当我们运行大量的容器,节约资源会为公司节省大量的资金。

微服务的非功能性需求

本文不仅仅是关于如何使用Go语言构建微服务的 - 它同样是一个在Spring Cloud环境中表现良好的,并且是符合一个生产就绪的微服务领域所需要的品质。

考虑如下(顺序无特殊考虑):

  • 集中化配置: Centralized configuration.
  • 服务发现: Service Discovery.
  • 日志: Logging.
  • 分布式跟踪: Distributed Tracing.
  • 断路器: Circuit Breaking.
  • 负载均衡: Load balancing.
  • 边界: Edge.
  • 监控: Monitoring.
  • 安全: Security.

所有这些东西我认为当你决定尝试微服务的时候都需要考虑的,而不用管你具体使用Go语言、Java语言、js、python、C#还是其他你喜欢的语言来编码。这个博客序列我们从Go语言的视角来揭示所有的这些话题。

另外一个视角是在你实际的微服务实现中的东西。不管你来自什么语言,你都可能有提供了如下功能的类库:

  • HTTP/RPC/REST/SOAP/诸如此类的API.
  • 持久化API(DB客户端、JDBC、O/R映射).
  • 消息API(MQTT、AMQP、JMS).
  • 可测试性(单元测试/集成测试/系统测试/验收测试).
  • 构建工具(CI/CD)
  • 更多...

我不会涵盖这些话题的所有内容。如果我要这么做,我将会写一本书而不是博客系列文章。我将涵盖它们中的一小部分。

在Docker Swarm模式下运行

这些文章系列中的系统领域的基本前提是我们的运行环境是Docker Swarm。意思就是所有服务 - 支持服务(配置服务器、边界服务等)或实际微服务实现都是部署为Docker Swarm服务中的。 当我们到文章序列末尾的时候,有如下Docker命令:

clipboard.png







请到「今天看啥」查看全文