关于微服务的一些总结和经验之谈,来看看你都了解吗

news2024/11/19 23:13:30

文章目录

  • 一 谈谈对微服务的理解
      • 1. 什么微服务?
      • 2. 微服务体系
      • 3. 微服务优点
      • 4. 微服务缺点
      • 5. 什么是gRPC?
      • 6. ProtoBuf协议好处?
      • 7. gPRC和ProtoBuf联系?
  • 二 本次微服务项目学习流程梳理
  • 三 微服务项目一般开发流程梳理
  • 四 从本次微服务项目中学到了什么
  • 五 对于微服务的一些经验之谈
  • 六 如何学习微服务
      • 1. 微服务如何从0到1
      • 2. 从功能特性入手
  • 七 遇到以下问题怎么办?
      • 1.有太多东西没学没有足够的时间心里很焦虑怎么办
        • 题目描述
        • 建议:
      • 2.开发起一个计划总是遥遥无期,它总被一些非技术性的原因阻挠
        • 题目描述
        • 建议:
      • 3.该如何应对截止日期和从属关系的压
        • 题目描述
        • 建议:
  • 八 最后

一 谈谈对微服务的理解

1. 什么微服务?

  • 微服务是一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。

  • 每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。

  • 每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等。

  • 应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建。

2. 微服务体系

  1. 服务描述
  • 类似服务的说明文档,简单但不可或缺。比如,服务调用首先要解决的问题就是服务如何对外描述。你对外提供了一个服务,那么这个服务的服务名叫什么?调用这个服务需要提供哪些信息?调用这个服务返回的结果是什么格式的?这些就是服务描述要解决的问题。
  1. 注册中心
  • 下一步要解决的问题就是服务的发布和订阅,就是说你提供了一个服务(Provider),如何让外部(Consumer)想调用你的服务的人知道。这个时候就需要一个类似注册中心(Registry)的角色,服务提供者将自己提供的服务以及地址登记到注册中心,服务消费者则从注册中心查询所需要调用的服务的地址,然后发起请求。
  1. 服务框架
  • 通过注册中心,服务消费者就可以获取到服务提供者的地址,有了地址后就可以发起调用。但在发起调用之前你还需要解决以下几个问题。服务通信采用什么协议?是RESTful API还是gRPC?数据传输采用什么方式数据压缩采用什么格式?这些通常集成到了我们的服务框架里面。
  1. 服务监控
  • 一旦服务消费者与服务提供者之间能够正常发起服务调用,你就需要对调用情况进行监控,以了解服务是否正常。通常来讲,服务监控主要包括三个流程,指标收集,数据处理,数据展示。监控是为了发现问题和异常,如果要进一步跟踪和定位问题,则需要进一步了解服务追踪。
  1. 服务追踪
  • 除了需要对服务调用情况进行监控之外,你还需要记录服务调用经过的每一层链路,以便进行问题追踪和故障定位,最后达到接近问题的目的。服务监控和追踪可以合并起来,但是要明确各自的职责是不一样的。
  1. 服务治理
  • 服务监控能够发现问题,服务追踪能够定位问题所在,而解决问题就得靠服务治理了。服务治理就是通过一系列的手段来保证在各种意外情况下,服务调用仍然能够正常进行。

3. 微服务优点

  1. 易于开发和维护

  2. 启动较快

  3. 局部修改容易部署

  4. 技术栈不受限

  5. 按需伸缩

4. 微服务缺点

  1. 运维要求较高

  2. 分布式的复杂性

  3. 接口调整成本高

  4. 重复劳动

