服务部署基本知识 | 青训营

140 阅读8分钟

上线流程

文档 视频

DNS->tcp->tls->http

  • dns

  • 代理

  • 分布式服务器(负载均衡)

    • 如可以每个服务器都搞一个nginx代理到不同的mysql服务器
  • 服务中间件

    • http
    • rpc

image-20230805144408938

image-20230805155829517

域名

  • 将域名和服务器绑定,注册到域名服务器
  • 根据域名访问域名系统得到ip
  • 根据ip访问

HOST

example公司 主机表 Host->ip映射

image-20230805160247094

缺点:

随着example公司业务规模和员工数量的增长,使用该方式面临诸多问题:

  • 流量和负载:用户规模指数级增长,文件大小越来越大,统一分发引起较大的网络流量和Cpu
  • 负载名称冲突:无法保证主机名称的唯一性,同名主机添加导致服务故障
  • 时效性:分发靠人工上传,时效性太差

DNS

域名系统

image-20230805145330112

购买域名:买一个(第三方域名)服务器绑定服务器ip,加入到公共域名服务器

域名备案:防止在网上从事非法的网站经营活动,打击不良互联网信息的传播,一般在云厂商处即可进行实名认证并备案

修改配置:清空/etc/hosts配置/etc/resolv.conf中nameservers.为公共DNS迁移原配置,通过控制台添加解析记录即可

使用第三方域名服务器

自建DNS服务器

  • 不再使用第三方的域名解析,直接根域名服务器到自建DNS服务器

image-20230805150438001

dig domain + trace 查看域名解析过程

内网域名的解析也得出公网去获取,效率低下

外部用户看到内网ip地址,容易被hacker攻击

云厂商权威DNS容易出故障,影响用户体验

持续扩大公司品牌技术影响力,使用自己的DNS系统

从公有云托管->构建自己的DNS系统

DNS服务器架构

  • 权威
  • localDNS

HTTPS

页面出现白页/出现某些奇怪的东西返回了403的页面 搜索不了东西 搜索问题带了小尾巴,页面总要闪几次页面弹窗广告 搜索个汽车就有人给我打电话推销4s店和保险什么的

  • http明文传输
  • 证书

全站加速

静态CDN

  • 最近的cdn节点并缓存静态资源

解决服务器端的“第一公里”问题 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响 减轻了各省的出口带宽压力 优化了网上热点内容的分布

image-20230805151509082

动态DCDN

针对POST等非静态请求等不能在用户边缘缓存的业务,基于智能选路技术,从众多回源线路中择优选择一条线路进行传输。

image-20230805151751511

机房分布

这个到核心访问数据:动态加速路径 DCDN

访问静态资源:静态加速即可 CDN

  • RTT:访问一个服务器的时间

image-20230805151820431

1、用户首次登录抖音,注册用户名手机号等用户信息 动态加速DCDN 2、抖音用户点开某个特定的短视频加载后观看 静态加速CDN 3、用户打开头条官网进行网页浏览 静态加速CDN+动态加速DCDN

四层负载均衡

现状:直接找一个物理机,ifconfig将网卡配上这个IP,起server监听即可

应用多,起多个server监听不同的端口即可

租多个公网p(数量有限)

  • 端口冲突
  • 终端挂掉

image-20230805152826184

三个主要功能: 1.解耦vip和rs:动态分配,使用vip加入公网,进行负载均衡分配到各个rs

  • RR轮询:Round Robin,将所有的请求平均分配给每个真实服务器RS

  • 加权RR轮询:给每个后端服务器一个权值比例,将请求按照比例分配

  • 最小连接:把新的连接请求分配到当前连接数最小的服务器

  • 五元组hash:根据sip、sport、.proto、dip、dporty对静态分配的服务器做散列取模

    缺点当后端某个服务器故障后,所有连接都鱼新计算,影响整个hash环

  • 一致性hash:只影响故障服务器上的连接session,其余服务器上的连接不受影响

2.反向代理

3.net防攻击:syn proxy,相当于nat路由器不会暴露物理地址

实现

image-20230805153152228

