go-zero框架入门---认识微服务以及环境的安装

什么是微服务

微服务是一种软件架构风格,它将一个大型应用程序拆分成多个小型的、独立部署的服务,每个服务实现单一业务功能。每个服务运行在自己的进程中,并通过轻量级的通信机制(通常是HTTP RESTful API)相互协作。

微服务的主要特点

  1. 独立部署:每个微服务都可以独立部署和更新,而无需重新部署整个应用程序。这提高了灵活性和响应速度。
  2. 模块化:每个微服务只关注一个特定的业务功能或领域(如用户管理、订单处理、支付服务等),这有助于代码的模块化和清晰性。
  3. 技术多样性:不同的微服务可以使用不同的编程语言、框架和技术栈,根据各自的需求进行选择,允许团队选择最适合的问题域的技术。
  4. 分布式系统:微服务架构是一个分布式系统,服务之间通过网络进行通信,这意味着需要处理分布式系统的一些挑战,如服务发现、负载均衡、分布式事务等。
  5. 自治性:每个微服务团队可以自主开发、测试、部署和维护他们的服务,这提高了开发团队的独立性和效率。

微服务的优势

  1. 灵活性和可伸缩性:微服务可以独立扩展,根据需求增加或减少资源,从而提高系统的可伸缩性和弹性。
  2. 快速迭代和部署:由于每个微服务可以独立部署,开发团队可以更快地迭代和发布新功能。
  3. 技术栈灵活性:不同的微服务可以使用不同的技术栈,这允许团队根据具体的需求选择最合适的工具和框架。
  4. 故障隔离:如果一个微服务出现故障,通常不会影响整个系统,这提高了系统的可靠性和稳定性。

微服务的挑战

  1. 分布式系统复杂性:微服务架构引入了分布式系统的复杂性,需要处理服务发现、负载均衡、分布式事务、网络延迟、数据一致性等问题。
  2. 运维复杂性:管理和监控大量微服务的运维工作比单体应用更复杂,需要良好的监控、日志和自动化运维工具。
  3. 数据管理:在微服务架构中,每个服务通常有自己的数据库,这可能导致数据一致性问题,需要使用分布式数据管理策略。
  4. 服务间通信:服务间的通信通常使用轻量级协议(如HTTP/REST、gRPC),需要处理通信延迟、超时和失败重试等问题。

微服务与单体架构的对比

  • 单体架构:所有功能模块打包成一个整体应用程序,部署和管理较为简单,但随着应用规模增大,开发、测试和部署变得越来越困难。
  • 微服务架构:将应用程序拆分成多个小服务,每个服务独立部署和管理,具有更好的灵活性和可伸缩性,但运维和管理复杂性更高。

总之我们应该知道微服务的优点:

  1. 独立部署:每个微服务可以独立开发、测试、部署和更新,无需影响其他服务。这提高了开发和部署的灵活性,加快了交付速度。
  2. 技术多样性:不同的微服务可以使用不同的编程语言、框架和技术栈,团队可以选择最适合的技术来实现各自的服务功能。
  3. 可伸缩性:微服务可以根据需求独立伸缩,优化资源利用。例如,可以单独扩展某个热点服务,而无需扩展整个应用程序。
  4. 故障隔离:由于微服务是独立运行的,一个服务的故障通常不会影响到其他服务,从而提高了系统的可靠性和稳定性。
  5. 模块化:每个微服务专注于实现特定的业务功能,使得代码库更清晰、模块化,有助于提高代码的可维护性和可理解性。
  6. 快速迭代:团队可以独立开发和部署各自的服务,减少了开发的瓶颈和依赖,能够更快地响应业务需求,进行快速迭代。
  7. 灵活性:微服务架构允许不同团队独立工作,减少了团队之间的依赖关系,提升了开发的灵活性和自主性。

既然有这么多优点,那么肯定会有代价:

比如说:

服务与服务间通信怎么解决?

怎么找到每一个服务的地址?

