微服务开发手册。

什么是微服务

微服务是一种以业务功能为主的服务设计概念,每一个服务都具有自主运行的业务功能,对外开放不受语言限制的 API (最常用的是 HTTP),应用程序则是由一个或多个微服务组成。

微服务的另一个对比是单体式应用程序。单体式应用表示一个应用程序内包含了所有需要的业务功能,并且使用像主从式架构 (Client/Server) 或是多层次架构 (N-tier) 实现,虽然它也是能以分布式应用程序来实现,但是在单体式应用内,每一个业务功能是不可分割的。若要对单体式应用进行扩展则必须将整个应用程序都放到新的运算资源(如:虚拟机) 内,但事实上应用程序中最吃资源、需要运算资源的仅有某个业务部分(例如跑分析报表或是数学算法分析),但因为单体式应用无法分割该部分,因此无形中会有大量的资源浪费的现象。

微服务运用了以业务功能的设计概念,应用程序在设计时就能先以业务功能或流程设计先行分割,将各个业务功能都独立实现成一个能自主运行的个体服务,然后再利用相同的协议将所有应用程序需要的服务都组合起来,形成一个应用程序。若需要针对特定业务功能进行扩展时,只要对该业务功能的服务进行扩展就好,不需要整个应用程序都扩展,同时,由于微服务是以业务功能导向的实现,因此不会受到应用程序的干扰,微服务的管理员可以视运算资源的需要来配置微服务到不同的运算资源内,或是布建新的运算资源并将它配置进去。

Micro

什么是 Micro

Micro 解决了构建微服务系统的关键需求。它采用微服务架构模式并将其转换为一组工具,充当可扩展平台的构建模块。Micro 隐藏了分布式系统的复杂性,并为卡法人员提供了很好的概念理解。

概述

提供的主体是 Micro,一个微服务开发运行时。

Runtime

运行时由以下功能特性组成:

  • API Gateway: 一个使用服务发现进行动态请求路由的单入口点。 API网关允许你在后端构建可扩展的微服务架构,并在前端整合服务公共API。 Micro API通过发现和可插拔处理程序提供强大的路由,以提供http,grpc,websockets,发布事件等服务。

  • Interactive CLI: CLI 用于从终端直接描述、查询和交互你的平台和服务。CLI 为你提供了一切帮助你了解你的微服务正在发生情况的所有命令,并包括一个交互模式。

  • Service Proxy: 基于 Go Micro 构建的透明代理。 将服务发现,负载平衡,容错,消息编码,中间件,监控等卸载到单个位置。 独立运行或与服务一起运行。

  • Template Generation: 创建新的服务模板以快速入门。 Micro 提供用于编写微服务的预定义模板。 始终以相同的方式开始,构建相同的服务以提高工作效率。

  • SlackOps Bot: 一个运行在平台上的机器人,允许你从Slack管理你的应用程序。 Micro 机器人支持ChatOps,使你能够通过消息传递与团队一起完成所有工作。 它还提供创建 Slack 命令作为动态发现服务。

  • Web Dashboard: 你可以通过 Web Dashboard 浏览你的服务,描述他们的端点、请求和响应格式,甚至可以直接查询它们。 Dashborad 还为想要即时进入终端的开发人员提供了内置的 CLI。

  • Go Framework: 利用功能强大的 Go Micro 框架轻松快速地开发微服务。 Go Micro 抽象了分布式系统的复杂性,并提供更简单的抽象来构建高度可扩展的微服务。

为什么?

为什么使用 Go 语言

Go是根据第一原理设计的,以推进软件工程的实践。 它易于学习,易于掌握,而且 - 最重要的是 - 易于维护,由大型且充满活力的工程师团队完成。 通过高效的并发性,扩展的标准库和稳定改进的运行时,它几乎是编写微服务的完美语言。

为什么使用微服务

几乎所有当代软件工程都专注于缩短产品上市时间的单一目标。 微服务是面向服务的架构模式的演变,可以优雅地消除组织摩擦,为你的工程师和团队提供持续发布,迭代和改进所需的自主权。

为什么是 Micro 而不是 Go-Kit

参考为什么建议避免使用 go-kit

Micro 生态

Micro 项目主要由三个部分组成:

  • go-micro: 一个可插拔 Go 语言 PRC 框架,用于编写微服务、服务发现、C/S rpc、发布/订阅等。

  • micro: 一个微服务工具包,包含传统的 entry points; API Gateway, CLI, Slack Bot, Proxy 和 Web UI.

  • go-plugins: 为 go-micro 提供插件,包括 etcd, kubernetes, nats, rabbitmq, grpc等。

此外还有一个 example 库,方便查找测试案例代码。

接下来的文章也会围绕这三个部分展开。