就相当于:使用了一个服务器作为nat路由器?,可以更好的实现某些功能?

  • cip:客户端ip
  • vip:服务器公网ip
  • lip:负载均衡的服务器的虚拟ip(相当于路由器的ip)
  • rs:目标服务器ip

大部分都是通过dpdk技术实现,技术成熟,大厂都在用

纯用户态协议栈,kernel bypass,消除协议栈瓶颈

无缓存,零拷贝,大页内存(减少cache miss) 仅针对4层数据包转发,小包转发可达到限速,可承受高Cps

7层负载均衡

🉑 和4层的关系就是osi模型的关系

4层的问题

SSL卸载:业务侧是http服务,用户需要用https访问

请求重定向:刘览器访问toutiao,.com自动跳转www.toutiao.com

路由添加匹配策略:完全、前缀、正则

Header编辑

跨域支持

协议支持:websocket、grpc、quic

  • 代理:如 (请求 <-> socket5) <-> 服务器
  • 反向代理: 请求 <-> (代理服务器 <-> 服务器)

image-20230805154308397

nginx

image-20230805155015681

  • 事件驱动

    • 不是使用监听事件发生(查询)
    • 使用的是事件队列,但是cpu的进程调用(中断)

模块化设计,较好的扩展性和可靠性 基于master/worker架构设计 支持热部署;可在线升级 不停机更新配置文件、更换日志文件、更新服务器二进制 较低的内存消耗:1万个keep-alive连接模式下的非活动连接仅消耗2.5M内存 事件驱动:异步非阻塞模型、支持aio,mmap(内存映射)

nginx快速入门

1、work 进程 与 master 进程

2、反向代理(代理服务器接收请求) 和 负载均衡(访问nginx服务器 ——> 分发给各个服务器)

  • nginx -s reload 加载配置文件
  • server1 : 127.0.0.1/app -> 分发给各个服务器(127.0.0.1:8000、127.0.0.1:8001、127.0.0.1:8002)
http{
    upstream backend {
    # 同一个ip到同一个服务器(可以解决session问题): ip_hash; 
    
    # 权重三个服务(器),否则使用轮询进行分配
    server 127.0.0.1:8000 weight=3;
     server 127.0.0.1:8001;
      server 127.0.0.1:8002;
    }
    
    # 一个服务网站
    server {
        # 三个服务挂到同一个服务网站的域名:http://域名(127.0.0.1)/app
        location /app { # 所有访问/app路径的请求会被反向代理到上游的三个服务器(backend变量)中的一个。
            proxy_pass http://backend;
                }
            }
}
​

负载平衡:

默认使用轮询算法时,NGINX会按照服务器列表中的顺序逐个将请求分配给后端服务器,然后按照相同的顺序循环处理下一个请求。

这意味着每个服务器在一轮中都会被赋予处理请求的机会,从而在相对均匀地分配负载的同时,实现了基本的负载平衡。

  • 操作系统的进程调度也有一个轮询算法一致(就是时间片轮询)
  • 计算机中的 I/O(输入/输出)接口轮询与操作系统中的进程调度轮询是不同的概念。I/O 接口轮询指的是一种方式,通过该方式计算机系统可以周期性地检查外部设备或接口,以了解是否有新的数据或事件需要处理。

反向代理:

  • 假设你有一个 Nginx 服务器,其 IP 地址为 ip_ng,而你的 Nginx 配置中有一个代理块,用于处理访问 http://ip_ng/app 的请求,这时客户端可以通过访问 http://ip_ng/app 来访问你后端的三个服务。
  • 客户端只需要知道 Nginx 服务器的 IP 地址,而后端服务器的细节则由 Nginx 处理,也就是对客户端透明,但是其实也是可以直接敲具体的服务器的ip来访问的
  • dns:假如要dns绑定ngnix服务器即可,然后配置域名,其他服务器的ip直接在ngnix服务器上配

3、https组件

4、虚拟主机:一个服务器同时有多个网站(域名)

  • 一个server {} : 就是一个网站

实例参考.md

值得做的实验

juejin.cn/post/709712…