一文入门Go云原生微服务「爆肝6千字」一

简介: 一文入门Go云原生微服务「爆肝6千字」一

Go云原生开发有着天然的优势,云原生系统需要可扩展、耦合、弹性可管理。 Go的设计就是为云原生时代构建的语言:简单高效、快速编译、支持现代网络和多核计算、支持高并发、内存安全,帮助用户专注于解决问题而不是受限于语言的复杂性。

打好基础

要想一文入门Go微服务还是需要有些前提条件的,打好基础:

  1. 已经掌握了Golang的基础知识,如果基础薄弱,欢迎学习的我的Go语言学习专栏,查漏补缺。
  2. 了解Protobuf,知晓相关知识点。 补课可以阅读这篇文章:# 一文带你玩转ProtoBuf
  3. 了解RPC的概念,知晓gRPC如何使用。可以阅读这2篇文章快速入门:# Go RPC入门指南:RPC的使用边界在哪里?如何实现跨语言调用?# 开发gRPC总共分三步

微服务框架对比

目前Go微服务框架很多,包括:go-micro、go-zero、go-kit、go-kratos、tars-go、dubbo-go、jupiter等等...

我简单整理了一下,让大家先有个整体的认识:

简单横评各个框架

框架 作者 开源时间 一句话概述 优势 缺点 最新star数
go-micro 国外大佬Asim团队 2015年 是最早,最经典的Go微服务框架之一 轻量级框架,入门简单,文档清晰 版本兼容性差,社区活跃度一般 19.4k
go-zero 国内大佬万俊峰团队 2020 提供了微服务框架需要具备的通用能力 社区生态非常好,无论是文档更新还是技术群都很活跃 相比于go-micro比较重,同时也只带一部分的强约束,学习门槛比go-micro略高 20.8k
go-kit 国外大佬 2015 Go-kit将自己描述为微服务的标准库。像Go一样,go-kit为您提供可用于构建应用程序的单独包。 极度轻量级框架 社区建设一般 24k
tars-go 腾讯开源 2018 tarsgo是tars这个大的C++重量级微服务框架下的go语言服务框架 优势在于很多能力不用从头开始做起,直接依托母体tars 缺点是独立性较差,要选用这个tarsgo的前提,就是要先选用tars这个C++的框架 3.1k
dubbo-go 阿里开源 2019 dubbogo是dubbo这个Java重量级微服务框架下的go语言服务框架 和腾讯开源项目类似 和腾讯开源项目类似 4.2k
go-kratos B站开源 2019 轻量级的微服务框架,框架定位于解决微服务的核心诉求。 暂无,后续补充 暂无,后续补充 19k
jupiter 斗鱼开源 2020 面向服务治理的Golang微服务框架 暂无,后续补充 暂无,后续补充 3.9K

我计划系统的介绍2个微服务框架的入门和实战教程“go-micro”和“go-zero”

之所以选择这两个框架是因为:

  1. 我司使用的go-micro,发现这个框架开发微服务够经典,够纯粹,非常适合入门学习微服务。
  2. 通过和有经验的小伙伴交流,go-zero也是一个非常优秀的框架,在国内社区生态建设和维护上,完美适配国内开源的现状,社区非常活跃,使用率会越来越高。

go-zero的入门指南,在后面会为大家做分享,欢迎关注我。

微服务

概念

微服务是一种软件架构模式,用于将大型整体应用程序分解为更小的可管理独立服务,这些独立服务通过跨语言的协议进行通信,每个服务都专注于做好一件事情。

软件架构演进史

如果你对上面这段定义表示晦涩难懂,可以阅读这篇文章:# 给想转Go或者Go进阶同学的一些建议

我结合自己的经历聊了聊软件架构演进史:从单机架构到集中式架构,再到当前主流的分布式微服务架构,介绍了微服务和领域驱动设计DDD的知识点。

简单理解

用我的话解释微服务就是:

把复杂的项目拆成微(小的)服务,明确服务与服务之间的边界,服务内部高内聚,服务之间松耦合。

微服务的好处

  1. 降低开发难度:微服务架构使得团队各个成员只需要关注自己的业务,管理好自己的服务;
  2. 独立部署:各个微服务之间可以分开部署,不影响其他服务的使用,上线部署不需要其他团队的配合支持。
  3. 提高容错和容灾能力:微服务之间独立,最大程度降低一个服务对另外一个服务的影响;
  4. 提高团队执行效率:各个团队独立开发、部署、维护项目,不需要等待其他团队的支持。
  5. 提高项目复用性:微服务的架构设计,能将高复用利用到极致,不同的服务不会做同一件事情,避免资源浪费。
  6. 降低企业成本:微服务支持跨语言、跨团队开发,不需要大规模的替换单体架构或者集中式架构中的工程师。

我们在了解微服务的好处之后,继续探究一下go-micro的特点,了解一下go-micro是如何实现微服务开发的:

go-micro概述

go-micro是一个简化分布式开发的微服务生态系统。它为开发分布式应用程序提供了基本的构建模块。

go-miro的设计哲学是:通过提供组件工具,明确微服务开发的边界,让我们专注于开发业务本身。

下面就重点介绍一下构成组件:

构成组件

Go Micro

  • 用于在Go中编写微服务的插件式RPC框架。它提供了用于服务发现、客户端负载平衡、编码、同步和异步通信库
  • 这是我们学习go-micro最重要的库,我们开发微服务的重点也是编写RPC服务。

