• 网络优化


    网络优化

    个人原创,允许转载,请注明出处,作者,否则追究法律责任。

    数据库优化【IO问题优化】-------memcache 加快提供数据的速度

    web优化 ---- 缓存 varnish

    web服务器
    1 接受用户请求
    2 处理请求
    3 响应请求

    最初:业务量很少
    a 前端后端放在一台机器,实用普通机械硬盘。 对cpu 内存 磁盘等等资源都会进行抢占。
    b 把后端服务器拆分出来。【也可以保证数据安全。】
    c 将前端页面中的动态页面和静态页面分离。------静态页面走缓存,比如varnish、或者买CDN。动态页面走memcache、redis。。
    d 通过集群方式增加web的处理能力。
    lvs: nat
    DR 必须在同一个机房,没法异地容灾。
    tun
    keeplive 组播,VPN【虚拟专用网络】
    单播 多播【组播】 广播
    【fullnat】
    nginx 速度不如lvs,但是灵活性强。
    haproxy

    单个集群处理能力终究有限。
    多集群协同处理用户请求? 路由分发
    OSPF【开放式最短路径优先】


    Client 首页分发 route【ospf】 多个集群 lvs分发 RS
    route【ospf】 多个集群 lvs分发 RS
    route【ospf】 多个集群 lvs分发 RS
    首页分发:根据业务不同进行拆分。
    天猫超市、男装、女装、天猫国际。。。。。

    天猫超市:
    route【ospf】 多个集群 lvs分发 RS
    天猫国际:
    route【ospf】 多个集群 lvs分发 RS

    PV page view 用户访问一次页面。
    UV user view 用户访问的数量。

    峰值pv【每秒并发数】:日pv量/86400*[峰值倍数5-8倍]
    2000000/86400*8=185

    带宽(单位bit)=PV数*页面的大小(单位byte)*8
    185*10M*8=14814mb/s 1M=100元
    a cdn缓存将超过80%的静态页面缓存下来。
    b 客户端本地有缓存。

    请求数(QPS) query per sec 每秒请求数。
    web通过子进程分开处理不同的请求。
    峰值请求数=日pv量/86400*每个pv的请求数*响应一个请求的平均时间*峰值倍数【5】
    2000000/86400*50*1*5=5787

    运营成本的计算:
    设备成本
    带宽成本
    人员成本 ----- 2 10 3
    10000 12% 1200
    2000 12% 240

    买cdn

    dell 710 3000/月
    云服务器 16核 32G 节约一半成本。


    lsof -i:80| wc -l
    ps aux

    网络连接状态:
    netstat
    -a 显示所有选项,默认不显示listen相关的信息
    -n 以数字的形式显示
    -t 显示tcp相关信息
    -u 显示udp相关信息
    -p PID/Program name 显示PID和程序名称
    -l 仅显示listen状态的服务
    -r 显示路由信息
    -e 显示扩展信息
    -c 刷新间隔,每隔多少时间执行一次netstat命令

    常用的:
    netstat -antp ---查看所有的端口
    netstat -ntlp ---查看监听的端口

    IPV4 : 32位
    IPV6 : 128位
    0-9 a b c d e f
    ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
    IPV6的私有地址:fe80:....
    :: 代表所有的ip
    0.0.0.0 代表所有的ipv6的地址
    0000:0000:0000:0000:0000:0000:0000:0000 缩写成: "::"
    IPV6缩写原则:左边的零可以省略
    0100:1000:0010
    100:1000:10

    linux 用户打开的最大文件限制:
    默认为 1024个
    ulimit -n
    1024
    个人电脑使用,不用改,但服务器必需改这个。几千上万,一下子就上来了
    手动修改:
    方法一:
    vi /etc/security/limits.conf
    * soft nofile 102400 (nofile:number file 文件数量)(* 可以改成Apache 指定用户)
    * hard nofile 102400
    方法二:
    修改内存:ulimit -HSn 102400 (H:hard,S:soft)


    内核调优:
    两种方法:
    1,修改 /proc/.... 这时修改内存里面的参数,源文件是从内核参数中读取的。重启失效。
    2,修改内核参数:
    vim /etc/sysctl.conf
    ...
    systemctl -p (让修改立马生效,重启后仍然有效。)
    修改内核参数:/etc/systctl.conf
    这个文件的里的内容和内存中的文件一一对应。比如:
    net.ipv4.tcp_syscookies = 1 就是对应的: /proc/sys/net/ipv4/tcp_syscookies这个文件


    listen连接数,定义了最大的监听队列。每一个端口最大能监听多大的队列。
    vim /proc/sys/net/core/somaxconn

    引申:Apache的配置文件:

    <IfModule prefork.c> ---------------------------- prefork模式下
    StartServers 8 默认启动多少个进程
    MinSpareServers 5 最小空闲进程
    MaxSpareServers 20 最大
    ServerLimit 256 进程数限制
    MaxClients 256 最大连接数限制,请求的并发量 (这个值不能超过上面的进程数限制)
    MaxRequestsPerChild 4000 一个子进程能够处理多少个请求。


    apache同时能够处理的并发数=MaxClients*进程的线程数(在perfork模式下,一个进程产生一个线程。)


    worker --------------------------- worker模式下

    StartServers 2 #启动apache时启动的httpd进程个数。
    MaxClients 150 #最大并发连接数。
    MinSpareThreads 25 #服务器保持的最小空闲线程数。
    MaxSpareThreads 75 #服务器保持的最大空闲线程数。
    ThreadsPerChild 25 #每个子进程的产生的线程数。
    MaxRequestsPerChild 0 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。

    </IfModule>
    该模式下,子进程的数量是固定的,线程数不受限制。当客户端连接到服务器时,又空闲的线程提供服务。 如果空闲线程数不够,子进程自动产生线程来为新的连接服务。该模式用于多站点服务器。


    /proc/sys/net/ipv4:
    tcp_syn_retries 默认是5,服务器发送syn的次数【主动连接】,可以修改为2.
    tcp_max_syn_backlog 默认1024,服务器维护的tcp syn队列的长度【被动连接时】。
    tcp_synack_retries 默认5,放弃连接之前发送synack的次数。改成2.
    tcp_syncookies 红帽默认为1,开启状态,
    tcp_retries1 默认3,放弃回应一个tcp前,要重试几次。
    tcp_retries2 默认15,放弃一个已经建立连接的tcp之前重试几次, 建议改为5.

    tcp预分配的缓冲区大小:
    tcp_rmem 接收缓冲区的大小
    4096 87380 4194304 最小 默认 最大 单位字节
    tcp_wmem 发送缓冲区的大小
    4096 16384 4194304
    tcp_mem 第一个值是内存使用的下限,第二个是压力模式, 第三个是内存使用的上限。
    176928 235904 353856 【单位 是内存页,4KB】


    tcp双工协议。会话的双方都可以接受和发送数据。
    发送窗口:取决于对面的接收窗口的大小。
    接收窗口:取决于硬件、系统、应用等的限制。

    发送缓存:
    1 已经发送并收到对面的ack
    2 已经发送但是没有收到对面的ack
    3 没有发送但是准备发送
    4 没有发送也不准备发送
    2+3 是发送窗口

    对于接收缓存:
    1 已接收
    2 未接收准备接收
    3 未接收也不准备接收
    2 是接收窗口

    接收窗口和发送窗口称为 滑动窗口

    [root@localhost core]# cat rmem_default
    124928 改 248000
    [root@localhost core]# cat wmem_default
    124928 248000
    [root@localhost core]# cat wmem_max
    124928 496000
    [root@localhost core]# cat rmem_max
    124928 496000


    tcp长连接设置:ipv4中
    tcp_keepalive_intvl 默认75,单位为秒,探测间隔,改成30秒
    tcp_keepalive_probes 默认9,单位为次数,探测次数,改成3次
    tcp_keepalive_time 默认7200单位为秒,2小时,长连接时间,改为1800


    四次断开:
    tcp_fin_timeout time wait的回收时间60,改成30秒
    tcp_tw_reuse 默认0,不建议修改。
    tcp_tw_recycle 默认0,time wait的快速回收,也不建议修改。



  • 相关阅读:
    js实现的hashMap
    vi编辑器常用命令汇总以及linux系统操作的命令(自己需要用到什么,经过测试正确的,会持续向上添加)
    使用conda,提示-bash: conda: command not found
    tmux常用命令
    OSError: [WinError 126] JVM DLL not found: C:Program FilesJavajdk1.8.0_131jreinserverjvm.dll
    python建立连接,获取动态地址,有缺陷
    python代码中,添加子进程的运行
    python通过建立长链接,获取动态ip,这种方式可以长时间保持连接
    ImportError: cannot import name PDFDocument
    http请求参数之Query String Parameters、Form Data、Request Payload
  • 原文地址:https://www.cnblogs.com/kaishirenshi/p/7622204.html
Copyright © 2020-2023  润新知