降级:

减少工作量,丢弃不重要的请求。

确定具体采用哪个指标作为流量评估和优雅降级的决定性指标:

如 CPU、延迟、队列长度、线程数量、错误等

当服务进入降级时,需要执行什么动作?

流量抛弃或者优雅降级应该在服务的哪一层实现?是否需要在整个服务的每一层都实现,还是可以选择某个高层面的关键节点来实现?

优雅降级不应该被经常出发,通常触发条件是容量规划的失误,或者是意外的负载

内部参与的项目,聚合多个部门的接口进行展示,配置了降级逻辑,设计的足够简单,因为平常是不怎么使用的,如果特别复杂等到需要使用的时候操作比较复杂。

应该足够简单 -- 演练

重试:

当请求返回错误,对于backend部分节点过载的情况下,倾向于立刻重试,但是需要留意重试带来的流量放大

限制重试次数和基于重试分布的策略(重试比率:10%)

随机化、指数型递增的重试周期:exponential ackoff+jtter

client 测记录重试次数直方图,传递到server,进行分布判断,交由server判定拒绝

只应该在失败的这层进行重试,当重试仍然失败,全局预定错误码,过载,无须重试,避免级联重试

503 逐层放行,往上抛

负载均衡:

数据中心内部的负载均衡

理想情况下,某个服务的负载回完全均匀地分发给所有后端任务。

在任何时刻,最忙和最不忙的节点永远消耗同样数量的CPU.

目标:

均衡的流量分发

可靠的识别异常节点

scale-out,增加同质节点扩容

减少错误,提高可用性

backend 之间的load差异比较大:

每个请求的处理成本不同

物理机环境的差异:

服务器很难强同质性

存在共享资源争用(内存缓存、带宽、IO等)

性能因素:

FullGc

JVM JIT

负载均衡算法:缺乏的是服务端全局视图,负载+可用性

选择backend:CPU,client:health、inflight、latency,

使用一个简单的线性方程进行打分

p2c 算法:本质就是根据服务器的各种资源进行打分计算,然后选择合适的节点进行请求。

https://github.com/go-kratos/kratos/blob/v1.0.x/pkg/net/rpc/warden/balancer/p2c/p2c.go

对新启动的节点使用常量惩罚值(penalty),以及使用探针方式最小化放量,进行预热。

打分比较低的节点,避免进入 永久 黑名单,而无法恢复,使用统计

衰减的方式,让节点指标逐渐恢复到初始状态(即默认值)

go 进阶训练营 微服务可用性(下)笔记的更多相关文章

  1. 微服务架构下分布式Session管理

    转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...

  2. TOP100summit:【分享实录-华为】微服务场景下的性能提升最佳实践

    本篇文章内容来自2016年TOP100summit华为架构部资深架构师王启军的案例分享.编辑:Cynthia 王启军:华为架构部资深架构师.负责华为的云化.微服务架构推进落地,前后参与了华为手机祥云4 ...

  3. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

    原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...

  4. kratos微服务框架学习笔记一(kratos-demo)

    目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和githu ...

  5. SpringCloud微服务框架复习笔记

    SpringCloud微服务框架复习笔记 什么是微服务架构? 微服务是一种软件开发技术,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进 ...

  6. CI Weekly #5 | 微服务架构下的持续部署与交付

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  7. CI Weekly #11 | 微服务场景下的自动化测试与持续部署

    又一周过去了,最近我们的工程师正在搞一个"大事情" --「[flow.ci](http://flow.ci/?utm_source=bokeyuan&utm_medium= ...

  8. 微服务框架下的思维变化-OSS.Core基础思路

    如今框架两字已经烂大街了,xx公司架构设计随处可见,不过大多看个热闹,这些框架如何来的,细节又是如何思考的,相互之间的隔离依据又是什么...相信很多朋友应该依然存在自己的疑惑,特别是越来越火热的微服务 ...

  9. SpringBoot微服务架构下的MVC模型总结

    SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...

  10. 大规模微服务架构下的Service Mesh探索之路

    小结: 1. 第一.二代Service Mesh meetup-slides/敖小剑-蚂蚁金服-大规模微服务架构下的Service Mesh探索之路.pdf https://github.com/se ...

随机推荐

  1. etcd 快速入门

    一.认识etcd 1.1 etcd 概念 从哪里说起呢?官网第一个页面,有那么一句话: "A distributed, reliable key-value store for the mo ...

  2. WEBGL 笔记

    目录 前言 h2 { text-align: center } 前言 WebGL 是一个在浏览器里使用的高效渲染二维和三维图形的 javascript API,于 2006 年起源,该技术基于 Ope ...

  3. 字符串成员方法:截取、替换、切割 及String成员方法小结

    1.截取 subString() subString()方法有两种使用方式: 1.第一种是在括号里只放入一个索引,这时将会从放入的索引为起点,一直截取到末尾 2.第二种是在括号里放入两个索引,分别对应 ...

  4. DevOps工程师技能

    技术背景 DevOps工程师必须持有计算机科学.工程或其他相关领域的学位.2年以上工作经验.这包括开发人员.系统管理员或devops驱动的团队成员的工作.这是一个重要的需求,同时也是对所有IT操作的理 ...

  5. Python复制单个文件为多个脚本

    编写背景: 由于线上用户反馈媒体添加页加载时间很长,猜测是由于本地视频/图片数量过多引起,于是编写此脚本以便快速生成大量测试视频 代码如下: # coding=utf-8 import os impo ...

  6. zk源码—6.Leader选举的实现原理

    大纲 1.zk是如何实现数据一致性的 (1)数据一致性分析 (2)实现数据一致性的广播模式 (3)实现数据一致性的恢复模式 2.zk是如何进行Leader选举的 (1)服务器启动时的Leader选举 ...

  7. MCP应用docker部署,docker-compose部署

    一.概述 前面几篇文章,MCP应用直接用的python3 server.py运行的,如果服务器重启,进程就会关掉,很不方便. 所以需要使用docker部署,实现开机自启动. 二.docker部署 my ...

  8. 再见,SSE!你好,Streamable HTTP!轻松开发 Streamable HTTP MCP Server

    大家好!我是韩老师. 之前和大家分享了三篇 MCP 相关的文章: Code Runner MCP Server,来了! 从零开始开发一个 MCP Server! 一键安装 MCP Server! 还是 ...

  9. markdown文本编辑器--核心功能(解析和渲染)

    开源项目地址 GitHub 开源地址(YtyMark-java) 欢迎提交 PR.Issue.Star ️! 1. 简述 YtyMark-java项目分为两大模块: UI界面(ytyedit-mark ...

  10. 【深入解析AQS】从设计模式到ReentrantLock实现再到自定义锁

    深入解析AQS:设计模式.ReentrantLock实现与自定义锁开发 一.模板方法模式:AQS的架构基石 1.1 模式核心思想 模板方法模式通过固定算法骨架+可变实现细节的设计,实现了代码复用与扩展 ...