微服务架构设计核心理论:掌握微服务设计精髓

文章目录

  • 一、微服务与服务治理
    • 1、概述
    • 2、Two Pizza原则和微服务团队
    • 3、主链路规划
    • 4、服务治理和微服务生命周期
    • 5、微服务架构的网络层搭建
    • 6、微服务架构的部署结构
    • 7、面试题
  • 二、配置中心
    • 1、为什么要配置中心
    • 2、配置中心高可用思考
  • 三、服务监控
    • 1、业务埋点的技术选型
    • 2、用户行为分析(用户画像)
    • 3、通用埋点手段
    • 4、离群点分析
  • 四、调用链梳理
    • 1、微服务链路梳理

一、微服务与服务治理

1、概述

单体应用时代,全都耦合在一起,牵一发而动全身。所有功能一起上线一起回滚。代码复杂度混乱。

微服务时代,业务模式糙快猛,敏捷编程。小步快跑,独立演进,独立部署,快速迭代。团队赋能(每个微服务有各自团队)。边界清晰,以大化小-服务拆分,三高应用-分治。

2、Two Pizza原则和微服务团队

Two Pizza原则:如果一个团队的成员,两个披萨都喂不饱他们,说明团队明显太大了 。

“大象不会跳舞” - 提倡小团队。
小团队:沟通成本低,小步快跑容易实现。(人数不会超过10个)

在微服务和敏捷的理念之下,通常是重沟通请问当,因此团队中的每个人都需要做到深度参与。

测试人员也是有很强的开发功底,会致力于测试框架的搭建。

3、主链路规划

要保障业务的最小可用性。(比如:电商的下单场景、社交的点对点消息)

主链路规划就是将有限的资源用在最核心的链路上。
根据应用的水位,进行弹性计算,确保主链路的可用性。自动/手动进行降级熔断、分段限流。

4、服务治理和微服务生命周期

远程RPC调用,A服务是如何知道B服务服务器地址的呢?B有多台服务器,A是如何从集群中选择B服务呢?B服务上下线是如何让A服务知道的呢?

总的来说,服务治理就是维护一个可用的服务列表(注册中心),并且体现服务的状态。
在这里插入图片描述

服务注册:每个微服务上线之后,会主动在注册中心上注册自己的IP、名称等信息。
服务发现:每个微服务都会从注册中心主动拉取所有在该注册中心上注册的服务信息。
服务续约(心跳):每个微服务与注册中心每隔几秒发送心跳包,确保自己处于正常状态。
服务剔除:注册中心每隔一段时间进行批处理,这段时间内没收到心跳包的微服务会从注册中心剔除。
服务下线:微服务主动从注册中心剔除掉。
在这里插入图片描述

5、微服务架构的网络层搭建

通常来说,Unsecure Zone是可以对用户暴露的,用户可以直接访问的;Secure Zone只内部访问。
而且每个小的微服务,还会做集群部署。
在这里插入图片描述

6、微服务架构的部署结构

将每个微服务打包成docker镜像,部署在同一个物理机上,使用kubernetes进行快速部署。
在这里插入图片描述

7、面试题

问:高并发系统、资源有限、如何来保障业务顺利进行?
答:主链路规划!由面到点。业务角度规划主链路 - 流量、转化率、变现场景;漏斗模型 - 越往下越重要。
答:具体技术点:限流降级,弹性计算。

问:谈谈服务治理
答:本质是维护可用服务列表,保持服务间调用的正确性。
答:服务治理的生命周期(服务注册、服务发现、服务剔除、服务续约、服务下线)。

二、配置中心

1、为什么要配置中心

配置中心可以将配置统一管理,有配置变化可以实时推送到相关的微服务。

实现:
配置业务隔离(将具体配置文件从业务代码中抽离,放在中心化的配置中心);
环境隔离(业务代码层并不需要关心当前部署的环境,在配置中心做配置隔离,业务代码启动时根据启动参数决定使用哪个环境的配置);
服务隔离(中心化的配置服务,有能力识别那些配置文件属于哪些服务)。

2、配置中心高可用思考

解决单点故障问题,就需要做集群(多副本、主从、集群)。
单点故障解决方案:通过注册中心,将配置中心注册为一个微服务。来实现高可用。

配置文件本地保存一个备份,确保远程配置数据读取不到导致宕机。

总而言之,高可用的原则就是认为任何一环都不可靠,通过各种方式来提高总体的可用性。

三、服务监控

1、业务埋点的技术选型

通过业务日志,进行业务买点的处理,用于内审、统计、线上预警。

