关于hanhunmall项目的一些思考

分布式锁的三种应用场景

  1. 与缓存配合 大量并发进来,通过分布式锁保证只有一个请求看到没有缓存后,拿到锁,访问数据库,将数据放到缓存中。其他并发请求拿到锁后,再次检查缓存是否存在,发现缓存已有数据,就算这些后来拿到锁的请求,也不会重复去访问数据库。保证了只有一个请求访问数据库,存放缓存数据。其他请求只是读取缓存里的数据。
    可看成一个分布式的双重检查锁。
  2. 幂等性的保证
  3. 定时任务的执行 通过分布式锁保证了业务代码相同的多台机器,只有一台机器执行了定时任务代码。避免生成重复数据。

属性分组与nacos的命名空间

spu有一个属性分组的概念。
每个spu(比如手机)下面有属于该spu的属性分组和属性。
属性分组的作用相当于给当前spu的属性做了分类,不同分类的属性互不干扰,互不可见。
属性分组的作用和nacos里配置管理的命名空间很像。我们通常为每个微服务指定一个命名空间,每个命名空间下的配置文件与其他命名空间的配置文件互不干涉。

高并发设计与高效算法的相通之处

  • 比如秒杀活动,只有100个商品,100个请求过来后,后面的上百万请求就不做数据处理,不去查数据库了,直接看作没抢到,返回“手慢了”。这样服务器实际上只“认真”处理了100个请求。通过辨识出“无效请求”,做出相应的简洁响应,提高了响应速度,也提高了服务器吞吐量。
  • 如果对秒杀活动所有涌进的请求,都看作有效请求,都去查数据库。无论服务器还是数据库,都扛不住。这样做就好比算法里常见的暴力破解。
  • 好的算法能抓住数据特点,做出匹配的操作。

通过设计冗余字段,减少查询关联表的数量,提升热点数据的访问速度和性能

单点登录

所有系统(不同一级域名)共用一个认证系统。
某个系统在认证系统登陆成功后,认证系统给浏览器发放一个共用的token(cookie)。后面其他系统的新请求再去访问认证系统的登陆接口,因为是同一个浏览器,认证中心检测到浏览器以前保存的token,将token同步给新请求。
好比开车去海淀区,给车子办了一个进京证,这样同一个车子也能去通州,朝阳了。车子对应浏览器,进京证对应token(cookie),需要认证的各个系统对应海淀,朝阳等区。
单点推出可以考虑删除浏览器的cookie?

熔断与降级

如果不做服务治理,某个服务被其他很多服务调用,如果这个服务机器宕掉或者响应过慢,就会拖慢其他所有调用服务,请求占用的线程资源也无法及时释放,出现服务器请求积压,最终服务器资源耗尽,所有相关服务崩溃。

  1. 熔断
    是为了避免提供方服务出现问题,影响调用方采取的一种策略。
    熔断策略是放置在调用方服务的。
    A服务通过feign调用B服务,为防止B服务挂掉后影响A响应速度。
    可通过Sentinel监控B服务。如果发现B服务异常,一段时间内不再请求B服务,直接返回降级数据(A服务的方法)。
    还有一种熔断触发策略,对B服务做降级策略,比如,发现B服务在1s内响应慢的次数超过5次,触发熔断策略,一段时间内不再访问B服务,直接返回降级数据。
  2. 降级
    往往是在高访问量时期,主动将某些服务暂时降级运行,释放服务器资源给其他服务,所采取的策略。比如在商城秒杀促销时期,将注册服务降级运行,如果注册请求过多,直接返回降级数据,提示用户过段时间再来注册。

编程设计中体现的思想

抽象思维

  1. 将搭载某个相同服务的多台机器注册到注册中心,这样多台机器对外提供的就是一个服务名。其他依赖方直接“享用”服务名字提供的服务了。通过引入注册中心,多台机器抽象成一个服务名字,实现了服务与服务之间的解耦。

抓大放小

  1. 直接熔断某些不稳定的服务,避免雪崩,不要让一颗老鼠屎坏了一锅汤。
  2. 支付的后续对账,通过最终一致性实现分布式事务。都是某方面做一小部分牺牲,换取其他方面更大的收益。

预判

  1. 比如秒杀活动,只有100个商品,100个请求过来后,后面的上百万请求就不做数据处理,不去查数据库了,直接看作没抢到,返回“手慢了”。这样服务器实际上只“认真”处理了100个请求。通过辨识出“无效请求”,做出相应的简洁响应,提高了响应速度,也提高了服务器吞吐量。
  • 如果对秒杀活动所有涌进的请求,都看作有效请求,都去查数据库。无论服务器还是数据库,都扛不住。这样做就好比算法里常见的暴力破解。
  1. 好的算法能抓住数据特点,预判某些范围的数据是无效的,可以提前打断遍历操作,过滤掉无效数据,这经常也是暴力算法与高效算法的重要区别。比如kmp算法,再回溯时,就预判了某些位置是不可能匹配成功的,所以直接跳过这些无效位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值