中间件核心技术与实战
丁威
中通快递资深架构师,RocketMQ 社区首席布道师
19674 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
中间件核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

01|中间件生态(上):有哪些类型的中间件?

你好,我是丁威。
最近十年是互联网磅礴发展的十年,IT 系统从单体应用逐渐向分布式架构演变,高并发、高可用、高性能、分布式等话题变得异常火热,中间件也在这一时期如雨后春笋般涌现出来,那到底什么是中间件呢?存在哪些类型的中间件呢?同一类型的中间件,我们该怎么选择?接下来的两节课,我们就来聊聊这些问题。
中间件的种类很多,我们无法把所有类型和产品列出来逐一讲解。但是每个类别的中间件在设计原理、使用上有很多共同的考量标准,只要了解了最重要、最主流的几种中间件,我们就可以方便地进行知识迁移,举一反三了,然后学习其他中间件将变得非常简单。
所以呢,你可以把这两节课看作是提纲挈领的知识清单。下面我们讲到的中间件你不一定都能够用上,但在需要的时候,可以帮你从更加高屋建瓴的角度迅速决策。

什么是中间件?

先来说说什么是中间件,我认为中间件是游离于业务需求之外,专门为了处理项目中涉及高可用、高性能、高并发等技术需求而引入的一个个技术组件。它的一个重要作用就是能够实现业务代码与技术功能之间解耦合。
这么说是不是还有点抽象?在这里定义里,我提到了业务需求和技术需求,关于这两个词我需要再解释一下。
业务需求,笼统地说就是特定用户的特定诉求。以我们快递行业为例:人与人之间需要跨城市传递物品,逢年过节我们需要给远方的亲人寄礼物,这就是所谓的业务需求。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了中间件的概念和种类,以及在分布式架构中常见的中间件类型。作者首先解释了中间件的概念,指出中间件是为了处理涉及高可用、高性能、高并发等技术需求而引入的技术组件,能够实现业务代码与技术功能之间的解耦合。随后,作者列举了常见的中间件类型,包括微服务、消息中间件、定时调度、数据库中间件、缓存、搜索和日志等,并重点介绍了微服务、消息中间件和定时调度这三个方向。在数据库中间件部分,作者详细解析了读写分离和分库分表的解决方案,并探讨了引入数据库中间件给技术带来的简化。文章还对MyCat和ShardingJDBC/ShardingSphere这两种数据库中间件进行了比较,并推荐了ShardingJDBC作为更优选的数据库中间件。整体而言,本文以清晰的逻辑结构和丰富的实践经验,系统地介绍了中间件的概念和种类,为读者提供了全面的中间件知识图谱,帮助他们更好地进行决策和架构设计。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《中间件核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • ᯤ⁵ᴳ
    ShardingJDBC 似乎没有 myCat 性能好啊

    作者回复: 你好,这个你有做过压测没,这两款我都在公司运用过,根据在优速,中通的实战经验来看,ShardingJDBC的优势还是要比mycat要好太多,因为中心化,需要引入大量的资源保障mycat自身的高性能,而且一但出现问题,将是比较致命的,而且不太好快速恢复。

    2022-07-02
    3
    7
  • 文涛
    mycat似乎N没更新了,现在分表分库还是几年前那套理论?而且还是Java体系的!TiDb等新兴数据库了解一下!

    作者回复: 你好,MyCAT我最近也关注的比较少,只是借此分析了一下分库分表的一些发展。也感谢你给大家提供了更新的技术,号称解决了传统分库分表类似跨库JOIN,值得深入研究。

    2022-06-15
    5
  • 第一装甲集群司令克莱斯特
    运维戏称:珍爱生命,远离mycat

    作者回复: 这位兄台一定用过MyCat,MyCat这款中间件对我的职场有极大的推动作用,但要在生产环境中进行数据库分库分表,我也不会选择mycat,如果目前公司已经使用了mycat,通常要推动用户进行sql规范,通常数据量大的场景,建议实时业务使用单表操作,尽量避免使用join,查询可以通过异构,降低对数据库的依赖。

    2022-08-24归属地:上海
    2
  • Mr.Hwang
    其实选择ShardingSphere或CAT更多考虑的层面是从数据库治理去考虑的,ShardingJDBC也还是没办法做治理的。

    作者回复: 嗯,对的,通常建议是代码中使用shardjdbc就好,但在运维管理层面,可以部署一套shardingsphere,方便进行数据查找。

    2022-09-07归属地:上海
    1
  • 哈哈哈
    丁老师,之前我用过的分库分表中间件也是集成在业务系统上的,但也有一个统一运维平台,这个平台可以提交分库分表规则,就是一段代码,根据uId/mid确定是哪个库/表,貌似也没有运维问题;另外分成1024个表这个数字有点奇怪,我理解要么是百库百表or千库千表,1024不太好配置规则吧。

    作者回复: 你好,你们公司技术还是可以的,不过我在想你们自己实现的这个类库,要实现复杂的sql语句,应该有点难度吧,例如多层嵌套sql等。这个数字,其实就是一个 hashcode % total,这个total用1000,100还是1024,本质上没有啥差别的,我们公司1024张表,分布在16个物理库上。

    2022-08-27归属地:上海
  • qiuzeliang
    写一个类就可以处理根据订单编号路由到对应的表,为啥要引入数据库中间件? 个人觉得以这个理由引入数据库中间件不够充分

    作者回复: 首先我觉得你说的没错,如果只是实现订单表一个单表的路由一个类缺少很容易。但一个表的语法不只单表插入与查找,还有各种各样的join、子查询,分组等,要实现这些功能,就比较困难了,再者说我们项目中肯定不只一个表,要完成多个表,而且随着场景的增多,你这个类的维护就会比较困难,后面容易被这个技术需求所拖累,进而影响业务功能。我的想法是专业的人做专业的事情,一些共性的技术需求交给专门研究这方面的大牛写出来的中间件。

    2022-07-29归属地:上海
  • 李二木
    如果要高可用就是多副本方式

    作者回复: 你好,你这么说也没错,当然如果说的比较严谨的话,我觉得可以再细分一下。 其实RocketMQ的主从同步,我们可以通过多主多从一样可以实现高可用,我们将一主一从当成一个复制组,如果主节点宕机,写入流量会转移到其他主节点,并且从节点可以继续消费。 当然多副本,比主从同步更加厉害的一点是,在复制组内可用进行主从切换,可以避免因一个复制组宕机而给其他复制组带来更大的流量压力。

    2022-06-15归属地:上海
    2
  • c梦
    文章片段:「举个例子,如果订单表被分成了 1024 个表,这时候如果你想根据订单编号去查询数据,必须人为计算出这条数据存在于哪个库的哪个表中,然后再去对应的库上执行 SQL 语句。」 老师,您好,这里我没太懂,为什么需要人为计算出数据库存在于哪个表,因为 sharding-jdbc 应该是可以根据配置知道有哪些库哪些表的,然后根据他的算法计算出去哪个库表执行sql的吧?我没有用过 sharding-jdbc,可能是理解有偏差?

    作者回复: 你好,你的理解没有错。上面是指没有使用shardingjdbc这样分库分表组件时需要做的事情,也就是抛出分库分表的一些共性需求,后面业界大神找到了很多通用的解决方案,shardingjdbc,mycat这样优秀的中间件营应运而生。

    2022-06-13归属地:上海
    4
  • 李蕾
    分库分表都能够环节写入的压力,其中分表主要是能够降低表锁或者间隙锁的锁竞争,从而缓解写入压力。 我在业务中基本使用的都是ShardingJDBC,使用过程中直接将分库分表的逻辑配置好,具体的路由就由ShardingJDBC实现,但是这里需要注意线程池的配置,防止数据库连接数爆炸的问题,这个也是我在业务上踩过的大坑,一般的措施是在接口侧增加限流; 这里我理解,分布式架构设计更多的还是要从实际业务出发,将通用能力抽取,减少与业务的耦合,然后不断优化为一款好的产品。 虽然当前有TiDB等分布式数据库的出现,但是由于社区、技术积累等等方面的原因,MySQL依旧还是最为常用的数据库,了解常用的分库分表的中间件还是很关键的。
    2022-11-03归属地:广东
    4
  • Master
    有些不严谨,分库能缓解写入压力我能理解,分表不能吧。。。另外mycat和ShardingJDBC的选择更多的是综合性的选择结果,并没有绝对的好坏,sharding的方案会让数据库的连接数大幅上升,对于连接池的设置要异常谨慎,还有就是应用程序在扩容的时候实际上需要非常小心,连接数的飙高会直接影响mysql性能,而mycat一般没有这些问题。至于性能。。本质上来说还是DB的性能是大头,和中间件无关,中间件不会连数据库都跑不过吧 0 0...链路较长性能有损是常识,但高性能中间件一般都会注意这个,是不是你测试的时候设置不对啊,有做过不同设置下对比么,如果有损是否可以到不可接受的地步?。。。。 还有就是目前的云原生数据库的发展很快,文章中提到的一些问题可能目前不是问题了。。
    2022-07-14
    4
    4
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部