问题引入
在浏览器当中我们输入网址,到我们网站加载完毕,当中经历了什么。
- DNS解析:浏览器首先将输入的网址发送到域名系统(DNS)服务器,以获取该网址对应的IP地址。DNS服务器将域名解析为IP地址,浏览器接收到IP地址后将其存储在本地缓存中。
- 建立连接:浏览器根据获取到的IP地址,与Web服务器建立TCP连接。这是一个三次握手的过程,确保浏览器和服务器之间建立了可靠的连接。
- 发送HTTP请求:一旦建立了TCP连接,浏览器会发送HTTP请求,请求服务器提供网页的内容。HTTP请求中包括请求的方法(GET、POST等)、路径、头部信息和可能的请求体数据。
- 服务器处理请求:服务器接收到HTTP请求后,会根据请求的内容进行处理。这可能涉及查询数据库、处理逻辑、生成动态内容等。
- 服务器发送响应:服务器处理完请求后,会生成HTTP响应,其中包括状态码、头部信息和响应体。响应体通常包含了请求的网页内容。
之后的就是网站的资源加载,如html和css,js,以及是图片和视频等资源的加载。
域名系统
域名系统的产生是基于在当网络系统当中的业务规模和人员规模逐渐变大之后,导致流量和负载变大,人工分发和统一分发的压力过大,以及名称冲突,时效性等问题而产生的。
域名空间
- 域名空间被组织成树形结构
- 域名空间通过划分zone的方式进行分层授权管理
- 全球公共域名空间仅对应一棵树
- 根域名服务器:查询起点
- 域名组成格式:[a-zA-Z0-9_-],以点划分label
自建DNS服务器
问题背景: 内网域名的解析也得出公网去获取,效率低下 外部用户看到内网ip 地址,容易被hacker 攻击 云厂商权威DNS容易出故障,影响用户体验 持续扩大公司品牌技术影响力,使用自己的DNS系统
DNS查询过程,可以简单结合上面的域名空间图理解,
- 首先我们会向我们本地的dns服务器发送请求,看是否已经解析过这个域名。如果有缓存记录且仍然有效,就会直接返回IP地址。
- 本地域名服务器会向根域名服务器发送查询请求,询问顶级域名服务器的IP地址。根域名服务器不会返回具体的IP地址,而是提供顶级域名服务器的信息。
- 本地域名服务器会向顶级域名服务器发送查询请求,询问权威域名服务器的IP地址。顶级域名服务器通常是 ".com"、".org" 等顶级域的域名服务器。
- 本地域名服务器最终会向权威域名服务器发送查询请求,询问目标域名对应的IP地址。权威域名服务器存储了特定域名的IP地址记录。
- 权威域名服务器将查询结果返回给本地域名服务器。本地域名服务器将查询结果保存在缓存中,并将IP地址返回给用户的计算机或设备。
- 用户的计算机或设备收到IP地址后,就可以使用这个IP地址与目标服务器建立连接,访问对应的网站或资源。
DNS记录类型
- A记录(Address Record):将域名映射到IPv4地址。
- AAAA记录(IPv6 Address Record):将域名映射到IPv6地址。
- CNAME记录(Canonical Name Record):将域名映射到另一个域名(别名)。
- MX记录(Mail Exchange Record):指定接收域名的电子邮件服务器。
- NS记录(Name Server Record):指定域名的权威DNS服务器。
- PTR记录(Pointer Record):用于反向DNS查找,将IP地址映射到域名。
- SOA记录(Start of Authority Record):指定域名的权威DNS服务器和其他相关信息。
- TXT记录(Text Record):用于存储任意文本信息,常用于验证和配置记录。
- SRV记录(Service Record):指定提供特定服务的服务器的位置。
- SPF记录(Sender Policy Framework Record):用于验证电子邮件服务器的发送者身份。
- 120 ; serial number
- 3h; refresh interval
- 30m; retry interval
- 3w; expiry period
- lh; negative TTL
120 ; serial number:这是DNS区域的序列号,用于标识区域中的不同版本。当区域发生更改时,序列号会递增,以便其他DNS服务器知道何时更新区域的副本。3h:刷新间隔。这表示其他DNS服务器应该在这个时间间隔内查询主DNS服务器以获取区域的更新。这里的3h表示3小时。30m:重试间隔。当其他DNS服务器无法连接到主DNS服务器或者无法获得区域更新时,它们会在这个时间间隔后重新尝试连接。这里的30m表示30分钟。3w:过期时间。这是指区域数据的失效时间,当数据过期后,DNS服务器将不再使用这个区域的数据。这里的3w表示3周。lh:负面TTL(Time To Live)。这是指当某个域名未被找到时,DNS服务器会保留负面缓存的时间,以避免频繁查询同一个不存在的域名。这里的lh表示“本地主机”。
常见的权威DNS架构:bind,nsd,knot,coredns
接入HTTPS
问题背景:
- 数据安全性: 在HTTP协议中,数据传输是明文的,容易被恶意用户拦截、窃听和篡改。为了保护用户隐私和数据的安全性,需要一种能够对传输数据进行加密的方法。
- 数据完整性: 在HTTP通信中,数据可能会被篡改,导致信息泄露或损坏。需要一种机制来验证数据的完整性,确保数据在传输过程中没有被篡改。
- 身份认证: 在传统的HTTP通信中,服务器的身份无法得到验证,容易受到恶意用户的冒充。为了确保用户与服务器的通信是安全的,需要一种方式来验证服务器的身份。
- 信任与保障: 随着互联网的发展,用户对于在线隐私和数据安全的关注不断提高。网站和服务提供商需要建立信任,向用户证明他们的网站是安全可靠的。
在此环境下就产生了HTTPS
- 加密通信: HTTPS使用SSL(Secure Sockets Layer)或其继任者TLS(Transport Layer Security)协议,通过对传输的数据进行加密,使得恶意用户无法轻易获取明文数据。
- 数据完整性验证: HTTPS使用数字签名等技术来验证数据的完整性,确保数据在传输过程中没有被篡改。
- 身份认证: HTTPS使用SSL/TLS证书,服务器需要获得由受信任的证书颁发机构(CA,Certificate Authority)签发的证书,来证明自己的身份。这样用户可以信任服务器的身份。
- 信任与保障: HTTPS通过提供数据加密和身份认证等安全功能,增强了用户对网站和服务的信任,使用户更愿意在网站上输入敏感信息。
接入全站加速
静态加速:
- 解决服务器端的"第一公里"问题
- 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响
- 减轻了各省的出口带宽压力
- 优化了网上热点内容的分布
基本原理思想就是使用节点服务器,将一些静态资源缓存至节点服务器,减轻原始服务器的服务器压力,从而使用户的访问速度加快。
动态加速DCDN:
全站加速
全站加速就是将两种进行结合,
4层负载均衡
问题产生背景:
在运营商处租用的100.1.2.3的公网IP,如何在企业内部使用最合理? 现状:直接找一个物理机,ifconfig将网卡配上这个IP,起server监听即可
应用多,起多个server监听不同的端口即可
租多个公网ip(数量有限)
怎样尽可能充分的利用和管理有限的公网IP资源?
四层负载均衡就是基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落到后端服务器上。保证了我们服务的安全性,及时我们某一台服务宕机,我们也可以直接使用其他服务器保证正常的服务使用。
常见的调度算法:
- RR轮询: Round Robin,将所有的请求平均分配给每个真实服务器RS
- 加权RR轮询:给每个后端服务器一个权值比例,将请求按照比例分配
- 最小连接:把新的连接请求分配到当前连接数是小的服务器
- 五元组hash:根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模
- 缺点:当后端某个服务器故障后,所有连接都重新计算,影响整个hash 环
- 一致性hash:只影响故障服务器上的连接session,其余服务器上的连接不受影响
7层负载均衡
7层负载均衡器可以根据请求的URL、HTTP头部、Cookie等信息进行智能的请求分发和流量管理。它能够识别和处理应用层协议的特定功能和需求,如会话保持、内容缓存、SSL终止等。
NGINX介绍
- 模块化设计,较好的扩展性和可靠性
- 基于master/worker 架构设计
- 支持热部署可在线升级
- 不停机更新配置文件、更换日志文件、更新服务器二进制
- 较低的内存消耗:1万个keep-alive连接模式下的非活动连接仅消耗2.5M内存
- 事件驱动:异步非阻塞模型、支持aio,mmap(内存映射)
NGINX简单调优
、
优化OS 优化内核网络参数
优化内核网络参数
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.ip_local_port_range=1024 61000
net.ipv4.tcp_max_syn.backlog=1024
net.ipv4.tcp_syncookies = 1
提升CPU使用率:
合适的worker进程数:
Worker进程数=CPU 核数
CPU亲和:
每个worker 程绑定一个CPU核,提升缓存命中率减少 * CPU开销:*
multi_accept允许worker同时接受新连接accept_mutex解决惊群问题 reuseport 监听同端口,内核负载均衡
提升网络效率:
连接复用
减少upstream建连 使用cache
超时时间对业务的影响
gzip压缩
会增加cpu开销,需平衡使用
开启proxy_buffering
谨慎设置proxy_buffer 大小,磁盘io读写