5. 什么是gRPC?

  • 是谷歌开源的RPC框架。
  1. 该技术是为了解决什么问题?

    • 解决了多语言数据传输的简单、通用、高效、安全的问题。
  2. 它的调用流程?

    • 以client 调用 server 的 add函数为例。

    • 客户端:gRPC Server

    • 服务端:gRPC Stub

    • 交互过程就是客户端发送请求到服务端,服务端处理请求并将结果发送响应返给客户端。

  3. 处理请求过程:

    • 客户端把请求的参数进行序列化,序列化是通过ProtoBuf协议【protobuf】来编码的,编完码向服务端发送请求,请求跨网络,基于HTTP2.0协议,

    • 此时服务端接收到了请求,服务端同样通过ProtoBuf协议进行解码,反序列化,发现本地有add函数,将结果序列化,用ProtoBuf协议编码,通过网络来到客户端,客户端通过ProtoBuf协议协议反序列化,把响应的结果用到客户端的程序代码里。

    • 分析完过程,gRPC不会一个人唱独角戏,它必须结合ProtoBuf协议协议才能发挥功效。

6. ProtoBuf协议好处?

  • 跨平台——方便传输数据

  • 跨语言——方便解析数据,解析成自己语言的语法结构

  • 比json,xml小而快

7. gPRC和ProtoBuf联系?

gRPC要实现跨平台+跨语言+序列化、反序列化,就要用到ProtoBuf协议来实现。

二 本次微服务项目学习流程梳理

  1. 从微服务入门开始,讲解go-micro的transport通讯层grpc原理。以及grpc数据的传输序列化和反序列化protobuf的原理

  2. 以业务最简单的用户模块为例,串联gorm等知识,理解如何将模块开发封装。

  3. 介绍go-micro中的Consul组件实现注册中心和配置中心的基本原理。利用Docker快速安装Consul,介绍实际工作中的使用经验,并将其接入项目。

  4. 介绍go-micro中的Jaeger组件原理和作用。为项目集成链路追踪功能,完成链路观测台

  5. 熔断,限流,负载均衡是微服务保稳三剑客,介绍hystrix-go组件原理和作用,介绍限流问题的代码包 uber/ratelimit的基本使用

  6. 微服务Go化,一般都是因为在意性能,所以性能监控非常重要。使用Docker快速完成promethues+grafana安装,并接入项目中,完成性能监控台

  7. 通过zap 工具进行日志记录,统一收集到日志中心ELK中。再统一配置,将前面的链路追踪、负载均衡、监控日志等全部集成在一起,完成服务级观测台

三 微服务项目一般开发流程梳理

  1. 拉取micro 镜像 docker pull micro/micro

  2. 生成模块项目文件 docker run -rm -v 根目录:根目录 -w

  3. .proto文件 编写接口

  4. 生成micro.go文件

  5. 完成model文件 编写数据表struct映射体

  6. 编写reponsitory 文件,用gorm对数据库操作

  7. 在service 完成对接口的实现

  8. 针对protoc暴露接口,实现接口(request参数赋值)

  9. 接入各种微服务插件,如配置、注册中心,链路追踪,限流,ELK等等

  10. 完成main.go开发,完成微服务项目部署

四 从本次微服务项目中学到了什么

  • Go微服务架构技术栈以及各层面应用到的服务

image.png

  • 在本次微服务项目开发中,可以学习掌握以下技术:
  1. Go语言的使用

  2. Docker、Docker-compose的使用

  3. Proto的使用、编写、命令

  4. 微服务开发流程:

    • 4.1 创建项目(Docker或go-micro)
    • 4.2 编写proto文件,并生成.go文件
    • 4.3 编写domain数据库方面,包含(model层,repository层,service层)等
    • 4.4 编写Handle层,实现proto定义接口
    • 4.5 编写common层,配置,mysql,公共函数,jaeger(链路追踪)等
    • 4.6 编写main函数,完成项目闭环
  5. go-micro目录生成,使用,介绍,安装

  6. 微服务组件的认识(注册中心和配置中心(Consul)、链路追踪(jaeger)、限流(服务端)、负载均衡7

  7. (客户端)、ELk等等)

  8. gorm数据库开发

  9. Prometheus监控服务

  10. ELK介绍

  11. kibana日志可视化

  12. filebeat日志上传

  13. logstash收集日志

  14. elasticsearch 日志搜索

  15. zap日志封装

