中间件
技术栈中多抽出来的一层,相当于代理
redis中间件
基于内存共享,可用于数据库、缓存、消息队列
有master和slave机制,可实现一个master写,多个slave读
消息队列作用
异步, 解耦, 削峰.
异步. A系统需要发送个请求给B系统处理,由于B系统需要查询更新数据库花费时间较长,以至于A系统要等待B系统处理完毕后再发送下个请求,造成A系统资源浪费.使用消息队列后,A系统生产完消息后直接丢进消息消息队列,就完成一次请求,继续处理下个请求.
解耦. A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?使用消息队列就能解决这个问题,A系统只负责生产数据,不需要考虑消息被哪个系统来消费.
削峰. A系统调用B系统处理数据,每天0点到11点,A系统风平浪静,每秒并发请求数量就100个。结果每次一到11点~1点,每秒并发请求数量突然会暴增到1万条。但是B系统最大的处理能力就只能是每秒钟处理1000个请求啊。。。尴尬了,系统会崩掉。。。引入消息队列,把请求数据先存入消息中间件系统中,消费系统慢慢拉取消费
kafka
常用的消息队列,包括各种mq和kafka。
kafka用于大数据实时计算和各种日志处理,分布式,单机吞吐量在10万级别,事实上的标准。
elasticSearch https://zhuanlan.zhihu.com/p/62892586
基本原理是反向索引。搜索引擎的3大块,爬取页面 分词 反向索引
3个概念,索引 类型 文档 分别对应mysql中的库 表 记录
分布式 保证写性能,master slave架构
Lucene库的基础上进一步封装,提供rest接口方便调用
典型日志应用elk,业务系统+logstash--》汇总日志到ES--》kibana图形化展示。反向索引保证日志搜索效率
新efk es-fluentd-kibana