RPC框架架构设计
参考文献
RPC架构设计
RPC 框架包含三个最重要的组件,分别是客户端、服务端和注册中心。在一次 RPC 调用流程中,这三个组件是这样交互的:
服务端在启动后,会将它提供的服务列表发布到注册中心,客户端向注册中心订阅服务地址;
客户端会通过本地代理模块 Proxy 调用服务端,Proxy 模块收到负责将方法、参数等数据转化成网络字节流;
客户端从服务列表中选取其中一个的服务地址,并将数据通过网络发送给服务端;
服务端接收到数据后进行解码,得到请求信息;
服务端根据解码后的请求信息调用对应的服务,然后将调用结果返回给客户端
数据库表设计-SPU/SKU
参考文献
SKU 和 SPU 有什么区别?
名词解释
SPU
Standard Product Unit (标准产品单位);
商品信息聚合的最小单位,是一组可复用,易检索的标准化信息集合,该集合描述了一个产品的特性;
属性值,特性相同的商品就可以称为一个SPU;
SPU 是由品牌+型号+关键属性构成的
**信息聚合:**意味着有识别度的信息被用来作为不同SPU的区分点;不是所有属性,使用的属性值是能够有区分度的关键属性值;
**易检索:**信息聚合与易检索这两个说明,是通过关键属性+属性值的聚合来实现易检索这个目的;目的与使用场景相关联,并非万古不变;哪些属性和属性值会被选为区分SPU的关键属性是会随着场景变化的; 但对于一些场景,已经是共识;比如电商销售,对于标品基本都会选择品牌+型号+关键属性;这也是很多年前我所得到的解释。
标准化的信息集合:说明SPU的本质是信息集合,是一个抽象概念,并非是看得见的东西。比如格力空调 KFR-25GW/E;
SKU
Stock Keeping Unit 库存量单位;
库存进出计量的单位,可以是以件,盒,托盘等为单位;
物理上不可分割 ...
缓存设计
参考文献
300分钟吃透分布式缓存
七大缓存经典问题
缓存和数据库一致性问题,看这篇就够了
七大缓存经典问题
缓存穿透(一穿到底)
原因分析
缓存穿透存在的原因:用户请求的数据在缓存中和数据库中都不存在,不断发起这样的请求,给数据库带来巨大压力
如用户访问的是一个不存在的 key,查 DB 返回空(即一个 NULL),那就不会把这个空写回 cache.那以后不管查询多少次这个不存在的 key,都会Cache Miss,都会查询 DB.整个系统就会退化成一个 “前端 + DB“的系统,由于 DB 的吞吐只在Cache 的 1%~2% 以下,如果有特殊访客,大量访问这些不存在的 key,就会导致系统的性能严重退化,影响正常用户的访问.
缓存穿透会发⽣在什么时候呢?⼀般来说,有两种情况
业务层误操作:缓存中的数据和数据库中的数据被误删除了,所以缓存和数据库中都没有数据;
恶意攻击:专⻔访问数据库中没有的数据。
处理办法
验证拦截
接口层进行校验拦截,对于一些可预知的非法参数进行拦截,如查询ID字段,传入的值为负值的情况;
回种空值
查询这些不存在的数据时 ...