Micro概述
Micro是一个简化分布式开发的微服务生态系统。它为开发分布式应用程序提供了基本的构建模块。
什么是Micro?
Micro是一个微服务生态系统,致力于提供产品,服务和解决方案,以实现现代软件驱动型企业的创新。我们计划成为任何与微服务相关的事实资源,并期待公司能够利用这项技术为自己的业务。从早期的原型开始一直到大规模的生产部署。
我们已经看到行业发生根本性转变。摩尔定律是有效的,我们每天都能获得越来越多的计算能力。但是,我们无法完全获取这种新的能力。现有的工具和开发实践在这个新时代并没有scale。没有提供开发人员从单一代码库转向更高效的设计模式的工具。大多数公司不可避免地以单一设计达到收益递减,必须进行大规模的研发再造。 Netfix,Twitter,Gilt和Hailo都是最好的例子。所有最终都建立了自己的微服务平台。
我们的愿景是提供基本的构建模块,使任何人都可以轻松采用微服务。
Micro介绍
Micro是一个微服务生态系统。目标是简化分布式系统开发。
技术正在迅速发展。现在云计算能够给我们几乎是无限的scale能力,但是采用现有工具来使用scale能力仍然是很困难的。Micro试图去解决这个问题,开发人员首先关注。
Micro的核心是简单易用,任何人都可以轻松开始编写微服务。随着您扩展到数百种服务,Micro将提供管理微服务环境所需的基本工具
Micro组件
提供的主要软件是Micro,一个微服务工具包。
该工具包由以下组件组成:
-
Go Micro - 用于在Go中编写微服务的插件式RPC框架。它提供了用于服务发现,客户端负载平衡,编码,同步和异步通信库。
-
API - 提供并将HTTP请求路由到相应微服务的API网关。它充当单个入口点,可以用作反向代理或将HTTP请求转换为RPC。
-
Sidecar - 一种对语言透明的RPC代理,具有go-micro作为HTTP端点的所有功能。虽然Go是构建微服务的伟大语言,但您也可能希望使用其他语言,因此Sidecar提供了一种将其他应用程序集成到Micro世界的方法。
-
Web - 用于Micro Web应用程序的仪表板和反向代理。我们认为应该基于微服务建立web应用,因此被视为微服务领域的一等公民。它的行为非常像API反向代理,但也包括对web sockets的支持。
-
CLI - 一个直接的命令行界面来与你的微服务进行交互。它还使您可以利用Sidecar作为代理,您可能不想直接连接到服务注册表。
-
Bot - Hubot风格的bot,位于您的微服务平台中,可以通过Slack,HipChat,XMPP等进行交互。它通过消息传递提供CLI的功能。可以添加其他命令来自动执行常见的操作任务。
注意:Go-micro是一个独立的库,可以独立于其他工具包使用。
运行时
该工具包是可插入式并运行时不感知。在笔记本电脑基于docker,使用kubernetes上运行micro或者AWS等等。
微服务
我们来谈谈软件开发的未来。
变化正在进行中。我们正在越来越多地走向每个企业核心技术驱动的世界。在这个时代保持竞争优势变得困难。当企业试图通过低效的平台,流程和结构进行扩展时,组织的执行能力可能会停滞不前。十年前的技术公司已经经历了这些伸缩的痛苦,大多数已经使用相同的方法来克服这些挑战。
是时候把世界上最成功的公司的竞争优势带给其他人了。所以,我们来谈谈微服务,这是一种创造竞争优势的方式。
什么是微服务?
微服务是一种软件架构模式,用于将大型整体应用程序分解为更小的可管理独立服务,这些独立服务通过跨语言的协议进行通信,每个服务都专注于做好一件事情。
来自行业专家的微服务的定义。
-
松散耦合的面向服务的体系结构
Adrian Cockcroft -
一种将单个应用程序开发为一套小型服务的方法,每个小型服务都运行在自己的进程中,并与轻量级机制进行通信
Martin Fowler
微服务的概念并不新鲜,这是对面向服务的体系结构的重新构想,而是采用了一种更加全面的方式与unix进程和管道对齐的方法。
微服务架构的理念:
- 这些服务是小的 - 作为一个单一的商业目的的细粒度,类似unix哲学的“做一件事,做得好”
- 组织文化应该包含部署和测试的自动化。这减轻了管理和运营的负担。
- 文化和设计原则应该包含失败和错误,类似于抗脆弱的系统。
为什么需要微服务?
随着组织规模技术和人数的增长,管理单一代码库变得更加困难。我们都已经习惯了在一段时间内整个Twitter失败,因为他们试图用一个单一的系统来扩展他们的用户群和产品功能集。微服务使Twitter可以将他们的应用程序分解成更小的服务,这些服务可以由许多不同的团队分别管理。每个团队负责由许多可独立于其他团队部署的微服务组成的业务功能。
我们已经看到了第一手的经验,微服务系统可以缩短开发周期,提高生产力和优越的可扩展系统。
我们来谈谈一些好处:
- 更容易扩展开发 - 团队围绕不同的业务需求组织管理自己的服务。
- 更容易理解 - 微服务要小得多,通常为1000 LOC或更少。
- 更容易频繁地部署新版本的服务 - 可以部署,缩放和独立管理服务。
- 改进的容错和隔离 - 关注分离可以最大限度地减少一个服务中的问题对另一个服务的影响。
- 提高执行速度 - 团队通过独立开发,部署和管理微服务来更快地实现业务需求。
- 可重复使用的服务和快速原型 - 微服务中的unix理念使您能够重用现有服务,并更快地构建全新的功能。
架构
Micro为微服务提供了基本的构建模块。目标是简化分布式系统开发。因为微服务是一种架构模式,所以Micro通过工具在逻辑上拆分。
查看体系结构上的博客文章,获取详细的概述。
这部分应该很多详解,解释Micro是如何构建的,以及各种lib/仓库之间是如何相互关联的。
工具包
API
启用API作为一个网关或代理,来作为微服务访问的单一入口。它应该在您的基础架构的边缘运行。它将HTTP请求转换为RPC并转发给相应的服务。
Web
UI是go-micro的web版本,允许通过UI交互访问环境。在未来,它也将是一种聚合微型Web服务的方式。它包含一种Web应用程序的代理方式。将/[name]
通过注册表路由到相应的服务。Web UI将前缀“go.micro.web。”(可以配置)添加到名称中,在注册表中查找它,然后将进行反向代理。
Sidecar
该Sidecar是go-micro的HTTP接口版本。这是将非Go应用程序集成到微环境中的一种方式。
Bot
Bot Hubot风格的僵尸工具,位于您的微服务平台中,可以通过Slack,HipChat,XMPP等进行交互。它通过消息传递提供CLI的功能。 可以添加其他命令来自动执行常用操作任务。
CLI
Micro CLI是go-micro的命令行版本,它提供了一种观察和与运行环境交互的方式。
Go Micro
Go-micro是微服务的独立RPC框架。它是该工具包的核心,并受到上述所有组件的影响。在这里,我们将看看go-micro的每个特征。
注册表提供可插入的服务发现库,来查找正在运行的服务。当前的实现是consul,etcd,内存和kubernetes。如果您的喜欢不一样,该界面很容易实现。
选择器通过选择提供负载均衡机制。当客户端向服务器发出请求时,它将首先查询服务的注册表。这通常会返回一个表示服务的正在运行的节点列表。选择器将选择这些节点中的一个用于查询。多次调用选择器将允许使用平衡算法。目前的方法是循环法,随机哈希和黑名单。
Broker是发布和订阅的可插入接口。微服务是一个事件驱动的架构,发布和订阅事件应该是一流的公民。目前的实现包括nats,rabbitmq和http(用于开发)。
传输是通过点对点传输消息的可插拔接口。目前的实现是http,rabbitmq和nats。通过提供这种抽象,运输可以无缝地换出。
客户端提供了一种制作RPC查询的方法。它结合了注册表,选择器,代理和传输。它还提供重试,超时,使用上下文等。
服务器是构建正在运行的微服务的接口。它提供了一种提供RPC请求的方法。
Plugins
提供go-micro的micro/go-plugins插件。
go-micro github:https://github.com/asim/go-micro