大数据(kafka-及消息队列的应用场景)

进程间通讯

进程通讯的目的前端

数据传输 
一个进程须要将它的数据发送给另外一个进程,发送的数据量在一个字节到几M字节之间数据库

共享数据 
多个进程想要操做共享数据,一个进程对共享数据服务器

通知事 
一个进程须要向另外一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。架构

资源共享 
多个进程之间共享一样的资源。为了做到这一点,须要内核提供锁和同步机制。异步

进程控制 
有些进程但愿彻底控制另外一个进程的执行(如Debug进程),此时控制进程但愿可以拦截另外一个进程的全部陷入和异常,并可以及时知道它的状态改变。socket

管道(pipe)
管道是一种最基本的IPC机制,做用于有血缘关系的进程之间,完成数据传递。一个进程须要将它的数据发送给另外一个进程,发送的数据量在一个字节到几M字节之间。spa

信号量(semophore)
信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它常做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。线程

消息队列(message queue)
消息队列是消息的连接表,包括Posix消息队列system V消息队列。有足够权限的进程能够向队列中添加消息,被赋予读权限的进程则能够读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。设计

信号(singal)
信号是一种比较复杂的通讯方式,用于通知接收进程某个事件已经发生。
主要做为进程间以及同一进程不一样线程之间的同步手段。日志

共享内存(shared memory)
共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问。共享内存是最快的 IPC 方式,它是针对其余进程间通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号量,配合使用,来实现进程间的同步和通讯。

使得多个进程能够访问同一块内存空间,是最快的可用IPC形式。是针对其余通讯机制运行效率较低而设计的。每每与其它通讯机制,如信号量结合使用,来达到进程间的同步及互斥。

套接字(socket)
套接字也是一种进程间通讯机制,与其余通讯机制不一样的是,它可用于不一样机器间的进程通讯
更为通常的进程间通讯机制,可用于不一样机器之间的进程间通讯。
起初是由Unix系统的BSD分支开发出来的,但如今通常能够移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

消息队列的使用场景

异步处理
场景说明:用户注册后,须要发注册邮件和注册短信。经常使用处理方式:1.同步的方式;2.并行方式;3.异步方式
(1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务所有完成后,返回给客户端

(2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差异是,并行的方式能够提升处理的时间

场景说明:用户注册后,须要发注册邮件和注册短信。经常使用处理方式:1.串行的方式;2.并行方式;3.异步方式 引入消息队列,将不是必须的业务逻辑,异步处理。改造后的架构以下:

应用解耦

场景说明:用户下单后,订单系统须要通知库存系统。传统的作法是,订单系统调用库存系统的接口。以下图

传统模式的缺点:
假如库存系统没法访问,则订单减库存将失败,从而致使订单失败
订单系统与库存系统耦合

场景说明:用户下单后,订单系统须要通知库存系统。引入消息队列对系统进行解耦。以下图

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操做
假如:在下单时库存系统不能正常使用。也不影响正常下单,由于下单后,订单系统写入消息队列就再也不关心其余的后续操做了。实现订单系统与库存系统的应用解耦

流量削峰

应用场景:秒杀活动,通常会由于流量过大,致使流量暴增,应用挂掉。为解决这个问题,通常须要在应用前端加入消息队列。
能够控制活动的人数
能够缓解短期内高流量压垮应用

用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面
秒杀业务根据消息队列中的请求信息,再作后续处理

日志处理

应用场景:日志处理是指将消息队列用在日志处理中,好比Kafka的应用,解决大量日志传输的问题。架构简化以下
日志采集客户端,负责日志数据采集,定时写入Kafka队列
Kafka消息队列,负责日志数据的接收,存储和转发
日志处理应用:订阅并消费kafka队列中的日志数据

消息通信

消息通信是指,消息队列通常都内置了高效的通讯机制,所以也能够用在纯的消息通信。好比实现点对点消息队列,或者聊天室等

1,点对点通信:客户端A和客户端B使用同一队列,进行消息通信。

2,聊天室通信:客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现相似聊天室效果。

相关文章
相关标签/搜索