扩容
- 扩容:
垂直扩展(纵向扩展):提高系统部件能力
水平扩容(横向扩展):增加系统成员来实现
- 扩容-数据库
读操作扩展:memcache、redis、CDN等缓存
写操作扩展:Cassandra、Hbase
- 缓存
命中率:命中数/(命中数+没有命中数)
最大元素(空间)
清空策略:FIFO,LFU,LRU,过期时间,随机等
- 分类:
本地缓存:编程实现(成员变量、局部变量 、静态变量)、Guava Cache
分布式缓存:Memcache、Redis
Guava Cache:
- redis:
- 数据类型:string、hash、list、set、sorted set
- 编码方式:raw、int、ht、zipmap、linkedlist
- 数据指针
- 虚拟内存
- 其他信息
- 高并发问题:
- 缓存一致性
- 缓存穿透 解决:1.对查询为空的对象进行缓存
- 缓存雪崩现象
消息队列:(kafka、RabbitMQ)
- 为什么会需要消息队列(MQ)?
##########################################################################################
主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。
#########################################################################
生产和消费的速度或稳定性等因素不一致
好处:1.业务解耦2最终一致性3.广播4.错峰与流控
- 消息队列特性:
业务无关:只做消息分发
FIFO:先投递先到达
容灾:节点的动态增删和消息的持久化
应用拆分:
一个应用被很多小应用拆分 缺点:带来管理的复杂性
原则:
业务优先
循序渐进
兼顾技术:重构、分层
微服务:
异步通信(消息队列)