内审:后台系统、商户关键操作(银行卡、关户、密码)的关键操作都记录下来,用于内部审计。(海量数据,可查找,长期保存)
记录下来之后,根据操作员/操作资源维度进行操作查找。查出问题进行追责。
也就是说,审计数据只需要根据key来查询想要的操作记录即可,可以考虑使用CouchBase或者MongoDB等文档数据库。

线上预警:基于文件业务日志记录的,通过日志关键信息来监控关键业务流程、关键指标。
技术选型:fileBeat(收集log文件),Kafka(日志收集及分发),Logstash(日志收集、转换)、elasticSearch(存储、查询)、Kibana(图形化界面)。

2、用户行为分析(用户画像)

从个人行为数据上,分析出个人特点,从而进行一些精准推送。
在这里插入图片描述
日志关键信息:操作时间;页面元素;匿名/登录用户;做了什么操作。(时间、地点、人物、事件,按需记录)

3、通用埋点手段

一般就是这三种手段:后端业务埋点、前端可视化埋点、无痕埋点。

后端业务埋点:在后端代码中,进行日志打印。
可以用侵入性比较高的,手动打印日志(代码侵入高、信息完整度高、精准度高)。也可以使用AOP注解,进行统一日志(代码侵入低,信息完整度较低,精准度较低)。

前端可视化埋点/声明式埋点:使用前端的一些控件/按钮进行埋点。
比如按钮点击,触发响应函数,判断埋点开关是否开启,若开启就执行埋点函数(异步)。
对比后端业务埋点:埋点前置,降低业务侵入,降低成本。
缺点:APP更改埋点逻辑就得重新发版更新,比较麻烦。

无痕埋点:无差别记录用户行为(所有行为),异步发送后台。
记录业务事件(控件事件),需要在前端框架层面,为每个控件定义一个业务事件(每个控件要对应好业务)。
还需要后端可配(比如说APP更改埋点逻辑,只需要读取后端配置即可)。
还需要注意数据传递,前后数据关联(获取前一步操作内容),所以说无痕埋点保存数据时,还需要携带前一个页面的相关数据。
特点:埋点成本低,但是数据清洗难度高。

通常来说使用无痕埋点+可视化埋点,进行数据分析。
后端业务埋点记录关键链路。
综合使用。

4、离群点分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、调用链梳理

1、微服务链路梳理

微服务调用链路长,出问题之后需要找到问题的根源点。

通过报错日志,找到全局的TraceID,然后定位整条调用链路。
在这里插入图片描述
常用解决方案:ZipKin、skywalking。

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

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

相关文章

2023年总结:雄关漫道真如铁,而今迈步从头越,今朝得失

2023年悄然离去,感谢大家的帮助、鼓励和陪伴,感谢家人的理解和支持,祝大家新年快乐,阖家幸福,身体健康。像往常一样,今年也会写一篇年终总结,也是自己的第11篇年终总结,题目就叫《雄…

32 二叉树的定义

之前的通用树结构 采用双亲孩子表示法模型 孩子兄弟表示法模型 引出二叉树 二叉树的定义: 满二叉树和完全二叉树 对此图要有印象 满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树 小结

Javaweb之SpringBootWeb案例员工管理分页查询的详细解析

3. 员工管理 完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。 基于以上原型,我们可以把员工管理功能分为: 分页查询(今天完成) 带条件的分页查询(今天完成) 删除员工&…

HNU-算法设计与分析-实验4

算法设计与分析实验4 计科210X 甘晴void 202108010XXX 目录 文章目录 算法设计与分析<br>实验41 回溯算法求解0-1背包问题问题重述想法代码验证算法分析 2 回溯算法实现题5-4运动员最佳配对问题问题重述想法代码验证算法分析 3 分支限界法求解0-1背包问题问题重述想法…

gogs git创建仓库步骤

目录 引言创建仓库clone 仓库推送代码 引言 Gogs 是一款类似GitHub的开源文件/代码管理系统&#xff08;基于Git&#xff09;&#xff0c;Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。 创建仓库 git中的组织可以把它看成是相关仓库的集合&#xff0c…

DNS主从服务器配置

主从服务器配置&#xff1a; &#xff08;1&#xff09;完全区域传送&#xff1a;复制整个区域文件 #主DNS服务器的配置【主dns服务器的ip地址为192.168.168.129】 #编辑DNS系统配置信息&#xff08;我这里写的增加的信息&#xff0c;源文件里面有很多内容&#xff09; [root…

python中小数据池和编码

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 ⼀. 小数据池 在说小数据池之前. 我们先看⼀个概念. 什么是代码块: 根据提示我们从官⽅⽂档找到了这样的说法&#xff1a; A Python program is constructed from code blocks. A block is a piece of Python program text…

