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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 带你读《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,它的请求行还没写成原则,请求行的headermethodurlquerystring的协议都缓存在ByteBuffer里面。整个头有一个结束的标志叫HeadEndOffset,因为这些是不变的,我们在读body数据是时候,不会把前面的数据给覆盖掉了。

 

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

 

image.png

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


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

相关文章
|
2天前
|
缓存 前端开发 JavaScript
tomcat核心技术+Nginx性能调优技术
而Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话
15 1
|
1月前
|
Java 应用服务中间件 Apache
简介Nginx,Tomcat和 Apache
简介Nginx,Tomcat和 Apache
简介Nginx,Tomcat和 Apache
|
2月前
|
存储 SQL Cloud Native
深入了解云原生数据库CockroachDB的概念与实践
作为一种全球领先的分布式SQL数据库,CockroachDB以其高可用性、强一致性和灵活性等特点备受关注。本文将深入探讨CockroachDB的概念、设计思想以及实践应用,并结合实例演示其在云原生环境下的优越表现。
|
2月前
|
Cloud Native 关系型数据库 大数据
CockroachDB:云原生数据库的新概念与实践
本文将介绍CockroachDB,一种先进的云原生数据库,它具备分布式、强一致性和高可用性等特点。我们将探讨CockroachDB的基本原理、架构设计以及在实际应用中的种种优势和挑战。
|
12天前
|
人工智能 监控 Cloud Native
阿里云参编业内首个代码大模型标准丨云原生 2024 年 1 月产品技术动态
阿里云参编业内首个代码大模型标准丨云原生 2024 年 1 月产品技术动态
|
2月前
|
安全 Java 应用服务中间件
阿里技术官架构使用总结:Spring+MyBatis源码+Tomcat架构解析等
分享Java技术文以及学习经验也有一段时间了,实际上作为程序员,我们都清楚学习的重要性,毕竟时代在发展,互联网之下,稍有一些落后可能就会被淘汰掉,因此我们需要不断去审视自己,通过学习来让自己得到相应的提升。
|
2月前
|
Kubernetes Cloud Native 调度
云原生技术专题 | 云原生容器编排问题盘点,总结分享年度使用Kubernetes的坑和陷阱
随着云原生的兴起,越来越多的应用选择基于Kubernetes进行部署,可以说Kubernetes 是最流行的容器编排和部署平台。它的强大功能特性,可以保障在生产中可靠地运行容器化应用程序,相关的DevOps等工具也应运而生,下面就是小编简单化了一个Kubernetes的逻辑架构图。
305 9
云原生技术专题 | 云原生容器编排问题盘点,总结分享年度使用Kubernetes的坑和陷阱
|
8天前
|
Prometheus 监控 Kubernetes
青团社:亿级灵活用工平台的云原生架构实践
青团社:亿级灵活用工平台的云原生架构实践
261727 4
|
9天前
|
存储 Java 应用服务中间件
玩转Apache Tomcat
玩转Apache Tomcat
20 0
|
13天前
|
人工智能 运维 监控
「云原生可观测团队」获选「InfoQ 年度技术内容贡献奖」
「云原生可观测团队」获选「InfoQ 年度技术内容贡献奖」

相关产品

  • 云消息队列 MQ
  • 云消息队列 Kafka 版
  • 微服务引擎
  • 推荐镜像

    更多