jjzjj

从架构上详解技术(SLB,Redis,Mysql,Kafka,Clickhouse)的各类热点问题

追麾 2023-03-28 原文
什么是热点问题?在我们生活中,定义是:比较受广大群众关注或者欢迎的新闻或者信息或指某时期引人注目的地方或问题。

这里我们要讲的是技术的热点问题,SLB的热点问题,Redis的热点问题,Mysql的热点问题,分布式数据库集群的热点问题等,这类技术热点问题并不是所谓的引人注目的问题而是服务请求过多,流量集中的问题。

SLB

定义:服务器负载均衡(Server Load Balancing),实现多个服务器之间的负载均衡。

主流软件负载均衡有:1:LVS,2:Nginx,3:HAProxy

1 LVS

(1)工作在网络4层,通过VRRP协议(仅作代理之用),具体的流量是由linux内核来处理,因此没有流量的产生。

(2)抗负载能力强,性能高,能达到F5的60%,对内存和CPU资源消耗比较低

(3)稳定,可靠性高,自身有完美的热备方案(Keepalived+lvs)

(4)支持8种负载均衡算法:rr(轮询)、wrr(带权轮询)、lc(最小连接)、wlc(带权最小连接)、 lblc(基于局部性的最少连接调度算法)、lblcr(复杂的基于局部性最少的连接算法)、dh(目标地址散列调度算法 )、sh(源地址散列调度算法 )

(5)工作模式有4种:

  • nat 地址转换
  • dr 直接路由
  • tun 隧道
  • full-nat ​

2 Nginx

(1)工作在网络7层,可以针对http应用做一些分流的策略,比如针对域名,目录结构

(2)Nginx仅能支持http、https和Email协议,这样就在适用范围较小。

(3)对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测

(4)可以承担较高的负载压力且稳定,nginx是为解决c10k问题而诞生的

(5)Nginx能做Web服务器即Cache功能。​

3 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 单机模式​

优点:1、部署简单。2、数据一致性高

缺点:1、可靠性无法保证。2、处理能力有限

2 主从模式(如下图)

优点:1、可靠性得到一定保障,当节点出问题,可由其他节点来提供。2、提升了读能力,分散主节点的读压力

缺点:1、主节点的写能力和存储能力受单机限制。2、主节点宕机,切换从节点需要业务方手动切换,进行人工干预。

3 哨兵模式(如下图)​

优点:1、基于主从模式,主从可以自动切换。

缺点:1、节点的承载能力有限,写能力和存储能力都有限。

4 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. 关于热点问题要从读和写的方面去考虑,实现读或者写的分散就是解决热点问题的关键。
  1. 实现产品好的技术架构设计,热点问题是我们首要考虑的问题,架构的了解对我们解决热点问题是非常至关重要的。

有关从架构上详解技术(SLB,Redis,Mysql,Kafka,Clickhouse)的各类热点问题的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  3. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  4. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  5. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  6. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  7. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  8. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  9. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  10. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

随机推荐