zoukankan      html  css  js  c++  java
  • 关于中间件

    1.1消息中间件产生的背景

    •  在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行。
    •  客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都都必须正常运行;如果由于服务对象崩溃或者网络故障导致用户的请求不可达,客户会受到异常
    •  点对点通信: 客户的一次调用只发送给某个单独的目标对象。

    如下图所示

    在网络通讯中,http请求默认采用同步请求方式,基于请求与响应模式。

    客户端想服务器端发送请求的时候,如果服务器端因为网络延迟,不可达情况可能会导致客户端也受到影响。

    处理好服务降级、熔断、隔离、限流。

    上图是同步的过程,如果会员服务没有及时响应, 订单服务得不到响应,客户端请求订单服务时候也会受牵连。

    网络通讯采用同步的优缺点:

      优点:及时响应数据给客户端,整个过程同步

      缺点: 可能会导致程序阻塞等待,效率低 

    如果订单服务调用会员服务不通的情况,如何保证数据一致性问题?

      如果传统的http方式,采用补偿机制(重试一次),存放日志表+定时Job扫描一遍,服务器端考虑网络延迟提交数据幂等性问题(通过全局Id,或者token区分请求)

    1.2 什么是消息中间件


    面向消息的中间件(MessageOrlented MiddlewareMOM)较好的解决了以上问
    题。发送者将消息发送给消息服务器,消息服务器将消感存放在若千队列中,在合适
    的时候再将消息转发给接收者。

    这种模式下,发送和接收是异步的,发送者无需等
    待; 二者的生命周期未必相同: 发送消息的时候接收者不一定运行,接收消息的时候
    发送者也不一定运行;一对多通信: 对于一个消息可以有多个接收者。

    消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性框架。

    目前使用较多的消息队列有 

    • ActiveMQ
    • RabbitMQ 
    • ZeroMQ
    • Kafka
    • MetaMQ
    • RoketMQ
  • 相关阅读:
    学习之路
    cordova配置icon和splash
    cardova-android打包
    数组元素最大差值的问题
    病毒攻击
    STL模板中List
    Direct3D API函数
    Direct3D雾化效果浅析
    Direct3D中顶点声明格式
    DirectX9.0 Direct3D Graphics Pipeline 总结
  • 原文地址:https://www.cnblogs.com/toov5/p/9936174.html
Copyright © 2011-2022 走看看