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),也叫 分布式链路跟踪,分布式跟踪,分布式追踪 等等,它为分布式应用的开发者提供了完整的调用链路还 ...
随机推荐
- 探秘Transformer系列之(15)--- 采样和输出
探秘Transformer系列之(15)--- 采样和输出 目录 探秘Transformer系列之(15)--- 采样和输出 0x00 概述 0x01 Generator 1.1 Linear 1.2 ...
- CENTOS 7 使用Docker安装oracle 11g
1.docker第一次安装失败,下一次会提示同名的容器已经存在,解决办法: docker container ls -a 根据上面执行的接口,选择一个containerid,然后带入到下面的命令 do ...
- Linux SWAP交换分区应该设置多大?
乾乾君子 2019-02-21 15:21:02 23370 收藏 34分类专栏: 杂记 文章标签: linux centos swap分区版权 Linux SWAP交换分区,就是我们课本说讲过 ...
- Delphi 使控件变成圆角的方法
procedure RoundControl(Control: TWinControl; arc1, arc2: Integer); var R: TRect; Rgn: HRGN; begin wi ...
- verilog实现32位有符号流水乘法器
verilog实现32位有符号流水乘法器 1.4bit乘法流程 1.无符号X无符号二进制乘法器 以下为4bit乘法器流程(2X6) 0 0 0 0 0 0 1 0 (2) X 0 0 0 0 0 1 ...
- 冒泡排序--java进阶day06
1.冒泡排序 https://kdocs.cn/l/ciMkwngvaWfz?linkname=150996835 我们会发现上图排序的样子非常像之前打印的倒三角,所以,冒泡排序也需要使用循环嵌套 2 ...
- 阅读IDEA生成的equals方法--java进阶day05
1.IDEA生成的equals方法 虽然我们之前写了equals方法,但IDEA中可以快速生成equals方法,因此,我们要能看懂IDEA生成的equals方法 1.if(this==o) 2.if( ...
- 事件监听、焦点--java进阶day03
1.事件 按钮是组件,点击后就会重新游戏 对于这种点击了组件之后,有逻辑触发的操作,就是事件 2.事件中的专有名词 绑定监听也就是绑定监视,是真正组织代码逻辑的地方 要有绑定监听就需要监听器,今天学习 ...
- 简单实现Android的本地文件读写,暨将List数据保存到Json文件中并读出
一.让我们从引入依赖开始 //将这两行代码添加到以上位置,其他的一般不用管 implementation 'com.google.code.gson:gson:2.8.5' implementatio ...
- Windows 7 下右键发送到菜单项没了
问题描述: 突然有一天,Windows 7 下右键发送到菜单项没了,如图所示: 问题原因 黑人问号脸?