电商时代,出现了双11、1212等购物节,电商可以不断扩大自身业务系统的能力,但后台交易系统的处理逻辑复杂,往往会成为整个系统的瓶颈。如何保障超过平常10倍业务流量的正常处理,我们经常听到一个中间件kafka。现在的业务系统离开了他,基本难以成长。来用实际案例看一下。
一、修一个水池,蓄水
如果上游的水流量太大,而下游的出水量只有一个水龙头这么小,怎么办?我们可以修建一个巨大水池,将上游的水积存起来,不管是洪峰、干旱,下游的处理量永远像一个水龙头一样稳定。
在IT系统里,我们也是一样,将上游业务系统的处理请求保存起来,下游的业务系统定期根据自己的处理能力来取出处理要求。就像下图,队列消息中间件就是蓄水池。
基本每个人的日常生活中,我们都经历了队列中间件的处理。例如,我们在12306订火车票时,支付成功后的几分钟,提示票已售光,将退费。
二、消息中间件实际操作案例
我们通过三台CentOS云主机搭建了一个Kafka集群,其中一台运行Zookeeper。
1、在ecs-hadoop-0001这台broker上创建了一个mx的topic,发送了测试消息:This is a test message,require rentCar!
2、在ecs-hadoop-0002下游业务系统收到了这条测试消息。
在真实的项目中,业务系统支付成功后,下发一条租车的指令;租车排单系统定期从消息队列中取出指令,如果处理成功,则向用户返回成功的短信,如果失败,将执行退费处理。有了消息队列后,集中批量的指令可以分批定时处理,用户的指令不会因为拥塞而崩溃。
三、消息中间件面试常见题
1、消息中间件的作用是什么?常见的中间件有?作用:解耦(业务系统之间不再直接通信)、冗余(消息可以被多份保存)、扩展性(消息中间件可以灵活扩展)、灵活性&峰值处理能力(池化保存)、可恢复、顺序保证、缓冲、异步通信。常见的中间件:kafka、RabbitMQ等。
2、消息中间件的常见工作模式、优缺点:点对点模式、订阅模式。点对点模式缺点:由下游业务系统主动从队列中取消息,消耗了处理资源;点对点优点:下游业务系统可以根据自己的处理能力来进行作业安排。订阅模式就像微信公众号的关注,优点是可以多个消息接收者,缺点是消息采用主动推送,要求下游接收者的处理速度一致。
3、Kafka的Topic为什么要分区?Kafka的每个不同的消息主题分到了不同的Topic,为了提高处理效率,将同一个Topic可分为若干个区(分区数量不能大于broker集群服务器数量),每个区可以同时被Consumer并行处理。
4、Kafka的分区备份数量最大可以设多少?消息的分区块分为leader主用,follower备用,当主用死机时,备用节点可以自动up起来。备份区块数不能大于broker集群服务器数 - 1,这样避免极端情况下备份全放到同一个broker中。