五 对于微服务的一些经验之谈

  • Go 语言目前的应用趋势 Go语言为什么适合做微服务?

    • 1、Go高并发等特性,更适合大型系统。

    • 2、Go编译速度快,无依赖环境,更适合容器化

    • 3、Go将会成为云计算时代的基础设施编程语言,特别适合微服务
      image.png

  • 对于真正微服务项目来说,服务开发只是第一步,容器化、弹性伸缩和可观测才是真正关键。

  • 微服务技术体系

image.png

  • 微服务容器化

image.png

六 如何学习微服务

1. 微服务如何从0到1

  1. 入门Docker

    • 掌握其在微服务开发中的运用
  2. 掌握微服务必备

    • 注册中心与配置中心
  3. 掌握微服务观测

    • 链路追踪系统接入
  4. 掌握微服务保稳

    • 熔断、限流、负载均衡
  5. 掌握微服务维护

    • 性能监控与日志系统接入
  6. 掌握微服务部署

    • Docker与K8s部署微服务项目

2. 从功能特性入手

  • 服务间通信,包括服务治理、负载均衡、服务间调用;

  • 服务容错和异常排查,包括流量整形、降级熔断、调用链追踪;

  • 分布式能力建设,包括微服务网关、分布式事务、消息驱动、分布式配置中心。

  1. 从微服务组件的功能维度来讲,服务间通信是最基础的功能特性,这个功能模块是最适合作为初学者学习微服务技术的切入点。

  2. 当我们构建起基础的通信能力之后,接下来就要考虑如何构建服务容错能力,提高服务调用的稳定性了。

  3. 在这之后,我们就可以从全局的角度构建一些分布式支持特性。

  4. 这样,就有了一条难度平缓上升的学习曲线,也不会从入门到放弃了。

七 遇到以下问题怎么办?

1.有太多东西没学没有足够的时间心里很焦虑怎么办

题目描述

  • 往往学技术的小伙伴会冲破一个基础阶段,踏上更高的发展阶段,当眼界被打开的时候,你会发现有学多新知识在等着花时间学习,往往这断时间会出现焦虑情绪,这时候该怎么办?

提示:结合自己的经历,分享下自己的心路历程,可以将您的答案写在评论区,与博主和小伙伴一起交流。

建议:

  • 首先能有这样的想法说明你是有上进心的人,这点在你后面的职业发展中非常重要,焦虑对我们来说谁都会有。谁都一样,别人估计比你更加焦灼难安。下面给出自己的一些注意点:
  1. 处理情绪上的问题,这么多年学到的一点是,发现了问题先不着急得出结论,先冷静分析为什么会这样,先把心态和基调放平。

  2. 每个人焦虑的出发点可能都不一样,但是一样的是过度的焦虑会适得其反,消耗我们正常的注意力,让原本正常的状态受到影响。所以不要过度焦虑,也没必要,也没作用(自己思考下是不是)。

  3. 把焦虑转化为你成长的动力,用好它,适当的焦虑能够帮你不断的成长,当你没有目标的时候,会比过度焦虑更可怕,人往往是在发展中被淘汰的。

2.开发起一个计划总是遥遥无期,它总被一些非技术性的原因阻挠

题目描述

  • 你往往主张的一项活动,一个话题,一个方向只有你在非常high的进行,别人都不关系,该如何是好?

提示:结合自己的经历,分享下自己的心路历程,可以将您的答案写在评论区,与博主和小伙伴一起交流。

建议:

  • 面对这个问题大家要考虑的一个问题是,你的活动,话题等是否是大家共识的。没有共识就没有共同语言,如果你想要达到大家都理解的效果,方便以后开展工作,但是又没法推进,这时候你可以发挥好你上司的职责,让他帮助你推广和实施,只要大家达成共识,认为这件事情是对的,确实需要做,事情就成功一般了,接下来就交给团队,组织的力量远超过个人,最终的结果可能会超出你的预期。

3.该如何应对截止日期和从属关系的压

