带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(4)

简介: 带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(4)

带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(3)https://developer.aliyun.com/article/1377540


2. Memory Model

image.png

 

接下来介绍一下Tomcat的内存模型。在平时的开发中,Tomcat确实做的太优秀了,几乎感觉不到它里面的buff建连过来到它读出来再到我们。Tomcat是基于servlet规划实现的web容器,所以我们拿到的第一个Tomcat的接口API是Servlet API。

 

它里面屏蔽了很多种内存,到底是操作系统读出来,读出来它里面是怎么copy的,到我们拿到的request参数和url它中间经历了多少复制,以及中间是怎么管理的,我们平时几乎没有机会去了解。这是我们之前做API网关的时候,我们压测到性能问题的时候发现的,所以我们就对它们整个内部原理进理解了一下。总结出了这张图,它内存buff的原理。

 

首先它缓存了请求行和请求头,从内核端到用户端我们一直拷贝,因为Tomcat也支持APR协议,这个协议是堆外内存的,所以它不需要那么多拷贝。但我们默认的http协议默认都是堆内存的,所以必须要通过从内核端到用户端,通过堆外内存的转换再到它的整个包,这中间有两个拷贝。

 

拷贝过来以后中间有一个ByteBuffer,它的请求行还没写成原则,请求行的header、method、url、querystring的协议都缓存在ByteBuffer里面。整个头有一个结束的标志叫HeadEndOffset,因为这些是不变的,我们在读body数据是时候,不会把前面的数据给覆盖掉了。

 

因为body可能就不到512k或者256k就够了,但body可能是一个大的Pod请求,可能要发几k数据。因为Socketsize默认是8k,如果你的post请求是16k,你可能要拷贝多少次。它就会再对外出来,再拷贝到ByteBuffer里面,从HeadEndOffset那里重新写数据,再整个上到上面的PostDataByte。所以如果整个拷贝出来,要经过三次的拷贝我们的Post请求。

 

image.png

写模型我们一般是GetPutBuffer、OutPutBuffer,里面我们的那些请求,CharBuffer里面是响应行和响应头,再写到ByteBuffer里面去。


带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(5)https://developer.aliyun.com/article/1377538

相关文章
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
1144 44
|
消息中间件 OLAP Kafka
Apache Doris 实时更新技术揭秘:为何在 OLAP 领域表现卓越?
Apache Doris 为何在 OLAP 领域表现卓越?凭借其主键模型、数据延迟、查询性能、并发处理、易用性等多方面特性的表现,在分析领域展现了独特的实时更新能力。
1002 9
|
人工智能 Cloud Native 安全
云原生+AI 为企业出海提供全新技术引擎!明天见
5月22日 14:00「飞天发布时刻」,阿里云云原生应用平台产品负责人李国强将重磅揭晓面向 AI 场景的云原生产品体系升级,通过弹性智能的全球一体化架构、开箱即用的云原生 AI 工程化能力,为中国企业出海提供全新技术引擎。
|
Cloud Native 关系型数据库 分布式数据库
|
存储 关系型数据库 分布式数据库
|
Kubernetes Cloud Native 云计算
云计算与云原生技术探索
🌟蒋星熠Jaxonic,云原生探索者!以代码为舟,遨游技术星河。专注容器化、微服务、K8s与DevOps,践行GitOps理念,拥抱多云未来。用架构编织星辰,让创新照亮极客征途!
云计算与云原生技术探索
|
存储 关系型数据库 分布式数据库
|
12月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
875 2
|
SQL 存储 运维
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
本文介绍了 Apache Doris 在菜鸟的大规模落地的实践经验,菜鸟为什么选择 Doris,以及 Doris 如何在菜鸟从 0 开始,一步步的验证、落地,到如今上万核的规模,服务于各个业务线,Doris 已然成为菜鸟 OLAP 数据分析的最优选型。
815 2
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
|
SQL 人工智能 数据挖掘
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践
Apache Doris 4.0 原生集成 LLM 函数,将大语言模型能力深度融入 SQL 引擎,实现文本处理智能化与数据分析一体化。通过十大函数,支持智能客服、内容分析、金融风控等场景,提升实时决策效率。采用资源池化管理,保障数据一致性,降低传输开销,毫秒级完成 AI 分析。结合缓存复用、并行执行与权限控制,兼顾性能、成本与安全,推动数据库向 AI 原生演进。
1177 0
Apache Doris 4.0 AI 能力揭秘(二):为企业级应用而生的 AI 函数设计与实践

推荐镜像

更多