API

  • 提供并将HTTP请求路由到对应微服务的API网关。它充当单个入口点,可以用作反向代理或将HTTP请求转换为RPC。
  • 我们开发微服务项目,说到底是编写RPC服务,如何让外部请求可以访问到RPC服务呢?就是通过API

Sidecar

  • 一种对语言透明的RPC代理(也就是和语言无关),具有go-micro作为HTTP端点的所有功能。虽然Go是构建微服务的优选语言,但商业项目中也经常使用其他语言一起开发微服务。因此Sidecar提供了一种将其他语言应用程序集成到Micro世界的方法。
  • Sidecar又被称为服务网格,其作用是:第一,微服务治理与业务逻辑的解耦。第二,异构系统的统一治理。

Web

  • 用于Micro Web应用程序的仪表板和反向代理。官方认为基于微服务建立web应用是通用场景,因此Web被视为微服务领域的一等公民。它的行为非常像API反向代理,另外也包括对web sockets的支持。
  • 我们可以通过仪表盘直观的观察到微服务项目的运行情况,后面会重点介绍。

CLI

  • 提供命令行界面让我们和微服务进行交互。CLI还可以使我们利用Sidecar作为代理。
  • CLI是microservices toolkit micro的命令行界面,包括获取服务、查看服务、查询服务健康状态等功能;我们还可以通过Sidecar代理CLI。

Bot

  • Hubot风格的bot。在我们的微服务平台中,可以通过Slack,HipChat,XMPP等进行交互。它通过消息传递提供CLI的功能。可以添加其他命令来自动执行常见的操作任务。
  • 微型机器人Bot是一个位于微服务环境中的机器人,机器人是如何工作的呢?
  • Bot使用它的命名空间监视服务注册中心的服务。默认名称空间是go.micro.bot。该名称空间内的任何服务都将自动添加到可用命令列表中。执行命令时,机器人将使用Command.Exec方法调用该服务。

总结

相比于GoFrame、Gin这类Web框架,我们发现微服务框架的组件构成更为复杂。

Go Micro是我们用于编写微服务的RPC框架,入门阶段重点理解Go Micro组件即可,其他的组件会在后续文章中详细介绍。

下面我们重点看一下Go Micro组件的架构:

Go Micro组件架构

Go Micro为微服务提供了基本的构建模块,其目标是简化分布式系统开发。

因为微服务是一种架构模式,Micro的架构思路是通过工具组件进行拆分,简化我们开发微服务项目的难度;Micro的设计哲学是可插拔的插件化架构。

Go-micro是微服务的独立RPC框架,也是我们学习go-micro的核心。

我们看下面的架构图:

image.png

  • 最顶层是service,代表一个微服务
  • 服务下面是两个端:客户端和服务端。(注意区分Service和Server,我在刚接触的时候混淆了这两个概念,service指的是服务;server服务端包含在service中,和client客户端一起作为service的底层支撑
  • 服务端Server:用于构建微服务的接口,提供用于RPC请求的方法。
  • 客户端Client:提供RPC查询方法,它结合了注册表,选择器,代理和传输。它还提供重试机制,超时机制,使用上下文等,是我们入门阶段的重点。

架构图中最底层的组件对于初学微服务的同学肯定不熟悉,下面来重点介绍一下:

Registry注册中心

注册中心提供可插入的服务发现库,来查找正在运行的服务。 默认的实现方式是consul。

我们也可以很方便的修改为etcd,kubernetes等。毕竟可插拔是go-micro重要特性。

Selector负载均衡

Selector选择器实现go-micro的负载均衡机制。

原理是这样的:当客户端向服务器发出请求时,首先查询服务的注册中心,注册中心会返回一个正在运行服务的节点列表,选择器将选择这些节点中的其中一个用于查询请求。

多次调用选择器将使用平衡算法。目前的方法是循环法、随机哈希、黑名单。go-micro就是通过这种机制实现负载均衡的。

Broker事件驱动:发布订阅

Broker是发布和订阅的可插入接口。

微服务是一个事件驱动的架构,发布和订阅事件应该是一流的公民。目前的实现包括nats,rabbitmq和http。

Transport消息传输

传输是通过点对点传输消息的可插拔接口。

目前的实现是http,rabbitmq和nats。通过提供这种抽象,运输可以无缝地换出。

总结

以上这些就是go-micro RPC框架的底层支持组件。

我们了解微服务和go-micro的知识点后可能还是有些懵,这很正常,毕竟知识点过于密集。

快速入门

下面和我一起动手实践吧:

注意:go-micro版本不兼容的问题最被大家吐槽,下面我演示的依赖安装和示例代码,均以我司使用的go-micro v2版本。

我决定使用# 和大象装冰箱一样:开发gRPC总共分三步的示例,编写go-micro的入门示例:通过原生开发gRPC和使用go-micro开发做个对比,你会发现使用go-micro开发微服务多么的简单。

我们参考go-micro的官方示例,实现一个问候服务,实现经典的Hello World:


见下文:一文入门Go云原生微服务「爆肝6千字」二+地址链接:https://developer.aliyun.com/article/1393834

相关文章
|
18天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
61 2
|
17天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
18天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
17天前
|
运维 Kubernetes Cloud Native
云原生技术入门及实践
【10月更文挑战第39天】在数字化浪潮的推动下,云原生技术应运而生,它不仅仅是一种技术趋势,更是企业数字化转型的关键。本文将带你走进云原生的世界,从基础概念到实际操作,一步步揭示云原生的魅力和价值。通过实例分析,我们将深入探讨如何利用云原生技术提升业务灵活性、降低成本并加速创新。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
6天前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
13天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
16天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
42 5
|
19天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
17天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
32 5
|
17天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####