将我的服务开放给用户|青训营笔记

76 阅读5分钟

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

  • 输入网站域名到网页加载出来,都经历了哪些过程
    • 域名解析
    • TCP建连
    • SSL握手
  • 企业接入
    • 域名系统
      • Host管理
        • 主机表 Host->IP映射
        • 效率很低
      • 使用域名系统替换Hosts文件
        • 域名购买
        • 域名备案:防止在网上从事非法的网站经营活动,打击不良互联网信息的传播,一般在云厂商处即可进行实名认证并备案。
        • 修改配置
          • 清空/etc/hosts
          • 配置/etc/resolv.confnameservers为公共DNS迁移原配置,通过控制台添加解析记录
      • 开放外部用户访问
        • 租赁一个外网IP,专用于外部用户访问门户网站,将www.example.com解析到外网IP上,将该IP绑定到一台物理机上,并发布公网route,用户外部用户访问
      • 自建DNS服务器
        • 外部云厂商处DNS解析的缺点
          • 内网域名的解析也得出公网去获取,效率低下
          • 外部用户看到内网ip地址,容易被hacker攻击
          • 云厂商权威DNS容易出故障,影响用户体验
          • 持续扩大公司品牌技术影响力,使用自己的DNS系统
        • DNS查询过程
        • 权威DNS系统架构
          • 常见的开源DNSbindnsdknotcoredns
          • DNS Query
          • DNS Response
          • DNS Update
          • DNS Notify
          • DNS XFR
    • 接入HTTPS协议
      • 对称加密和非对称加密
        • 对称加密
          • 双方持有相同的密钥
          • 密钥可能被截获
        • 非对称加密
          • 使用公钥和私钥
          • RSA算法
      • SSL的通信过程
        • client random
        • server random
        • premaster secret
        • 加密算法协商
        • 计算出session key用来加密
    • 接入全站加速
      • 问题
        • 源站容量低,可承载的并发请求数低,容易被打垮
        • 报文经过的网络设备越多,出问题的概率越大,丢包、劫持、MTU问题
        • 自主选路网络链路长,时延高
      • 解决方案
        • 源站容量问题
          • 增加后端机器扩容;静态内容,使用静态加速缓存
        • 网络传输问题
          • 动态加速DCDN
        • 全站加速
          • 静态加速+动态加速
      • 静态加速CDN
        • 缓存:将服务器上的静态内容缓存到CDN结点上,客户端无需访问源站,通过访问CDN节点访问静态内容,速度加快并且减轻源站压力
        • 优点
          • 解决服务器端的"第一公里"问题
          • 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响
          • 减轻了各省的出口带宽压力
          • 优化网上热点内容的分布
      • 动态加速DCDN
        • 针对POST等非静态请求等不能在用户边缘缓存的业务,基于智能选路技术,从众多回源线路中择优选择一条线路进行传输。
    • 4层负载均衡
      • 基于IP+端口,利用某种算法将报文转发到某个后端服务器,实现负载均衡地落到后端服务器上
      • 功能
        • 解耦vip和rs
        • NAT
        • 防攻击: syn proxy
      • 常见的调度算法原理
        • RR轮询:Round Robin,将所有请求平均分配给每个真实服务器RS
        • 加权RR轮询:给每个后端服务器一个权值比例,将请求按照比例分配
        • 最小连接:把新的连接请求分配到当前连接数最小的服务器
        • 五元组Hash:根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模
          • 缺点:当后端某个服务器故障后,所有连接都重新计算,影响整个hash环
        • 一致性Hash:只影响故障服务器上的连接session,其余服务器上连接不受影响
      • 实现方式FULLNAT
        • RS如何知道真实的CIP
          • 通过TCP Option字段传递然后通过特殊的内核模块反解
      • 使用特点
        • 大部分是通过dpdk技术实现,技术成熟
        • 纯用户态协议栈,kernel bypass,消除协议栈瓶颈
        • 无缓存,零拷贝,大页内存(减少cache miss)
        • 仅针对4层数据包转发,小包转发可达到限速,可承受高cps
      • 开源解决方案:LVS+keepalived
        • LVS:linux虚拟服务器,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发
        • Keepalived:LVS集群高可用,解决某个节点故障问题
    • 7层负载均衡
      • 问题
        • SSL卸载:业务侧是http服务,用户需要用https访问
        • 请求重定向:浏览器访问toutiao.com自动跳转www.toutiao,com
        • 路由添加匹配策略:完全、前缀、正则
        • Header编辑
        • 跨域支持
        • 协议支持:websocket、grpc、quic
      • Nginx
        • 最灵活的高性能Web Server,应用最广的7层反向代理
        • 简介
          • 模块化涉及,较好的扩展性和可靠性
          • 基于master/worker架构设计
          • 支持热部署;可在线升级
          • 不停机更新配置文件、更换日志文件、更新服务器二进制
          • 较低的内存消耗:1万个keep-alive连接模式下的非活动连接仅消耗2.5M内存
          • 事件驱动模型:异步非阻塞模型、支持aio,mmap(内存映射)
        • 功能
          • Keepalive
          • 访问日志
          • url rewrite重写
          • 路径别名
          • 基于ip的用户访问控制
          • 限速及并发连接数控制
        • 异步非阻塞
          • 传统服务器
            • 一个进程/线程处理一个连接/请求阻塞模型、依赖os实现并发
          • Nginx
            • 一个进程/线程处理多个连接/请求异步非阻塞模型、减少os进程切换
        • Nginx简单调优
          • OS容量
            • 缓冲队列
            • 文件句柄数
            • 源端口数
          • CPU效率
            • 合适worker数
              • worker进程数=CPU核数
            • CPU亲和
              • 每个worker程绑定一个CPU核,提升缓存命中率
            • 提升worker进程优先级
            • 减少cpu开销
              • multi-accept允许worker同时接受新连接
              • accept-mutex解决惊群问题
              • reuseport监听同端口,内核负载均衡
          • 网络效率
            • 连接复用
              • 减少upstream建联
            • 使用Cache
              • 减少超时时间对业务的影响
            • gzip压缩
              • 会增加cpu开销,需平衡使用
            • 开启proxy_buffering
              • 谨慎设置proxy_buffer大小,磁盘io读取
          • 磁盘IO效率
            • SSD
            • 优化log存储
            • Sendfile
            • AIO
            • ThreadPool
          • 定位性能瓶颈
            • Google Performance Tool
    • 如何将本地服务开放外网访问
      • Ngrok,Expose your localhost to the web
      • 使用条件:使用github账户授权登录