《亿级流量网站架构核心技术》读后感

大流量缓冲

在电商大促时,系统流量会高于正常流量的几倍甚至几十倍,解决方式之一,是牺牲强一致性,保证最终一致性,如:直接在Redis中扣减,然后几率下扣减日志,然后通过worker同步到DB

 

在使用了消息异步机制的场景下,可能存在消息的丢失,需要考虑进行数据校对和修正来保证数据的一致性和完整性。可以通过worker定期去扫描原始表,通过对业务数据进行校对,有问题的要进行补偿,扫描周期根据实际场景进行定义。

业务涉及原则

防重设计:比如,结算页考虑重复提交,还有下单扣减库存是需房子重复扣减库存。

解决方案可以考虑防重key、防重表。因为有的电商同事支持微信、支付宝支付,因为渠道不一样,是无法防止重复支付的。可以在系统设计时,将支付的每笔情况记录,然后退款。

幂等性设计:现有消息中间件基本不保证发生重复消息的消费。因此需要业务系统在消费时进行幂等处理。还有在第三方支付时,第三方支付会进行一步回调,也要考虑好回调的幂等处理。

等等其他。

 

 

对于读热点比这一般用多级缓存搞定。对于写热点我们一般通过缓存+队列模式削峰。

 

缓存的目的是提高系统访问速度和增大系统处理能力,是抗高并发流量的银弹。而降级是当服务出现问题或者影响到核心流程的性能,需要暂时屏蔽掉,带高峰过去或者问题解决后再打开的场景。有些场景如稀缺资源(秒杀、抢购)写服务(;评论、下单)、频繁的复杂查询(评论的最后几页)等。因此需要限流手段,限制这种场景下的并发/请求量。

 

限流算法有:令牌同、漏桶、计数器。

 

如果应用不设置超时,可能会导致请求 响应慢,甚至造成应用雪崩。读服务适合重试,但写服务大多不能重试(如写订单,如果写服务是幂等性的,则允许重试)次数太多。

 

 

多级缓存

指在整个系统框架的不同系统层级进行数据缓存,以提升访问效率。

value缓存,尤其是使用Redis(单线程)时。遇到这种情况可以考虑使用多线程实现的缓存memcached,来缓存大value;或者对value进行压缩;或者将value拆分为多个小value。客户端在进行查询、聚合。

 

线程池的目的类似与数据库连接池,通过减少频繁创建和销毁线程来降低性能损耗。

每个线程都需要一个内存栈,用于存储如局部变量、操作栈等信息,可以通过-Xss参数来调整每个线程大小(64位系统默认1024KB)。线程池一般配合队列一起工作,使用线程池可以限制并发处理的线程数。然后设置队列的大小,当任务超过队列大小时,通过一定的拒绝策略来处理,可保护系统免受大流量而导致崩溃。

 

异步并发实战

javaTomcat给每一个请求分配一个线程,并一直占阻塞用次线程,直到返回数据。

 

我们希望在调用依赖的服务响应比较慢时,应该让出线程和cpu来处理下一个请求,当依赖的服务器返回后在分配相应的线程继续处理。解决方案:异步/协程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值