
获得徽章 1
- #青训营笔记创作活动#
1月20日,打卡day7
一般http协议是客户端发送请求,服务器响应,但是日常中很多广告用户并没有向服务器发送请求却收到了服务器的响应,怎么样才能在用户不做任何操作的情况下,网页能收到消息并发生变更?
其实是网页的前端代码里不断定时发HTTP请求到服务器,服务器收到请求后给客户端响应消息。
但这样,会有两个比较明显的问题
当你打开F12页面时,你会发现满屏的HTTP请求。虽然很小,但这其实也消耗带宽,同时也会增加下游服务器的负担。
最坏情况下,用户在扫码后,需要等个1~2s,正好才触发下一次http请求,然后才跳转页面,用户会感到明显的卡顿。
可以使用长轮询,将超时设置的很大,这个时间段内一旦服务器收到请求就会立刻返回客户端网页。
像这种,在用户不感知的情况下,服务器将数据推送给浏览器的技术,就是所谓的服务器推送技术,它还有个毫不沾边的英文名,comet技术。
而现在使用最广泛的HTTP1.1,也是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,这就是所谓的半双工。
也就是说,好好的全双工TCP,被HTTP用成了半双工。
这是由于HTTP协议设计之初,考虑的是看看网页文本的场景,能做到客户端发起请求再由服务器响应,就够了,根本就没考虑网页游戏这种,客户端和服务器之间都要互相主动发大量数据的场景。
所以为了更好的支持这样的场景,我们需要另外一个基于TCP的新协议,websocket协议。
websocket完美继承了TCP协议的全双工能力,并且还贴心的提供了解决粘包的方案。它适用于需要服务器和客户端(浏览器)频繁交互的大部分场景。比如网页/小程序游戏,网页聊天室,以及一些类似飞书这样的网页协同办公软件。
正因为各个浏览器都支持HTTP协议,所以websocket会先利用HTTP协议加上一些特殊的header头进行握手升级操作,升级成功后就跟HTTP没有任何关系了,之后就用websocket的数据格式进行收发数据。
展开评论点赞 - #青训营笔记创作活动#
1月18日 打卡day6
刚插上网线,电脑怎么知道自己的IP是什么?怎么就突然能上网了呢?插上网线之后,获得IP的方式主要有两种。
第一种是,自己手动在电脑里配。除了IP地址还需要配上子网掩码和路由器的地址
第二种获取IP的方式,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。
DHCP的工作原理也非常简单。
说白了,就是向某个管IP分配的服务器,也就是DHCP服务器,申请IP地址。其实一般家里用的路由器就自带这个功能。
展开评论点赞 - #青训营笔记创作活动#
1月17日 打卡day5
今日学习MYsql索引之道
了解了索引失效的几种场景,如索引建立不当,索引列上使用了函数,索引列上有计算操作,like左边包含%等等评论点赞 - #青训营笔记创作活动#
1月16日 打卡day4
作者从客户端转服务端,他认为难点在编程思维的转变,思考问题角度的转变。
客户端开发是以设计稿为标准进行开发的,俗称页面驱动设计,而服务端开发中,需要着重注意数据库表结构设计是否合理,这会直接影响后续开发业务逻辑是否顺利,这种开发思维俗称数据驱动设计。
接下来介绍了软件的架构模式,总的说经历了三个阶段的演进:从单机、集中式到分布式微服务架构。
接着介绍了DDD (Domain Driven Design):领域驱动设计。
DDD的核心思想就是避免业务逻辑的复杂性和技术实现的复杂性耦合在一起。
明确业务复杂性和技术复杂性的边界,隔离双方的复杂性,站在更高的角度实现解耦。
DDD最大的价值就是梳理业务需求,抽象出一个个“领域”,并形成各个领域之间的接口交互,方便团队协作,推进项目前进。
微服务有如下特点:单一职责,团队独立,技术独立,数据库分离,独立部署
展开评论点赞 - #青训营笔记创作活动#
1月15日 day3
每张表由于自身的字段不同、字段所占用的空间不同等原因,它们在最佳性能下可以存放的数据量也就不同。
还学习了聚簇索引和非聚簇索引:
主键索引也是聚簇索引,非主键索引都是非聚簇索引。除格式信息外,两种索引的非叶子节点都是只存索引数据的,比如索引为id,那非叶子节点就是存的id数据。
叶子节点的区别如下:
聚簇索引的叶子节点一般情况下存的是这条数据的所有字段信息。所以我们 select * from table where id = 1 的时候,都是要去叶子节点拿数据的。
非聚簇索引的叶子节点存的是这条数据所对应的主键和索引列信息。比如这条非聚簇索引是username,然后表的主键是id,那该非聚簇索引的叶子节点存的就是 username 和 id,而不存其他字段。 相当于是先从非聚簇索引查到主键的值,再根据主键索引去查数据内容,一般情况下要查两次(除非索引覆盖),这也称之为 回表 ,就有点类似于存了个指针,指向了数据存放的真实地址。
此外还学习了B+树的查询,InnoDB节点的存储内容,3层B+树的计算
展开评论点赞 - #青训营笔记创作活动#
1月13日 打卡day1
今日学习了什么是限流,以及限流的作用范围和常用的限流方法。
计数器是一种最简单限流算法,其原理就是:在一段时间间隔内,对请求进行计数,与阀值进行比较判断是否需要限流,一旦到了时间临界点,将计数器清零。
滑动窗口是针对计数器存在的临界点缺陷,滑动窗口是一种流量控制技术,这个词出现在 TCP 协议中。滑动窗口把固定时间片进行划分,并且随着时间的流逝,进行移动,固定数量的可以移动的格子,进行计数并判断阀值。
漏桶算法(Leaky Bucket),原理就是一个固定容量的漏桶,按照固定速率流出水滴。我们无法预知流进水桶的水流大小,但可以限制流出水桶的水流速度,进而达到流量整形和流量控制的目的。
令牌桶算法(Token Bucket)是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。
展开评论点赞