基于Golang的微服务——Micro实践

标签: tuicool | 发表时间:2019-07-13 00:00 | 作者:
出处:http://itindex.net/relian

开始开发前需要先配置好Go的开发环境,可以看我写的 基于Golang的微服务——上手篇

在 GOPATH目录下的src目录下创建我们的实战项目目录 tech,切换到这个目录

go get github.com/micro/go-micro //用于开发的微服务的RPC框架,是micro架构的基础

go get github.com/micro/protoc-gen-micro // 用于生成Protobuf的代码

go get github.com/micro/micro // 工具集安装,会自动将 micro加入环境变量
复制代码

Go Micro

Go Micro提供分布式系统开发的核心库,包含RPC与事件驱动的通信机制。micro的设计哲学是可插拔的架构理念,她提供可快速构建系统的组件,并且可以根据自身的需求剥离默认实现并自行定制。

Go Micro主要特性

Go Micro 把分布式系统的各种细节抽象出来

  • 服务发现(Service Discovery) - 自动服务注册与名称解析。服务发现是微服务开发中的核心。当服务A要与服务B协作时,它得知道B在哪里。默认的服务发现系统是Consul,而multicast DNS (mdns,组播)机制作为本地解决方案,或者零依赖的P2P网络中的SWIM协议(gossip)
  • 负载均衡(Load Balancing) - 在服务发现之上构建了负载均衡机制。当我们得到一个服务的任意多个的实例节点时,我们要一个机制去决定要路由到哪一个节点。我们使用随机处理过的哈希负载均衡机制来保证对服务请求颁发的均匀分布,并且在发生问题时进行重试。
  • 消息编码(Message Encoding) - 支持基于内容类型(content-type)动态编码消息。客户端和服务端会一起使用content-type的格式来对Go进行无缝编/解码。各种各样的消息被编码会发送到不同的客户端,客户端服服务端默认会处理这些消息。content-type默认包含proto-rpc和json-rpc。
  • Request/Response- RPC通信基于支持双向流的请求/响应方式,我们提供有抽象的同步通信机制。请求发送到服务时,会自动解析、负载均衡、拨号、转成字节流,默认的传输协议是http/1.1,而tls下使用http2协议。
  • 异步消息(Async Messaging) - 发布订阅(PubSub)头等功能内置在异步通信与事件驱动架构中。事件通知在微服务开发中处于核心位置。默认的消息传送使用点到点http/1.1,激活tls时则使用http2。
  • 可插拔接口(Pluggable Interfaces) - Go Micro为每个分布式系统抽象出接口。因此,Go Micro的接口都是可插拔的,允许其在运行时不可知的情况下仍可支持。所以只要实现接口,可以在内部使用任何的技术

Go micro 组成包

  • transport 用于同步消息
  • broker 用于异步消息
  • codec 用于消息编码
  • registry 用于服务发现
  • selector 用于负载均衡
  • client 用于发送请求
  • server 用于处理请求

注册(Registry) 注册提供了服务发现机制来解析服务名到地址上。它可以使用Consul、etcd、zookeeper、dns、gossip等等提供支持。服务使用启动注册关机卸载的方式注册。服务可以选择性提供过期TTL和定时重注册来保证服务在线,以及在服务不在线时把它清理掉。

选择器(Selector) 选择器是构建在注册这上的负载均衡抽象。它允许服务被过滤函数过滤掉不提供服务,也可以通过选择适当的算法来被选中提供服务,算法可以是随机、轮询(客户端均衡)、最少链接(leastconn)等等。选择器通过客户端创建语法时发生作用。客户端会使用选择器而不是注册表,因为它提供内置的负载均衡机制。

传输(Transport) Transport是服务与服务之间同步请求/响应的通信接口。和Golang的net包类似,但是提供更高级的抽象,请允许我们可以切换通信机制,比如http、rabbitmq、websockets、NATs。传输也支持双向流,这一强大的功能使得客户端可以向服务端推送数据。

代理(Broker) Broker提供异步通信的消息发布/订阅接口。对于微服务系统及事件驱动型的架构来说,发布/订阅是基础。一开始,默认我们使用收件箱方式的点到点HTTP系统来最小化依赖的数量。但是,在go-plugins是提供有消息代理实现的,比如RabbitMQ、NATS、NSQ、Google Cloud Pub Sub等等。

编码(Codec) 编码包用于在消息传输到两端时进行编码与解码,可以是json、protobuf、bson、msgpack等等。与其它编码方式不同,我们支持RPC格式。所以我们有JSON-RPC、PROTO-RPC、BSON-RPC等格式。

编码包把客户端与服务端的编码隔离开来,并提供强大的方法来集成其它系统,比如gRPC、Vanadium等等。

Server(服务端) Server包是使用编写服务的构建包,可以命名服务,注册请求处理器,增加中间件等等。服务构建在以上说的包之上,提供独立的接口来服务请求。现在服务的构建是RPC系统,在未来可能还会有其它的实现。服务端允许定义多个不同的编码来服务不同的编码消息。

Client(客户端) 客户端提供接口来创建向服务端的请求。与服务端类似,它构建在其它包之上,它提供独立的接口,通过注册中心来基于名称发现服务,基于选择器(selector)来负载均衡,使用transport、broker处理同步、异步消息。

