高并发(四)扩容/阻塞队列

扩容

  • 扩容:

    垂直扩展(纵向扩展):提高系统部件能力

    水平扩容(横向扩展):增加系统成员来实现

  • 扩容-数据库

    读操作扩展:memcache、redis、CDN等缓存

    写操作扩展:Cassandra、Hbase

  • 缓存

    命中率:命中数/(命中数+没有命中数)

    最大元素(空间)

    清空策略:FIFO,LFU,LRU,过期时间,随机等

  • 分类:

    本地缓存:编程实现(成员变量、局部变量 、静态变量)、Guava Cache

    分布式缓存:Memcache、Redis

    Guava Cache:

  • redis:
  1. 数据类型:string、hash、list、set、sorted set
  2. 编码方式:raw、int、ht、zipmap、linkedlist
  3. 数据指针
  4. 虚拟内存
  5. 其他信息
  • 高并发问题:
  1. 缓存一致性
  2. 缓存穿透 解决:1.对查询为空的对象进行缓存
  3. 缓存雪崩现象

消息队列:(kafka、RabbitMQ)

  • 为什么会需要消息队列(MQ)?

##########################################################################################

主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

#########################################################################

    生产和消费的速度或稳定性等因素不一致

    好处:1.业务解耦2最终一致性3.广播4.错峰与流控

  • 消息队列特性:

    业务无关:只做消息分发

    FIFO:先投递先到达

    容灾:节点的动态增删和消息的持久化

应用拆分:

一个应用被很多小应用拆分  缺点:带来管理的复杂性

原则:

业务优先

循序渐进

兼顾技术:重构、分层

微服务:

异步通信(消息队列)

原文地址:https://www.cnblogs.com/nickup/p/9721237.html