Wetts's blog

Stay Hungry, Stay Foolish.

0%

服务器-0-知识点汇总.md

Web 服务器

Servlet 服务器

  • Tomcat
  • Jetty
    • 基于 netty 实现的服务端 Nio MVC 业务开发平台,提供性能监控、日志分析、动态扩展的功能。
    • Jetty 更轻量级
      • 由于 Tomcat 除了遵循 Java Servlet 规范之外,自身还扩展了大量 JEE 特性以满足企业级应用的需求,所以 Tomcat 是较重量级的,而且配置较 Jetty 亦复杂许多。但对于大量普通互联网应用而言,并不需要用到 Tomcat 其他高级特性,所以在这种情况下,使用 Tomcat 是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成 Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty 的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。
    • Jetty 更灵活
      • 体现在其可插拔性和可扩展性,更易于开发者对 Jetty 本身进行二次开发,定制一个适合自身需求的 Web Server。
  • JBoss
    • JBoss 是一个管理 EJB 的容器和服务器,但 JBoss 核心服务不包括支持 servlet/JSP 的 WEB 容器,一般与 Tomcat 或 Jetty 绑定使用。

Nginx

  • 是一个 web 服务器和反响代理服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。
  • 限流
    • Nginx 的限流都是基于漏桶流算法
      • 突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。
    • 限流有 3 种
      • 正常限制访问频率(正常流量)
        • 限制一个用户发送的请求,Nginx 多久接收一个请求。
        • Nginx 中使用 ngx_http_limit_req_module 模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的。在 nginx.conf 配置文件中可以使用 limit_req_zone 命令及 limit_req 命令限制单个IP的请求处理频率。
        • 1r/s 代表 1 秒一个请求,1r/m 一分钟接收一个请求, 如果 Nginx 这时还有别人的请求没有处理完,Nginx 就会拒绝处理该用户请求。
      • 突发限制访问频率(突发流量)
        • 限制一个用户发送的请求,Nginx 多久接收一个
        • 上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx 提供 burst 参数结合 nodelay 参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数。
        • 为什么就多了一个 burst=5 nodelay; 呢,多了这个可以代表 Nginx 对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话我 Nginx 就漏掉不接受你的请求
      • 限制并发连接数
        • Nginx 中的 ngx_http_limit_conn_module 模块提供了限制并发连接数的功能,可以使用 limit_conn_zone 指令以及 limit_conn 执行进行配置。
  • 负载均衡
    • 轮询(默认)
      • 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。
    • 权重 weight
      • weight 的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
    • ip_hash
      • 每个请求按访问 IP 的哈希结果分配,使来自同一个 IP 的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的 session 共享问题
    • fair(第三方插件)
      • 必须安装 upstream_fair 模块
      • 对比 weight、ip_hash 更加智能的负载均衡算法,fair 算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。哪个服务器的响应速度快,就将请求分配到那个服务器上。
    • url_hash(第三方插件)
      • 必须安装 Nginx 的 hash 软件包
      • 按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。
  • 问题
    • 为什么要用 Nginx?
      • 跨平台、配置简单、方向代理、高并发连接:处理 2-3 万并发连接数,官方监测能支持 5 万并发,内存消耗小:开启 10 个 Nginx 才占 150M 内存 ,Nginx 处理静态文件好,耗费内存少。
      • 而且 Nginx 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
      • 使用 Nginx 的话还能:
        • 节省宽带:支持 GZIP 压缩,可以添加浏览器本地缓存
        • 稳定性高:宕机的概率非常小
        • 接收用户请求是异步的