Go:使用 go-micro 构建微服务(一)

news2025/1/19 11:35:40

一、微服务

什么是微服务(microservice)?这是企业界正在向计算界提出的问题。一个产品的可持续性取决于它的可修改程度。

大型产品如果不能正常维护,就需要在某个时间点停机维护。而微服务架构用细化的服务取代了传统的单体服务,这些服务定义了明确的 RPC 或消息驱动的 API 边界。

微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。

微服务带来了以下好处:

  • 每个服务都可以由专注于此服务的团队独立开发。小团队可以通过在一组小的功能上工作来进行并行迭代。
  • 开发人员可以自由选择开发技术,对新的开发人员来说,可扩展性很强。
  • 微服务架构可以使每个微服务独立部署。对系统的单个组件支持持续集成(CI)和持续交付(CD)。
  • 微服务架构使得每个服务都可独立扩展。利用松耦合的架构提供更轻松的软件替换。
  • 微服务架构不与特定的技术相联系。

在谈论微服务时,编排和服务发现是微服务中非常重要的部分。像 Kubernetes 这样的工具可以用来编排和协调 Docker 容器。一般来说,微服务的最佳实践就是每个微服务有一个 Docker 容器。

服务发现是对微服务实例的 IP 地址的自动检测。这种方式消除了硬编码 IP 地址的潜在威胁,硬编码会导致服务之间缺乏联系。

在这里插入图片描述

二、单体架构与微服务架构的区别

下图描绘了单体架构和微服务架构的结构图。

图的左边就是单体架构的示意图,如图所示:单体架构将所有的功能(如 UI、日志、数据层、系统逻辑、数据库等)都集成在一个系统中,像是一个紧耦合的架构。

相反,微服务是独立的实体,每个功能都是单独的服务,如日志服务、文件服务、系统逻辑服务等,更易于修改和替换,每个服务都可以通过各种远程传输机制进行沟通,如 HTTP、REST 或者 RPC。服务之间的交换的数据格式可以是 JSON 或者 Protocol buffers, 微服务还可以处理各种请求点,如 UI 和 API 客户端。
在这里插入图片描述
微服务可以被任何语言实现(Java、Go、Python、 Rust、 NodeJS 等),因为其有着松耦合的性质,每个独立的服务还可以今后被任何其他新技术或业务所需要的技术所替换。

三、Go Micro 介绍

Java 社区中有着非常著名的框架用于构建微服务系统。如:

  • Spring: Spring Boot 是用于编写微服务的流行 Java 框架。
  • Spring Cloud:基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。
  • Dropwizard:一个开源的 RESTful 快速开发框架,对微服务的开发也极其友好,而且性能很强
  • Micronaut:是一个现代的、基于 JVM 的全栈微服务框架,旨在构建模块化、易于测试的微服务应用程序
  • Apache Dubbo:由阿里巴巴开源的分布式服务化治理框架,是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、流量治理、可观测性等解决方案,涵盖 Java、Golang 等多种语言 SDK 实现。

以上都是非常有名的微服务框架,在 Go 语言中,也有很多著名的框架(go-kit、go-kratos、go-zero 等), Go Micro 也是其中之一,截止发文 Github Star 数量达到了 19.6k。
在这里插入图片描述
Go Micro 是一个基于 RPC 的可插拔库,它提供了在 Go 中编写微服务的基本构建块。它使用 consul 实现服务发现,但可以换成 etcd、zookeeper 或任何能够满足该接口的其他实现。通过 http 或使用 proto-rpc 或 json-rpc 进行通信,

Go Micro 解决了构建可扩展系统的关键要求。它采用微服务架构模式并将其转换为一组充当平台构建块的工具。Micro 处理分布式系统的复杂性,并提供开发人员已经理解的简单抽象。

Go Micro 提供了 RPC 实现和事件驱动架构(EDAs),可以向其添加任何外部功能。如果你想换掉底层技术,代码重写率为零。

四、Go Micro 特点

Go Micro 的主要特点有:

  • RPC Client/Server:基于 RPC 的请求/响应,支持双向流。为同步通信提供了一个抽象层,向一个服务提出的请求将被自动处理、负载均衡、拨号和流化。
  • 服务发现: 自动服务注册和名称解析。服务发现是微服务开发的核心。当服务 A 需要与服务 B 对话时,它需要该服务的位置。默认的发现机制(zeroconf 系统)是多播 DNS(mdns)机制。
  • 负载均衡:客户端负载均衡建立在服务发现的基础上。一旦我们有了一个服务的任何数量的实例的地址,我们现在需要一种方法来决定哪个节点的路由。我们使用随机散列的负载均衡来提供跨服务的均匀分布,并在出现问题时重试一个不同的节点。
  • 信息编码:基于内容类型的动态信息编码。客户端和服务器将与内容类型一起使用编解码器,为你无缝编码和解码 Go 类型。任何种类的消息都可以被编码并从不同的客户端发送。客户端和服务器默认会处理这个问题。这包括默认的 protobuf 和 json 格式。
  • 信息同步:发布/订阅(PubSub) 是作为异步通信和事件驱动架构的第一类公民而建立的。事件通知是微服务开发的一个核心模式。默认的消息传递系统是一个 HTTP 事件消息代理。
  • 事件流: PubSub 对于异步通知来说是很好的,但对于更高级的用例,事件流是首选。提供持久性存储,从网络中的 offset(片偏移量) 和 acking(确认字符) 中进行消费。 Go Micro 包括对NATS Jetstream和 Redis 流的支持。
  • 同步化:分布式系统通常以最终一致的方式构建。对分布式锁和领导节点的支持是作为 Sync 接口建立的。当使用最终一致的数据库或调度时,使用 Sync 接口。
  • 可插拔接口:Go Micro 对每个分布式系统的抽象都使用了 Go 接口。正因为如此,这些接口是可插拔的,使 Go Micro 与运行时间无关。您可以在底层使用任何可用技术。 例如用于翻译的编解码器,用于存储系统的 brokers。
  • 插件地址:https://github.com/go-micro/plugins

