在透明多级分流系统中,我们以流量从客户端中发出开始,以流量到达服务器集群中真正处理业务的节点结束。一起探索了在这个过程中与业务无关的一些通用组件,包括DNS、CDN、客户端缓存,等等。
实际上,服务端缓存也是一种通用的技术组件,它主要用于减少多个客户端相同的资源请求,缓解或降低服务器的负载压力。所以,说它是一种分流手段也是很合理的。
关于服务端缓存,首先需要明确的问题是,在为系统引入缓存之前,它是否真的需要缓存?
软件开发中并不像硬件缓存(如CPU L1/2/3缓存、磁盘缓存,等等)那样多多益善,在软件开发中,引入缓存的负作用明显要大于硬件的缓存。主要有下面几个原因:
那么为什么要引入缓存?主要有下面两种理由,
在设计或选择缓存时,需要考虑下面四个维度的属性。
缓存的吞吐量只有在并发场景中才有统计的意义,而无论采用怎样的实现方法,线程安全措施都会带来一定的吞吐量损失。
根据Caffeine给出的一组目前业界主流进程内缓存的实现方案,包括了Caffeine、ConcurrentLinkedHashMap、LinkedHashMap、GuavaCache、EhCache和Infinispan Embedded等缓存组件库的对比。从它们在8线程、75%读操作、25%写操作下的吞吐量表现Benchmarks来看,各个缓存组件库的性能差异还是十分明显的,如下图,