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),也叫 分布式链路跟踪,分布式跟踪,分布式追踪 等等,它为分布式应用的开发者提供了完整的调用链路还 ...
随机推荐
- 【Pandas】concat方法使用注意点
使用pandas库的concat做数据拼接需要注意,应该先对原始数据设置列名,如果没有设置列名,在拼接时只会保留第一个文件的第一行(以列名形式),由于剩下的文件在读取时会自动将第一行作为列名,这样就会 ...
- 使用 PHP cURL 实现 HTTP 请求类
类结构 创建一个 HttpRequest 类,其中包括初始化 cURL 的方法.不同类型的 HTTP 请求方法,以及一些用于处理响应头和解析响应内容的辅助方法. 初始化 cURL 首先,创建一个私有方 ...
- 一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行
一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行 摘要: 本文主要讲述了 Python 如何实现定时任务,主要有四种方式:通过 threading.Timer 类.通过 ...
- 看了他,妈妈再也不用担心我被问到Mybatis缓存了
Mybatis缓存 一.一级缓存 1. 概念 sqlsession级别的缓存,即缓存的是SQL语句 同一个sqlsession中执行多次查询条件相同的SQL,mybatis会提供一级缓存进行优化 2. ...
- Asp.net mvc基础(十四)Entity Framework
一.EntityFramework介绍 1.ORM:Object Relation Mapping,用操作对象的方式来操作数据库 2.ORM工具有很多,其中Dapper.PetaPoco.NHiber ...
- Linux内核模块开发(简单)
Linux系统为应用程序提供了功能强大且容易扩展的API,但在某些情况下,这还远远不够.与硬件交互或进行需要访问系统中特权信息的操作时,就需要一个内核模块. Linux内核模块是一段编译后的二进制代码 ...
- Python3循环结构(一)for循环
Python3循环结构 在Python中主要有两种类型的循环结构:for循环和while循环.for循环一般用于有明显边界范围的情况,例如,计算1+2+3+4+5+-+100等于几的问题,就可以用fo ...
- [语法分析/编译原理] Antlr : 开源语法分析工具
序 最近的工作涉及到数据引擎查询 DSL 设计,正好找到 Antlr. 那些繁琐的词法分析.语法分析工作全部由 Antlr 搞定,即使你不懂编译原理,也不能阻碍你使用 Antlr 开发自己的小语言. ...
- window-docker的容器使用宿主机音频设备
目录 前言 操作配置 前言 你有没有遇到过这种情况? 你兴冲冲地在Windows上用Docker搭了个语音识别项目,准备让容器高歌一曲,或者至少"Hey Docker"一下.结果- ...
- 【ROS】4.1 Turtlebot3仿真Waffle循线跟踪
原视频 本节内容较多,请根据左侧目录针对性阅读. 一.准备工作 这一章我们先用gazebo仿真做,不使用真小车,使用的是Waffle模型. 需要下载的库gazebo-ros.turtlebot3_si ...