高并发下架构师为何更喜欢进程内缓存

进程内缓存是指缓存和应用程序在相同地址空间。即同一个进程内。分布式缓存是指缓存和应用程序位于不一样进程的缓存,一般部署在不一样服务器上。算法

从前有个机构,机构的主人叫作 CPU,这个机构专门派仆人取一些东西而后作相应的处理。下面是这个机构平常的场景。数据库

以上故事纯属预估数据,真实数据会根据不一样的硬件配置和网络环境有偏差。缓存

经过以上不正经的小故事,咱们能够了解到cpu取各个设备数据的大致差距。至于YY妹子的问题,你们也应该了解了。服务器

  1. 首先把数据从磁盘加载到内存作缓存,这个是对的。毕竟磁盘的IO速度比内存要慢的多。就拿咱们如今使用的大多数PC机以及服务器来讲,磁盘每每是性能的瓶颈。
  2. 若是有条件或者框架支持能够实现进程内缓存,我仍是推荐使用进程内缓存,毕竟相似Redis这样的kv存储和应用程序多数状况不在一台服务器上,虽然局域网的速度肉眼看起来很是快,可是对于cpu来说,仍是让cpu休了一个大假。

至于什么状况下适合应用进程内缓存,我以为有几点须要注意:网络

  1. 相同的请求或者设置的相同缓存key的请求每次都是同一个服务器上的同一个程序去处理,这样这个请求的缓存正常状况下只会产生一份。 若是每次请求都会路由到不一样的服务器,便会产生多个缓存的副本,维护这些缓存数据的一致性是须要代价的。
  2. 当有新的服务器节点加入或者服务器节点退出的时候,不能发生雪崩现象,全部缓存请求都穿透到达数据库,那是比较要命的。好比能够看一下菜菜之前的文章:分布式缓存的一条明路(附代码)
  3. 若是缓存的处理服务器发生变化,好比:因为某种缘由,开始请求是由服务器A来处理,后来A服务器down了,如今由服务器B来处理,在缓存转移的过程当中,必须能保证数据的正确性和一致性。
  4. 程序的进程内缓存必须有过时策略,在有限内存大小的状况下,合理的使用。推荐使用LRU淘汰算法来保证内存不会撑爆。
  5. 系统的并发量及其大,对性能的要求及其高,能够考虑使用进程内缓存。
  6. 若是是小部分只读数据,而且访问量比较大,例如常用的字典数据等,能够考虑使用进程内缓存。

相对于分布式缓存,好比Redis,进程内缓存有哪些优点呢?并发

  1. 进程内缓存性能比较高,延迟会更小,更节省带宽,毕竟分布式缓存网络调用的性能和本地调用比起来慢太多,
  2. 因为和应用程序位于同一进程,共享相同的虚拟内存,因此在状态维护上更容易一些,
  3. 其次进程内的缓存不设计到网络传输,因此没有序列化的过程,在性能上更胜一筹。
  4. 进程内缓存的数据类型几乎能够是语言级别支持的任意类型,数据类型设计上比大多数分布式缓存设备支持要灵活许多。

在应对高并发的状况下,若是有适当的环境菜菜仍是以为进程内缓存为首选,另一点程序要尽可能避免线程切换,尽可能异步化。若是能够最好能预估出缓存数据的大小,避免内存泄漏等现象发生。框架

固然分布式缓存有本身的优点,在监控,容灾,扩展性,易用性等方面更胜一筹。至于用进程内仍是分布式缓存,没有定论,能解决业务痛点就是最好的结果异步

写在最后

程序若是要想最大程度的提高并发量,缩短响应时间, 就把用户须要的数据放在离用户最近的地方分布式


添加关注,查看更精美版本,收获更多精彩高并发

image
相关文章
相关标签/搜索