如何利用缓存理论来分析网购物流的未来

7 评论 8977 浏览 34 收藏 22 分钟

计算机技术的进步颠覆了整个世界,而其中的很多技术不仅能解决计算机方面的问题,对很多其他方面的问题也很有启发。今天笔者给大家介绍缓存理论,从缓存理论的角度来看待一些产品及生活上的问题,将会有许多有趣的结果,这就是今天的主题缓存理论+。笔者在此保证,本文没有门槛,但需要耐心。

理论

如果这节看不太明白不用纠结,结合后面的例子会容易得多。

众所周知,内存和硬盘是电脑的两个重要部件,虽说两者都是用来存储数据的,特性却大相径庭:

  • 内存访问速度快,容量小,断电后无法保存数据,在计算机中充当缓存的角色。
  • 硬盘访问速度慢,容量大,断电后数据不丢失,用于长久地保持数据。

CPU是个急性子,每秒几百亿次计算不在话下,自然爱和内存打交道,不待见硬盘,不待见到什么程度呢,即使CPU要读取硬盘里的数据,也先让硬盘把数据交给内存,CPU再从内存读,缓存往往就是指这样快却容量小的中间存储

问题来了,内存容量小,而计算机可能会使用的数据却很大,导致内存装不下,只能把装不下数据搁硬盘里,要使用硬盘中的数据,得先让内存清出一些暂时不用的数据,再从硬盘里把所需数据加载到内存,这种倒腾的过程叫做置换Swap,而清出数据的操作称为淘汰数据。从硬盘读数据就耗时了,所以我们希望我们每次取数据时数据都在内存里,减少硬盘的访问。

操作系统有一个很重要的任务——调整内存中的数据,目的在于减少用户使用电脑时因读取硬盘而造成的延迟和卡顿。调整一般发生两种情况下,一个是电脑闲置的时候,提前将用户可能会用到数据搬到内存中;另一个就是置换的时候,加载用户所需数据的同时,舍弃那些比较不可能被访问的数据。

计算机科学里把访问数据时数据刚好在内存里的概率成为命中率。为了提升用户体验,减少等待,就得提高命中率,选择合适的内存置换(淘汰)算法就显得至关重要,内存置换算法是指在发生置换操作时,应该淘汰内存中的哪些数据,来放置新的数据,常用的算法(别怕,都很简单)有

1、先进先出算法(FIFO,First In First Out)

淘汰最先进来的数据,这个算法非常简单,这样做的道理是最先进来的数据可能已经用过了,过时了。对于一次性或短期使用的数据,非常合适,但对于长期使用的数据,就不合适了。这个算法命中率并不高,常常被提起主要是用来衬托其他算法的优越性,有点类似奥特曼的小怪兽。

2、最久没访问算法(LRU,Least Rescently Used)

淘汰内存中最久没有被用到的数据,这个就比FIFO合理多了,最久没被访问,可能真的是过时了。从逻辑上来说是相对合理的,而且比较简单,现在流行的操作系统大多都使用它或它的变种。当然,这个算法对于那种需要被周期性访问的数据就不合适了。

3、最不频繁算法(LFU,Least Frequency Used)

淘汰内存中在最近一段时间内使用频率最低的数据,这个又比LRU更合理了,就是保留最近最常用的数据,剔除最不常用的蛀虫。它并不是操作系统的宠儿,因为它计算量比较大,自身会消耗一些内存,对于操作系统这样的惜时(内存)如金的家伙是不可接受的。

4、智能算法(AI)

我定义的一类算法,它泛指通过机器学习算法依据各种历史数据,计算各个数据未来一小段时间内将会被访问的概率,保留概率高的,淘汰低的。举个例子,假设你白天使用电脑工作,晚上使用电脑娱乐,那么AI算法可能会在白天尽量在内存中保留工作相关的数据。

比如一些word文档及办公软件的数据,而到了晚上,工作相关的数据则优先被淘汰,内存中常驻游戏,影音之类的数据。再比如,操作系统检测到了我刚刚下载了一部电影,那么这时应该将这部电影的数据及播放器的数据加载到内存中,其他类型的则可能被淘汰。AI算法的计算量显然很大也很复杂,入不了操作系统的法眼,但在很多情况下却非常好用。
再介绍一个概念:多级缓存,后面将会用到。

其实在电脑中,内存并不是读取速度最快的存储介质,还有更快的,叫CPU缓存。如果你看CPU的参数,经常能看到(L1/L2/L3缓存,他们共同组成CPU缓存),它是CPU的一部分,你们在看CPU规格时常常会看到,它离CPU计算核心更近,访问速度更快,但容量更小。CPU缓存和内存的关系 与 内存和硬盘的关系是一毛一样的。其实CPU缓存中还能细分,“ L1缓存 ”是“ L2缓存 ”的缓存,“L2缓存”是“L3缓存”的缓存,“L3缓存”是内存的缓存,如下图所示,这样不断嵌套的缓存结构就叫多级缓存。

cpu_cache_structure

缓存还有另外一个作用,缓冲

计算机中的例子不太好说,举个拉面店的例子。

有个拉面店只卖一种拉面,顾客时多时少,有时一次性来好几个人,师傅现做的话肯定有顾客等很久,如果提前做很多的话又有可能做多卖不出去,那么师傅想了这么一个策略,提前做好一些拉面,放在一个固定的桌子上,如果桌子上的拉面达到2碗,师傅就慢着点做,如果一直没卖出去,桌上的面达到4碗,就完全不做了,如果某个时段生意旺卖很快,桌上的面可能会少于2碗,或者卖完,甚至还有人等,那么师傅就要开足马力做面了。

那么,这里就把桌子当作缓存,通过缓存策略,给师傅一定的缓冲时间,一定程度上抵消人流波动带来的影响。

缓冲可以从两个角度解释,一个是任务发送者,另一个是任务处理者。在发送者和处理者之间设置缓存,来协调任务发送速度与处理速度不一致。当任务发送速度大于处理速度时,任务在缓存中堆积,发送者减慢发送速度,处理者提高处理速度;如果缓存中任务非常少了,则提高发送速度,减慢处理速度。如果处理是一次性的,缓存能减少处理的频率。

举个例子:垃圾桶是一种缓存,如果家里没有垃圾桶,我们一旦有垃圾就得扔到外头的垃圾桶,垃圾桶的存着可以减少我们处理的频率。

产品例子

缓存理论不仅在计算机领域应用广泛,而且在生活和产品中也常常用到。我们先对理论进行抽象:

  • 缓存/内存,泛指那些使用方便又非常有限的容器。
  • 硬盘,那些使用不方便但容量非常大的容器。
  • 数据,放在容器中的物体。
  • 算法,上面的算法大多都是说怎么淘汰,而下面往往说的是怎么保留,怎样选择,其实本质是一样的。从保留数据的角度重新解释上面的算法:FIFO,保留最后进入内存的;LRU,保留最近用过的;LFU,保留近期使用最频繁的;AI,保留未来最可能用到的。

下面举例:

我们的电脑桌面就是一个“缓存”,你可以在上面放文件及程序,它非常方便,触手可及,但是它容量非常有限,而资源管理器(我的电脑)则像是“硬盘”。桌面空间有限,东西多了也容易造成混乱,所以必须有所取舍,熵君在整理电脑桌面时一般会将最常用的放在桌面上,不常用的淘汰,这其实就是LFU算法 。

我们的手机桌面的首屏也可以当做“缓存”,一打开就能用到,而最下面一排的快捷栏则是更高级的缓存。我一直期望手机有这样一个功能,自动把最常用(LFU)的应用放首屏,省得我去整理。

安卓首屏

chrome的首页就有很多标签卡,都是你最常打开的网站(LFU),非常方便。

chrome首页

网站的首页也是一个缓存,就拿电商网站来说,首页资源是非常珍贵的,过去,这个首页往往是死的,把一些热门的商品放在首页,而现在都是使用推荐算法为每个用户定制首页,这就是上面所说的AI算法。新闻网站也很类似,以前都是编辑根据经验人工调整的首页,现在往往会引入智能算法(AI),结合用户个性化,新闻时效性等综合因素来安排首页内容。

亚马逊首页

生活中也有很多例子。笔者在整理房间的时候就会使用缓存理论,我会划定一些缓存。

比如桌面,或者其他一些触手可及的地方;我也会制造缓存,比如指定衣柜中的某个格子为缓存,规定放在这个格子里的衣服可以随意堆放。这些“缓存”常常会溢出,比如桌上太多东西了,影响我工作了;或者衣柜里的缓存区衣服太满,衣服不好找了。

这时我就会清理,我会把不常用的物品清出缓存区,并规整地放在它应该放的地方。这样就避免了频繁整理常用的物品,而这些常用的物品常常在你整理后又会使用到,那么之前就白整理了。这里也用到了缓存的缓冲功能。

这样的例子还有很多,比如微信的首屏也是个缓存,显示最近的对话,显然是使用LRU算法。当你在某个场景抽象出了缓存,那么下一步就是选取合适的算法,一般情况下LFU/LRU这样的简单算法就够用了,如果缓存资源非常珍贵,那么就应该求助你们的算法工程师做一套AI算法了,这就是缓存理论+

缓存理论与电商物流

如何利用缓存理论分析网购物流的未来呢?

购物模式

如果把网购当做一次数据访问,那么我们可以把商品当做数据,把发货的仓库当做硬盘,缓存则可以有很多种,那么我们将得到以下几种购物模式:

模式一

从硬盘直接读取数据,不经过缓存。也就是网购,并送货上门。

缓存-送货上门

(1)优点:直接,不需要顾客奔波。

(2)缺点

  1. 慢;
  2. 无法确定派送时间。很多时候顾客在派送的时候不在目的地,或者由于其他原因无法接收,这样要么限制了顾客自由,要么降低了快递员的效率。

模式二

先从硬盘读取数据到缓存/内存,再从缓存读取数据。也就是网购,送货到自提柜再由用户自提,自提柜就是缓存。

缓存-自提柜

(1)优点:用户收货不再受到快递派送时间的制约。

(2)缺点:

  1. 要自己取,如果自提柜远还不顺路就更费劲了;
  2. 慢;
  3. 很多地方没有自提柜;
  4. 自提柜的空间无法充分利用,如果自提柜很密集,那么空置率肯定很高。

模式三

数据已经提前从硬盘加载到内存,直接访问内存就可以了。这就便利店的模式,便利店也是一种缓存,老板进货就是从硬盘加载数据到缓存的操作。

缓存-便利店

(1)优点:快。

(2)缺点

  1. 要自己取;
  2. 商品有限,很多东西都买不到。

从缓存理论的角度分析

从缓存理论的角度,以上这几种购物方式其实是可以互相转换的。如果仅仅从缓存的角度,如何分析这几种模式?

  • 模式一:没有缓存,每次从硬盘加载,慢。
  • 模式二:有缓存,但是每次仍然从硬盘加载数据,缓存只起到了缓冲的作用,相当于命中率为0的缓存。无法确保缓存被充分利用,当自提柜密度提高时更甚。如果你把自提柜的空间比作便利店的货架,这相当于便利店的货架很大部分没摆放商品。
  • 模式三:有缓存,缓存利用率高,但缓存算法并不是最优化,这是由店老板决定的,因此命中率还有提高的空间。缓存就像一潭死水,无法变化,缓存中没有的数据(店里没有的商品)无法获取。

笔者的理想模式是怎么样的呢?让我们通过改造模式二(自提柜)来获得:

  • 增加自提柜的密度,要比便利店还更密,提供更好的覆盖度及体验。
  • 发展自提柜快递员这种职业,和普通快递员不同,他们的任务是由顾客直接指派,并且快速响应,派送距离很短,一般1公里以内(由自提柜的密度决定),解决懒人的最后一公里。其实这个不一定有必要,更多的是想告诉你,通过这样,模式2可以取代模式1,并解决模式1的时间问题。
  • 预先加载,在顾客购买之前,就将商品缓存到自提柜,这样,自提柜就和便利店就很相似了。这样就能充分利用自提柜的空间(缓存)。Android手机中有很多优化软件,在你内存占满时会让你清理内存,而这与Android的内存策略背道而驰,因为当内存占满时内存才是被充分利用的,这样能提高命中率,如果需要加载新的数据,那么Android会自动舍弃些不常用的数据。
  • 使用AI算法对缓存(自提柜中提前加载的货物)进行安排,利用机器学习算法结合用户数据,预测某个自提柜附近的顾客们将会购买的商品,并将这些商品预先缓存好。当用户在电商网站购物时,发现自己想要的商品已经在附近的自提柜中,这样,购物体验就接近便利店了。

一些电商公司有过近似的尝试,但还是离理想模式有差距。

亚马逊是个奇葩公司,总是有很多惊人的想法,其中有一个是擅自派送商品到顾客家,而顾客甚至没有订购,如果顾客觉得这个不是他想要的,可以拒收。这个想法的逻辑和前面提的预先加载是一致的,虽然两者是类似,但是亚马逊这个做法是不可行的,因为它没有缓存,目标是某个用户,这就要求算法得精确到个人,难度太大。而通过缓存(自提柜)的缓冲作用,目标可以扩大为附近的顾客,这样对算法的要求就大大降低。

每年的双十一阿里都搞得风风火火,快递的效率一年比一年高,爆仓的情况已经好了很多,这里的秘诀就是阿里依据AI算法将商品提前缓存到各地的仓库,这样就对物流网络起到了缓冲的作用,同时也减少了用户等待的时间。

仓库也是一种缓存,那么仓库是缓存,自提柜又是什么呢?这其实并不冲突,上面提过了多级缓存这个概念,明显,自提柜是最末端的缓存,而仓库则是上一级缓存,其实仓库本身也是多级缓存,比如北京市朝阳区的仓库是北京市仓库的缓存,北京市仓库又可能是河北省仓库的缓存。阿里做的这个工作已经非常接近了,但是还停留在解决具体问题的阶段,没有去抽象升华。

  • 菜鸟驿站,这个看着非常相似,实则差十万八千里。它沿袭了阿里轻资产,分流风险,做平台的风格。菜鸟驿站对各个快递代售点没有控制力,体验很差,如果把各个代售点当做缓存,阿里无法对缓存做任何安排。总的来说还不如现在的自提柜。当然它成本低,发展速度快是优点。
  • 顺丰嘿客,似乎是网购体验店与自提柜的合体,发展并不顺利,还没完全摸透意图。不过没有强大的电商无法完全实现理想模式。

有些读者可能会有疑问:这样大肆租店/场地成本一定很高吧?是的,成本确实很高,但你想想,便利店都能支撑起这样的店租,而缓存算法及机制更为先进的理想模式肯定能创造更多价值,所以不用担心。

电商公司及快递公司,怎样能更快地到达理想模式?

  • 发展(收购)便利店,慢慢将货架自提柜化。
  • 将自动售货机与自提柜结合,取代货架,进一步无人化。
  • 利用数据及算法优化便利店缓存(货架/自提柜/自动售货机)上的货品,提高命中率。
  • 链接仓库与自提柜,形成多级缓存,随着自提柜数量的提升,增加仓库的数量。
  • 将物流标准化自动化,进一步提升物流速度和效率。
  • 在少数城市试错。

理想模式不可能完全取代商店,但作为一种理论上更先进模式,我相信它会消灭大部分商店,而商店存在的意义更多将是展示、体验还有服务。

一不小心又写多了,科学并不像大家想象的那么死板,经过理解与抽象,很容易应用到生活和产品中,今天的缓存理论,希望你喜欢。

 

作者:熵君,公众号/微博:@熵君

本文由 @熵君 原创发布于人人都是产品经理。未经许可,禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 好久没看到这么好的文章了,胜读十年书啊!既有雄厚的技术支撑,又有深邃的商业分析。行文如同高山流水!!!

    来自山东 回复
  2. 现在很多电商的自建仓就是一个缓存,各卖家商品的存量、存放位置都是预估后计算出来的,接到订单后自建仓直接代发货,比商家自己发货方便快捷。

    来自江苏 回复
  3. 涨知识了

    回复
  4. 但这边还是有一个关于同类产品竞争的问题。
    当电商中品牌冲类目第一的竞争蔓延到了线下,势必也会对已有的品牌线下渠道造成冲击,营销成本反而变高了,品牌的利益受损。
    像现在这种仅仅存放包裹的自提柜还算是相安无事,但损害的是消费者的体验。

    回复
    1. 我理解你的担忧,但线下的营销成本也是非常高的,例如便利店里的食品品牌,好几年了,还是那几个品牌,新品牌机会很小,而这些老品牌每年得砸多少广告来维持形象?相反,电商里头的品牌则眼花缭乱,涌现出很多新的名牌。另一个就是,线下品牌的营销渠道对线上也有效,也就是说线上品牌的营销渠道更多,有些电商品牌已经开始在公交车站做广告。
      自提柜的问题没太明白。

      回复
  5. 作者是技术出身吗?好厉害! 😮

    来自北京 回复
    1. 是的 🙂

      回复