7

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

 1 year ago
source link: https://www.cnblogs.com/qi66/p/17071979.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一 谈谈对微服务的理解

1. 什么微服务?

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

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

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

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

2. 微服务体系

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

3. 微服务优点

  1. 易于开发和维护

  2. 局部修改容易部署

  3. 技术栈不受限

4. 微服务缺点

  1. 运维要求较高

  2. 分布式的复杂性

  3. 接口调整成本高

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感兴趣的小伙伴们,都可以与博主聊一聊,分享学习经验,共同成长

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

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK