关于缓存系统的思考总结(一)

前言

       自1946年第一台电子数字计算机诞生至今已逾七十多年,伴随着计算机的发展,计算机软件的变化也是翻天覆地。当前计算机软件越来越向高抽象、高复用、高性能、高可靠等特性发展。本文只关注于全局中极小的一点 -- 缓存 ,并结合笔者的实际工作经验和大家一起讨论一下相关内容。

缓存使用历程

        笔者刚刚参加工作的时候,BS结构刚刚发展起来,Spring尚未一统天下,Hibernate也未遇对手;互联网行业只是刚刚起步,反而是传统的企业信息化系统如日中天。这类软件系统的特点是:低抽象、低复用(各种企业内部特殊定制,貌似现在也是这样 ,很好奇SAAS是如何解决这些“需求”),一个系统总共使用人数不过二三百人,数据量不过百万。当时的系统结构是这样的:


关于缓存系统的思考总结(一)_第1张图片

       再往后大家发现,一个稍微复杂点的页面大都涉及到多次的数据库查询(比如:语种、币种、地区或各式各样的业务码表)性能损耗高到令人咋舌。于是不约而同的将一些相对固定的数据保存到本地缓存中,系统结构便演化成如下图(大多数关系数据库也是提供缓存优化的,但不在本文讨论范围内):

关于缓存系统的思考总结(一)_第2张图片

       在这个阶段,大型的项目(比如百万级以上)往往会利用f5或nginx配合SSO来实现高可用及负载均衡;但业务相关的缓存依旧在本地,并通过策略更新缓存信息(通常是定时)。Local Cache虽然性能极佳,但也有其固有的问题:1、成本昂贵,无法大规模扩展  2、在某个时间段内不同服务器缓存的信息不一致。所以Local Cache 又演化为Centralized Cache ,如下图:


关于缓存系统的思考总结(一)_第3张图片

        随着互联网的兴起,为满足高并发、大数据、低成本的要求,软件系统架构发生了革命性的变化。即由集中式像分布式服务演化,概要结构如下图:


关于缓存系统的思考总结(一)_第4张图片

        分布式服务治理+ 集中式缓存可以满足目前绝大多数业务场景的需要,并且由于可选开源产品的丰富使其构建大为简化。但集中式的缓存也有缺点,那就是IO消耗。程序每次访问缓存的时候都会与缓存服务器产生网络通讯(最少也需10ms以上),虽然在多数情况下这种消耗是可以接受的,但在一些极度要求吞吐量和并发量的系统中,任何性能优化都不为过。于是缓存便又演化成混合型(多级缓存),如下图:

关于缓存系统的思考总结(一)_第5张图片

        使用混合型缓存,可以将少量高频次访问的数据缓存在本地,尽量减少因访问缓存服务而导致的IO开销。

        软件系统在使用缓存上从无到有,从简到繁的过程,就是软件系统发展的过程。伴随着互联网的疯狂扩张,软件也会把自己的触角延伸到方方面面。这必然会带来更多的问题,更复杂的环境及更多的解决方案。

你可能感兴趣的:(关于缓存系统的思考总结(一))