架构小结
分布式服务:
1、dns轮询:一个域名配置多个ip,通过轮询的方式进行请求(无健康检查、分配不均、会话保持)
2、cdn加速:将系统中的静态资源缓存在cdn节点上,用户请求不回直接落在企业的数据中心,而是请求离用户最近的服务商。
3、业务系统垂直划分:根据不同的业务,拆分为不同的子业务来部署。
4、服务化:垂直化拆分的过程中,不同的子业务可能会有共享的服务,共享的业务会被重复建设,重复建设导致的问题:(1)数据库等底层连接资源横向扩展节点受到限制(2)多个团队维护相同的模块,容易出问题。所以就需要将共享的业务提出来,进行服务化,让业务能共用。
5、服务化-RPC:服务化是一个抽象的概念,而RPC是实现服务调用的关键,RPC调用本质上屏蔽了复杂的底层处理细节,让服务调用方甚至能向调用本地方法一样调用服务提供方的服务。
6、服务治理
7、分布式调用跟踪系统:dubbo实现filter接口
限流消峰:
1、5种常见提高系统可靠性方案:扩容、缓存、限流、服务降级、动静分离
2、限流算法:令牌桶算法、漏桶算法、计数器算法
3、消峰:基于时间分片的消峰方案(活动分时段/答验证题)
4、异步调用实现解藕/流量消峰
5、JMS消失模式:点对点、发布订阅模式
6、activemq:
jsmprovider:消息路由消息传递
provider
consumer
7、rocketmq:
nameserver :注册中心,负责客户端寻址工作
broker :消息服务端,提供消息管理、存储、分发等功能
provider
consumer
broker部署方式:单master、多master、多master/slave异步复制、多master/slave同步双写
分布式配置管理:
1、zk:配置管理、分布式协调/调用、分布式锁、
2、zk的节点:持久节点、瞬时节点
3、通过watcher监听节点值的变化
4、通过从配置中心获取spring中的bean实现bean的动态注册
5、
大数据场景热点数据的读写优化
读:
1、redis多读多写方案:
将热销的商品key,根据计算,落到所有的node节点上,实现数据坑余,客户端根据加工的key,进行轮训或者其他查询操作
缺:多写时候缓存一致性(zk配置商品key)、扩容时node所持槽的变化
2、localcache结合redis集群实现多集cache方案
只缓存热点数据
对不不经常变的设置较长的定时轮询
对于库存之类,设置频繁轮询从分布式缓存中获取,允许一部分脏读,下单时再提示库存不足
3、实时热点自动发布
日志监控分析等
写:
innodb的行锁会导致吞吐量下降,采用数据库行锁,防止超售方案:1、添加version版本2、判断扣除的库存是否小于剩余库存
redis中扣除库存:悲观锁
优化:对库存扣除进行收集,到达指定阀值再获取锁合并处理
采用redis中的watcher命令实现优化,watcher进行key标记后,事务提交的时候key值发生变化就回滚
抢购环节:单机限流,10秒钟最多1000个请求,超过则直接返回失败
分库分表