服务网格ServiceMesh和高并发、高可用设计手段(下)

简介: 服务网格ServiceMesh和高并发、高可用设计手段(下)

8点前的请求保证什么时候处理完?

1、不优雅:每层打不打日志 如果打印日志这一层还在处理
2、优雅:前端请求 有超时时间 
若超时时间5秒
则8点05秒的时候 超时
关机从上层往下层停止服务

不具备热开关

机器防火墙配置在某一个时间点只出不进

请求流程

image.png


高并发设计


缩短延迟
提高吞吐量
让系统处于合理状态

image.png



空间换时间

缓存数据库数据
因数据库比内存昂贵

时间换空间

网络传输 http通讯 gz压缩 解压会消耗cpu时间

变更次数少的数据

1、app页面上购物分类 一级 手机 二级电脑
变更少 不能每次登陆就拉取一次
通过版本号判断 哪些更新了 只有更新了才会下载
2、好友数 每次登陆的时候拉一次 变化不频繁 
列表数据有一个版本号 server端和客户端都放一个
判断版本号有没有更新 若有则拉一次

哪些请求的耗时很大

1、一个服务集群若有4万QPS
对于占90%流量的前5接口进行优化
剩下的qps也不能忽略 若是慢查询 也不行
2、查看一个服务调用了多少rpc请求 
若数据、算法等核心的同步化
非核心流程异步执行
拆分到单独模块去执行 比如消息队列 
3、一个逻辑调用多个RPC接口
接口之间没有数据依赖 可以考虑并行调用

优化层次


image.png

代码层面

1、不要循环遍历rpc请求
   而应该调用批量接口组装数据
2、避免生成过多无用对象 比如使用isDebugEnabled() 应直接log.debug()
3、ArrayList HashMap初始化容量设置是否合理
扩容代价很大
比如根据业务量实际情况直接初始化大小100万 虽然耗费点内存 但性能可以保证
4、rpc接口查询出来的数据复用
5、复制一份数据 直接修改
读多写少的情况 用CopyOnWriteArrayList
6、StringBuilder的容量在预分配的情况下 性能比String提升15倍左右
7、是否正确初始化数据 全局共享数据 饿汉式模式 
   即在用户访问前先初始化好

数据库

1、状态值 若长度在255以内 用unsigned tinyint ; ip使用int而非varchar
2、使用enum的场景 使用tinyint替换 因enum扩展需要改表
3、禁止select * 会耗费 io、内存、cpu、网络
4、分析查询场景建立合适的索引
分析字段的可选择性、索引长度、对长的varchar使用前缀索引
5、字段 Not Null
允许Null字段需要额外的存储空间去处理Null
并且很难优化
目的是降低服务器CPU使用率、IO流量、内存占用、网络消耗、降低响应时间

局部性原理

image.png


这是个二维数组 在内存中是一维数组


第一段 耗时 140ms

第二段 耗时 2700ms


image.png


越靠近CUP越快

1、速度越来越高 内存->L3->L2->L1多级缓存
2、在内存是一个大的一维数组 
二维数组在内存中按行排列
先存放a[0]行 再放a[1]行
3、按行遍历:局部性原理 Cache Hit(缓存命中率高)
4、按列遍历:下一列和上一列的数组元素在内存中并不是连续的 
   很可能导致Cache Miss(缓存未命中)
5、CPU需要去内存载入数据 速度较CPU L1 Cache的速度降低了很多
(主存 100ns L1 Cache 0.5ns)
6、能用缓存就用缓存 无论是本地缓存还是分布式缓存
7、高频访问 时效性不高 适合缓存 比如 广告位
   时效性很高 需要考虑缓存一致性问题 不适合用缓存 比较交易数据

代码逻辑要适应数据变化的场景

image.png


1、explain:SQL的执行计划
2、prossible_keys idx_addtime 
key null 表示没有索引
查询数据量一旦超过30% 不会走索引 全表扫描

报表查询

只计算增量数据和之前计算结果合并