五、Go服务

1. go-micro 安装

使用下面的命令安装最新的 go-micro v4.9

go install go-micro.dev/v4@latest

本文在 Windows 11 安装成功如下:
在这里插入图片描述

2. go 编码

使用 micro.NewService 创建一个新服务:

package main

import (
  "go-micro.dev/v4"
)

// 创建新服务
service := micro.NewService(
  micro.Name("HelloWorld")
)

// 初始化 flags
service.Init()

// 启动服务
service.Run()

其他选项可以在创建时传入:

service := micro.NewService(
  micro.Name("greeter"),
  micro.Version("latest"),
)

Options 全部参数如下图:
在这里插入图片描述

小结

本文介绍了微服务及其相关概念,重点比较了单体架构和微服务架构的区别,最后介绍了 Go 优秀的微服务框架之一的 Go-micro,并展示该框架的安装和使用,下一篇文章将介绍如何利用这一框架进行微服务应用的开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

语音识别芯片LD3320介绍再续

语音识别芯片LD3320驱动程序 1、芯片复位 复位就是对LD3320芯片的第47腿(RSTB*)发送低电平,然后需要对片选CS做一次拉低→拉 高的操作,以激活内部DSP。按照以下顺序: void LD_reset() { RSTB1;delay(1);RSTB0;delay…

TencentOS 3.1下安装zabbix 5.0.30

TencentOS是使用官方镜像文件安装的虚拟机。 虚拟机为virtualBox 6.1 zabbix 使用zabbix官方安装包编译安装。 下载地址: Download Zabbix sources zabbix软件包解包,本次安装解包在/opt下 zabbix需要nginx、php、mysql等软件支持,因此先安装它们。 安装mysql如下: yu…

Usaco Training刷怪旅 第二层第二题:Transformations

usaco training 关注我持续更新usaco training A square pattern of size N x N (1 < N < 10) black and white square tiles is transformed into another square pattern. Write a program that will recognize the minimum transformation that has been applied to t…

QCon直击|闲鱼推荐大规模应用背后的工程实践

讲师介绍闲鱼技术部 | 吴白万小勇&#xff08;吴白&#xff09;&#xff0c;闲鱼服务端专家。毕业于南京大学计算机系&#xff0c;目前负责闲鱼技术推荐架构。推荐在闲鱼的应用不同于搜索的确定性&#xff0c;推荐场景面临的问题往往是不确定的。但是正是因为这种不确定&#x…

Kafka无法对外暴露端口的相关解决方案

1、kafka开放外部访问 1.1、修改kafka configMap 修改内容如下 # 修改EXTERNAL_ACCESS_IP变量&#xff0c;值为真实的外网IP export EXTERNAL_ACCESS_IP${真实的外网IP} 1.2、重启kafka # 重启kafka kubectl rollout restart statefulset kafka -n default # 查看kafka状态 k…

盛邦安全将于12月27日上会,2022年前三季度收入1亿元

12月20日&#xff0c;上海证券交易所披露的科创板上市委2022年第112次审议会议公告显示&#xff0c;远江盛邦&#xff08;北京&#xff09;网络安全科技股份有限公司&#xff08;下称“盛邦安全”&#xff09;将于2022年12月27日上会。 目前&#xff0c;盛邦安全已经提交了招股…

在tushare量化平台可以获取哪些数据?

沪深股票数据是Tushare量化最传统、最具历史意义的数据服务项目从一开始就为投资者特别是定量投资者提供了稳定、方便的接口。 1.基础数据 提供交易和回测所需要的基础信息&#xff0c;目前主要提供的是上市公司股票列表和交易日历等 2.行情数据 行情数据目前还在继续规则和…

“史上最贵”卡塔尔世界杯,有哪些炫酷的“黑科技”?

2022年卡塔尔世界杯投入超过2200亿美元&#xff0c;堪称“史上最贵世界杯”。这些投入不仅用在了场馆、道路等基础设施建设中&#xff0c;也体现在让人震撼的芯片传感器、人工智能、先进技术等“黑科技”上。今年的卡塔尔世界杯有什么“科技感十足”的先进技术&#xff1f;让我…

坐标系相关整理

参考url:https://www.jianshu.com/p/06890af3d780 Dicom坐标系 x轴&#xff1a;从右手到左手 y轴&#xff1a;从前胸到后背 z轴&#xff1a;从脚到头 解刨学坐标系 医学人体三解剖面&#xff0c;医疗影像三维图&#xff0c;主要是针对人体来说。解剖学上的坐标体系&#xff0…

常见垃圾回收器

1.Serial垃圾回收器 Serial&#xff08;串行&#xff09;收集器是最基本、历史最悠久的垃圾收集器了&#xff0c;是一个单线程收集器 它只会使用一个垃圾收集线程去完成垃圾收集工作 它在进行垃圾收集工作的时候必须暂停其他所有的工作线程&#xff08; "Stop The Worl…

C++——STL之vector详解

C——STL之vector详解&#x1f3d0;1.什么是vector&#x1f3d0;2.vector的使用&#x1f3c0;2.1vector的实例化&#x1f3c0;2.2访问遍历vector⚽2.2.1**下标[]**⚽2.2.2**迭代器**⚽2.2.3**范围for**&#x1f3c0;2.3.vector容量问题⚽2.3.1size和capacity⚽2.3.2reserve和re…

二叉树先、中、后遍历递归+非递归

文章目录前言思路设计思想非递归前序遍历的思路非递归中序遍历的思路非递归后序遍历的思路层序遍历的思路完整代码MyBinaryTree.hMyBinaryTree.cppMain.cpp效果展示前言 作者水平有限&#xff0c;全部的代码是学习前人部分原创不要搬代码&#xff0c;一定要借鉴学习&#xff0…

接口测试的痛点和解决办法

在做接口测试时&#xff0c;以下几个测试痛点&#xff0c;一定要仔细琢磨下&#xff1a; 痛点①&#xff1a;由于测试环境数据被改动&#xff0c;导致接口测试失败 这个问题&#xff0c;最好的办法就是重新调用数据库中的最新数据。在做测试用例时&#xff0c;也要考虑到实时调…

汽车服务行业概况与供应商评估方案介绍,数商云SRM系统助力多维考核供应商

近年来&#xff0c;汽车保有量不断增长&#xff0c;中国汽车市场连续多年成为全球产销第一&#xff0c;伴随物联网技术的不断渗透&#xff0c;车联网开始兴起&#xff0c;带给线上线下汽车相关服务行业新的发展机遇。 当前汽车服务行业整体概况 1、市场需求增加&#xff1a;市…

Vue基础超详细

目录 一、Vue的简介 1、什么是vue 2、vue 的特性&#xff08;数据驱动视图、双向数据绑定&#xff09; 3、MVVM及其工作原理 二、Vue的基本实用 1、基本使用步骤 2、配置Vue的调试工具 3、指令与过滤器 3.1内容渲染指令 4、属性绑定指令 5、使用Javascript表达式 6、事件绑…

“ 念旧真的是一件很无趣的事 “

想要的都拥有 得不到的都释然 My Jinji音频&#xff1a;00:0006:40 | 01 | 想通就释然 想不通就茫然 每天不停的循环 | 02 | 终于理解你曾经说的 “有些人不能做朋友” 现在我和你一样惨 | 03 | 村上春树说过&#xff1a; “如果一直想见谁 肯定迟早会见到” 但是他还…

android入门之创建service

1. 前言 Service意为&#xff1a;服务&#xff0c;是一种运行时用户不可见的活动机制。可以理解为它是一个没有布局的Activity。 典型的场景&#xff1a;音乐后台播放、后台下载。 Service不同于子线程&#xff0c;Service是运行在主线程中的&#xff0c;因此不能进行耗时操作。…

电线电缆行业MES系统,帮助企业快速应对订单变化,减少资金占用

电线电缆行业生产管理现状 电线电缆行业是典型的重资产行业&#xff0c;原材料成本高、产品价值高、资金占用大、产品规格型号多达数万种&#xff0c;BOM管理繁杂&#xff0c;现场管理粗放&#xff0c;订单经常会合并或拆分生产&#xff0c;对排程要求高。 1、计划制定不准确…

无分类编址CIDR

无分类编址CIDR 构成超网 将多个子网聚合成一个较大的子网&#xff0c;叫做构成超网&#xff0c;或路由聚合。 方法&#xff1a;将网络前缀缩短&#xff08;所有网络地址取交集&#xff09;。 例题 某路由表中有转发接口相同的4条路由表项&#xff0c;其目的网络地址分别为…

Unicode编码的理解

1、Unicode 这个单词可以拆解为两部分&#xff0c;一个是Uni ,即英文单词unique的意思&#xff0c;也就是唯一的意思。code就是编码的意思。 GBK编码的理解_sgmcy的博客-CSDN博客 在上节博客里面&#xff0c;介绍了ASCII编码、ASCII编码表的扩展以及我们国家汉字的GBK编码。 …