其实一个项目并不是无脑go-zero的,分布式框架的代码量很大,重复代码也很多,对于简单项目来说,使用go-zero反而是负担。

go-zero框架环境的安装

goctl

若想用go-zero框架,还需要一些前置条件:

安装goctl

go install github.com/zeromicro/go-zero/tools/goctl@latest

可以使用 goctl 命令查看是否安装成功

image-20240718085928448

成功后安装proto

goctl env check --install --verbose --force

然后下载go-zero库,新建一个go项目,运行:

go get -u github.com/zeromicro/go-zero@latest

1.在根目录下创建一个user包

2.在其中,创建一个api服务:

goctl api new api

3.在其中创建一个rpc服务

goctl rpc new rpc

4.在user/api/logic/apilogic下,增加

func (l *ApiLogic) Api(req *types.Request) (resp *types.Response, err error) {// todo: add your logic here and delete this linereturn &types.Response{Message: "hello world"}, nil
}

5.在user的api目录下运行

go run api.go

6.进入http://127.0.0.1:8888/from/me 就可以看到

image-20240718143851908

这样一个简单的项目就跑起来了。

至于为什么需要创建两个服务呢?

API 包用于对外提供 HTTP 接口,适合前端与后端交互;RPC 包用于后端服务之间的高效通信,适合内部服务调用。

API 包

  • 实现对外提供的 RESTful API 接口。例如,用户登录、获取商品列表等。
  • 接受前端发来的 HTTP 请求,进行处理后返回 JSON 格式的响应。

RPC 包

  • 实现服务间的 RPC 调用接口。例如,用户服务需要调用订单服务获取订单详情。
  • 使用 gRPC 框架进行通信,提供高效的二进制协议数据传输。

总之,这样设计有助于清晰地分离对外接口与内部服务,提升系统的可维护性和可扩展性。

etcd

etcd 是一个分布式键值存储系统,旨在提供一致性、高可用性和可靠的分布式协调。

和redis很像,都是键值对数据库。

但etcd更加专精于强一致性:etcd 使用 Raft 共识算法**,确保了在分布式环境中的强一致性**。这对于服务发现和配置管理等关键任务尤为重要,因为它能确保每个节点都能看到相同的配置和服务状态。

并且etcd本身为分布式系统设计,提供了原生的服务发现和配置管理功能,支持 Watch 机制,可以实时监控配置变化

etcd 提供了简单且高效的分布式锁实现,适合用于分布式环境中的资源竞争管理。

综上几点,就已经可以说明分布式系统使用etcd存储配置信息的原因了。

再举个例子:正常项目中配置文件写在代码中,若配置文件修改,项目就该重新启动,但是若使用了etcd,每次去查看对应RPC的配置信息时都是从etcd中实时获取。

etcd安装方法:

windows:https://github.com/etcd-io/etcd/releases

去github下载最新版安装包

然后解压,将根文件夹位置添加到环境变量中

image-20240718154510911

之后打开一个命令行窗口,输入:etcd就可以启动了,然后再打开一个黑窗口(上一个不要关)

输入一些简单命令就可以测试etcd的功能了:

image-20240718154636504

linux,使用docker下载最新版:

docker pull quay.io/coreos/etcd:latest

运行etcd容器:

docker run -d \--name etcd-server \-p 2379:2379 \-p 2380:2380 \-v /path/to/etcd-data:/etcd-data \quay.io/coreos/etcd:latest \/usr/local/bin/etcd \--data-dir=/etcd-data \--name my-etcd \--initial-advertise-peer-urls http://0.0.0.0:2380 \--listen-peer-urls http://0.0.0.0:2380 \--advertise-client-urls http://0.0.0.0:2379 \--listen-client-urls http://0.0.0.0:2379 \--initial-cluster my-etcd=http://0.0.0.0:2380 \--initial-cluster-token my-etcd-token \--initial-cluster-state new

验证是否成功安装:

docker exec -it etcd-server shetcdctl --endpoints=http://127.0.0.1:2379 put foo "Hello, etcd"
etcdctl --endpoints=http://127.0.0.1:2379 get foo

成功会看到:

OK 
Hello, etcd

goland开发插件

全部安装完成后就可以实现go-zero项目的生成了,但是没有快捷生成proto文件的方法,所以我们需要下载一个插件

image-20240718164905061

这个插件,完成后重启,再新建文件

image-20240718164928187

就能看到api文件和proto文件了,并且该插件还支持对这两种文件的高亮表示,非常方便。

若是还没有,按如下步骤

image-20240718165302497

解决。

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

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

相关文章

ubuntu 使用 freeplane

在知乎在过这个问题后 思维导图工具freemind和freeplane的区别? - 知乎。我选择使用 freeplane 作为思维导图的绘制软件。理由不外乎系统受限,和开源软件。 直接在软件商店里搜索 mind ,其实也有其它的软件。第一个也蛮好用的。 安装 如果在…

【分享】HCIP-AI-EI Developer备考攻略

刚考完HCIP-AI-EI Developer就写了这篇热乎的笔记,主要是我在备考的时候发现网上没有相关经验帖,导致备考的时候心态不好。我从自身状态、考试介绍、备考建议、考试技巧等方面进行了总结,非常详细,希望我的这篇笔记能给大家提供一些帮助。 1 我的情况 备考前状态:学过一…

buu做题(11)

[CISCN2019 华东南赛区]Web11 抓个包可以发现是 Smarty框架 在页面可以观察到 一个 XFF头, 可以猜测注入点就在这 通过 if 标签执行命令 ,读取flag if system("cat /flag")}{/if} [极客大挑战 2019]FinalSQL 一个登录框, 上面的提示应该就是要你盲注了 点一下那…

Web : EL表达式 -15

EL表达式概述 EL 全名为Expression Language&#xff0c;用来替代<% %>脚本表达式。 基本结构为${表达式}。 获取数据 获取常量 <h1>获取常量</h1> ${123} ${123.32} ${"abc"} ${true} 获取变量 el会自动从四大作用域中搜寻域属性来使用 如果找不…

vue3后台管理系统 vue3+vite+pinia+element-plus+axios上

前言 项目安装与启动 使用vite作为项目脚手架 # pnpm pnpm create vite my-vue-app --template vue安装相应依赖 # sass pnpm i sass # vue-router pnpm i vue-router # element-plus pnpm i element-plus # element-plus/icon pnpm i element-plus/icons-vue安装element-…

《海军罪案调查处:起源》预告片介绍新角色莱罗伊·杰思罗·吉布斯

《海军罪案调查处&#xff1a;起源》的主演奥斯汀斯托威尔最近分享了这部备受期待的前传系列剧的一张新宣传照。虽然距离该剧上映还有几个月的时间&#xff0c;但这张照片将激起粉丝们的兴奋之情。 这张照片通过斯托维尔的官方社交账号分享&#xff0c;让观众们看到了年轻时的…

html+css+js前端作业和平精英官网1个页面(带js)

htmlcssjs前端作业和平精英官网1个页面&#xff08;带js&#xff09;有轮播图tab切换等功能 下载地址 https://download.csdn.net/download/qq_42431718/89597007 目录1 目录2 项目视频 htmlcssjs前端作业和平精英官网1个页面&#xff08;带js&#xff09; 页面1

国家超算互联网平台:模型服务体验与本地部署推理实践

目录 前言一、平台显卡选用1、显卡选择2、镜像选择3、实例列表4、登录服务器 二、平台模型服务【Stable Diffusion WebUI】体验1、模型运行2、端口映射配置3、体验测试 三、本地模型【Qwen1.5-7B-Chat】推理体验1、安装依赖2、加载模型3、定义提示消息4、获取model_inputs5、生…

