消息中间件MQ的学习境界和路线

《深入理解Java类加载机制,再也不用死记硬背了》里我提到了对于一门语言的”会”的三个层次。本篇将以知识地图的形式展现学习消息中间件MQ各个层次要掌握的内容。

知识地图是一种知识导航系统,并显示不同的知识存储之间重要的动态联系。所以本篇重点不是介绍某个知识点,而是介绍掌握消息中间件,需要看哪些文章的导航。

消息中间件MQ会的三个层次与黄金圈法则相对应。

消息中间件MQ的学习境界和路线

What层:hello world 级别

What层:hello world 级别,知道它能做什么。在《RabbitMQ设计原理解析》里详细介绍过,这里再讲一遍。

MQ的主要作用有三个:

1、异步处理

示例一:在《架构师三大难-领域划分问题》的示例三(异步处理模式)里,我用退款做示例讲了MQ用作异步处理的场景。

示例二:还有一个典型的MQ的异步处理场景是日志采集。我所知道的公司,日志集中采集用的都是kafka。业务开发人员只需要专注自己的业务逻辑,将日志打印到磁盘上,kafka会异步的采集到日志服务器。

示例三:分布式事务中有一种常用的一致性解决方案:异步确保型解决方案。这个常用的就是基于MQ来实现。在《服务设计要解决的问题》里有这种场景的说明。

2、应用解耦

示例一:我有很多文章都是建立在应用解耦的基础上:《Spring Kafka的异步Bug》《一个反直觉的sql》背景是MQ的一端和另一端分别属于两个公司。

示例二:我在写文章过程中,意识到自己遇到的场景可能和大家自己工作中的认知有一定距离,所以我写了尤娜系列。事实上,由于自己写文章时,都会对文章的论点进行验证,所以尤娜是我几年前开源的一个项目名

https://github.com/xiexiaojing/yuna

【编程一生】公众号的文章代码片段很多都能在上面找到。

《尤娜系统的第一次飞行中换引擎的架构垂直拆分改造》这篇文章就以故事的形式展示了使用MQ做应用拆分的业务背景及整个过程。由于咱们用户群(可加我微信 brmayi 注明:入群)里反馈文章中没有明确使用的拆分方法论,我补充了方法论篇:《四种常用的微服务架构拆分方式》

3、流量削峰

示例一:在《从前,有一个简单的通道系统叫尤娜……》这篇文章中,尤娜系统遇到的就是需要进行请求的削峰填谷。流量削峰我在《四种缓存的避坑总结》里有明确写道这是稳定性保障的一个重要举措,尤娜文章中大家也应该能感受到吧!

How层:应用级别

How层:应用级别,知道怎么用MQ来实现功能。《应用角度看kafka的术语和功能》这篇文章里介绍了要达到这一层级所需的知识点。

这一层其实在网上能找到的资料最多,实际上就像开头黄金圈的图里画的:也最浅。想在简历上”掌握”,还要进入下一层。

Why层:掌握级别

Why层:掌握级别,理解原理,遇到问题可以深入剖析到本质。想达到这一层,需要很多相关领域的知识。只要面试者水平不是太差,一般面试官都会问到这一层,以达到了解面试者综合能力的目的。

示例一:《Kafka生产端实际项目中的使用分析》里提到了给kafka加代理和使用加密kafka的问题。

示例二:《架构视角-文件的通用存储原理》里把Kafka、Redis、关系型数据库、搜索引擎的存储拿出来对比,探讨了存储原理的本质问题。

示例三:《稳定性五件套-限流的原理和实现》从算法层面来探讨底层原理。

示例四:《避免线上故障的10条建议》里讨论了使用MQ的风险和规避措施。

示例四:《实战并发-使用分布式缓存和有限状态机》《Spring Kafka的异步Bug》里说明了Kafka自身的设计问题和缺陷,以及怎么规避。

示例五:《深入理解MQ生产端的底层通信过程-理解channel》深入底层通信,深层理解MQ的本质。MQ本质上是解决通信的问题。《服务设计要解决的问题》里提到,技术本质上都解决三个问题:分布式、通信和存储。想深入理解MQ,建议从《白话TCP/IP原理》开始理解通信。

总结

咱们用户群(可加我微信 brmayi 注明:入群)里讨论的问题,我喜欢看不发表评论。在大家的讨论中,我其实可以收集很多的问题和大家的关注点。一两句话太浅,我通常会写文章来集中回答大家可能遇到的问题。

本篇也是咱们用户朋友的提醒:”观察到知识点是承上启下的,是否可以搞一个目录,当连载小说看”。我隔一段时间会做一期《历史文章分类汇总》,但是这种分类的方法,文章之间的逻辑关系并不强。正好这篇文章可以顺便介绍一下知识地图这种逻辑关系,作为方法论的介绍。

最后解释一下黄金圈法则:

西蒙·斯涅克在他的《从”为什么”开始》一书中提出了”黄金圈法则”的概念。他发现,人们一般向别人表达或者激励时,常规路径是:先现象,而后措施,最后是结果,这种路径收效甚微。而真正能动人心的路径应该是:先理念,而后措施,再到现象,最后是结果。

