首页 > 其他分享 >Go Micro介绍与入门

Go Micro介绍与入门

时间:2022-10-10 20:56:29浏览次数:81  
标签:服务 入门 micro Micro go Go 客户端

一 什么是Micro?

Micro是一个微服务生态系统,致力于提供产品,服务和解决方案,以实现现代软件驱动型企业的创新。我们计划成为任何与微服务相关的事实资源,并期待公司能够利用这项技术为自己的业务。从早期的原型开始一直到大规模的生产部署。

我们已经看到行业发生根本性转变。摩尔定律是有效的,我们每天都能获得越来越多的计算能力。但是,我们无法完全获取这种新的能力。现有的工具和开发实践在这个新时代并没有scale。没有提供开发人员从单一代码库转向更高效的设计模式的工具。大多数公司不可避免地以单一设计达到收益递减,必须进行大规模的研发再造。 Netfix,Twitter,Gilt和Hailo都是最好的例子。所有最终都建立了自己的微服务平台。

我们的愿景是提供基本的构建模块,使任何人都可以轻松采用微服务。

二 go-micro简介

Go Micro是一个插件化的基础框架,基于此可以构建微服务,Micro的设计哲学是可插拔的插件化架构

在架构之外,它默认实现了consul作为服务发现(2019年源码修改了默认使用mdns),通过http进行通信,通过protobuf和json进行编解码

Micro 是一个用于构建和管理分布式系统的系统.

Micro 的主要组件如下:

  • 运行时: 用于管理服务包括 auth, config, discovery, networking 的运行时环境.
  • 框架: 用于编写要在运行时运行的服务的 Go 框架.
  • 客户端: 多语言客户端, 使其他程序能够访问微服务.

三 go-micro的主要功能

  • 服务发现:自动服务注册和名称解析。服务发现是微服务开发的核心。当服务A需要与服务B通话时,它需要该服务的位置。默认发现机制是多播DNS(mdns),一种零配置系统。您可以选择使用SWIM协议为p2p网络设置八卦,或者为弹性云原生设置设置consul
  • 负载均衡:基于服务发现构建的客户端负载均衡。一旦我们获得了服务的任意数量实例的地址,我们现在需要一种方法来决定要路由到哪个节点。我们使用随机散列负载均衡来提供跨服务的均匀分布,并在出现问题时重试不同的节点
  • 消息编码:基于内容类型的动态消息编码。客户端和服务器将使用编解码器和内容类型为您无缝编码和解码Go类型。可以编码任何种类的消息并从不同的客户端发送。客户端和服务器默认处理此问题。这包括默认的protobuf和json
  • 请求/响应:基于RPC的请求/响应,支持双向流。我们提供了同步通信的抽象。对服务的请求将自动解决,负载平衡,拨号和流式传输。启用tls时,默认传输为http / 1.1或http2
    Async Messaging:PubSub是异步通信和事件驱动架构的一流公民。事件通知是微服务开发的核心模式。启用tls时,默认消息传递是点对点http / 1.1或http2
  • 可插拔接口:Go Micro为每个分布式系统抽象使用Go接口,因此,这些接口是可插拔的,并允许Go Micro与运行时无关,可以插入任何基础技术
    插件地址:https://github.com/micro/go-plugins

四 go-micro通信流程

Server监听客户端的调用,和Brocker推送过来的信息进行处理。并且Server端需要向Register注册自己的存在或消亡,这样Client才能知道自己的状态
Register服务的注册的发现,Client端从Register中得到Server的信息,然后每次调用都根据算法选择一个的Server进行通信,当然通信是要经过编码/解码,选择传输协议等一系列过程的

如果有需要通知所有的Server端可以使用Brocker进行信息的推送,Brocker 信息队列进行信息的接收和发布

五 go-micro核心接口

go-micro之所以可以高度订制和他的框架结构是分不开的,go-micro由8个关键的interface组成,每一个interface都可以根据自己的需求重新实现,这8个主要的inteface也构成了go-micro的框架结构
在这里插入图片描述

标签:服务,入门,micro,Micro,go,Go,客户端
From: https://www.cnblogs.com/qi66/p/16777285.html

相关文章

  • Go语言的接口和Rust的Trait的对比
    go语言的接口是鸭子的方式,即struct本身拥有的方法如果包含某个接口里定义的所有方法声明,则认为这个struct实现了该接口,举例子:typeAstruct{Faceint}//A结构体......
  • Docker入门
    title:Docker入门excerpt:狂神:即使再小的帆也能远航。tags:[Docker,狂神,nginx,容器,nginx,镜像,tomcat,redis]categories:[学习,Docker]index_img:ht......
  • git入门
    title:git入门excerpt:转载自TsumugiWenders大佬~tags:[git,github,gitee]categories:[学习,git]index_img:https://picture-store-repository.oss-cn-hangz......
  • 浅谈Go1.18版本新特性——泛型
    泛型Generics:引入了对使用参数化类型的泛型代码的新支持,达到了算法可复用的目的。两数求和,泛型函数的使用假设我们要计算两个数的和,函数可以这样子写funcAdd(a......
  • 玩转Go反射
    反射反射常用于各种框架类当中,它可以做到十分优雅的帮我们读取值、设置值Go语言当中感觉很多反射的工具类,比如Java中的hutool,并没有很好的支持我总结下来反射可以分为两......
  • SIT221 Data Structures and Algorithms课程辅导task1.1
    文章目录​​1.如何使用vector​​​​2.代码结构分析​​​​2.1类和对象​​​​2.2和原版本对比查看差距​​实现一个vector。1.如何使用vector2.代码结构分析总体......
  • python编程从入门到实践--第5章 if语句
    一。条件测试符号:==,>,>=,<,<=,!=,     逻辑符号:and,or,not测试有没在列表中cars=['audi','bmw','subaru','toyota']forcarincars:......
  • Microsoft Visual C++ 14.0 免费下载
    ​​https://pan.baidu.com/s/1uGOeqwpAO1RleXmTFt2Hrg ​​提取码:5zyd......
  • 检测到目标URL启用了 Microsoft ASP.NET 调试
    https://blog.csdn.net/weixin_34216196/article/details/91847502MicrosoftASP.NET很容易受到信息泄露攻击。攻击者可以发送一个通知是否支持调试支持的恶意请求。 ......
  • 30 Django分页组件
    pager.py:"""如果想要使用分页,需要以下两个步骤defxxx():queryset=models.Customer.objects.filter(active=1).select_related('level','creator')#select......