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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 关于微服务的一些总结和经验之谈,来看看你都了解吗

一 谈谈对微服务的理解

1. 什么微服务?

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


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


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


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


2. 微服务体系

服务描述

类似服务的说明文档,简单但不可或缺。比如,服务调用首先要解决的问题就是服务如何对外描述。你对外提供了一个服务,那么这个服务的服务名叫什么?调用这个服务需要提供哪些信息?调用这个服务返回的结果是什么格式的?这些就是服务描述要解决的问题。

注册中心

下一步要解决的问题就是服务的发布和订阅,就是说你提供了一个服务(Provider),如何让外部(Consumer)想调用你的服务的人知道。这个时候就需要一个类似注册中心(Registry)的角色,服务提供者将自己提供的服务以及地址登记到注册中心,服务消费者则从注册中心查询所需要调用的服务的地址,然后发起请求。

服务框架

通过注册中心,服务消费者就可以获取到服务提供者的地址,有了地址后就可以发起调用。但在发起调用之前你还需要解决以下几个问题。服务通信采用什么协议?是RESTful API还是gRPC?数据传输采用什么方式数据压缩采用什么格式?这些通常集成到了我们的服务框架里面。

服务监控

一旦服务消费者与服务提供者之间能够正常发起服务调用,你就需要对调用情况进行监控,以了解服务是否正常。通常来讲,服务监控主要包括三个流程,指标收集,数据处理,数据展示。监控是为了发现问题和异常,如果要进一步跟踪和定位问题,则需要进一步了解服务追踪。

服务追踪

除了需要对服务调用情况进行监控之外,你还需要记录服务调用经过的每一层链路,以便进行问题追踪和故障定位,最后达到接近问题的目的。服务监控和追踪可以合并起来,但是要明确各自的职责是不一样的。

服务治理

服务监控能够发现问题,服务追踪能够定位问题所在,而解决问题就得靠服务治理了。服务治理就是通过一系列的手段来保证在各种意外情况下,服务调用仍然能够正常进行。

3. 微服务优点

易于开发和维护


启动较快


局部修改容易部署


技术栈不受限


按需伸缩


4. 微服务缺点

运维要求较高


分布式的复杂性


接口调整成本高


重复劳动


5. 什么是gRPC?

是谷歌开源的RPC框架。

该技术是为了解决什么问题?


解决了多语言数据传输的简单、通用、高效、安全的问题。

它的调用流程?


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


客户端:gRPC Server


服务端:gRPC Stub


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


处理请求过程:


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


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


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


6. ProtoBuf协议好处?

跨平台——方便传输数据


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


比json,xml小而快


7. gPRC和ProtoBuf联系?

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


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

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


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


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


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


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


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


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


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

拉取micro 镜像 docker pull micro/micro


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


.proto文件 编写接口


生成micro.go文件


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


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


在service 完成对接口的实现


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


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


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


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

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

16.png


在本次微服务项目开发中,可以学习掌握以下技术:

Go语言的使用


Docker、Docker-compose的使用


Proto的使用、编写、命令


微服务开发流程:


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函数,完成项目闭环

go-micro目录生成,使用,介绍,安装


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


(客户端)、ELk等等)


gorm数据库开发


Prometheus监控服务


ELK介绍


kibana日志可视化


filebeat日志上传


logstash收集日志


elasticsearch 日志搜索


zap日志封装


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

  • Go 语言目前的应用趋势 Go语言为什么适合做微服务?
  • 1、Go高并发等特性,更适合大型系统。
  • 2、Go编译速度快,无依赖环境,更适合容器化
  • 3、Go将会成为云计算时代的基础设施编程语言,特别适合微服务


17.png


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

18.png


  • 微服务容器化
  • 19.png

六 如何学习微服务

1. 微服务如何从0到1

入门Docker


掌握其在微服务开发中的运用

掌握微服务必备


注册中心与配置中心

掌握微服务观测


链路追踪系统接入

