Interview:公共概念
目录
公共概念
测试过程中有没有遇到什么问题
- 请求无法路由,因为envoy无法完成服务发现
通信协议
-
GRPC
-
原理
- Http 2.0
-
注册机制
- 如果是普通的测试,直接IP端口访问即可
- 如果是线上服务,使用zookeeper来进行路由信息的维护,可以提升可靠性和可维护性,所有服务请求只需要通过一个域名就可以完成相关的调用
-
优缺点
- GRPC可以节省带宽、降低TCP链接次数、节省CPU
- protobuf二进制消息,性能好/效率高
- proto文件生成目标代码,简单易用
- 序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)
- 支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级
- 支持多种语言(可以把proto文件看做IDL文件)
- 缺点:
- GRPC尚未提供连接池,需要自行实现
- 尚未提供“服务发现”、“负载均衡”机制
- 因为基于HTTP2,绝大部多数HTTP Server、Nginx都尚不支持,即Nginx不能将GRPC请求作为HTTP请求来负载均衡,而是作为普通的TCP请求。
- Protobuf二进制可读性差
-
traceID怎么进行透传
- HTTP2.0 也包含header
-
-
TCP/IP
-
TCP/IP四次挥手过程
-
TCP 三次握手挥手的ack、syn信息
-
MTP(基于TCP定义)
- 协议测试怎么测试(首先确保协议解析的正确性,然后确保其触发的业务的正确性)
-
-
HTTP
-
http&https的区别
- http:明文
- 网景SSL
- https协议需要到ca申请证书
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包(具体可查看马海祥博客《HTTP服务的七层架构技术解析及运用》的相关介绍);HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。
- 所以使用心跳来保持连接,避免重新建立连接的消耗。
-
http请求的缓存机制
-
http session、Cookie区别
- cookie存在本地,session存在服务端,token用于验证上下文顺序
-
长链接、短链接
-
短连接
- 握手、数据、挥手、结束
-
长链接
-
心跳信息保持链接
-
http 1.1默认长链接,HTTP首部的
- Keep-alive: timeout=20s
- Connection: Keep-alive
- 客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭
-
-
-
http GET/POST区别
-
正向代理,反向代理
- 正向代理不知道访问者,反向代理不知道处理者
管理经验
- 怎么对测试组进行管理(制定测试计划,分小组进行管理?),怎么协调人力
- 给你一个项目,怎么接手 –> 先认识人,熟悉项目组成员
- 怎么协调人力
基础组件
-
ETCD
-
Go 开发
-
Raft一致性算法处理日志复制保持强一致性。
- 任何一个节点都可能成为leader
-
角色
- Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader.
- Follower: 类似选民,完全被动
- Candidate候选人: 类似Proposer律师,可以被选为一个新的领导人。
-
-
zookeeper
-
三种状态
- Looking :系统刚启动时或者Leader崩溃后正处于选举状态
- Following :Follower节点所处的状态,Follower与Leader处于数据同步阶段;
- Leading :Leader所处状态,当前集群中有一个Leader为主进程;
-
选举机制
- 在开始时,所有的节点都是looking状态并且每个节点都希望自己能成为leader节点
- 每一个客户端的一个事务请求时Leader产生新的事务后该计数器都会加1,高32位为Leader周期epoch编号,当新选举出一个Leader节点时Leader会取出本地日志中最大事务Proposal的ZXID解析出对应的epoch把该值加1作为新的epoch,将低32位从0开始生成新的ZXID;ZAB使用epoch来区分不同的Leader周期),如果得到的提案的zxid比自己的大则说明发出这个题案的节点数据更新,则进行同意的投票,否则继续投自己,先得到多数的同意的节点当选为leader
-
-
VS
-
etcd
- 更轻量级、更易用
- 高负载下的稳定读写
- 数据模型的多版本并发控制
- 客户端协议使用gRPC协议,支持go、C++、Java等,
- 容错高:可以容忍脑裂现象的发生
-
zookeeper
- znode只能存1M以内的数据
- 写入性能低,为保证一致性,每次需要n/2+1的写入完成才算完成
- zookeeper的数据是全部存储在内存,只适合存元数据
- Zookeeper的使用场景是有高一致性的
- 而Zookeeper的RPC协议是自定制的,目前只支持C和Java
-
-
zuul
-
新老网关切换时的策略控制
- 直接过滤某个ID,灰度测试
-
-
nginx的优劣
-
负载均衡怎么测试
- 不停的发送消息,然后在查询数据库日志
-
不能抓包,怎么完成服务的mock(nginx)
-
-
Jenkins
-
helm
- 如何推广
-
自研组件
-
mysqlGrant
- mysql grant 具体测试内容(功能,可靠性,测试方法)
-
xlmesh
-
-
rabbitMQ
- 原理 待补充
- 怎么和其他的组件进行对比