互联网公司常用四大类中间件之搜索中间件与缓存中间件

1. 搜索中间件:Solr,ELK(ElasticSearch,Logstash,Kibana)达成近实时搜索。

底层均基于Lucence。如果能考到ELK认证(当前很少人获得),高薪无悬念。

大型互联网公司项目请求响应处理:

远端通过访问Web->检索->缓存->HBase->MapReduce->HDFS

2. 缓存中间件

Redis缓存常用方法大家都比较清楚:

Ehcached:轻量级Java缓存框架,通过在接口服务里跑一个Ehcached,如果Ehcached有就取出,没有再去请求数据库,数据库返回并存在Ehcached中,这样就仅在一台服务器进程内。减少了Redis的繁琐步骤,缺点是,如果服务器挂了,Ehcached也挂了,因此解耦性没有Redis好。当用户访问时,快速返回结果,速度最快。

Memcached:和Ehcached很类似,2000年即存在了。在数据库MySQL中增加memcached,减少了数据库查询,MySQL内部检测该SQL是否在memcached中存在,如果不存在,则访问数据库,否则访问memcached即可。这样就将缓存放在数据库层面,来确保数据一致性。

当我们修改数据库时,需要同步更新Redis,如果中间通过消息中间件MQ提供消费,消费者可能还需更新Redis缓存。

客户端浏览器上的cookie,jwt->token缓存来自服务器的信息,比如用户名等信息。

除了浏览器上可以做缓存,我们添加Nginx也可以做缓存。我们知道,用Nginx做网关时可以提高整体性能,提升并发量;还可以用Nginx做动静分离,把服务器的一些后端数据前置到Nginx上;另外Nginx可以缓存静态文件,也可以缓存动态文件,比如Nginx内部也支持编程开发,也可以开发出来一些组件,比如resty_luacache(Lua语言实现),shareddict(C语言实现)。

如果Nginx缓存空间不够(比如100个),app通过加锁对数据库进行操作:

如果在app上存全量热点数据(比如1000个),可以通过集群,都复制一份数据

如果各个app分别存部分缓存数据,以保证有足够空间,应该如何处理?

采用取模的方式,增加集合进行定向流量分发,最终确定那一台服务器(1%3=2)。

比如某东的item.Xd.com下的商品详情页做定向流量分发,中间还集成了其他脚本,比如Lua。同时增加Redis,Nginx客户端或Lua语言可以直接访问Redis。

如果没有任何需要后端服务计算的查询,则放在Redis里进行缓存,另外还可以增加网关层进行缓存,还可以在业务网关和流量网关进行处理。

为什么做这么多缓存?缓存一定要前置,前置的意义是尽量减少后端逻辑的执行,在前面就找到答案;越前置响应速度越快,处理的节点个数就越少,比如nginx有几十个,网关可能有几十个,app有几百个…..当项目做的足够大,高并发越来越复杂后,可能采用下面的结构:

Lvs做缓存,Nginx做流量网关,业务网关后可能有商城业务,ERP业务,DRP业务。而商城业务下面可能是一个独立的业务线,会包含N个子系统。所以可能增加多个业务网关分别连接子系统。这样ERP就必须通过商城业务网关访问商城业务的多个子系统,通过网关控制访问

互联网公司常用四大中间件 | 搜索中间件缓存中间件相关推荐

  1. 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化

    引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...

  2. 分布式缓存中间件:Redis

    Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Pyt ...

  3. Spring Cache 实战:兼容所有缓存中间件!

    作者 | 悟空聊架构 来源 | 悟空聊架构(ID:PassJava666) 本篇给大家介绍一种兼容所有缓存中间件的方案,不论我们是使用 Redis 还是 Ehcache,都不需要关心如何操作 Redi ...

  4. APICACHE : Express/Node的API响应缓存中间件

    APICACHE : Express/Node的API响应缓存中间件 翻译来源:https://gitee.com/yunwisdoms/apicache 支持Redis或具有自动清除功能的内置内存引 ...

  5. Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理

    Bloom是REST API缓存中间件,充当负载平衡器Nginx和REST API服务之间的反向代理 翻译来源:https://gitee.com/yunwisdoms/bloom Bloom是RES ...

  6. 分布式多级缓存中间件引导实践

    此文可借鉴作为分布式缓存中间件实现方案 但有不足:若上生产就必须解决,比如如何实现方法级二级缓存过期,如何实现可配置编码级等等 下载地址: http://download.csdn.net/detai ...

  7. 新课发布-SpringBoot2.0缓存中间件Redis技术入门与实战(抢红包系统设计与实战)

    概要介绍:历经半个多月的时间,Debug呕心沥血.亲自录制的 "缓存中间件Redis技术入门与应用场景实战(SpringBoot2.x + 抢红包系统设计与实战)"的新课终于完成了 ...

  8. 一个C#开发的非常实用的缓存中间件

    今天给大家推荐一个C#开发的非常实用的缓存中间件,支持各种缓存. 在我们实际开发中,缓存是经常用到的.特别是一些需要重复执行且消耗资源的操作时,我们都会把结果存储在缓存中,下次需要用到直接从缓存读取. ...

  9. 常见的中间件以及什么是中间件

    常见的中间件以及什么是中间件 1. 中间件是什么 2. 为什么要用中间件 3. 中间件的使用场景 4. 主要的中间件的分类 1. 中间件是什么 中间件顾名思义就是系统软件和应用软件之间连接的软件,以便 ...

最新文章

  1. TIDB,面向未来的数据库到底是什么?
  2. 基于Pytorch的动态卷积复现
  3. NLP的神经网络训练的新模式
  4. POJ 1094 Sorting It All Out (拓扑排序)
  5. 只需 4 步,自己搞个 Spring Boot Starter!
  6. 【NLP】Sentence-T5|谷歌提出文本表示新SOTA
  7. 使用Hybris的customer conpon进行促销活动(promotion)
  8. 分布式事务最终一致性-CAP框架轻松搞定
  9. 张娟娟(为奥运冠军名字作诗)
  10. 95-134-112-源码-维表-全量加载MySQL
  11. ajax请求url python,ajax请求方式
  12. awk取列 shell 读文件_大厂运维高手如何打造核心竞争力?这些Shell命令合集得知道!...
  13. Android界面布局基本属性
  14. DO447安装红帽Ansible Tower
  15. steam移动所有文件至新库文件夹失败_VBA进阶 | 文件操作17:File对象与Files集合详解...
  16. 在WebServer中如何实现CGI技术
  17. win10自带输入法突然变成了繁体
  18. 怎么出家ajax假死状态,Ajax如何解决假死?
  19. 2021-10-21python中spilt函数的学习
  20. vs code 快速生成html模板插件

热门文章

  1. 【PyQt】pyqt加载调用ui界面文件的两种方法
  2. java 部署策略_如何使用TeamCity和Octopus完成此分支和部署策略
  3. NEO4J不存在某个关系的查询方式
  4. 远程监控Wifi与4G蜂窝流量连接有什么不同
  5. shell 编程的老臣 - sed
  6. [再寄小读者之数学篇](2014-11-20 计算二重积分)
  7. 【LeetCode】723. Candy Crush 解题报告 (C++)
  8. PIR热释电红外人体感应IC
  9. Labview图像视觉处理——VDM、VAS的下载安装
  10. 2019 年 10 月 3 日 - KB4524157 (月度汇总)适用于: Windows 7 Service Pack 1Windows Server 2008 R2 Service Pack 1