掌握微服务保稳


熔断、限流、负载均衡

掌握微服务维护


性能监控与日志系统接入

掌握微服务部署


Docker与K8s部署微服务项目

2. 从功能特性入手

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


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


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


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


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


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


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


七 遇到以下问题怎么办?

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

题目描述

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

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


建议:

首先能有这样的想法说明你是有上进心的人,这点在你后面的职业发展中非常重要,焦虑对我们来说谁都会有。谁都一样,别人估计比你更加焦灼难安。下面给出自己的一些注意点:

处理情绪上的问题,这么多年学到的一点是,发现了问题先不着急得出结论,先冷静分析为什么会这样,先把心态和基调放平。


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


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


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

题目描述

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

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


建议:

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

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

题目描述

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

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


建议:

截止时间带来的压力是比领导给的压力还严重,甚至有的时候由于要提前完成事情,连续通宵好几天。长期处于高压状态,导致经常失眠,身体也不是很健康。

后来意识到这个问题,积极参与这个工期的制作中,让自己即使没有心态先放正,对要做的事情有预期,关键的时候还能说下自己的想法,要点自己需要的资源,逐步缓解当前现状。


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


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


八 最后

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


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


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


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8月前
|
存储 运维 架构师
经验教训:微服务设计时的五条宝贵经验
在著名软件著作《人月神话》中提到,软件世界没有“银弹”,这句话当然适用于架构领域,随着从单体架构过渡到微服务架构,因为将原有系统打散,给系统增加了许多不稳定因素。
58 0
|
6月前
|
运维 Cloud Native 架构师
倒计时 3 天!5 大议题带您探索微服务和云原生大模型的落地经验(北京站)
倒计时 3 天!5 大议题带您探索微服务和云原生大模型的落地经验(北京站)
|
微服务 测试技术 网络安全
如何降低微服务测试成本?我的经验之谈
本文为大家介绍微服务治理+测试:基于服务契约信息,降低云上微服务测试成本。如果您的团队具备较强的微服务治理+测试能力,那么希望我们在微服务治理+测试方面的实践和背后的思考,可以为您提供一些参考。
3719 0
如何降低微服务测试成本?我的经验之谈
|
10天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
22天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
23 0
|
10天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
5天前
|
消息中间件 负载均衡 持续交付
构建高效微服务架构:后端开发者的终极指南
【4月更文挑战第25天】在当今软件工程领域,微服务架构已经成为实现可扩展、灵活且容错的系统的首选模式。本文将探讨如何从零开始构建一个高效的微服务系统,涵盖关键组件的选择、通信机制、数据管理以及持续集成和部署策略。通过深入分析与案例研究,我们旨在为后端开发者提供一个全面的微服务实践指南,帮助他们在构建现代化应用时做出明智的架构决策。
|
5天前
|
消息中间件 持续交付 数据库
构建高效可靠的微服务架构:策略与实践
【4月更文挑战第25天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。本文深入探讨了如何构建一个高效且可靠的微服务架构,包括关键的设计原则、技术选型以及实践中的挑战和应对策略。通过分析多个成功案例,我们总结了一系列最佳实践,并提出了一套可量化的性能优化方法。文章不仅为开发者提供了具体的技术指导,同时也强调了团队协作和持续学习在微服务转型过程中的重要性。
|
21天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
3天前
|
Kubernetes 负载均衡 Docker
【专栏】构建高效微服务架构:Docker与Kubernetes的完美搭档
【4月更文挑战第27天】本文介绍了Docker和Kubernetes在构建微服务架构中的应用。Docker是开源容器引擎,用于打包和分发应用,实现隔离和封装,提升可扩展性和可维护性。Kubernetes是容器编排平台,自动化部署、扩展和管理容器,提供负载均衡和故障转移。二者结合,能高效支持微服务架构。文中通过实例展示了如何将用户、商品和订单服务用Docker打包,再用Kubernetes部署和管理,确保微服务稳定运行。