获得徽章 1
#青训营笔记创作活动# 2月7日 打卡day8
UDP就一定比TCP快吗?
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP快。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。
UDP就一定比TCP快吗?
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP快。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。
展开
评论
点赞
#青训营笔记创作活动# 2月6日 打卡day7
Kafka基本知识
整个 Kafka 体系结构中引入了以下 3 个术语。
Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到 Kafka 中。
Consumer:消费者,也就是接收消息的一方。消费者连接到 Kafka 上并接收消息,进 而进行相应的业务逻辑处理。
Broker:服务代理节点。对于 Kafka 而言,Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,前提是这台服务器上只部署了一个 Kafka 实例。一个或多个 Broker 组成了一个 Kafka 集群。一般而言, 我们更习惯使用首字母小写的 broker 来表示服务代理节点。
Kafka基本知识
整个 Kafka 体系结构中引入了以下 3 个术语。
Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到 Kafka 中。
Consumer:消费者,也就是接收消息的一方。消费者连接到 Kafka 上并接收消息,进 而进行相应的业务逻辑处理。
Broker:服务代理节点。对于 Kafka 而言,Broker 可以简单地看作一个独立的 Kafka 服务节点或 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,前提是这台服务器上只部署了一个 Kafka 实例。一个或多个 Broker 组成了一个 Kafka 集群。一般而言, 我们更习惯使用首字母小写的 broker 来表示服务代理节点。
展开
评论
点赞
#青训营笔记创作活动# 2月5日 打卡day6
websocket协议:TCP协议本身是全双工的,但我们最常用的HTTP1.1,虽然是基于TCP的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的websocket协议。
在HTTP1.1里。只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。
对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以考虑使用websocket协议。
websocket和socket几乎没有任何关系,只是叫法相似。
正因为各个浏览器都支持HTTP协议,所以websocket会先利用HTTP协议加上一些特殊的header头进行握手升级操作,升级成功后就跟HTTP没有任何关系了,之后就用websocket的数据格式进行收发数据。
websocket协议:TCP协议本身是全双工的,但我们最常用的HTTP1.1,虽然是基于TCP的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的websocket协议。
在HTTP1.1里。只要客户端不问,服务端就不答。基于这样的特点,对于登录页面这样的简单场景,可以使用定时轮询或者长轮询的方式实现服务器推送(comet)的效果。
对于客户端和服务端之间需要频繁交互的复杂场景,比如网页游戏,都可以考虑使用websocket协议。
websocket和socket几乎没有任何关系,只是叫法相似。
正因为各个浏览器都支持HTTP协议,所以websocket会先利用HTTP协议加上一些特殊的header头进行握手升级操作,升级成功后就跟HTTP没有任何关系了,之后就用websocket的数据格式进行收发数据。
展开
评论
点赞
#青训营笔记创作活动#
2月4日 打卡day5 DHCP协议
电脑插上网线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。
DHCP分为四个阶段,分别是 Discover,Offer, Request和ACK。如果曾经连过这个网,机器会记录你上次使用的IP,再次连接时优先使用原来的那个IP,因此只需要经历第三第四阶段。
DHCP是应用层协议,考虑到需要支持广播功能,底层使用的是UDP协议,而不是TCP协议。
DHCP分配下来的IP是有可能跟某台手动配置的IP地址重复的。
DHCP得到IP之后还会发3次无偿ARP通告,在确认没有冲突后开始使用这个IP。
juejin.cn
2月4日 打卡day5 DHCP协议
电脑插上网线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。
DHCP分为四个阶段,分别是 Discover,Offer, Request和ACK。如果曾经连过这个网,机器会记录你上次使用的IP,再次连接时优先使用原来的那个IP,因此只需要经历第三第四阶段。
DHCP是应用层协议,考虑到需要支持广播功能,底层使用的是UDP协议,而不是TCP协议。
DHCP分配下来的IP是有可能跟某台手动配置的IP地址重复的。
DHCP得到IP之后还会发3次无偿ARP通告,在确认没有冲突后开始使用这个IP。
展开
评论
点赞
#青训营笔记创作活动#
2月3日 打卡day4 MySQl 索引之道
索引失效的几种场景:
索引建立不当或使用顺序未遵循最左匹配原则
索引列上使用了函数
索引列上有计算操作
Like左边包含%
使用OR关键字
in使用不当
not in和not exists
order By使用不当
2月3日 打卡day4 MySQl 索引之道
索引失效的几种场景:
索引建立不当或使用顺序未遵循最左匹配原则
索引列上使用了函数
索引列上有计算操作
Like左边包含%
使用OR关键字
in使用不当
not in和not exists
order By使用不当
展开
评论
点赞
#青训营笔记创作活动#
2月2日 打卡day3
MySQL InnoDB 节点的储存内容
页:InnoDB存储引擎管理数据库的最小磁盘单位,常说每个节点16KB,其实就是指每页的大小为16KB。这16KB的空间,里面需要存储 页格式 信息和 行格式 信息,其中行格式信息当中又包含一些元数据和用户数据。所以在计算的时候,要把这些数据的都计算在内。
行格式:MySQL5.6的默认行格式为COMPACT(紧凑),5.7及以后的默认行格式为DYNAMIC(动态),不同的行格式存储的方式也是有区别的,还有其他的两种行格式,本文后续的内容主要是基于DYNAMIC(动态)进行讲解的。
2月2日 打卡day3
MySQL InnoDB 节点的储存内容
页:InnoDB存储引擎管理数据库的最小磁盘单位,常说每个节点16KB,其实就是指每页的大小为16KB。这16KB的空间,里面需要存储 页格式 信息和 行格式 信息,其中行格式信息当中又包含一些元数据和用户数据。所以在计算的时候,要把这些数据的都计算在内。
行格式:MySQL5.6的默认行格式为COMPACT(紧凑),5.7及以后的默认行格式为DYNAMIC(动态),不同的行格式存储的方式也是有区别的,还有其他的两种行格式,本文后续的内容主要是基于DYNAMIC(动态)进行讲解的。
展开
评论
点赞
#青训营笔记创作活动#
2月1日 打卡day2
学习了解了一些IDEA插件的基本介绍和使用方法
Lombok:Lombok是一款Java代码功能增强库,通过Lombok的注解,不用再写getter、setter、equals等方法,Lombok将在编译时自动生成
Docker:IDEA官方提供的Docker插件,已内置,支持远程Docker环境的镜像和容器管理,同时支持使用Docker Compose实现批量部署。
2月1日 打卡day2
学习了解了一些IDEA插件的基本介绍和使用方法
Lombok:Lombok是一款Java代码功能增强库,通过Lombok的注解,不用再写getter、setter、equals等方法,Lombok将在编译时自动生成
Docker:IDEA官方提供的Docker插件,已内置,支持远程Docker环境的镜像和容器管理,同时支持使用Docker Compose实现批量部署。
展开
评论
点赞
#青训营笔记创作活动#
1月31日 打卡day1
限流方式:
计数器:计数器是一种最简单限流算法,其原理就是:在一段时间间隔内,对请求进行计数,与阀值进行比较判断是否需要限流,一旦到了时间临界点,将计数器清零。
滑动窗口:滑动窗口把固定时间片进行划分,并且随着时间的流逝,进行移动,固定数量的可以移动的格子,进行计数并判断阀值。
漏桶限流:原理就是一个固定容量的漏桶,按照固定速率流出水滴。
Redis + Lua 分布式限流:分布式限流最关键的是要将限流服务做成原子化,我们可以借助 Redis 的计数器,Lua 执行的原子性,进行分布式限流
1月31日 打卡day1
限流方式:
计数器:计数器是一种最简单限流算法,其原理就是:在一段时间间隔内,对请求进行计数,与阀值进行比较判断是否需要限流,一旦到了时间临界点,将计数器清零。
滑动窗口:滑动窗口把固定时间片进行划分,并且随着时间的流逝,进行移动,固定数量的可以移动的格子,进行计数并判断阀值。
漏桶限流:原理就是一个固定容量的漏桶,按照固定速率流出水滴。
Redis + Lua 分布式限流:分布式限流最关键的是要将限流服务做成原子化,我们可以借助 Redis 的计数器,Lua 执行的原子性,进行分布式限流
展开
评论
点赞
#青训营笔记创作活动#
1月31日 打卡day1
限流方式:
计数器:计数器是一种最简单限流算法,其原理就是:在一段时间间隔内,对请求进行计数,与阀值进行比较判断是否需要限流,一旦到了时间临界点,将计数器清零。
滑动窗口:滑动窗口把固定时间片进行划分,并且随着时间的流逝,进行移动,固定数量的可以移动的格子,进行计数并判断阀值。
漏桶限流:原理就是一个固定容量的漏桶,按照固定速率流出水滴。
Redis + Lua 分布式限流:分布式限流最关键的是要将限流服务做成原子化,我们可以借助 Redis 的计数器,Lua 执行的原子性,进行分布式限流
1月31日 打卡day1
限流方式:
计数器:计数器是一种最简单限流算法,其原理就是:在一段时间间隔内,对请求进行计数,与阀值进行比较判断是否需要限流,一旦到了时间临界点,将计数器清零。
滑动窗口:滑动窗口把固定时间片进行划分,并且随着时间的流逝,进行移动,固定数量的可以移动的格子,进行计数并判断阀值。
漏桶限流:原理就是一个固定容量的漏桶,按照固定速率流出水滴。
Redis + Lua 分布式限流:分布式限流最关键的是要将限流服务做成原子化,我们可以借助 Redis 的计数器,Lua 执行的原子性,进行分布式限流
展开
评论
点赞
#青训营笔记创作活动# day9 分布式ID
需要满足那些条件?
全局唯一:必须保证ID是全局性唯一的,基本要求
高性能:高可用低延时,ID生成响应要块,否则反倒会成为业务瓶颈
高可用:无限接近于100%的可用性
好接入:要秉着拿来即用的设计原则,在系统设计和实现上要尽可能的简单
趋势递增:最好趋势递增,这个要求就得看具体业务场景了,一般不严格要求
需要满足那些条件?
全局唯一:必须保证ID是全局性唯一的,基本要求
高性能:高可用低延时,ID生成响应要块,否则反倒会成为业务瓶颈
高可用:无限接近于100%的可用性
好接入:要秉着拿来即用的设计原则,在系统设计和实现上要尽可能的简单
趋势递增:最好趋势递增,这个要求就得看具体业务场景了,一般不严格要求
展开
评论
点赞
#青训营笔记创作活动# day8 redis优点:
完全基于内存操作,性能极高,读写速度快,Redis 能够支持超过 100KB/s 的读写速率
支持高并发,支持10万级别的并发读写
支持主从模式,支持读写分离与分布式
具有丰富的数据类型与丰富的特性
支持持久化操作,不会丢失数据
juejin.cn
完全基于内存操作,性能极高,读写速度快,Redis 能够支持超过 100KB/s 的读写速率
支持高并发,支持10万级别的并发读写
支持主从模式,支持读写分离与分布式
具有丰富的数据类型与丰富的特性
支持持久化操作,不会丢失数据
展开
评论
点赞
#青训营笔记创作活动# day7 实现秒杀系统
在高并发中我们往往会使用限流减轻服务器的压力。常用的是Redis方式限流,Redis限流的方式有许多种,常用的方式有三种。基于Redis的setnx的操作,基于Redis的数据结构zset,基于Redis的令牌桶算法
在高并发中我们往往会使用限流减轻服务器的压力。常用的是Redis方式限流,Redis限流的方式有许多种,常用的方式有三种。基于Redis的setnx的操作,基于Redis的数据结构zset,基于Redis的令牌桶算法
评论
点赞