高并发扩容思路

一、缓存
缓存需要注意的问题:
1.缓存一致性
数据时效性要求很高,要求缓存中数据库中的数据一致。(更新数据库成功,更新缓存失败、更新缓存成功,更新数据库失败、更新数据库成功,淘汰缓存失败、淘汰缓存成功,更新数据库失败)
解决方法:缓存的更新策略,
2.缓存并发
缓存过期后,高并发情况下多个请求都没有在缓存中得到数据,全部压力都来到了数据库身上,甚至造成雪崩现象。
一个缓存在更新时,有大量请求去访问该缓存也会造成缓存一致性的问题。
解决方法:锁的机制,当缓存更新或过期时,获取到锁,知道数据更新完成或从数据库中得到数据后,再释放锁,会牺牲一定的等待时间。
3.缓存穿透
高并发场景下,某一个key没有被命中,从而到数据库中进行查询,当到达数据库时发现这个值本身就是空的,导致了大量不必要的数据库操作,对数据库造成了巨大的冲击和压力。
解决方法:1.缓存空对象;2.单独过滤处理,对所有值可能为空的key单独存放,在请求前做拦截,避免请求穿透到数据库。
4.缓存的雪崩现象
因缓存故障或缓存并发导致大量请求到达数据库,导致数据库崩溃,从而导致系统崩溃;或者在某个时间点一部分缓存同时失效了,导致大量请求到达数据库,导致雪崩。
解决方式:可通过应用拆分、降级、熔断等方法降低影响;均匀的设置缓存的过期时间;使用多级缓存。
二、消息队列
特性:
1.与业务无关只做消息分发
2.FIFO,先投递先到达
3.容灾,节点的动态增删和消息的持久化
4.性能,吞吐量提升,系统内部通信效率提高
为什么需要消息队列:
1.生产和消费的速度或稳定性等因素不一致
好处:
1.业务解耦,一个事务只关心自身业务,设计到其他系统的操作,只要发送消息即可,无需等待结果。
2.最终一致性,两个系统的操作要么都成功,要么都失败。利用消息队列中提供的记录和补偿机制,如果操作失败则可以依靠定时任务的方式重新进行操作。
3.广播,将消息进行广播,新接入的系统只需要对需要的消息进行处理即可。
4.错峰与流控,当系统上下游处理能力存在差异时,可以存储消息,在下游有能力处理时再进行分发。

三、拆分应用
从整体将一个应用拆分为多个引用
拆分原则:1.业务优先;2.循序渐进;3.兼顾技术(重构、分层);4.可靠测试
应用拆分需要考虑的问题:
1.应用之间通信:RPC(dubbo,spring cloud)、消息队列。
2.应用之间的数据库设计:每个应用都有独立的数据库。
3.避免事务操作跨应用。
dubbo:分布式服务框架,还提供软负载均衡,
spring cloud:一些独立的服务共同组成系统,各个服务独立部署,各个服务独立维护开发,利用分布式进行管理,按照业务划分组织。

四、微服务、服务降级与服务熔断
微服务
需要考虑的问题:
1.客户端如何访问这些服务:
利用代理(API Gateway)提供统一的访问入口,统一管理所有微服务,使所有服务对前台透明,还通过过滤等管理功能。
2.服务之间是如何通信的:
异步方式:使用消息队列;同步方式:使用rpc(dubbo)
同步异步区别:同步需要等待结果,一致性强;异步不去要等待结果,一致性弱,需要保证数据的最终一致性。
3.如何发现如此多的服务:服务之间如何相互感知、发现,利用zookeeper注册服务。
4.服务挂了该如何解决:微服务宕机如何保证系统正常使用,服务降级(系统异常之后返回给用户的统一的结果或页面)、服务熔断(服务异常后暂停服务)。
服务降级:自动降级:超时、失败次数(通过超时和访问失败次数决定是否降级,采用异步机制探测回复情况)、故障(如网络故障等)、限流(当访问量到达一定高度后续请求进行降级)。
人工降级:秒杀、双11大促等,手动对一些服务进行降级,保证系统的稳定运行。
服务降级要考虑的问题:
1.哪些服务可以降级:核心服务、非核心服务
2.哪些服务可以支持降级,制定降级策略
3.业务放通场景,策略

Hystrix:这个类提供了强大的服务降级功能
1.在通过第三方客户端访问(通常是通过网络)依赖服务出现高延迟或者失败时,为系统提供保护和控制。
2.在分布式系统中防止联级失败
3.快速失败(Fail fast)同时能快速恢复
4.提供失败回退(Fallback)和优雅的服务降级机制
5.提供近实时的监控、报警和运维控制手段
java内存模型的同步操作与规则
Lock,Unlock,Read,Load,Use,Assign,Store,Write


五、数据库的分库分表
Java-Base64算法_创新_防止表单重复提交 JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之JAVA正则表达式 手写springMVC框架 老司机带你透析springMVC内部实现方式 打造高效代码结构(java性能优化) 新版本通俗易懂_观察者模式递进时讲解 ibatis连接数据库 高并发之单(多)生产者消费者线程 高并发复用数据库链接技术详解之数据库连接池 类加载器的高级特性(自定义类加器实现加密解密) iBATIS开源主流框架(实现半自动化hibernate) 企业实用技能之详解(眼睛横纹模式验证码防止恶意登陆) 动态页面的静态化处理 图片上传技术 在springMVC中实现原始的Excel文件下载方式 企业级分布式缓存技术之(redis详解) 企业高并发基石(Tomcat服务器性能优化) spring事务处理 课程文档 高并发之基础数据MySql调优 mongodb 三级联动课程资料 应用架构之灵魂设计模式 应用架构之魂设计模式实战演练应用架构之魂设计模式实战演练 揭开springAOP神秘面纱(动态代理) Mysql性能优化之索引优化 写实现Tomcat服务器 移动后台端框架设计 公司级框架原理解析 解密公司内部框架开发(打造属于自己的专属框架) 手写Tomca之深度解析动态资源请求原理 深度解析springMVC实现原理(手写springMVC框架) Java验证码 正则黑名单爬虫系统 深入数据库连接池内部运转原理 分布式服务下的交易一致 企业必备技能之面向服务编程Web-Service详解 分布式服务下的交易一致性原理及解决 分布式服务框架(dubbo+zookpeer) WEB高级前后台分离思维-懒加载无限级树形菜单 动态页面的静态化处理 大并发展示优化,动态页面的静态化 深入理解JDK动态代理本质 企业级高并发缓存解决方案 性能优化之Oracle语句优化雾区 前后台数据验证架构源码级解析 session跨域共享 JAVANIO原理详解 高并发数据库(Mysql数据库性能优化) 软件质量管控 企业常用框架springMVC基于注解+xml配置方式实现链接 WEB服务器优化之Tomcat7性能调优 JVM概述 Java开发技术之(项目工程的日志管理) 数据库连接池原理详解 Java企业级框架之核心技术(反射) Java-Base64算法(创新_防止表单重复提交) 揭开springAOP神秘面纱之动态代理 网络爬虫之JAVA正则表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值