这是我参与「第三届青训营 -后端场」笔记创作活动的的第9篇笔记
GO-学习笔记
服务接入
- Ngrod暴露本地服务
浏览器输入网站域名到网页加载的过程
- 域名解析
- TCP建连
- TLS/SSL握手
- 真正HTTP请求发送
域名系统
- Host管理,将域名与IP相映射
- 域名和IP增多,导致Hosts文件越来越大,统一分发引发较大的网络流量和CPU负载
- 产生名称冲突,无法保证主机名一致
- 时效性,需要通过手动修改hosts文件
- 域名系统,替代hosts文件
- 域名空间为树形结构
- 通过划分zone的方式,进行分层授权管理
- 全球公共域名对应一棵树
- 根域名服务器,为DNS查询起点
- 购买和配置
- 公有云,购买二级域名
- 清空hosts,配置dns
- 开放外部用户访问
租赁外网ip,绑定物理机,发布公网路由
自建DNS服务器
- 内网域名解析交给公网,效率低,不安全,云厂商DNS解析器不稳定
- DNS解析过程,从根服务器开始访问,层层查找,最终找到目标域名的IP
dig www.baidu.com +trace查询过程- 记录类型
- A/AAAA IP指向记录,A IPv4记录,AAAA IPv6记录
- CNAME 别名记录
- TXT 文本记录,购买证书时需要
- MX 邮件交换记录,指向邮件交换服务器
- NS 解析服务器记录,指定哪台服务器对于该域名解析
- SOA记录,起始授权机构记录,每个zone有且仅有唯一的SOA记录,描述zone属性以及主要权威服务器记录
- 权威DNS系统架构
- 开源DNS bind、nsd、knot、coerdns
- 主从模式,要及时同步数据
DNS污染和劫持
- 污染,在域名服务器中制造执行不正确IP地址的域名
- DNS查询没有任何认证机制,且基于UDP
- 伪装成DNS服务器,在检查到用户访问某些网站后,解析到错误的IP
- 劫持,拦截网络范围内的域名解析请求,劫持DNS服务器的响应,并进行修改,执行虚假IP
HTTPS
- HTTP明文传输,不安全
加密算法
- 对称加密,一份密钥,密钥在传输的过程中被劫持
- 非对称加密,公钥和私钥,RSA算法
用非对称加密,保证通信中对称加密的密钥交换
TLS/SSL握手
- 前提
- 服务器把自己的公钥注册到CA
- CA用自己的私钥,将服务器的公钥进行加密,颁发给服务器
- 客户端的浏览器包含CA公钥
- 客户端发送 TLS版本/客户端随机数/支持的加密算法套件列表
- 服务端发送 确认TLS版本/服务端选择书/选择的加密算法套件/数字证书
- 客户端通过浏览器内嵌的CA验证证书,获取RSA公钥,生成新的随机数并用公钥加密,生成会话密钥,加密摘要信息
- 服务端,验证后,生成会话密钥
证书
- 客户端收到后,需要对证书进行验证
- 是否是可信机构颁布
- 域名是否与实际访问一致
- 数据签名是否一致
- 证书有效期
- 证书撤回状态
- 证书链
- 服务器将证书摘要用CA机构私钥加密,形成证书数字签名
- 客户端用CA公钥解密,得到摘要信息,并用相同的算法,计算摘要,将两个结果进行比对
接入全站加速
- 外网用户访问站点的问题
- 源站容量滴,可承载并发请求数低,容易崩溃
- 报文经过网络设备多,出现问题概率大,丢包、劫持,mtu
- 自主选路网络链路长,时延高
- 优化
- 增加服务器,扩容;对于静态内容,使用静态加速缓存
- 网络传输问题,动态加速DCDN
静态加速CDN
- 缓存,将服务内容的静态内容,缓存在客户端就近节点上
- 从CDN节点获取,自动调度,发起一次源站的请求,并缓存内容
- 优点
- 消除不同运营商之间互联的瓶颈造成的影响
- 优化网络热点内容分布
- 服务器端第一公里问题
- 减轻各省出口带宽压力
动态加速DCDN
- 针对非静态请求,基于智能远路,选出最优的路径进行传输
路径探测
- 原理
- 分节点,边缘节点,汇聚节点,核心机房
四层负载均衡
- 针对传输层,本质是转发
- LVS+keepalived
- LVS,Linux Virtual Server,虚拟服务器,实现基于IP的请求负载均衡调度方案
- IPVS,负责实现负载均衡,将请求转发给Real Server列表中的服务节点,通过查看报文的IP和TCP报文头,保证后继报文被转发到相同的服务器
- 基于IP+端口,将报文转发给某个后端服务器,实现负载均衡地落到后端服务器
- 解耦vip和rs
- VIP,Virtual IP Address,外网IP
- RS,Real Server
- NAT,网络地址转换,某个网络内的所有主机对外访问时,都会以统一的地址进行访问
- 将IP和端口一起转换
- 相同的端口,不同的内网IP,对外访问时,转换成相同的IP,不同的端口
- 防攻击 syn泛洪,proxy攻击
- syn泛洪,三次连接中,只发起第一次握手,让服务器连接保持在SYN-RCVD状态
- proxy攻击,代理攻击,通过跳板服务器对目标服务器进行海量数据访问的操作,单个是合法连接,
常见调度算法
- RR轮询,Round Robin,将所有的请求平均分配给真实的服务器RS
- 加权RR轮询,给后端服务器一个权值比例
- 最小连接,分配给当前连接数最小的服务器
- 五元组hash,根据sip、sport,proto,dip,dport对静态分配的服务器进行散列取模
- 源ip,源端口,传输层协议,目标ip,目标端口
- 某个服务器故障,所有连接都要重新计算
- 一致性hash,只影响故障服务器上连接的session,其他服务器不受影响
- 环状hash空间
- 该节点没有设备,会顺时针寻找
常见实现方式FullNAT
- 工作模式
- cip将请求发往四层复杂均衡器的vip,请求报文源地址为cip,目标地址为vip
- 复杂均衡器收到后,符合其中的规则,将请求报文的源mac改成自己的mac,目标mac改成rip,真实ip的mac,发给rs
- rs的mac匹配上,接受报文,处理完后,给cip发送响应
- RS Real Server怎么知道真实的CIP Client IP
cip通过TCP option字段传递,rs通过TOA内核模块反解,获取cip
特点
- dpdk技术
- dpdk,Data plane development kit,利用数据面库进行收发包处理,绕过了Linux内核态协议栈
- 组件PMD驱动,Pool Mode Driver,轮询模式驱动,避免内核态和用户态内核拷贝
- HugePage,大页内存,内存的映射表,映射数据,减少miss
- 纯用户态协议栈
- 无缓存、零拷贝,大页内存
7层负载均衡
- 针对应用层,本质是内容交换
- SSL卸载,用户https,服务http
- 请求重定向,路由添加匹配策略,跨域,Header编辑
- 协议支持 websocket/grpc/quic
nginx
- 7层反向代理
- 异步非阻塞模型,支持AIO/mmap内存映射
- 事件驱动模型,动作驱动回调函数
- 一个进程/线程处理多个连接/请求,减少os进程切换
- 性能优化
- os容量
- CPU效率
- 网络效率,连接复用,使用缓存,gzip压缩
- 磁盘IO效率
- 定位性能瓶颈
需求到上线
开发模式
- 瀑布模型,流水线形式开发,以流程为本
银行/支付
- 敏捷开发,以人为本,响应变化
小团队,更快的迭代,用户沟通推动迭代
scrum形式
SAFe The Scaled Agile Frameword管理框架,实现了敏捷开发的要求
多个
scrum配合
开发流程
- 需求阶段,不要浪费时间讨论不应该存在的问题
- 优化需求
- 评估需求,
MVP minimum viable product 最小化可行产品,快速迭代- 四象限法,根据重要和紧急,进行优先级排序
- 开发阶段
- 云原生,容器内开发
- 部署容器化,根据项目生成运行时环境
- 微服务,各个功能在不同服务中,不同模块通过
RPC通信git分支策略- 代码规范,自测,文档
- 测试阶段
- UI测试、系统测试、集成测试、单元测试
- 环境,针对不同版本进行测试,功能环境、集成环境、回归环境
- 发布阶段
- 发布前检查
- 计划发布,检查日志,功能验证
- 暴力发布,直接覆盖新版本
- 金丝雀发布,先布置一台
- 滚动/灰度发布,一台一台布置,逐步放大流量
- 蓝绿发布,一部分新版本,另一部分老版本,交替测试
- 红黑部分,发布时动态扩容一倍
- 运维阶段
- 流量洪峰,数据增长
- 监控运行情况
优化流程
- 同时保证质量和效率
- DevOps,开发和运维形成闭环,自动化运转
- 效率竖井,大部分时间在等待,让有价值的流程时间占比上升