美文网首页tomcat
高吞吐生产系统下Tomcat所面对的挑战

高吞吐生产系统下Tomcat所面对的挑战

作者: 肥兔子爱豆畜子 | 来源:发表于2021-11-09 15:28 被阅读0次

    原文《The Challenges Tomcat Faces in High Throughput Production Systems》是阿里中间件团队的工程师在2017年在迈阿密ApacheCon上的技术分享。很有参考价值。原文在这里可以找到:https://tomcat.apache.org/presentations.html

    高吞吐生产系统下Tomcat所面对的挑战

    大纲

    • Tomcat在阿里的使用
    • 高吞吐web应用
    • 面临的挑战
    • 案例研究
    • 总结

    一、Tomcat在阿里的使用

    • 2009年开始尝试

    • 2013年开始从JBoss迁移到tomcat

    • 2015年成为主力servlet容器,数千个web应用,数十万个应用实例

    • 现状,2017年, 95% tomcat,5%其他servlet容器。主要是7.0.x (support JDK 6+) 版本,少量8.0.x版本,并开始为实施微服务(比如springboot)准备8.5.x版本

    部署标准

    每个tomcat实例只部署一个web应用。

    tomcatcon1.png

    启动脚本功能
    • Per startup log rotation for catalina.out
    • Smart auto-fix for incorrect JVM args
    • CATALINA_BASE preparation
    • Tomcat startup status detection

    监测、诊断和开发工具
    • Tomcat Monitor (RESTful service)
      • Metrics for OS, JVM, Tomcat, Middleware, and application 操作系统、JVM、Tomcat、中间件、应用的指标Metrics
      • Classloading: locate which jar file a class is loaded from 类装载:定位class是从哪一个jar包加载的
      • Thread: per thread CPU usage, thread state, etc. 线程:每个线程的CPU使用情况、线程状态等等。
      • Connector stats: tomcat thread pool statistics Connector状态:tomcat线程池状态数据
    • Diagnostics on production environment 生产环境诊断
      https://github.com/oldmanpushcart/greys-anatomy
      • Much easier to use than BTrace 这个工具比BTrace使用简单(译者注:Greys,arthas的前身)
    • 开发工具
      • Package free tomcat Eclipse plugin 免打包tomcat eclipse插件
    其他值得一提的实践
    • 集群session管理, taobao Session
      • Cookie + 分布式kv存储(Tair)
    • 数据库连接池: Druid
      https://github.com/alibaba/druid
      • 高性能、可视化监控、扩展性
    • Multi-tenancy多租户
      • 传统web应用的高密度部署
      • 提供CPU和内存隔离
      • 基于多租户JVM

    二、高吞吐web应用

    tomcatcon2.png
    • Taobao API Gateway,主要提供给手机端APP
    • 与数百个后端服务交互
    • 每秒处理百万级请求
    整体架构
    tomcatcon3.png
    • Nginx + Tomcat部署在同一台机器

      • 安全性
      • Rate Limiting限流

    三、面临的挑战

    tomcatcon4.png

    • Connector的选择
    • Configuration调优
    • NIO Connection和并发问题
    • 案例1
    • 安全问题
    • 案例2

    connector选择,有3种架构方式:

    • BIO + Sync RPC :每个请求1个worker线程;没办法支撑到每秒数千个请求;CPU利用率低下。

    • APR + Async RPC :读request header是阻塞的;处理完一个连接过来的请求之后、等待下一个请求来之前、线程可以去服务其他连接,也就是“waiting for the next request ”是非阻塞的。缺点:JVM崩溃问题;维护成本高,需要额外单独的tcnative library

    • NIO + Async RPC :读request header和等连接上的下一个请求都是不阻塞线程的;完全异步,推荐。

    tomcatcon5.png
    Connector配置调优

    • Do not change if you really encounter some issue
    • Read the documentation carefully

    配置参数 默认 建议 说明
    ConnectionTimeout 20s 减小
    maxThreads 200 增加
    acceptCount (backlog) 100 增加 min(acceptCount , /proc/sys/net/core/somaxconn)
    processorCache 200 增加 max(maxThreads, concurrent connection)
    关闭access log

    使用nginx侧的access log

    四、案例研究

    五、总结

    • 通过异步化来增加系统的吞吐量
      • NIO 对于高吞吐量生产环境相对稳定
      • 检查正在使用的tomcat版本是否有已知的issue
    • 排查并发问题可能会非常棘手
      • 使用好的工具至关重要
    • 及时升级tomcat版本到最新的updates

    六、Q & A

    原文结束

    进一步阅读:

    深入剖析通信层和RPC调用的异步化(上)-InfoQ

    深入剖析通信层和RPC调用的异步化(下)-InfoQ

    双11背后的技术(2)概述JVM实现多租户共享内存 - 知乎 (zhihu.com)

    相关文章

      网友评论

        本文标题:高吞吐生产系统下Tomcat所面对的挑战

        本文链接:https://www.haomeiwen.com/subject/lbnmzltx.html