1 常见英文简写含义
1.1 网络
- RT
- Response Time 指的是一次请求开始到接收到服务器响应为止所消耗的时间
- RRT
- Round-trip time 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。
- RTT=传播时延(往返哒)+排队时延(路由器和交换机的)+数据处理时延(应用程序的)。
- RTT是客户到服务器往返所花时间(round-trip time,简称RTT),TCP含有动态估算RTT的算法。TCP还持续估算一个给定连接的RTT,这是因为RTT受网络传输拥塞程序的变化而变化。
- MSL
- MSL 是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文 (segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文;
- IP头中有一个TTL域,TTL是 time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经 过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。
- TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。
- 2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握 手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个 ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态 时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置 SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。
- 水平触发、边缘触发
在IO多路复用情况下
- 水平触发
- 只要文件描述符关联的读内核缓冲区非空,有数据可以读取,就一直发出可读信号进行通知
- 当文件描述符关联的内核写缓冲区不满,有空间可以写入,就一直发出可写信号进行通知
- 边缘触发
- 当文件描述符关联的读内核缓冲区由空转化为非空的时候,则发出可读信号进行通知
- 当文件描述符关联的内核写缓冲区由满转化为不满的时候,则发出可写信号进行通知
- 水平触发是只要读缓冲区有数据,就会一直触发可读信号,而边缘触发仅仅在空变为非空的时候通知一次,举个例子:
- 读缓冲区刚开始是空的
- 读缓冲区写入2KB数据
- 水平触发和边缘触发模式此时都会发出可读信号
- 收到信号通知后,读取了1kb的数据,读缓冲区还剩余1KB数据
- 水平触发会再次进行通知,而边缘触发不会再进行通知
- 更多资料,详见https://www.jianshu.com/p/dfd940e7fca2
- 惊群效应
- 简单来说就是多个进程或者线程在等待同一个事件,当事件发生时,所有线程和进程都会被内核唤醒。唤醒后通常只有一个进程获得了该事件并进行处理,其他进程发现获取事件失败后又继续进入了等待状态,在一定程度上降低了系统性能。
- Neety的EventLoopGroup中的Boos只能有一个线程,就是为了避免惊群效应。
- 拥塞控制
- MTU
- 轻量级的通信机制
- 采用Socket通信:TCP/UDP/KQUIC协议
- 传输的数据不与某个编程语言或者平台进行绑定,是跨语言的,平台无关的,例如JSON格式的数据。
1.2 职务
- PM – 项目经理( Project Manager )
- RD – Research and Development engineer,研发工程师
- FE – 前端开发工程师(Front-End);前端开发(Front-End Development
- UE – 用户体验师(User Experience,简称UX或 UE)
- UI – 用户界面设计师(User Interface)
- QA – 测试(QUALITY ASSURANCE,中文意思是“质量保证”)
- OP – 运维(Operations)
- DBA – 数据库管理员(Database Administrator,简称DBA)
- PO – 产品或业务负责人的意思,全称是Product Owner,即熟悉该产品所有业务相关的逻辑、流程、设置等方面事宜的人员,一般可由项目经理担任,也可由熟悉业务的开发人员担任。
-
2 认知
传统单体项目或者分模块项目与微服务
分模块可以分块打包分块部署
微服务也可以分开打包部署
最大区别:
微服务各个模块可以采用不同的技术栈和语言,相互之间只需要依靠轻量级的通信机制(HTTP+JSON)调用即可,极大的提升的各个服务的灵活性。2.1 微服务的特性
微服务的特性
- 不主动
- 不拒绝
- 不负责
- 接口的幂等性
- 工作中遇到这种情况,a服务需要取消订单,但是需要调用b服务的第三方取消订单接口。所以这就需要a服务先调用b服务,如果成功,才修改自己本地的订单状态为取消。如果b服务取消成功,但是a服务在更新本地的订单状态出现异常了,这样更新操作失败。所以a服务下次可能还会继续调用b服务来取消这个相同的订单,这就需要b服务的取消订单接口保证幂等性,这样能确保a服务对该订单的任何时刻的取消操作都成功,从而正确地更新a服务本地的订单状态
- 微服务中的熔断、降级的作用
- 个人觉得是为了提升单个微服务的内聚性,降低对依的赖服务的耦合性
- 当对依赖的微服务的调用出现异常情况,如果没有降级、熔断可能会导致当前的微服务发生异常,而导致请求失败,加上降级熔断操作后可以保证当前的微服务的响应不会出错,只是与依赖的微服务相关的数据出现部分异常,限制事故的范围。
- 背压
- 背压(back pressure),也叫“反压”,指的是下游系统处理过慢,导致上游系统阻塞的现象。
线程池的拒绝策略:ThreadPoolExecutor.CallerRunsPolicy(调用者处理)就是背压的例子。
- 常见的控制策略控制(Control)。
- 降低生产速率,从源头减少流量
- 缓冲(Buffer)。管道将多余的流量存储起来
- 丢弃(Drop)。消费者将无暇处理的流量丢弃
- 更多资料,参见:https://lotabout.me/2020/Back-Pressure/
2.2 基础知识
线程安全的单例Bean
Spring中的BPP和BFPP
- 下面的Bean定义信息包括Spring的容器Bean信息
- BFPP
- BeanFactoryPostProcessor 在容器实例化bean之前调用,可以增加、修改、覆盖bean属性信息
- BPP
- BeanFactoryProcessor 在bean被实例化后调用,可以对bean进行其他处理,包括修改属性信息,代理,注入等操作
- BDRPP
Netty中Channel和Pipeline的区别