微服务架构设计核心理论:掌握微服务设计精髓
文章目录
一、微服务与服务治理
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。
相关文章:
微服务架构设计核心理论:掌握微服务设计精髓
文章目录 一、微服务与服务治理1、概述2、Two Pizza原则和微服务团队3、主链路规划4、服务治理和微服务生命周期5、微服务架构的网络层搭建6、微服务架构的部署结构7、面试题 二、配置中心1、为什么要配置中心2、配置中心高可用思考 三、服务监控1、业务埋点的技术选型2、用户行…...
.net core 6 集成和使用 mongodb
1、安装包 MongoDB.Driver 2、定义顶层类 /// <summary> /// monggodb规范 /// </summary> public abstract class MongoDBToolBase { /// <summary> /// 客户端 /// </summary> protected MongoClient mongoClient { get; private …...
07-微服务getaway网关详解
一、初识网关 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…...
MS2660:L1 频段卫星导航射频前端低噪声放大器芯片
MS2660 是一款具有高增益、低噪声系数的低噪声放 大器(LNA)芯片,支持 L1 频段多模式全球卫星定位,可 以应用于 GPS、北斗二代、伽利略、Glonass 等 GNSS 导航 接收机中。芯片采用先进工艺制造,封装采用 2 mm 2 mm …...
微信小程序防止截屏录屏
一、使用css添加水印 使用微信小程序原生的view和css给屏幕添加水印这样可以防止用户将小程序内的隐私数据进行截图或者录屏分享导致信息泄露,给小程序添加一个水印浮层。这样即使被截图或者拍照,也能轻松地确定泄露的源头。效果图如下: 代码…...
126.(leaflet篇)leaflet松散型arcgis缓存切片加载
地图之家总目录(订阅之前必须详细了解该博客) arcgis缓存切片数据格式如下: 完整代码工程包下载,运行如有问题,可“私信”博主。效果如下所示: leaflet松散型arcgis缓存切片加载 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYP...
物联网介绍
阅读引言: 本文从多方面叙述物联网的定义以及在物联网当中的各种通信的介绍。 一、物联网的定义 1.1 通用的定义 物联网(Internet of Things,IOT;也称为Web of Things)是指通过各种信息传感设 备,如传感器、…...
Flume 之自定义Sink
1、简介 前文我们介绍了 Flume 如何自定义 Source, 并进行案例演示,本文将接着前文,自定义Sink,在这篇文章中,将使用自定义 Source 和 自定义的 Sink 实现数据传输,让大家快速掌握Flume这门技术。 2、自定…...
【1】SM4 CBC-MAC 机制
0x01 题目 MSG1: e55e3e24a3ae7797808fdca05a16ac15eb5fa2e6185c23a814a35ba32b4637c2 MAC1: 0712c867aa6ec7c1bb2b66312367b2c8 ----------------------------------------------------- MSG2: d8d94f33797e1f41cab9217793b2d0f02b93d46c2ead104dce4bfec453767719 MAC2: 4366…...
响应式编程Reactor API大全(下)
Reactor 是一个基于响应式编程的库,主要用于构建异步和事件驱动的应用程序。Reactor 提供了丰富的 API,包括创建、转换、过滤、组合等操作符,用于处理异步数据流。以下是一些 Reactor 的主要 API 示例: pom依赖 <dependencyMan…...
【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案)
【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案) 前文: 【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(疑难杂症) 目前已解决 …...
Python 语法糖
一、基本概念 语法糖,可以理解为:“甜蜜” 的便捷语法。 它是编程语言为程序提供的更简洁、更易读的语法实现的语法结构,它并不影响语言的功能,仅仅是一种更便捷的书写方式。 这就像你制作蛋糕时,使用现代烤箱而不是…...
一个小程序跳转到另一个小程序中如何实现
小程序 保证两个小程序是一样的主体才可以跳转。怎么知道是不是同样的主体呢? 小程序的后台管理-设置-基本设置-基本信息。查看主体信息。 跳转 <button clicktoOtherMini()>跳转到另一个小程序</button> function toOtherMini(){wx.navigateToMini…...
STM32+HAL库驱动ADXL345传感器(SPI协议)
STM32HAL库驱动ADXL345传感器(SPI协议) ADXL345传感器简介实物STM32CubeMX配置SPI配置片选引脚配置串口配置 特别注意(重点部分)核心代码效果展示 ADXL345传感器简介 ADXL345 是 ADI 公司推出的基于 iMEMS 技术的 3 轴、数字输出加…...
Redis实现全局唯一Id
一、全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显 受单表数据量的限制 场景分析:如果我们的…...
【J-Flash基本使用总结】
【J-Flash基本使用总结】 VX:hao541022348 ■ 烧录文件■ 创建新的工程■ 烧录模式-SWD模式■ J-Flash下载程序到单片机 ■ J-Flash拼接多个hex或bin文件■ J-Flash读单片机的option byte■ J-Flash读单片机Flash数据■ 将读出来的文件用jflash烧录到其他的芯片■ 设…...
宝塔发布网站问题汇总和记录
1、添加网站站点后打不开 解决办法,关闭防跨站攻击2 2、laravel项目部署到linux的时候出现The stream or file "/home/www/storage/logs/laravel.log" could not be opened in append mode 给目录加权限 chmod -R 777 storage 3、Class "Redis"…...
决战排序之巅(二)
决战排序之巅(二) 排序测试函数 void verify(int* arr, int n) 归并排序递归方案代码可行性测试 非递归方案代码可行性测试 特点分析 计数排序代码实现代码可行性测试 特点分析 归并排序 VS 计数排序(Release版本)说明1w rand( ) …...
自动化网络监控:每分钟自动检测网站可用性
🧙♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &…...
Asp .Net Core 系列:集成 Ocelot+Consul实现网关、服务注册、服务发现
什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的微…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