有朋友大概听过这个名言:people don’t buy what you do,they buy why you do it。大意是:人们买的不是你的产品而是你的理念。理念才是核心。掌握一个知识技能也是一样,只有掌握到Why这个层次,才能形成核心竞争力。

因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下”在看”,加个”星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。

PDCA方法论,检查自己是否错过更新:每周三晚上8点左右,我都会更新文章,如果你没有收到,记得点开【编程一生】公众号找一下(^▽^)

Original: https://www.cnblogs.com/xiexj/p/16095395.html
Author: 编程一生
Title: 消息中间件MQ的学习境界和路线

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610859/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JVM学习 类加载子系统

    JVM 哔哩哔哩 尚硅谷视频 宋红康老师 Java代码执行流程 简图 详细图 1、类加载子系统 类加载器子系统的作用 类加载器子系统负责从文件系统或者网络中加载Class文件,cl…

    Linux 2023年6月7日
    0108
  • 搭建Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡

    周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Li…

    Linux 2023年6月8日
    082
  • 003Linux查看文件内容的5个命令姿势

    Linux 中查看文件内容常用的有如下 5 个命令: cat cat 命令常用格式示例: cat [文件名] # 输出文件所有内容到屏幕上。 cat [文件1] [文件2] # 输…

    Linux 2023年5月27日
    097
  • centos进入rescue 失败

    环境:centos7 在机械盘 win10在固态盘 场景:centos7 中/etc/grub.d/下的30_os_prober 脚本删掉后导致 grub2 列举不出别的磁盘上系统…

    Linux 2023年6月6日
    0103
  • shell脚本执行错误:#!/bin/bash: No such file or directory

    1、问题描述: 执行.sh脚本时控制台报错 : #!/bin/bash: No such file or directory 2、解决办法: cat -A 文件路径 会发现第一行有…

    Linux 2023年5月28日
    0258
  • 高等代数:3 线性方程组的解集的结构

    3 线性方程组的解集的结构 1、定义1:数域K上所有n元有序数组组成的集合(K^{n}),连同定义在它上面的加法运算和数量乘法运算,以及满足的8条运算法则一起,称为数域K上的一个 …

    Linux 2023年6月8日
    099
  • DDR4 SDRAM -时序参数小册子

    如前所述,大神的原文链接如下:https://www.systemverilog.io/ddr4-timing-parameters-cheatsheet 参数 功能 ACTIVA…

    Linux 2023年6月7日
    0107
  • 顺序栈

    #pragma once #ifndef _SEQSTACK_ #define _SEQSTACK_ #include using namespace std; typedef i…

    Linux 2023年6月7日
    087
  • LeetCode-1047. 删除字符串中的所有相邻重复项

    题目来源 题目详情 给出由小写字母组成的字符串 S, 重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项…

    Linux 2023年6月7日
    0131
  • MIT6.828——Lab3 PartA(麻省理工操作系统实验)

    Lab3 Part A MIT6.828——Lab1 PartA MIT6.828——Lab1 PartB Lab2内存管理准备知识 MIT6.828——Lab2 内核维护有关用户…

    Linux 2023年5月27日
    0112
  • 4.8 Linux解压.bz2格式的文件(bunzip2命令)

    要解压”.bz2″格式的压缩包文件,除了使用”bzip2 -d 压缩包名”命令外,还可以使用 bunzip2 命令。 bunzip2…

    Linux 2023年6月7日
    090
  • TCP 粘包-拆包问题及解决方案

    歧义在”TCP”上,这个”粘包”跟TCP其实没关系。这里的”粘包”其实是应用程序中没有处理好数据包分割,两个…

    Linux 2023年6月13日
    0116
  • nginx源码编译安装(详解)

    nginx编译安装 编译安装大致步骤: 安装步骤: 官网下载合适的版本,建议选择稳定版本。 官网地址:https://nginx.org wget https://nginx.or…

    Linux 2023年5月27日
    0153
  • 做任何事(决策)之前都要先考虑成本,再考虑收益

    所谓成本,就是我们在做一件事情时所付出的代价。 这个代价,或者说这个成本,有多有少,有显性有隐性,有我们知道的成本,也有我们不知道的成本。一切都是有成本的。 成本都有什么呢?一件事…

    Linux 2023年6月14日
    093
  • kubenetes无法创建pod/创建RC时无法自动创建pod的问题

    一、问题概述 问题1:虽然每次通过yaml创建rc都显示成功了,但是kubectl get pod却没显示任何的pod. 问题2:直接通过yaml创建pod提示apixxx 问题3…

    Linux 2023年6月14日
    0113
  • MySQL之变量

    mysql变量分类: 系统变量:系统自带的变量 状态变量:用于设置或保存系统的运行状态 用户自定义变量:用户自定义的变量 系统变量 使用@@标识一个系统变量,系统变量分为全局(gl…

    Linux 2023年6月7日
    0120
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球