获得徽章 1
- 1月19日 打卡day8
#青训营笔记创作活动#
比如我们有这样一个接口,查询支付订单的接口,调用该接口时出于安全性,需要绑定一个签名,签名由订单的场地id+时间段等信息,末尾再加上通讯双方约定好的私钥 secret ,用md5加密生成sign,作为接口的签名传递到服务端去校验
服务端用同样的信息和规则,结合 secret ,用md5加密后,判断两个签名是否一致
虽然这样解决了接口信息篡改的问题,黑客无法自行伪造签名来发请求,但如果黑客抓取到我们的一个合法请求后,其实是可以一直用这个合法请求,去疯狂调用我们接口的~
展开评论点赞 - #青训营笔记创作活动#
1月18日 打卡day7
如果有大量的请求传入的商品id,在缓存中和数据库中都不存在,这些请求不就每次都会穿透过缓存,而直接访问数据库了。
由于前面已经加了锁,所以即使这里的并发量很大,也不会导致数据库直接挂掉。
但很显然这些请求的处理性能并不好,有没有更好的解决方案?
这时可以想到布隆过滤器。展开评论点赞 - #青训营笔记创作活动#
1月17日 打卡day6
2.3、MySQL获取锁的过程
当一个事务需要获取某个行锁时,首先会看一下内存中是否存在这条数据的锁结构,如果存在则生成一个锁结构,将其is_waiting对应的比特位改为1,表示目前事务在阻塞等待获取该锁,当其他事务释放锁后,会唤醒当前阻塞的事务,然后会将其is_waiting改为0,接着执行SQL。
实际上会发现这个过程并不复杂,唯一有些难理解的点就在于:事务获取锁时,是如何在内存中,判断是否已经存在相同记录的锁结构呢?还记得锁结构中会记录的一个信息嘛?也就是「锁粒度信息」,如果是表锁,会记录表信息,如果是行锁,会记录表空间、页号等信息。在事务获取锁时,就是去看内存中,已存在的锁结构的这个信息,来判断是否存在其他事务获取了锁。展开评论点赞 - 1月16日 打卡day5
Hertz 是一个超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点。
Hertz 默认使用自研的高性能网络库 Netpoll,在一些特殊场景中,相较于 go net,Hertz 在 QPS、时延上均具有一定优势。 #青训营笔记创作活动#展开评论点赞 - #青训营笔记创作活动#
1月15日 打卡day4
先删除token,还是先执行业务?
先删除token,若后续执行业务期间失败了,则直接第二次点击按钮,调用支付接口时,由于没有刷新页面,前端还存储了刚才那份token,由于后台没有这个token,就会一直失败
所以此时需要:客户端主动刷新页面,删除掉前端这个token,重新完成提交这个过程,重新调用获取token接口,再走一遍流程
先执行业务,再删除token,但此时若没有加锁的话,其他线程调用接口时,由于A线程还没执行完业务,redis里边的token还未删掉,那么B线程调用支付接口时,也会查到还有token,也能够去执行业务,这样就破坏我们的幂等性了。
所以如果采用这种策略的话,需要加锁,保证A线程执行完业务,删掉token之后,其他线程才能调用这个支付接口。
如此来看,还是第一种方式更优,业务执行出错的话,前端重新刷新页面也能再次成功。
展开评论点赞 - #青训营笔记创作活动#
1月14日 打开day3
整个 Kafka 体系结构中引入了以下 3 个术语。
Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到 Kafka 中。
Consumer:消费者,也就是接收消息的一方。消费者连接到 Kafka 上并接收消息,进 而进行相应的业务逻辑处理。
Broker:服务代理节点。对于 Kafka 而言,Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,前提是这台服务器上只部署了一个 Kafka 实例。一个或多个 Broker 组成了一个 Kafka 集群。一般而言, 我们更习惯使用首字母小写的 broker 来表示服务代理节点。
展开评论点赞 - #青训营笔记创作活动#
1月13日 打卡day2
分布式微服务架构,微服务架构可以实现业务和应用之间的解耦。解决单体应用扩展性差、弹性伸缩能力不足的问题,非常适合在云计算环境下的部署和运营。近期在使用go-micro微服务框架开发项目,对微服务架构有了新的认识。
分布式微服务架构是主流趋势,越来越多的企业采用分布式微服务架构进行业务转型。展开评论点赞 - #青训营笔记创作活动#
1月12日,打卡day1
单个节点计算
索引页就是存索引的节点,也就是非叶子节点。
每一条索引记录当中都包含了当前索引的值 、 一个 6字节 的指针信息 、一个 5 字节的行标头,用来指向下一层数据页的指针。
前两层非叶子节点计算
在 B+ 树当中,当一个节点索引记录为 NNN 条时,它就会有 NNN 个子节点。由于我们 3 层B+树的前两层都是索引记录,第一层根节点有 NNN 条索引记录,那第二层就会有 NNN 个节点,每个节点数据类型与根节点一致,仍然可以再存 NNN 条记录,第三层的节点个数就会等于 N2N^2N2。展开评论点赞