上面的这些组件都可以在micro中,从更高的角度看成是服务(Service)

相关 [golang 微服务 micro] 推荐:

基于Golang的微服务——Micro实践

- - IT瘾-tuicool
开始开发前需要先配置好Go的开发环境,可以看我写的 基于Golang的微服务——上手篇. 在 GOPATH目录下的src目录下创建我们的实战项目目录 tech,切换到这个目录. go get github.com/micro/go-micro //用于开发的微服务的RPC框架,是micro架构的基础 go get github.com/micro/protoc-gen-micro // 用于生成Protobuf的代码 go get github.com/micro/micro // 工具集安装,会自动将 micro加入环境变量 复制代码.

Golang测试技术

- - Tony Bai
本篇文章内容来源于 Golang核心开发组成员 Andrew Gerrand在Google I/O 2014的一次主题分享“ Testing Techniques”,即介绍使用Golang开发 时会使用到的测试技术(主要针对. 单元测试),包括基本技术、高级技术(并发测试、 mock/fake、竞争条件测试、并发测试、内/外部测 试、vet工具等)等,感觉总结的很全面,这里整理记录下来,希望能给大家带来帮助.

golang的杀手级应用:docker

- - _不是我干的 _
docker 是 golang 的第一个杀手级应用,发展迅猛, 现在各大云计算平台几乎全都支持 docker 实例,包括 谷歌,亚马逊,阿里云等. golang 本身已经让我惊喜万分,而 docker 更是极大的激发了我对虚拟化的想象. IT 业发展至今,软件和硬件始终是无法分割的两个物体. 就拿最近几年红红火火的智能机时代来说, 很久之前的诺基亚智能机, 软件和硬件相辅相成, 连进入主界面都需要按一个特定的按钮才能进入.

Golang 大杀器之跟踪剖析 trace

- - SegmentFault 最新的文章
在 Go 中有许许多多的分析工具,在之前我有写过一篇 《Golang 大杀器之性能剖析 PProf》 来介绍 PProf,如果有小伙伴感兴趣可以去我博客看看. 但单单使用 PProf 有时候不一定足够完整,因为在真实的程序中还包含许多的隐藏动作,例如 Goroutine 在执行时会做哪些操作. GC 是怎么影响到 Goroutine 的执行的.

没 NFC?没问题!带 NFC 发射器的 micro SD 卡 [视频]

- CasparZ - 谷安——谷奥Android专题站
可能你觉得 Google Wallet 是一个很不错的东西,不过自己却没有支持 NFC 的手机(比如说 Nexus S),不过现在好了. Netcom 的公司展示了带有 NFC 发射器的 micro SD 卡,毫无疑问,只要将该 micro SD 卡插入到手机中就可以享用 NFC 功能了. 只要将这个 micro SD 卡插入到你的非 NFC 设备即可.

Fusion Micro 改装机是披着 PSP 皮的 GameCube

- CarlNERV - Engadget 中国版
其实说它是「披着 PSP 皮」有那么一点点勉强,大家只要看看继续阅读里的影片,就会发现为了装进散热器和风扇,Fusion Micro 整体厚度和 PSP 相比被增加了相当多,但至少正面还是保持了 PSP 的样子,只是加上了第二模拟游戏杆来配合 GC 原有的操作. 游戏和仿真器则是从两个 SD 卡上读出,整体来说是个完成度相当高的机器,只是就算装上了 5000 mAh 的电池,电力也只够跑约两个小时而已.

Apple 静静在英国推出 iPhone 专用 micro USB 转接器

- perfect - Engadget 中国版
想不到说了那么久,Apple 终于都要支持 micro USB 了. 正当全世界都在使用 micro USB,看看自己的 iPhone,想必会为需要多带一条充电线而无奈吧. Apple 当然不会傻得放弃专用的 30-pin 端口(那个可是配件收入的来源啊),但还是大发慈悲,在英国推出了这个 micro USB 转接器.

gocode——VIM 和 Emacs 的 golang 代码自动补全

- XiaoHui - Some reminiscences, some memories
虽然 golang 自身提供了 VIM 的语法高亮之类的脚本,但 autocompletion 并没有官方解决方案. 无意之中发现 gocode 这个支持 VIM 和 Emacs 的 autocompletion daemon. 这里有个Flash 动画演示,展示了 gocode 的强大. 我得说,用过之后,感觉速度确实够快.

windows 下搭建 GoLang 语言开发环境

- - haohtml's blog
golang官方二进制分发包包括FreeBSD, Linux, Mac OS X (Snow Leopard/Lion), and Windows等平台,包括32位、64位等版本. 我自己使用的是windows 32位分发包,MSI格式的,下载地址为: http://code.google.com/p/go/downloads/list.

[转][转]Golang适合高并发场景的原因分析

- - heiyeluren的blog(黑夜路人的开源世界)
来源: http://blog.csdn.net/ghj1976/article/details/27996095. 我们先看两个用Go做消息推送的案例实际处理能力. 16台机器,标配:24个硬件线程,64GB内存 . 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res) .