1、MQ场景
    1)订单异步解耦
    2)解决分布式事务问题
    3)应用于聊天平台
    4)大规模机器的Cache同步
    5)MySQL BinLog订阅数据分发
2、ONS应用场景
    异步、解耦、最终一致、并行
3、设计假定
    1)每台PC机器都可能down机不可服务
    2)任意集群都可能处理能力不足
    3)最坏情况一定会发生
    4)内网环境需要低延迟来提供你最佳用户体验
4、关键设计
    1)分布式集群化
        a、理论上无限处理能力
        b、集群级别高可用
    2)强数据安全
        a、单机磁盘级别冗余
        b、单组多队列级别冗余
        c、多组消息队列冗余
    3)海量数据堆积
        a、推模式:订阅者逻辑简单
        b、拉模式:关注吞吐量,快
        c、推拉结合:队列通知消费者,消费者去拉取(两次交互)
        d、阿里采用长连接和轮询:轮询去拉,有则拉取,无则保持长连接等待,直到有消息
    4)毫秒级投递延迟
5、关键概念
    1)Topic:第一级消息类型,主标题
    2)Tug:第二级消息类型,分标题
    3)发送组:生产者所在集群
    4)订阅组:消费者所在集群
    5)RocketMQ不是一对一,也不是一对多,是随机一对一
    6)网络三种状态:成功、失败、没响应
6、消息乱序问题:Message服务器不处理,恰好不需要解决
    1)发送时对消息进行编号
    2)一组消息只有唯一一个订阅者处理(sharding)
    3)一组消息的数量(即“锁的颗粒度”)越小越好
7、消息重复问题
    1)重复原因:网络不可达
    2)幂等:某个操作无论重复多少次,结果都一样(不需要解决,性能极高)
    3)非幂等,去重
        a、保证有个唯一ID标记每一条消息;
        b、保证消息处理成功与去重表日志同时出现
    4)去重代价:额外的tps和qps
8、事务的分布式优化
    1)事务1-->MQ Server-->事务2
    2)同时成功,同时失败:
        a、发消息;
        b、执行事务1;
        c、确认消息发送;
        d、投递消息到消费者
    3)处理超时问题(重复):事务2增加消息确认表(去重表)
    4)消息失败(事务2失败):记录后人工处理(小概率事件)
---------------------
作者:猴子哥哥1024
来源:CSDN
原文:https://blog.csdn.net/qq_21033663/article/details/73379103
版权声明:本文为博主原创文章,转载请附上博文链接!

阿里分布式开放消息服务(ONS)原理与实践——笔记整理的更多相关文章

  1. 分布式开放消息系统(RocketMQ)的原理与实践(转)

    转自:http://www.jianshu.com/p/453c6e7ff81c 分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回 ...

  2. 开个坑, 写个阿里云开放储存服务(OSS)的C++版SDK以及客户端

    这应该是继我研究手册QQ协议后的第2个稍微正式一点的网络程序, 不只是Scoket套接字编程, 还涉及到更多的HTTP协议知识! 阿里云开放储存服务OSS官方已经提供了不少SDK, 包括PHP/Pyt ...

  3. 基于PHP实现阿里云开放存储服务

    开放存储服务(OpenStorageService,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务.用户可以通过简单的API(REST方式的接口),在任何时间.任何地点.任何互 ...

  4. 【Microsoft Azure学习之旅】消息服务Service Bus的学习笔记及Demo示例

    今年项目组做的是Cloud产品,有幸接触到了云计算的知识,也了解并使用了当今流行的云计算平台Amazon AWS与Microsoft Azure.我们的产品最初只部署在AWS平台上,现在产品决定同时支 ...

  5. 分布式开放消息系统(RocketMQ)的原理与实践

    分布式消息系统作为实现分布式系统可扩展.可伸缩性的关键组件,需要具有高吞吐量.高可用等特点.而谈到消息系统的设计,就回避不了两个问题: 消息的顺序问题 消息的重复问题 RocketMQ作为阿里开源的一 ...

  6. 分布式开放消息系统RocketMQ的原理与实践(消息的顺序问题、重复问题、可靠消息/事务消息)

    备注:1.如果您此前未接触过RocketMQ,请先阅读附录部分,以便了解RocketMQ的整体架构和相关术语2.文中的MQServer与Broker表示同一概念 分布式消息系统作为实现分布式系统可扩展 ...

  7. 2MyBatis入门--深入浅出MyBatis技术原理与实践(笔记)

    什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

  8. 3MyBatis配置--深入浅出MyBatis技术原理与实践(笔记)

    XML 映射配置文件 configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFact ...

  9. 分布式消息中间件rocketmq的原理与实践

    RocketMQ作为阿里开源的一款高性能.高吞吐量的消息中间件,它是怎样来解决这两个问题的?RocketMQ 有哪些关键特性?其实现原理是怎样的? 关键特性以及其实现原理 一.顺序消息 消息有序指的是 ...

随机推荐

  1. C#: switch语句的重构『网摘』

    http://bj007.blog.51cto.com/1701577/345100/ switch语句是我们日常工作中最常见也是争论最多的(goto被忽视的前提下).在重构中也把switch语句看成 ...

  2. 02-Spring的IOC示例程序(通过id获取对象)

    *******通过IOC容器创建id对象并为属性赋值******** 整体结构: ①创建一个java工程 ②导包 ③创建log4j.properties日记配置文件 # Global logging ...

  3. python换源

    pip源的更新 引用自:PyPI使用国内源 # coding: utf-8 import platform import os os_type = platform.system() if " ...

  4. 安装RabbitMQ,一直提示Erlang版本过低

    1.背景 windows系统,控制面板卸载Erlang后,重新安装Erlang成功,当再安装RabbitMQ时,报如下提示: 意思就是说Erlang版本过低,请安装更高的版本. 出现上面问题的原因,是 ...

  5. ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】

    2020/02/03, ASP.NET Core 3.1, VS2019, ResXManager 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[13-扩展之支持全球化 ...

  6. 论文阅读|Focal loss

    原文标题:Focal Loss for Dense Object Detection 概要 目标检测主要有两种主流框架,一级检测器(one-stage)和二级检测器(two-stage),一级检测器, ...

  7. spark实验(二)--scala实验(3)

    实验1,计算级数: 首先打开安装完scala ide的eclipse,在eclipse 中新建一个scala project. 然后新建一个scala的object对象 导入scala.io.StdI ...

  8. P1893山峰瞭望

    传送门 看完这个题,大家都懂意思吧,然后代码呢,emmmmm #include <bits/stdc++.h> using namespace std; const int maxn = ...

  9. Java面向对象编程 -4

    声明static属性 static 是一个关键字,这个关键字主要是用来定义属性和方法. static内存分析 在正常开发之中每一个对象都要保存有各自的属性 所以此时程序没有问题 但是如果country ...

  10. JAVA 通过POI 模版,导出excel

    如有不足,欢迎指正,谢谢 ! 1.Maven引入  POI jar包.模版和结果文件.rar下载 <dependency> <groupId>org.apache.poi< ...