中间件核心技术与实战
丁威
中通快递资深架构师,RocketMQ 社区首席布道师
19674 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
中间件核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

02|中间件生态(下):同类型的中间件如何进行选型?

你好,我是丁威。
这节课,我们继续中间件生态的讲解。

缓存中间件

纵观整个计算机系统的发展历程,不难得出这样一个结论:缓存是性能优化的一大利器。
我们先一起来看一个用户中心查询用户信息的基本流程:
这时候,如果查找用户信息这个 API 的调用频率增加,并且在整个业务流程中,同一个用户的信息会多次被调用,那么我们可以引入缓存机制来提升性能:
也就是说,在 UserService 中引入一个 LinkedHashMap 结构的内存容器,用它存储已经查询到的数据。如果新的查询请求能命中缓存,那么我们就不需要再查询数据库了,这就降低了数据库的压力,将网络 IO、磁盘 IO 转变为了直接访问内存,性能自然而然也提升了。
但上面这个方案实在算不上一个优秀的方案,因为它考虑得非常不全面,存在下面这几个明显的缺陷:内存容量有限、容易引发内存溢出,缓存在节点之间不一致,数据量非常庞大。
上面每一个问题都会带来巨大的影响,如果我们每做一个业务系统,都需要花这么多精力去解决这些技术问题,那这个成本也是不可估量的。为了解决与缓存相关的技术诉求,市面上也涌现出了一些非常优秀的中间件。缓存中间件经历了从本地缓存到分布式缓存的演变历程,我们先来看本地缓存中间件。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了缓存中间件、全文索引中间件和分布式日志中间件的重要性和应用场景。首先,缓存中间件在计算机系统性能优化中扮演着关键角色,本文对比了本地缓存中间件和分布式缓存中间件的特点和适用场景,建议在大多数情况下选择使用Redis。其次,全文索引中间件Elasticsearch在分布式架构中有两个常见应用场景,即宽表和全文搜索,能够有效解决数据查询性能问题。最后,分布式日志中间件ELK为日志搜索带来了新气象,是分布式日志中间件的不二之选。总的来说,本文通过介绍不同中间件的特点和应用场景,为读者提供了有益的技术选型参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《中间件核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 天天有吃的
    本地缓存直接创建一个全局map不就好了吗?为什么还要使用这些框架呢?

    作者回复: 你好,一个全局Map会一直占据内存,如果数据量持续增加,容易触发OOM,使用这些缓存框架,基本都提供了内存+文件两级存储结构,具有热数据存储在内存,冷数据存储在磁盘的功能。

    2022-06-15
    11
    10
  • 王晓杰
    章节的标题为如何选型,感觉可以补充一些中间件的选型思路和方法。比如,需要关注哪些内容,如何测试,评估等等。文中的例子基本都是唯一选项,没体现出选择和纠结的过程。

    作者回复: 谢谢你的建议,关于消息中间件如何选型,将在专栏的后面会重点提到,里面就有我一些选型考虑的一些维度,敬请期待。

    2022-06-23
    4
  • Geek_e3cfbe
    威哥,mysql如果同步到es,监听到mysql的改动后是去修改es对应数据还是删除es数据再全量新增,哪种更好点。

    作者回复: 这个问题很好,我们通常的做法是采取更新的方式,但这里涉及一个问题,幂等性,例如从数据库中接收到的更新时间比存储在es中的数据是否要继续更新,这里其实不同的场景需要采取不同的策略。 1、如果是业务程序自身bug,数据同步组件没问题,希望数据重新回溯,这个时候要无条件更新。 2、如果业务程序自身无bug,但数据组件有问题,比如少同步了一些数据,这个时候,数据同步回溯,希望只更新缺失的数据

    2022-08-03归属地:上海
    1
  • 码小呆
    redis 玩爆 Memcached ,没的比

    作者回复: 对的,Redis具有后发优势,对memcached的缺陷进行了针对性的优化。

    2022-06-18
    2
    1
  • 青雘
    反存 老师找专业的录个音吧 [狗头]

    作者回复: 抱歉,抱歉,继续努力加油。

    2022-11-17归属地:广东
  • wyl
    老师,课后作业又没有实战案例答案啊

    作者回复: 你好,这课后题没有专门准备答案,如果在做的过程中遇到什么问题,欢迎与我互动交流学习,当然,在接下来的学习过程中,我先在这里立一个flag,后续会在github(https://github.com/dingwpmz/infoq_question)上传我的一些理解,请持续关注这个地址。

    2022-06-24归属地:上海
  • hello
    老师,请教您一个问题,你有提到MySQL同步数据至ES使用Canal,如果是MongoDB同步数据至ES,有什么好的工具推荐没?

    作者回复: 你好,我推荐使用 flink-cdc,使用sql语句来定义同步任务, https://github.com/ververica/flink-cdc-connectors,我们公司还基于这个开源产品,进行来产品化开发,研发了我们公司的数据同步平台。

    2022-06-22归属地:上海
    2
  • 虚竹
    老师好,宽表场景,有多层数据,需要频繁多条件筛选查询+分页,ES和Mongo,哪个会更好些呢?
    2023-01-18归属地:北京
    2
  • 张运康
    老师,请教您一个问题,你有提到使用Canal将MySQL同步数据至ES,那么为什么不直接将数据写入到ES宽表内呢还省掉了同步过程
    2023-04-04归属地:江西
  • Casin
    可以了解下内存数据缓存Dragonfly
    2022-11-21归属地:江苏
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部