大家好,我是砸锅。一个摸鱼八年的后端开发。熟悉 Go、Lua。今天和大家一起学习中间件😊
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情
中间件的全局认知
什么是中间件?
中间件是游离在业务需求之外,专门为了处理项目中涉及高可用、高性能、高并发等技术需求而引入的一个个技术组件,作用是为了能够实现业务代码和技术功能之间的解耦合
微服务涉及分布式领域中服务注册、服务动态发现、RPC 调用、负载均衡、服务聚合等核心技术
消息中间件作用是对系统解耦和应对突发流量,常见消息中间件包括 RocketMQ、Kafka
定时调度常见中间件包括 ElasticJob、XXL-Job
数据库中间件 MyCat 、ShardingJDBC
缓存中间件包括本地缓存和分布式缓存。本地缓存因为属于单进程管理的范畴,存在单点故障和资源瓶颈,无法应对数据的持续增长,所以现在基本都是使用分布式缓存了。分布式缓存中间件里较为常见的例如:Redis 、Memcached。
- 客户端通常会使用一致性哈希算法进行负载均衡,主要是为了提高节点扩容、缩容时的缓存命中率
- Redis 采用主从同步模式,可以提升数据缓存的可靠性
- 单台 Redis 受限机器内存的容器限制,通常会采用集群部署,每个节点存储部分数据
- 避免 Redis 的 master 节点宕机导致集群写入数量减少问题,引入哨兵集群,使 master-slave 主从自动切换,提高缓存中间件的高可用性
全文索引中间件常见的是 Elasticsearch,Elasticsearch 是一个基于 Apache Lucene 的开源且支持全文搜索的搜索引擎。Elasticsearch 提供了强大的分布式文件存储能力、分布式实时分析搜索能力、实时全文搜索能力、强大的集群扩展能力,PB 级别的结构化和非结构化数据处理能力。
Elasticsearch 在分布式架构中有两个最常见的应用场景,一个是宽表、解决跨库 Join,另一个就是全文搜索。
分库分表在面对多维度查询时将变得力不从心,所以需要引入数据异构+宽表的设计方案:
分布式日志中间件常见的是 ELK
需要在需要进行日志采集的机器上安装一个 filebeat 工具,用来采集服务器的日志,并将它们存储到消息中间件中。然后,在需要采集的机器中安装 Logstash 进程,通过 Logstash 将日志数据存储到 Elasticsearch 服务器,用户可以通过 Kibana 查询存储在 Elasticsearch 中的日志数据,这样,我们就可以有针对性地查询所需要的日志了
此文章为2月Day6学习笔记,内容来源于极客时间《中间件核心技术与实战》