前端-如何通过docker打包Vue服务成镜像并在本地运行(本地可以通过http://localhost:8080/访问前端服务)

1、下载安装docker&#xff0c;最好在vs code里安装docker的插件。 下载链接&#xff1a;https://www.docker.com/products/docker-desktop &#x1f389; Docker 简介和安装 - Docker 快速入门 - 易文档 (easydoc.net) 2、准备配置文件-dockerfile文件和nginx.conf文件 do…

【Redis 初阶】Redis 常见数据类型(Set、Zset、渐进式遍历、数据库管理)

一、Set 集合 集合类型也是保存多个字符串类型的元素的&#xff08;可以使用 json 格式让 string 也能存储结构化数据&#xff09;&#xff0c;但和列表类型不同的是&#xff0c;集合中&#xff1a; 元素之间是无序的。&#xff08;此处的 “无序” 是和 list 的有序相对应的…

Camera Raw:五阶段修图流程

在使用 Camera Raw 修图时&#xff0c;如果按照一定的流程来进行&#xff0c;可以大大提高工作效率。这里提出的五阶段修图流程&#xff0c;简单来说就是&#xff1a; 1、调亮度&#xff0c;定影调 2、还原校正修复 3、局部调整优化 4、调颜色&#xff0c;定色调 5、存储、输出…

【C语言】qsort详解——能给万物排序的神奇函数

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html ⚙️操作环境:Visual Studio 2022 目录 一、引言 二、qsort函数介绍 1.函数原型 2.参数说明 2.1比较函数 3.使用示例 3.1对一维数组进…

【Canvas与艺术】五色五角大楼

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五L莫比乌斯五角大楼</title><style type"text/css&qu…

芋道以开源之名行下作之事 恬不知耻 标榜自己开源 公开源码+sql 不用再加入知识星球

资源 链接: https://pan.baidu.com/s/1TeuxbAUfLQ5_BqMBF1kniQ?pwdcqud 提 取码: cqud 依次为后端、补充版的sql、前端 此文档内安装部署等一应俱全

科普文:深入理解ElasticSearch体系结构

概叙 Elasticsearch是什么&#xff1f; Elasticsearch&#xff08;简称ES&#xff09;是一个分布式、可扩展、实时的搜索与数据分析引擎。ES不仅仅只是全文搜索&#xff0c;还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。 官网地址&#xff1a;…

MSA+抑郁症模型总结(一)(论文复现)

MSA抑郁症模型总结&#xff08;一&#xff09;&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 MSA抑郁症模型总结&#xff08;一&#xff09;&#xff08;论文复现&#xff09;情感分析在多场景的应用一、概述二、论文地址三、研究背景四…

PyTorch 2.0中图像增强方法详解

【图书推荐】《PyTorch深度学习与计算机视觉实践》-CSDN博客 基于Vision Transformer的mini_ImageNet图片分类实战_imagenet数据集-CSDN博客 Vision Transformer模型是目前图形识别领域最为前沿的和性能最好的图形分类模型&#xff0c;它能够对目标图像做出准确度最高的判断。…

《动手做科研 》| 05. 如何开展和记录实验

地址链接:《动手做科研》05. 如何开展和记录实验 导读: 当我们开始训练多个具有不同超参数的模型&#xff0c;我们就需要对实验开始进行管理。我们将其分为三个部分&#xff1a;实验追踪、超参数搜索和配置设置。我们将使用 Weights & Biases 来演示实验记录和追踪&#xf…

支持AI的好用的编辑器aieditor

一、工具概述 AiEditor 是一个面向 AI 的下一代富文本编辑器&#xff0c;她基于 Web Component&#xff0c;因此支持 Layui、Vue、React、Angular 等几乎任何前端框架。她适配了 PC Web 端和手机端&#xff0c;并提供了 亮色 和 暗色 两个主题。除此之外&#xff0c;她还提供了…

【源码+文档+调试讲解】乡镇篮球队管理系统设计与实现

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本乡镇篮球队管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信…