01|中间件生态(上):有哪些类型的中间件?
发布网友
发布时间:2024-10-22 07:52
我来回答
共1个回答
热心网友
时间:2024-11-22 05:05
中间件的定义
中间件是为了解决项目中的高可用性、高性能、高并发等技术需求而引入的技术组件,它在业务代码与技术功能之间起着解耦合的作用。
业务需求与技术需求
业务需求是指特定用户的特定诉求,例如快递行业的人与人之间跨城市传递物品、逢年过节给远方亲人寄礼物等。
技术需求则是在业务不断扩展、形成规模效应后,为满足使用上的需求,如系统稳定性、可用性、性能等方面的技术诉求。
中间件的引入
为了应对各种业务和技术需求,代码量会不断增加。为避免业务代码与技术类代码的纠缠,导致系统难以维护、运营成本增加、故障频发,引入中间层是解决这个问题的关键,这个中间层就是中间件。
中间件生态
中间件种类繁多,常见的包括微服务中间件、消息中间件、定时调度等。微服务中间件如Dubbo,消息中间件如RocketMQ、Kafka,定时调度如ElasticJob、XXL-Job等。
数据库中间件
数据库中间件是最早接触的中间件之一,用于解决单体应用向分布式架构演进过程中数据量急速增长、单个数据库节点成为系统瓶颈的问题。读写分离和分库分表是常用的解决方案。
读写分离
读写分离通过降低写入节点负载、将查询请求转发到从节点,提升写入性能。它要求在接口上添加注解指示数据源,通过反射获取注解信息,实现数据库层面的读写分离。
分库分表
分库分表通过引入多个写入节点实现负载均衡,提高系统扩展性。它需要解决SQL解析、路由选择等问题,但实现较为复杂,且存在SQL语句语法复杂、难以全面覆盖场景的挑战。
引入数据库中间件
为解决业务代码与数据库管理之间的耦合问题,引入数据库中间件,如MyCat和ShardingJDBC/ShardingSphere。它们提供统一的数据库访问层,简化数据库配置,但MyCat存在性能损耗、扩展性受限等问题,而ShardingJDBC以客户端代理模式,性能损耗低、扩展性强,但存在运维成本高的问题。ShardingSphere在ShardingJDBC基础上提供统一的数据聚合层,弥补运维层面的缺陷。
中间件选型
推荐使用ShardingJDBC,因为它性能损耗低、扩展性强、支持各类主流数据库,且社区活跃度高,稳定性更有保障。与MyCat相比,ShardingJDBC不引入额外的进程,资源利用率更高,社区活跃度更优。
总结与展望
中间件的引入有助于提升系统稳定性、可用性,但同时增加了维护复杂度,要求熟练掌握各种中间件及其工作原理、实现细节。通过对数据库中间件等常见中间件的学习,可以对中间件有一个宏观的认识。下一课将解读缓存、全文索引、分布式日志等其他几类中间件。