服务接入和需求到上线 | 青训营笔记

244 阅读8分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第9篇笔记

GO-学习笔记

服务接入

  • Ngrod暴露本地服务

浏览器输入网站域名到网页加载的过程

  • 域名解析
  • TCP建连
  • TLS/SSL握手
  • 真正HTTP请求发送

域名系统

  • Host管理,将域名与IP相映射
  1. 域名和IP增多,导致Hosts文件越来越大,统一分发引发较大的网络流量和CPU负载
  2. 产生名称冲突,无法保证主机名一致
  3. 时效性,需要通过手动修改hosts文件
  • 域名系统,替代hosts文件
  1. 域名空间为树形结构
  2. 通过划分zone的方式,进行分层授权管理
  3. 全球公共域名对应一棵树
  4. 根域名服务器,为DNS查询起点
  • 购买和配置
  1. 公有云,购买二级域名
  2. 清空hosts,配置dns
  • 开放外部用户访问

租赁外网ip,绑定物理机,发布公网路由

自建DNS服务器

  • 内网域名解析交给公网,效率低,不安全,云厂商DNS解析器不稳定
  • DNS解析过程,从根服务器开始访问,层层查找,最终找到目标域名的IP
  • dig www.baidu.com +trace查询过程 image.png
  • 记录类型
  1. A/AAAA IP指向记录,A IPv4记录,AAAA IPv6记录
  2. CNAME 别名记录
  3. TXT 文本记录,购买证书时需要
  4. MX 邮件交换记录,指向邮件交换服务器
  5. NS 解析服务器记录,指定哪台服务器对于该域名解析
  6. SOA记录,起始授权机构记录,每个zone有且仅有唯一的SOA记录,描述zone属性以及主要权威服务器记录
  • 权威DNS系统架构
  1. 开源DNS bind、nsd、knot、coerdns
  2. 主从模式,要及时同步数据

DNS污染和劫持

  • 污染,在域名服务器中制造执行不正确IP地址的域名
  1. DNS查询没有任何认证机制,且基于UDP
  2. 伪装成DNS服务器,在检查到用户访问某些网站后,解析到错误的IP
  • 劫持,拦截网络范围内的域名解析请求,劫持DNS服务器的响应,并进行修改,执行虚假IP

HTTPS

  • HTTP明文传输,不安全

加密算法

  • 对称加密,一份密钥,密钥在传输的过程中被劫持
  • 非对称加密,公钥和私钥,RSA算法

用非对称加密,保证通信中对称加密的密钥交换

TLS/SSL握手

  • 前提
  1. 服务器把自己的公钥注册到CA
  2. CA用自己的私钥,将服务器的公钥进行加密,颁发给服务器
  3. 客户端的浏览器包含CA公钥
  • 客户端发送 TLS版本/客户端随机数/支持的加密算法套件列表
  • 服务端发送 确认TLS版本/服务端选择书/选择的加密算法套件/数字证书
  • 客户端通过浏览器内嵌的CA验证证书,获取RSA公钥,生成新的随机数并用公钥加密,生成会话密钥,加密摘要信息
  • 服务端,验证后,生成会话密钥

证书

  • 客户端收到后,需要对证书进行验证
  1. 是否是可信机构颁布
  2. 域名是否与实际访问一致
  3. 数据签名是否一致
  4. 证书有效期
  5. 证书撤回状态
  • 证书链
  1. 服务器将证书摘要用CA机构私钥加密,形成证书数字签名
  2. 客户端用CA公钥解密,得到摘要信息,并用相同的算法,计算摘要,将两个结果进行比对

接入全站加速

  • 外网用户访问站点的问题
  1. 源站容量滴,可承载并发请求数低,容易崩溃
  2. 报文经过网络设备多,出现问题概率大,丢包、劫持,mtu
  3. 自主选路网络链路长,时延高
  • 优化
  1. 增加服务器,扩容;对于静态内容,使用静态加速缓存
  2. 网络传输问题,动态加速DCDN

静态加速CDN

  • 缓存,将服务内容的静态内容,缓存在客户端就近节点上
  • 从CDN节点获取,自动调度,发起一次源站的请求,并缓存内容
  • 优点
  1. 消除不同运营商之间互联的瓶颈造成的影响
  2. 优化网络热点内容分布
  3. 服务器端第一公里问题
  4. 减轻各省出口带宽压力

动态加速DCDN

  • 针对非静态请求,基于智能远路,选出最优的路径进行传输

路径探测

  • 原理
  1. 分节点,边缘节点,汇聚节点,核心机房

