基于Golang的微服务——Micro架构

2,535 阅读4分钟

本系列文章知识很基础,主要是给前端小伙伴们尝试后端开发写的一点小心得体会。后端大佬可以别看了,估计会浪费你的时间。

最开始入门就有尝试着手 Micro

结果发现步子迈大了容易扯到o,然后乖乖的退回去学习Gin,从基于Go的单体服务开始。但是攻坚战始终避免不了的,于是开始啃Micro这个架构。

Micro是什么

Micro中文文档

我个人理解是简化微服务开发的架构。 组成部分:

  • API网关(API Gateway): API网关是请求的入口,把请求动态路由到具体服务。通过我们预置的handlers插件,它可以处理http、gRPC、websocket、消息推送事件等等。
  • 命令行接口(Interactive CLI):交互式的命令行接口。CLI通过终端可以描述、查询、直接与平台和服务进行交互。
  • 服务代理(Service Proxy): 服务代理,基于Go Micro和MUCP协议构建的透明的代理服务。它将服务发现、负载均衡、消息编码、中间件、传输及代理插件转移到某一(具体服务所在)位置,同api不同,它不暴露任何接口,只工作在内部环境,相当于桥接内部服务
  • 模板生成(Template Generation): 基于模板快速创建新的服务代码。
  • SlackOps小机器人(SlackOps Bot): Slack小机器人插件,当它运行中服务中时,这个插件允许开发者通过Slack消息来操作平台。
  • 管理控制台(Web Dashboard): 通过Web管理控制台,可以直接在Web页面上查看服务的运行情况,展示端点信息,请求与响应状态,甚至直接向服务进行查询。
  • Go-micro框架(Go Framework): Go Micro框架是Micro的底层、核心。GO-Micro把分布式服务抽象,并提供简便的方式让大家构建具有高弹性的微服务。

附一张图

上面描述的就是 Micro Runtime 层级的内容

Micro 生态

  • go-micro :基于Go语言的可插拔RPC微服务开发框架;包含服务发现、RPC客户/服务端、广播/订阅机制...
  • go-plugins :go-micro的插件有etcd、kubernetes、nats、rabbitmq、grpc...
  • micro :微服务工具集包含传统的入口点(entry point);API 网关、CLI、Slack Bot、代理及Web UI

如何才能使用Micro

  • 使用go-micro编写服务。
  • 使用Micro工具集来访问这些服务。

Micro包括了工具集用于查询和访问微服务。

  • API Gateway,API网关是独立的http入口。
  • Web Dashboard,用于可视化管理微服务。
  • CLI,命令行接口。
  • Bot,面向Slack或HipChat访问微服务的工具。
  • New,用于快整生成服务模板,快速开发。

Go Micro可以帮你编写微服务。

Go Micro抽象出分布式系统

  • 集成服务发布、RPC、分发/订阅机制、消息编码
  • 超时容错、重试机制、负载均衡
  • 功能可扩展
  • 可插拔的后台交换技术

Go Config

Go Config可以管理复杂的配置

  • 动态管理 - 加载配置不需要重启
  • 可插拔 - 可以选择从哪个源加载配置:文件、环境变量、consul
  • 可合并 - 针对多个配置源可以合并并重写
  • 回退 - 可以指定当key不存在时设置值
  • 可观察 - 可以查看配置的变动

Go Plugins

go-micro与micro的插件集

  • 包含了绝大多数的后端技术
  • grpc, kubernetes, etcd, kafka等等
  • 经过生产环境验证

微服务设计理念

  • 各服务要小,单一的业务目标应该是要细粒度,就像Unix的”只做一件事并且要做好”理念。
  • 组织文化要包含部署与测试的自动化,这个降低管理与操作的负担。
  • 设计原则要包含失败与错误,就像抗脆弱的系统。

微服务优点

  • 弹性开发更简单 - 团队各自围绕不同的业务需求,自己管理他们的服务。
  • 更易于理解 - 微服务通常要更小些,通常只有1000行代码(国外的项目真有那么小么),或更少。
  • 更适合频繁更新发布的系统 - 服务可以独立部署、扩展和管理。
  • 增强的容错与隔离 - 彼此隔离以最小化彼此之间发现异常的影响。
  • 执行力更强 - 通过独立的开发、发布、管理微服务,团队可以更快交付业务需求。
  • 可复用的服务与快速原型 -微服务中由生而来的Unix设计理念,可以允许大家复用现有服务和更快地在它之上构建全新的功能。