开放服务 - DNS与负载均衡 | 青训营笔记

266 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。昨天的直播课上讲到了如何将自己的服务开放给用户使用,里面涉及到了很多方面的知识点,在此做个记录。

一、Host 的管理方式

静态管理

/etc/host文件添加主机ip到域名的映射。

域名系统管理

购买域名,进行域名备案,通过云产商的控制台添加解析记录。

二、DNS查询

DNS查询过程

客户端向本机域名服务器发起请求(递归查询),本机域名服务器向根域名服务器发送请求(迭代查询),然后向顶级域名服务器发送请求,然后向权威级别域名服务器发送请求。

DNS记录类型

A/AAAA:ip指向记录,用于指向配置的IP,前者A记录是ipv4,后者AAAA记录是ipv6

CNAME:别名记录,配置别的域名或者别的主机名,根据这个别名继续发起请求

TXT:文本记录,购买证书时需要

MX:邮件交换记录,用于指向邮件交换服务器

NS:解析服务器记录,指定哪台服务器对该配置的域名进行解析

企业需要哪种DNS服务器

需要的是权威级别的DNS服务器

开源DNS实现:bind

三、HTTPS协议

非对称加密交换客户端密钥,然后使用对称加密通信

客户端收到服务端发来的证书,会校验证书的正确性和有效性

非对称加密:公钥加密,私钥解密

对称加密:加密解密都使用同一个密钥

四、负载均衡

负载均衡调度算法

  1. RR轮询

  2. 加权RR轮询

  3. 最小连接:新的连接请求分配给当前连接数最小的服务器

  4. 五元组哈希:根据spi、sport、sproto、dip、dport(源ip、源端口、协议、目的ip、目的端口)对静态服务器散列取模

    缺点:一个服务器故障,所有连接重新计算,影响整个哈希环

  5. 一致性哈希:只影响故障服务器上连接的session,其余服务器上的连接的不影响

有一些七层相关的配置需求,该怎么配置?

四层负载均衡对某个ip只能bind一个80端口,而有多个外部站点需要使用,该如何解决?

需要支持:

SSL卸载:业务测试使用HTTP,用于请求使用HTTPS

请求重定向:浏览器访问 xxx.com 自动跳转 www.xxx.com

路由添加匹配策略

Header编辑

跨域支持

协议支持:websocket、grpc、quic

使用Nginx

  • 模块化设计,较好的拓展性和可靠性
  • 支持热部署,可在线升级
  • 基于master/worker架构设计
  • 不停机更换配置文件、日志文件
  • 较低的内存消耗:1w个keepalive连接模式下的非活动连接只消耗2.5m的内存
  • 事件驱动模型:异步非阻塞模型、支持aio、mmap(内存映射)

传统的服务器:一个进程/线程处理一个连接/请求,阻塞模型、依赖os实现并发

Nginx:一个进程/线程可以处理多个连接/请求,异步非阻塞模型、较少os进程切换