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

149 阅读3分钟

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

  1. 在/etc/hosts中进行host管理
  2. 使用域名系统替换hosts文件
  3. 在公有云厂商购买域名
  4. 租赁外网ip,将域名解析到外网ip,将ip绑定在一台物理机上,发布公网route,专用于外部用户访问门站 但是这种情况下。
  5. 内网域名的解析也要出公网获取,效率低
  6. 外部用户看到内网ip,容易被攻击
  7. 云厂商权威DNS容易出故障

自建DNS服务器

截屏2022-05-22 10.30.18.png dig {domain} trace

DNS记录类型

共同实现DNS分布式数据库的所有DNS服务器存储了资源记录Resource Record.RR提供了主机名到ip地址的映射。每个DNS回答报文包含了一条或多条资源记录。资源记录是四元组:

{Name,Value,Type,TTL} TTL是记录的生存时间,决定了资源记录应当从缓存中删除的时间。

  • Type=A,Name是主机名,Value是主机名对应的ip地址。一条记录类型为A的资源记录提供了标准的主机名到ip地址的映射。
  • Type=NS,Name是个域(foo.com),value是知道如何获得该域中主机ip地址的权威DNS服务器的主机名。这个记录用于沿着查询链来路由DNS查询。
  • TYPE=CNAME,Value是别名为Name的主机对应的规范主机名,该记录能向查询的主机提供一个主机名对应的规范主机名。
  • Type=MX,VALUE是别名为Name的邮件服务器的规范主机名。MX记录允许邮件服务器主机名具有简单的别名。通过使用MX记录,一个公司的邮件服务器和其他服务器可以使用相同别名。为了获得邮件服务器的规范主机名,DNS客户应当请求一条MX记录;为了获得其他服务器的规范主机名,DNS客户应当请求CNAME记录。

全站加速

  • 静态加速 CDN
    访问过程静态文件是相同的。主要还是缓存
    第一公里-》在用户附近的链路进行优化。
  • 动态加速 DCDN 对非静态内容。针对POST等非静态请求不能再用户边缘优化,基于智能选路技术,从众多回源线路择优选择一条链路传输。

四层负载均衡

基于ip+port均衡的将请求报文落到后端服务器。

  • 解耦vip+rs
  • NAT
  • syn proxy 避免将ip直接暴露在公网 避免sync攻击

常见的调度算法

  • RR
  • 加权RR
  • 最小链接
  • 五元组hash 「sip,sport,proto,dip,dport」对静态服务器取模
    • 缺点:后端某个服务器故障,所有连接需重新计算
    • 一致性hash:只影响故障服务器的连接session

实现方式 FULLNAT

  • 使用dpdk实现
  • 纯用户态协议栈,kernel bypass,消除协议栈瓶颈
  • 无缓存,零拷贝,大页内存,减少cache的miss率
  • 仅针对四层数据报转发,小包转发可达到限速

七层负载均衡

解决七层协议配置。

Nginx

  • 模块化设计
  • 基于worker/master
  • 支持热部署

Nginx内部架构

内核网络参数

  • fs.filemax=999999
  • net.ipv4.tcp_tw_reuse=1
  • net.ipv4.tcp_keepalive_time=600
  • net.ipv4.tcp_fin_timeout=30
  • net.ipv4.tcp_max_tw_buckets=5000
  • net.ipv4.tcp_max_sync.backlog=1024
  • net.ipv4.tcp_syncookie=1
  • net.ipv4.ip_local_port_range=10246100 提高cpu效率
  • 合理的worker进程==cpu核数
  • 每个worker进程绑定一个cpu核 提高网络效率
  • 连接复用
  • 使用cache
  • gzip压缩
  • 开启proxy_buffering 促进磁盘io读写

Q&A

  • DNS污染和DNS劫持的区别 DNS报文的加密处理无法进行监听和监测,因此是明文传输,可以被中间商看到。因此容易被抓包和劫持。
  • DNS的ttl时间越短越好? 决定了local dns缓存权威dns的结果,设置过短,local dns的优势不明显。但是过大无法及时同步。