从架构上详解(SLB,Redis,Mysql,Kafka,Clickhouse)热点问题
mhr18 2024-12-03 12:18 21 浏览 0 评论
什么是热点问题?在我们生活中,定义是:比较受广大群众关注或者欢迎的新闻或者信息或指某时期引人注目的地方或问题。
这里我们要讲的是技术的热点问题,SLB的热点问题,Redis的热点问题,Mysql的热点问题,分布式数据库集群的热点问题等,这类技术热点问题并不是所谓的引人注目的问题而是服务请求过多,流量集中的问题。
SLB
定义:服务器负载均衡(Server Load Balancing),实现多个服务器之间的负载均衡。
主流软件负载均衡有:1:LVS,2:Nginx,3:HAProxy
LVS
1:工作在网络4层,通过VRRP协议(仅作代理之用),具体的流量是由linux内核来处理,因此没有流量的产生。
2:抗负载能力强,性能高,能达到F5的60%,对内存和CPU资源消耗比较低
3:稳定,可靠性高,自身有完美的热备方案(Keepalived+lvs)
4:支持8种负载均衡算法:rr(轮询)、wrr(带权轮询)、lc(最小连接)、wlc(带权最小连接)、 lblc(基于局部性的最少连接调度算法)、lblcr(复杂的基于局部性最少的连接算法)、dh(目标地址散列调度算法 )、sh(源地址散列调度算法 )
5:工作模式有4种:
(1) nat 地址转换
(2) dr 直接路由
(3) tun 隧道
(4) full-nat
Nginx
1:工作在网络7层,可以针对http应用做一些分流的策略,比如针对域名,目录结构
2:Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
3:对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测
4:可以承担较高的负载压力且稳定,nginx是为解决c10k问题而诞生的
5:Nginx能做Web服务器即Cache功能。
HAProxy
1:支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机
2:支持url检测后端的服务器出问题的检测会有很好的帮助。
3:支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
4:支持负载均衡策略:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)
5:不能做Web服务器即Cache
现在基本所有的公司的业务最前端都是一个负载均衡服务器承载流量,然后分发到各个后端服务器,参照下图,这样的架构应该是大多数公司的架构。从请求主要分三个层次。用户->负载均衡,负载均衡->微服务,微服务->后端服务。
关于负载均衡这一块的热点问题会出现在哪呢?从上面的分析看其实主要是在于散列调度算法,不管是源地址散列算法还是目标地址散列算法,可能会造成一个局域网的很多用户同时请求同一服务而造成这个负载均衡服务器量很大,而造成负载均衡服务器出问题,这就是所说的热点问题。在使用散列调度算法就容易遇到热点问题,因为散列容易造成请求不平均,请求量大可能触发到同一个负载均衡服务器。如果使用轮询,负载请求会平均,不容易触发热点问题。当然啦,负载均衡实际基本不会出现问题,因为要是负载均衡出问题,要么业务量几百万倍几千万倍增长,那确实说明这个量很大很大。
Redis的架构
关于Redis的部署架构主要有单机模式,主从模式,哨兵模式,redis cluser模式。其实严格意义上来说部署只有三种,哨兵模式其实基于对主从模式的稳定性优化,切主节点能实现自动化。
单机模式
优点:1、部署简单。2、数据一致性高
缺点:1、可靠性无法保证。2、处理能力有限
主从模式(如下图)
优点:1、可靠性得到一定保障,当节点出问题,可由其他节点来提供。2、提升了读能力,分散主节点的读压力
缺点:1、主节点的写能力和存储能力受单机限制。2、主节点宕机,切换从节点需要业务方手动切换,进行人工干预。
哨兵模式(如下图)
优点:1、基于主从模式,主从可以自动切换。
缺点:1、节点的承载能力有限,写能力和存储能力都有限。
redis cluser模式(如下图)
优点:高可用、可扩展性、分布式、支持容错。redis cluster接受客户端请求,会首先通过对key进行CRC16校验并对16384取模(CRC16(key)%16383)计算出key所在的槽,确定槽所在的节点,然后再到对应的节点上进行取数据或者存数据,这样就实现了数据的访问更新。
缺点:无
关于redis的三种架构模式,redis的集群架构的热点问题就明显了,主从模式,写请求是很明显的热点问题,读请求在读节点中轮询读取,则不会出现热点问题,但是如果读节点是通过散列方式,则也会出现热点问题。关于redis cluster架构是多主,多从的架构,理论上是能很好的解决热点问题,写请求随机到不同的主从集群不同的主节点中,读请求会到不同的主从集群的从节点中,这样就很好的分散了请求,做到这一点其实至少要保证每个主节点都有一个主备。如果只有一个主节点,那其实和主从模式没有区别了,这样的话写的热点问题和读的热点问题就容易出现了,尤其是redis的大key读取问题,当然不管是哪种模式下都会存在大key读取的热点问题,要解决大key热点问题,redis的值设计是很有讲究的,不建议值超过128KB。基础知识了解之后,关于如何选架构成为解决热点问题,提升服务稳定性的关键点。
Mysql的架构
关于Mysql的架构(如下图),其实只有主从模式,在业务中我们处理量大的问题通常使用读写分离,mysql是做数据持久化存储,读写分离也是有通过中间件来实现。关于Mysql的读和写热点问题,其实还是比较明显,不管是读和写,量达到一定程度,都会存在的。在我们很大的业务流量下,我们Mysql的前端都会有Redis或者中间件的来挡量。
Kafka的架构
关于Kafka的架构(如下图)是一个分布式多分区,多副本,多订阅者的高可用,高性能,高并发的MQ系统。Kafka写数据是从Producer生成,需指定Topic,最终是写入到某一个Partition(某个Leader副本的Partition)。Kafka的消费数据则是从Leader副本的某个Partition读数据去消费。好了我们来看下写入和读取的热点问题,如果客户端一直请求同一个topic,同一个partition,等这个量达到集群的承载量就容易出现热点问题了。所以要避免这样的问题我们尽量让partition能够多一些,让数据随机平均到不同的partition上,这样承载量会更大,热点问题就不容易出现。再者kafka是号称百万qps的(这个涉及到kafka的底层实现,顺序io,零拷贝等机制),热点问题相对来说是很难出现的。关于读数据这个就基本不会出现热点问题了,因为消费者是根据partition的个数来确定的,一个partition只能对应一个消费组的一个消费者。当然会存在多个消费者的情况,一般情况不可能达到服务器读的承载量。
Clickhouse的架构
clickhouse的架构(如下图)是Multi-Master多主架构,客户端访问任意一个节点都能得到相同的结果。clickhouse是一个大数据存储数据库,本身节点就有qps限制。其本身的热点问题是比较明显的,写入不允许高并发,读取也有高并发限制。我们看下clickhouse这种多主架构的一个请求的执行流程,如下图,client发起Request1请求发到节点Clickhouse A 这个请求会转发到Request B,Request C,Request D,等B,C,D节点返回结果之后会给节点A,然后由节点返回总的数据给Client。
总结
1:关于热点问题要从读和写的方面去考虑,实现读或者写的分散就是解决热点问题的关键。
2:实现产品好的技术架构设计,热点问题是我们首要考虑的问题,架构的了解对我们解决热点问题是非常至关重要的。
- 上一篇:Redis热点key的解决思路
- 下一篇:常见的Redis大Key、热Key解决方案
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)