前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务系列笔记之Go-Micro 陌无崖

微服务系列笔记之Go-Micro 陌无崖

作者头像
陌无崖
发布2019-08-16 17:46:15
7480
发布2019-08-16 17:46:15
举报

不忘初心,砥砺前行

作者 | 陌无崖

转载请联系授权

. 导语

在上一篇博客中我们主要介绍了什么是微服务,读者可以用这篇文章进行简单的入门,当然仅仅阅读这一篇仍然是不够的,还需要广泛浏览相关概念,逐渐加深印象,可以更好的理解,在本篇文章中,主要分享了微服务框架的选型即Go-Mico,了解Go-Mico与微服务的关系。

. Go-Mico是什么

这里采用官方解释,Go Micro是一个插件式的RPC框架。它用于分布式系统开发。这个插件抽象出了分布式系统的细节,下面这个图是它的一个架构图

. 启动服务源码剖析

看过了架构图,我们趁热打铁看一下服务是如何启动的,启动时又有哪些配置参数,我们可以看到服务的运行需要最基础的三个步骤

第一步:创建服务

其中的exmple便是我们的服务名,在框架中,经常使用go.micro.srv做前缀。在这个函数中参数是micro.Option函数数组,这些函数用来包装启动参数和配置选项。参数便是配置选项。

 service := micro.NewService(
        micro.Name("go.micro.srv.example"),
 )

为了更好的理解我们对源码进行简单的分析

在上面的函数中可以看到最终配置选项进行了我们的newService()函数中,在这个函数中,首先做的就是对我们的配置进行了初始化,让我们看看是如何初始化的。

上面的图中可以看到首先就是对options的操作,很明显,我们可以了解到options是一个结构体,现在让我们来看一看这个结构体

对于上面的属性我们可以大致了解到,原来我们的配置最终会被分配到这里。对所有的配置进行循环,然后逐个的进行配置,具体的怎么配置大家有兴趣的可以进行源码研究。 配置初始化完成后呢?我们再看newService()函数中下一步做了什么,很明显的是我们使用返回的options.ClientclientWrapper结构体进行的赋值操作。现在我们看看这个结构体的具体内容:

可以看到源码中使用options.Client进行了客户端的赋值,同时定义了客户端的header,而header便是由我们传来的服务名进行赋值。最终返回给我们service的客户端。

第二步:初始化服务
 service.Init()

对于这一步,Init()源码如下主要是对我们的的配置,再一次进行封装,并同时初始化我们的命令行参数,这样的目的在于我们在使用命令行时,可以查看更多详细的信息。这里做了解。

第三步:运行服务
 if err := service.Run(); err != nil {
        log.Fatal(err)
}

在这一步中,Run()函数的源码如下

在函数体中可以看到首先便是启动服务,然后定义了一个信号通道,并规定了三个信号量,同时使用select进行监听我们的通道,一旦检测到相关信号,我们的服务便会停止。

syscall.SIGTERM 结束进程 syscall.SIGINT ctrl + c syscall.SIGQUIT ctrl + \

. Go-Mico和分布式系统

为什么Go-Micro适用于分布式系统中呢,我们带着疑问来看一下Go-Micro都做了什么。还是看我们的架构图 在架构图的最下面一层我们可以看到有5个核心模块

broker负责消息 Codec负责编码 Registry负责注册发现 Selector负责负载均衡 Transport负责接收请求与响应。

熟悉过分布式系统的同学应该知道,在分布式系统中,有服务发现,负载均衡、同步/异步通信、消息编码等,原来Go-Micro为我们抽象出了这些细节,这样我们就可以使用Go-Micro更快的进行分布式开发了。

. 特性

  • 注册机制:服务在启动的时候我们可以使用consul,etcd,zookeeper,dns,gossip等提供支持,同时Go-Micro提供了服务发现,在服务注册时可以成功发现,如果服务死亡,服务也会被清除。
  • 选择器:负载均衡中,选择器提供了一些算法,为我们选择合适的服务。
  • 传输:传输支持多种形式,包括http,rabbitMQ,WebSocket等
  • 代理:提供了异步发布/订阅通信的接口,这是事件驱动架构和微服务的基本要求之一,经常使用RabbitMQ,当然在go-plugins也提供了其它消息代理。
  • 编解码器:对于Json,protobuf,等语言有着强大的解码。
  • Docker部署:支持Docker部署,并在Docker拥有Micro的官方镜像。

. 结语

微服务是一个很好的架构,但是微服务如何使用同样是需要考虑,对于小型团队,小型业务,如果功能单一,业务功能没有任何必要用微服务,当然如果你正在学习中,可以用来练手。在真正的项目中,微服务更多的使用在复杂的系统,微服务的实施对架构能力和技术能力是要求都很高,因为咋微服务中,服务的管理,服务的通信,监控,治理都需要系统的考虑。

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang技术杂文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • . 导语
  • . Go-Mico是什么
  • . 启动服务源码剖析
    • 第一步:创建服务
      • 第二步:初始化服务
        • 第三步:运行服务
        • . Go-Mico和分布式系统
        • . 特性
        • . 结语
        相关产品与服务
        负载均衡
        负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档