01|中间件生态(上):有哪些类型的中间件?
什么是中间件?
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了中间件的概念和种类,以及在分布式架构中常见的中间件类型。作者首先解释了中间件的概念,指出中间件是为了处理涉及高可用、高性能、高并发等技术需求而引入的技术组件,能够实现业务代码与技术功能之间的解耦合。随后,作者列举了常见的中间件类型,包括微服务、消息中间件、定时调度、数据库中间件、缓存、搜索和日志等,并重点介绍了微服务、消息中间件和定时调度这三个方向。在数据库中间件部分,作者详细解析了读写分离和分库分表的解决方案,并探讨了引入数据库中间件给技术带来的简化。文章还对MyCat和ShardingJDBC/ShardingSphere这两种数据库中间件进行了比较,并推荐了ShardingJDBC作为更优选的数据库中间件。整体而言,本文以清晰的逻辑结构和丰富的实践经验,系统地介绍了中间件的概念和种类,为读者提供了全面的中间件知识图谱,帮助他们更好地进行决策和架构设计。
《中间件核心技术与实战》,新⼈⾸单¥59
全部留言(11)
- 最新
- 精选
- ᯤ⁵ᴳShardingJDBC 似乎没有 myCat 性能好啊
作者回复: 你好,这个你有做过压测没,这两款我都在公司运用过,根据在优速,中通的实战经验来看,ShardingJDBC的优势还是要比mycat要好太多,因为中心化,需要引入大量的资源保障mycat自身的高性能,而且一但出现问题,将是比较致命的,而且不太好快速恢复。
2022-07-0237 - 文涛mycat似乎N没更新了,现在分表分库还是几年前那套理论?而且还是Java体系的!TiDb等新兴数据库了解一下!
作者回复: 你好,MyCAT我最近也关注的比较少,只是借此分析了一下分库分表的一些发展。也感谢你给大家提供了更新的技术,号称解决了传统分库分表类似跨库JOIN,值得深入研究。
2022-06-155 - 第一装甲集群司令克莱斯特运维戏称:珍爱生命,远离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-1444