并发和锁优化

基于CAS LockFee(读不需要加锁 写加锁)比mentex(读写都要加锁)性能要好

案例1-电商秒杀系统

image.png


数据分层次校验
上层尽量过滤无效请求
可以是不精确过滤
层层限流 最后一层做数据一致性校验 扣减库存


漏斗模式

image.png

1、静态数据 Html js css静态文件 放CDN 缓存到用户端(APP/浏览器)
2、非实时动态数据 缓存在靠近用户访问链路的位置(商品标题、商品描述、用户是否有秒杀资格、秒杀是否已结束) 
3、实时数据:营销数据(红包、折扣)商品库存数 过滤掉用户

如何保证不超卖


DB事务保证一致性

image.png

image.png


热点数据缓存到调用链路更靠近用户的地方


image.png

1、内存存储最活跃的数据
2、L1缓存容量小负责抗最热点的数据
L2缓存考虑目标是容量 缓存更大范围数据
一般一般用户的timeline
高热点数据单独缓存 比如设置白名单 大V的用户数据单独缓存
3、feed 前3页 97% 前面几页数据作为热点数据缓存到L1 cache
4、业务逻辑层往往也会开一些缓存来存热点数据 比如大V的id


image.png


push模式

若push 那只推活跃用户
比如1万个用户 在业务逻辑层 每批100个用户需要推送 
100个线程并行推
从策略上优化
先推活跃用户

如何区分活跃用户?

活跃用户列表 长度100万
用户已上线就在列表中写一下 下线删除

微博数据存储解决方案

image.png


1、Pika Key-Value 固化存储(持久化存储)
2、对象存储 Ceph\FastDFS

微信朋友圈是推拉结合

1、发现 有消息提醒 是推
2、点开朋友圈是拉

微博最新数据展示逻辑

比如你有500个好友 拿每个人的100个数据 共5万条数据 在业务逻辑层按照timeline倒序排列

websocket和长轮询本质上没区别

websocket底层也是长轮询
web上用不了tcp协议
websocket在http基础上封装了长轮询


后记


接下来会继续分享 服务网格ServiceMesh相关的实践 
觉着有用的话 点个再看哈😄



相关文章
|
消息中间件 缓存 应用服务中间件
Nginx系列教程(02) - 高可用与高并发介绍
Nginx系列教程(02) - 高可用与高并发介绍
117 0
|
1月前
|
自然语言处理 监控 Cloud Native
探索微服务架构中的服务网格Service Mesh
【10月更文挑战第7天】服务网格(Service Mesh)是微服务架构中的关键组件,通过在每个服务实例旁部署Sidecar代理,实现服务间通信的管理、监控和安全增强。本文介绍了服务网格的基本概念、核心组件、优势及实施步骤,探讨了其在现代开发中的应用,并提供了实战技巧。
|
2月前
|
消息中间件 安全 大数据
Kafka多线程Consumer是实现高并发数据处理的有效手段之一
【9月更文挑战第2天】Kafka多线程Consumer是实现高并发数据处理的有效手段之一
250 4
|
3月前
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
4月前
|
消息中间件 缓存 监控
如何设计一个秒杀系统,(高并发高可用分布式集群)
【7月更文挑战第4天】设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。
129 1
|
6月前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
6月前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
452 1
|
缓存 Java 应用服务中间件
【高并发优化手段】基于Springboot项目(二)
【高并发优化手段】基于Springboot项目
468 0
|
6月前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
|
6月前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践
【4月更文挑战第28天】 在现代云原生应用的后端开发领域,微服务架构已成为一种广泛采用的设计模式。随着分布式系统的复杂性增加,服务之间的通信变得愈加关键。本文将深入探讨服务网格这一创新技术,它旨在提供一种透明且高效的方式来管理、监控和保护微服务间的交互。我们将从服务网格的基本概念出发,分析其在实际应用中的优势与挑战,并通过一个案例研究来展示如何在现有的后端系统中集成服务网格。