大电流直流恒温控制电路

一个电子制冷器控制芯片 实物照片 驱动芯片 使用环境12V直流&#xff0c;电流10A 特此记录 anlog 2024年1月15日

2.1.2 一个关于y=ax+b的故事

跳转到根目录&#xff1a;知行合一&#xff1a;投资篇 已完成&#xff1a; 1、投资&技术   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas   1.2 金融数据处理   1.3 金融数据可视化 2、投资方法论   2.1.1 预期年化收益率   2.1.2 一个关于yaxb的…

【C初阶——内存函数】鹏哥C语言系列文章,基本语法知识全面讲解

本文由睡觉待开机原创&#xff0c;转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 这里写目录标题 1.memcpy使用和模拟实现2.memmove的使用和模拟实现3.memset函数的使用4.memcpy函数的使用 1.m…

linux安装MySQL5.7(安装、开机自启、定时备份)

一、安装步骤 我喜欢安装在/usr/local/mysql目录下 #切换目录 cd /usr/local/ #下载文件 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz #解压文件 tar -zxvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local …

ERP和MES对接的几种接口方式

在数字化工厂的规划建设中&#xff0c;信息化系统的集成&#xff0c;既是重点&#xff0c;但同时也是难点。ERP和MES对接时&#xff0c;ERP主要负责下达生产计划&#xff0c;MES是执行生产计划&#xff0c;二套系统在数据交互时&#xff0c;需要确保基础数据的一致性&#xff0…

SpringBoot源码分析

一&#xff1a;简介 由Pivotal团队提供的全新框架其设计目的是用来简化新Spring应用的初始搭建以及开发过程使用了特定的方式来进行配置快速应用开发领域 二&#xff1a;运行原理以及特点 运行原理&#xff1a; SpringBoot为我们做的自动配置&#xff0c;确实方便快捷&#…

STC8H8K蓝牙智能巡线小车——2. 点亮左右转弯灯与危险报警灯

任务调用示例 RTX 51 TNY 可做多任务调度&#xff0c;API较为简单。 /* 接口API */// 创建任务 extern unsigned char os_create_task (unsigned char task_id); // 结束任务 extern unsigned char os_delete_task (unsigned char task_id);// 等待 extern unsig…

RTKlib操作手册--使用样例数据演示

简介 RTKLIB&#xff08;Real-Time Kinematic Library&#xff09;是一款开源的实时差分全球导航卫星系统&#xff08;GNSS&#xff09;软件库。它旨在提供高精度的位置解算&#xff0c;特别是在实时应用中&#xff0c;如精密农业、测绘、无人机导航等领域。 RTKLIB支持多种G…

目标检测数据集 - 人脸检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;行人检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如校园行人、街景行人、道路行人、遮挡行人、严重遮挡行人数据&#xff1b;适用实际项目应用&#xff1a;公共场所监控场景下行人检测项目&#xff0c;以及作为…

如何写好年终总结?

前面有读者留言问年终总结要怎么写&#xff0c;我一听你要聊这个我可不困了&#xff0c;这活我熟啊&#xff0c;谁不知道我厂是 PPT 之王。先来一套打法闭环方法论&#xff0c;再来一套赋能抓手组合拳&#xff0c;如此这般&#xff0c;便可笑傲于江湖。 玩笑归玩笑&#xff0c…

常用界面设计组件 —— 字符串与输入输出组件(QT)

2.2 字符串与输入输出组件2.2.1 字符串与数值之间的转换2.2.2 QString的常用功能 2.2 字符串与输入输出组件 2.2.1 字符串与数值之间的转换 界面设计时使用最多的组件恐怕就是QLabel和 QLineEdit了&#xff0c;QLabel用于显示字符串&#xff0c;QLineEdit用于 显示和输入字符…

ioDraw在线图表工具 - 轻松制作专业图表,只需3步!

还在花大量时间手动画图表&#xff1f;还在为图表样式而烦恼&#xff1f;ioDraw为你提供一站式解决方案&#xff01;ioDraw在线图表工具实现了AI自动生成图表&#xff0c;让你轻松制作专业图表&#xff0c;只需3步&#xff01; 1. 录入数据 只需将你的数据告诉ioDraw AI助手&…

[Docker] Dockerfile

文章目录 什么是 Dockerfile&#xff1f;使用 Dockerfile 定制镜像开始构建镜像上下文路径 指令详解COPYADDCMDENTRYPOINTENVARGVOLUMEEXPOSEWORKDIRUSERHEALTHCHECKONBUILD 什么是 Dockerfile&#xff1f; Dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了…