
三高之路
文章平均质量分 77
国服冰
这个作者很懒,什么都没留下…
展开
-
系统怎样做到高可用?
系统怎样做到高可用?可用性的度量高可用系统设计的思路系统设计系统运维灰度发布故障演练总结高可用性(High Availability,HA)是你在系统设计时经常会听到的一个名词,它指的是系统具备较高的无故障运行的能力。通常来讲,一个高并发大流量的系统,系统出现故障比系统性能低更损伤用户的使用体验。想象一下,一个日活用户过百万的系统,一分钟的故障可能会影响到上千的用户。而且随着系统日活的增加,一分钟的故障时间影响到的用户数也随之增加,系统对于可用性的要求也会更高。所以今天,我们就研究一下在高并发下,我们如原创 2021-10-27 21:27:14 · 979 阅读 · 0 评论 -
【Java并发编程系列】原子类:无锁的工具的典范
原子类不可分割一个操作不可中断,即使在多线程下也保证不可中断性有什么作用?原子类的作用和锁类似,目的都是为了保证在多线程并发条件下的安全问题,但是原子类类比锁来说有两个优势锁的粒度更细,原子类可以将锁的粒度细化到变量级别, 但是通常锁的粒度都是好几行代码效率更高,但是在线程高度竞争的情况下效率会降低...原创 2021-10-06 00:14:33 · 321 阅读 · 0 评论 -
【Java并发编程系列】高并发工具类之线程协作工具类
一、CountDownLatchCountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已完成任务,然后在闭锁上等待的线程就可以恢复执行任务。现在有这样一个运动会场景,总共有5名运动员,1名裁判,比赛开始前,所有运动员需等待裁判打出发令枪,然后开始跑,等所有运动员跑完后,裁判需要号原创 2021-09-25 23:50:37 · 240 阅读 · 0 评论 -
【Java并发编程系列】高并发工具类之常见并发集合
一、常见并发集合工具CopyOnWriteArrayListCopyOnWriteArraySetConcurrentHashMap二、ConcurrentHashMap分析三、CopyOnWriteArrayList分析诞生原因主要是为了替代Vector和Synchronized(ArrayList),Vector和Synchronized主要是在方法上加锁,并且锁的粒度太大,而且都是共用一把锁,从而并发效率很低。适用场景主要适用于读多写少的情况读写规则在加读写锁的情况下读是共享,写原创 2021-09-23 22:22:18 · 391 阅读 · 0 评论 -
【限流保护】Springboot接口限流
高并发保护常用方案缓存:缓存的目的是提升系统访问速度和增大系统处理容量降级:降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理为什么需要限流在一个高并发系统中对流量的把控是非常重要的,当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用,不处理的话甚至会造成整个应原创 2021-03-24 14:43:37 · 982 阅读 · 0 评论 -
【链接暴露】链接地址隐藏
为什么要链接隐藏,如何隐藏为了避免F12或着抓包获取到秒杀链接然后通过不正当手段自动化秒杀,下面我们将接口路径进行隐藏,只有当点击秒杀按钮时才能成功验证。用户在下单前,先发出一个生成Md5 hash值的请求,根据抢购商品id和用户Id用Md5加密算法和随机盐生成一个hash值存到redis中,在redis中设置过期时间,等用户真正下单时发起的下单请求(秒杀请求)携带着Md5的hash值和redis中已经存在的hash值作比较是否相等,就能判断此请求是根据脚本发起的请求(没有点击抢购秒杀按钮)还是用户在ap原创 2021-03-22 17:41:13 · 624 阅读 · 0 评论 -
【消息削峰】订单异步处理
为何需要异步下单在秒杀系统用户进行抢购的过程中,由于在同一时间会有大量请求涌入服务器,如果每个请求都立即访问数据库进行扣减库存+写入订单的操作,对数据库的压力是巨大的。如何减轻数据库的压力呢,我们将每一条秒杀的请求存入消息队列(例如RabbitMQ)中,放入消息队列后,给用户返回类似“抢购请求发送成功”的结果。而在消息队列中,我们将收到的下订单请求一个个的写入数据库中,比起多线程同步修改数据库的操作,大大缓解了数据库的连接压力,最主要的好处就表现在数据库连接的减少:同步方式:大量请求快速占满数据库框原创 2021-03-22 13:11:11 · 809 阅读 · 0 评论 -
基于Redis+Cookie实现Session共享
分布式项目中要实现单点登录(SSO - Single Sign On):对于同一个客户端(例如 Chrome 浏览器),只要登录了一个子站(例如 a.com),则所有子站(b.com、c.com)都认为已经登录。比如用户在登录淘宝后,跳转到天猫时就已经登录了。通过redis缓存和cookie实现单点登录:登录接口逻辑处理: @ResponseBody @RequestMapping("/dologin") public Result<String> doLogin原创 2021-03-15 12:51:45 · 407 阅读 · 0 评论 -
【优化】Redis缓存优化,双MD5加密,页面静态化
这里写目录标题一、Redis缓存整合二、封装MD5三、两次MD5进行登录加密四、共享Session一、Redis缓存整合在高并发的环境下数据库成为系统的短板,所以引入缓存,作为数据库前的一道防线,避免所有的请求直接走数据库,降低数据库的压力,数据库层只承担“能力范围内”的访问请求。由于一个项目项目中有不同模块的功能,所以在Redis封装时需要创建一个业务前缀拼接在Key前面前缀接口:/** * Key的前缀接口 * 用来区分各个模块 */public interface KeyPrefix原创 2021-03-14 22:39:38 · 487 阅读 · 0 评论