1. 分布式与集群
如果一个业务被拆分为多个子业务部署在不同的服务器上,那就是分布式应用;如果是同一个业务部署在多台服务器上,那就是集群。
2. 分布式系统间通信的方式:
远程过程调用(RPC),将单机环境下的过程调用加以扩充后延伸到分布式系统环境,指用户可以像调用本地过程一样调用不同地域的不同计算机上的过程从而使得应用程序设计人员不必设计和开发有关发送和接收信息的实现细节,跨语言。
消息队列,分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
3. 消息队列应用场景
异步处理
场景说明:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。用户注册,写入消息队列后立即返回客户端成功。
应用解耦
场景说明:用户下单后,订单系统需要通知库存系统。
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
假如在下单时库存系统不能正常使用,也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作。
流量削锋
应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。
用户的请求,服务器接收后,先写入消息队列,假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
日志处理
日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题,架构简化如下。
日志采集客户端,负责日志数据采集,定时写入Kafka队列。
Kafka消息队列,负责日志数据的接收,存储和转发。
日志处理应用:订阅并消费kafka队列中的日志数据 。
消息通讯
消息队列一般都内置了高效的通信机制,因此也可以用于纯消息通讯。
点对点通讯:
客户端A和客户端B使用同一队列,进行消息通讯。
聊天室通讯:
客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收,实现类似聊天室效果。
以上实际是消息队列的两种消息模型,点对点(P2P),发布订阅模式(Pub/Sub)。