四层负载均衡

  • 针对传输层,本质是转发
  • LVS+keepalived
  1. LVS,Linux Virtual Server,虚拟服务器,实现基于IP的请求负载均衡调度方案
  2. IPVS,负责实现负载均衡,将请求转发给Real Server列表中的服务节点,通过查看报文的IP和TCP报文头,保证后继报文被转发到相同的服务器
  3. 基于IP+端口,将报文转发给某个后端服务器,实现负载均衡地落到后端服务器
  • 解耦vip和rs
  1. VIP,Virtual IP Address,外网IP
  2. RS,Real Server
  • NAT,网络地址转换,某个网络内的所有主机对外访问时,都会以统一的地址进行访问
  1. 将IP和端口一起转换
  2. 相同的端口,不同的内网IP,对外访问时,转换成相同的IP,不同的端口
  • 防攻击 syn泛洪,proxy攻击
  1. syn泛洪,三次连接中,只发起第一次握手,让服务器连接保持在SYN-RCVD状态
  2. proxy攻击,代理攻击,通过跳板服务器对目标服务器进行海量数据访问的操作,单个是合法连接,

常见调度算法

  • RR轮询,Round Robin,将所有的请求平均分配给真实的服务器RS
  • 加权RR轮询,给后端服务器一个权值比例
  • 最小连接,分配给当前连接数最小的服务器
  • 五元组hash,根据sip、sport,proto,dip,dport对静态分配的服务器进行散列取模
  1. 源ip,源端口,传输层协议,目标ip,目标端口
  2. 某个服务器故障,所有连接都要重新计算
  • 一致性hash,只影响故障服务器上连接的session,其他服务器不受影响
  1. 环状hash空间
  2. 该节点没有设备,会顺时针寻找

常见实现方式FullNAT

  • 工作模式
  1. cip将请求发往四层复杂均衡器的vip,请求报文源地址为cip,目标地址为vip
  2. 复杂均衡器收到后,符合其中的规则,将请求报文的源mac改成自己的mac,目标mac改成rip,真实ip的mac,发给rs
  3. rs的mac匹配上,接受报文,处理完后,给cip发送响应
  • RS Real Server怎么知道真实的CIP Client IP

cip通过TCP option字段传递,rs通过TOA内核模块反解,获取cip

特点

  • dpdk技术
  1. dpdk,Data plane development kit,利用数据面库进行收发包处理,绕过了Linux内核态协议栈
  2. 组件PMD驱动,Pool Mode Driver,轮询模式驱动,避免内核态和用户态内核拷贝
  3. HugePage,大页内存,内存的映射表,映射数据,减少miss
  • 纯用户态协议栈
  • 无缓存、零拷贝,大页内存

7层负载均衡

  • 针对应用层,本质是内容交换
  • SSL卸载,用户https,服务http
  • 请求重定向,路由添加匹配策略,跨域,Header编辑
  • 协议支持 websocket/grpc/quic

nginx

  • 7层反向代理
  • 异步非阻塞模型,支持AIO/mmap内存映射
  • 事件驱动模型,动作驱动回调函数
  • 一个进程/线程处理多个连接/请求,减少os进程切换
  • 性能优化
  1. os容量
  2. CPU效率
  3. 网络效率,连接复用,使用缓存,gzip压缩
  4. 磁盘IO效率
  5. 定位性能瓶颈

需求到上线

开发模式

  • 瀑布模型,流水线形式开发,以流程为本

银行/支付

  • 敏捷开发,以人为本,响应变化

小团队,更快的迭代,用户沟通推动迭代 scrum形式

  • SAFe The Scaled Agile Frameword 管理框架,实现了敏捷开发的要求

多个scrum配合

开发流程

  • 需求阶段,不要浪费时间讨论不应该存在的问题
  1. 优化需求
  2. 评估需求,MVP minimum viable product 最小化可行产品,快速迭代
  3. 四象限法,根据重要和紧急,进行优先级排序
  • 开发阶段
  1. 云原生,容器内开发
  2. 部署容器化,根据项目生成运行时环境
  3. 微服务,各个功能在不同服务中,不同模块通过RPC通信
  4. git分支策略
  5. 代码规范,自测,文档
  • 测试阶段
  1. UI测试、系统测试、集成测试、单元测试
  2. 环境,针对不同版本进行测试,功能环境、集成环境、回归环境
  • 发布阶段
  1. 发布前检查
  2. 计划发布,检查日志,功能验证
  3. 暴力发布,直接覆盖新版本
  4. 金丝雀发布,先布置一台
  5. 滚动/灰度发布,一台一台布置,逐步放大流量
  6. 蓝绿发布,一部分新版本,另一部分老版本,交替测试
  7. 红黑部分,发布时动态扩容一倍
  • 运维阶段
  1. 流量洪峰,数据增长
  2. 监控运行情况

优化流程

  • 同时保证质量和效率
  • DevOps,开发和运维形成闭环,自动化运转
  • 效率竖井,大部分时间在等待,让有价值的流程时间占比上升