题目描述

  • 这个问题一直以来绝大部分人都会面临,公司的发展业绩,领导的业务指标都会占用你的正常生活,甚至下班和放假在家你也会处于时刻紧张的状态。

​提示:结合自己的经历,分享下自己的心路历程,可以将您的答案写在评论区,与博主和小伙伴一起交流。

建议:

  • 截止时间带来的压力是比领导给的压力还严重,甚至有的时候由于要提前完成事情,连续通宵好几天。长期处于高压状态,导致经常失眠,身体也不是很健康。
  1. 后来意识到这个问题,积极参与这个工期的制作中,让自己即使没有心态先放正,对要做的事情有预期,关键的时候还能说下自己的想法,要点自己需要的资源,逐步缓解当前现状。

  2. 回家之后,尽量只做自己喜欢的事情,比如看电影,电视,下棋等。实践中发现换脑袋带来的轻松感,有助于创造性的工作。

  3. 山一天移不完,饭一天吃不完,凡是不要过早下结论,草草开始,自己先通盘思考下,缺什么,要什么,达到什么。生活和工作尽量划分开。

八 最后

  • 至此,go-micro微服务项目全部正式完成。

  • 对于微服务和Go感兴趣的小伙伴们,都可以与博主聊一聊,分享学习经验,共同成长

  • 希望大家关注博主和关注专栏,每篇博客都干货满满。

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

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

相关文章

数据结构 | 图结构的讲解与模拟实现 | DFS与BFS的实现

文章目录前言常见概念总结图的模拟实现邻接矩阵和邻接表的优劣图的模拟实现(邻接表)广度优先遍历(BFS)深度优先遍历(DFS)前言 在聊图的结构之前,我们可以先从熟悉的地方开始,这有一…

Leetcode 剑指 Offer II 012. 左右两边子数组的和相等

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给你一个整数数组 nums ,请计算数组的 中心下标 。 …

Android 启动速度优化

Android 启动速度优化前序统计adb测量手动打点方案预加载class字节码的预加载Activity预创建Glide预初始化WebView预加载数据预加载三方库初始化布局方面ViewStub标签减少层级主题的选择约束布局使用X2C方案过度绘制如何检测过度绘制如何监控页面的渲染速度移除多余背景Recycle…

Linux系列 Linux常用命令(2)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.Linux常用命令后续 1.创建目录和文件 (1&#x…

DaVinci:Camera Raw(Blackmagic RAW)

本文主要介绍 Blackmagic Raw 格式(.braw)素材相关的 Camera Raw 参数。解码质量Decode Quality解码质量决定了图像解拜耳之后所呈现的素质。默认为“使用项目设置” Use project setting,表示使用项目设置对话框中的“Camera RAW”解码质量设…

PPT录制视频的方法有哪些?分享5种亲测好用的方法

PPT文稿可以通过图文或者动画的形式,直观形象地把内容展现给观众,从而给观众留下深刻的印象。比如老师讲课时会用到PPT,公司开会时也会用到PPT。除了需要使用到PPT文稿之外,有时还要对它进行录制。那你知道PPT录制视频的方法有哪些…

[JavaWeb]HTML

目录1.简介1.1 HTML基本结构1.2 标签使用细节2.常用标签使用2.1 font 字体标签2.2 字符实体2.3 标题标签2.4 超链接标签2.5 有序无序标签(1)无序列表ul/li(2)有序列表ol/li2.6 图像标签(img)2.7 表格(table)标签表格标签-跨行跨列表格2.8 form(表单)标签介绍2.9 input单选多选标…

Unity-ROS与Navigation 2(四)

0. 简介 对于Gazebo而言,我们知道其是可以通过与ROS的连接完成机器人建图导航的,那我们是否可以通过Unity来完成相同的工作呢,答案是肯定的。这一讲我们就来讲述使用Unity的“Turtlebot3”模拟环境,来运行ROS2中的“Navigation 2…

Rust机器学习之tch-rs

Rust机器学习之tch-rs tch-rs是PyTorch接口的Rust绑定,可以认为tch-rs是Rust版的PyTorch。本文将带领大家学习如何用tch-rs搭建深度神经网络识别MNIST数据集中的手写数字。 本文是“Rust替代Python进行机器学习”系列文章的第五篇,其他教程请参考下面表…

autodeauth:一款功能强大的自动化Deauth渗透测试工具

关于autodeauth autodeauth是一款功能强大的自动化Deauth渗透测试工具,该工具可以帮助广大研究人员以自动化的形式针对本地网络执行Deauth渗透测试,或者枚举公共网络。当前版本的autodeauth已在树莓派OS和Kali Linux平台上进行过测试,之后的…

Presidential靶机总结

Presidential靶机渗透总结 靶机下载地址: https://download.vulnhub.com/presidential/Presidential.ova 打开靶机,使用nmap扫描出靶机的ip和所有开放的端口 可以看到靶机开放了80端口和2082端口 使用-sV参数查看详细服务 80端口是http服务 2082端口是ssh服务 那么我们先根据…

双向链表实现简单的增删查改

前言:上次分享了单向链表的增删查改,这次要介绍双向链表的增删查改,其实双向链表也有多种,这次主要介绍结构最复杂但是实现起功能反而最简单的带头双向循环链表,希望我的分享对各位有些许帮助。学习这篇文章的内容最好…

[虾说IT]GIS与三高架构(一)什么是高性能

大家好,我是消失了一个年假的不愿意透露姓名的神秘虾神,这是癸卯兔年虾神的第一个系列,聊聊GIS中的架构设计,不过你如果是做其他架构的也差不多……总之是架构是虾神的本职工作之一,那么培养更多的架构设计者和爱好者&…

基于前馈补偿的PID控制算法及仿真

在高精度伺服控制中,前馈控制可用来提高系统的跟踪性能。经典控制理论中的前馈控制设计是基于复合控制思想,当闭环系统为连续系统时,使前馈环节与闭环系统的传递函数之积为1,从而实现输出完全复现输入。利用前馈控制的思想&#x…

剑指 Offer 05. 替换空格 [C语言]

目录题目思路1代码1结果1思路2代码2结果2该文章只是用于记录考研复试刷题题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s “We are happy.” 输出:“We%20are%20happy.” 限制&#xff…

pnpm 简介

本文引用自 摸鱼wiki 1. 与npm,yarn性能比较 actioncachelockfilenode_modulesnpmpnpmYarnYarn PnPinstall33.8s20.1s20.3s40.7sinstall✔✔✔2.1s1.4s2.6sn/ainstall✔✔9.1s5.3s7.8s1.7sinstall✔13.5s9.3s14.1s7.7sinstall✔15s17.2s14.2s33.4sinstall✔✔2.5s3s…

2.JSX

JSX(JavaScript XML) 是 JavaScript 的语法扩展,格式上比较像模板语言。React支持JSX 下面两个代码可以实现相同的功能,JSX看起来要简洁一些 目录 1 使用环境 2 React中的JSX 2.1 特殊的属性 2.2 没有子节点的标签 2.3 小括号包裹 3 JSX使用…

vue 实现动态路由

vue-router对象中的addRoutes&#xff0c;用它来动态添加路由配置格式&#xff1a;router.addRoutes([路由配置对象]) this.$router.addRoutes([路由配置对象])举个例子&#xff1a;// 按钮 <button click"hAddRoute">addRoute</button>// 回调 hAddRout…

感染了恶意软件怎么办?

近日&#xff0c;研究人员披露了一种恶意软件&#xff0c;这种恶意软件已经感染了一系列广泛的 Linux 和 Windows 设备。恶意软件攻击事件的频繁发生&#xff0c;除了黑客的恶意攻击外&#xff0c;还有企业内部自身的问题&#xff0c;下面列举了7种容易感染恶意软件的途径和解决…

2023年2月软考高级-信息系统项目管理师【报名入口】

信息系统项目管理师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资…