go 进阶训练营 微服务可用性(上) 笔记
隔离
本质上是对系统和资源进行分割,从而实现当系统故障时能限定传播范围和影响范围,即发生故障后只有出问题的服务不可用,保证其他服务仍然可用。
服务隔离
动静隔离
mysql 表中的bufferpool 频繁过期,隔离动静表。如 稿件的基本信息,作者、封面等和稿件的播放、点赞 频繁变化的数据进行的隔离。
cdn 的静态资源和动态资源的隔离。动态api的时候还讲了一个case 如边缘计算,qps高的时候可以在边缘节点加一个小程序进行压缩汇总,pipeline 打包发送到真正的处理地址,这个可以降低qps 节省服务器。
读写分离
cqrs command 和 query 进行分离,也就是写请求和读请求进行分离。比如 审核服务,审核是一个比较重的业务逻辑,也有多道程序,审核的逻辑和稿件的展示底层存储可以分离。审核的程序完成之后,对应稿件的存储层才可以进行展示,将关注点进行分离。
轻重隔离
业务按照 Level 进行资源池的划分(L0、L1、L2)
这里想起来之前做广告服务的时候,收集广告、点击的服务之前是一个接口通过不同参数进行区分,而且是写入同一张表,qps比较大的时候,处理不过来会丢失部分点击数据,点击数据需要回掉给广告主,所以是比较重要的请求,后续将 底层表 点击、曝光进行拆分,将接口也进行拆分,因为点击qps比较少,处理明显提高,隔离开之后,不会受曝光qps的增加影响核心点击数据的写入。
快慢隔离
将不同业务维度进行隔离,防止某些业务出现问题,影响整体不可用。
热点隔离
小表广播:从remote cache 提升为 local cache,定时更新local cache.
主动预热:统计热点数据中的top k 数据进行主动预热。
物理隔离
线程隔离
java 中线程池的隔离
进程隔离
容器化 docker
集群隔离
多集群部署
机房隔离
多活
超时控制
本质上:fail fast。良好的超时控制策略,可以尽可能地让服务不堆积请求,尽快清空高延迟的请求,释放Go routine.
具体做法:
默认值:一定要设置默认超时时间,而且要防御一下,比如超过60s,我们内部rpc 默认超时时间是250ms,当然有些job 扫表的超时时间不够,可以调整client的超时时间到800ms去解决。
超时传递:进程间传递+跨进程传递(grpc 默认支持)
看了一下 请求db的时候是有 Shrink 方法的,收敛context 的超时时间
如果上游 ctx 有 Deadline(),则从 上游的deadline 中获取超时时间,和自己设置的超时时间进行比较,两者比较获取较小的,这样就可以进程间传递超时时间了
gRPC 框架底层通过 HTTP2 协议发送 RPC 请求时,将 timeout 值写入到 grpc-timeout HEADERS Frame 中
参考:
《Go 进阶训练营》
gRPC 系列——grpc超时传递原理
go 进阶训练营 微服务可用性(上) 笔记的更多相关文章
- kratos微服务框架学习笔记一(kratos-demo)
目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和githu ...
- SpringCloud微服务框架复习笔记
SpringCloud微服务框架复习笔记 什么是微服务架构? 微服务是一种软件开发技术,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进 ...
- Devops 开发运维高级篇之微服务代码上传和代码检查
Devops 开发运维高级篇之微服务代码上传和代码检查 微服务持续集成(1)-项目代码上传到Gitlab 微服务持续集成(2)-从Gitlab拉取项目源码 微服务持续集成(3)-提交到SonarQub ...
- SpringCloud与Docker微服务架构实战笔记
一 微服务架构概述 1. 单体应用架构存在的问题 结合:https://www.cnblogs.com/jialanshun/p/10637454.html一起看,在该篇博客中搜索“单块架构的优缺点 ...
- 建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
前言 对于大厂面试,我想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来.另外提醒一点,充分复习,是消除你 ...
- Spring Cloud 微服务架构学习笔记与示例
本文示例基于Spring Boot 1.5.x实现,如对Spring Boot不熟悉,可以先学习我的这一篇:<Spring Boot 1.5.x 基础学习示例>.关于微服务基本概念不了解的 ...
- springcloud与docker微服务架构实战--笔记
看了<微服务那些事>之后,Spring boot和Spring Cloud的关系理清楚了,Spring cloud各个模块的作用也了解了. 但是,Spring cloud 与Docker的 ...
- iManager微服务自定义上传数据的两种方法
背景 当数据量大时,通过浏览器上传可能速度较慢,可以使用以下两种方式进行数据导入. 方法一 1.访问k8s主页(31234端口) 找到所创建的微服务的命名空间(例如icloud-native-xxx) ...
- 《gPRC使用protobuf构建微服务》阅读笔记
首先我需要去了解一些概念,根据百度百科了解到: l 微服务架构:微服务架构是一项在云中部署应用和服务的新技术.微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”. l ...
- go微服务框架Kratos笔记(六)链路追踪实战
什么是链路追踪 借用阿里云链路追踪文档来解释 分布式链路追踪(Distributed Tracing),也叫 分布式链路跟踪,分布式跟踪,分布式追踪 等等,它为分布式应用的开发者提供了完整的调用链路还 ...
随机推荐
- Windows 提权-服务_弱注册表权限
本文通过 Google 翻译 Weak Registry Key Permissions – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭 ...
- ANSYS 命令流导航
常见书籍 ANSYS 命令流导航 GitHub 项目:ANSYS_Code Gitee 镜像:ANSYS_Code 欢迎补充~ 文件说明 doc 中包括 ANSYS, ABAQUS, LS-DYNA ...
- [T.4] 团队项目:团队代码管理准备
团队的代码仓库地址 [GitHub - Meng-XuanYu/JayJay-TeamVersionControl: A public repo for BUAASE2025 course homew ...
- HttpRunner使用总结
1.安装 打开cmd或cmder,输入命令:pip3 install httprunner 安装完成输入命令:hrun -V或hrun -h 检查安装是否成功 2.使用 1)新建test.yaml文件 ...
- AI浏览器自动化实战
只需一句话,AI 即可自动操作浏览器: 搜索商品: 下单支付: 甚至还能进行深度研究(Deep Research),自动生成完整的攻略报告: Browser use 是一个开源项目,使 AI 大模型能 ...
- 强化学习框架:OpenRLHF源码解读,模型处理
强化学习框架:OpenRLHF源码解读,模型处理 本文主要介绍 强化学习框架:OpenRLHF源码解读,模型处理 models框架设计 了解一下 OpenRLHF的模型框架设计范式: From:htt ...
- 获取IP地址避免XFF攻击(使用nginx)
//以下代码可以获取到客户端IP,但是可能会有XFF攻击,伪造IP地址 request.getHeader("x-forwarded-for"); 解决办法 //从Nginx中X- ...
- FastAPI与Tortoise-ORM模型配置及aerich迁移工具
title: FastAPI与Tortoise-ORM模型配置及aerich迁移工具 date: 2025/04/30 00:11:45 updated: 2025/04/30 00:11:45 au ...
- 基于口令的密码—PBE
目录 流程 加密流程 解密流程 盐的作用 通过拉伸来改良PBE的安全性 如何生成安全口令的建议 定义: PBE是一种根据口令生成密钥并用该密钥进行加密的方法. 加密和解密都使用同一个密钥. 口令一词多 ...
- Vue3的14种组件通信方式
对于日常使用vue3开发项目的前端小伙伴来说,组件通信方式可以说是必会的基本功,今天带大家一起盘下vue3的通信方式. 我们这里按照组件的关系来划分.总共包含14中组件通信方式. 一.父子通信 pro ...