带你读《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

相关文章
|
1月前
|
消息中间件 存储 大数据
快手基于Apache Hudi的实践
快手基于Apache Hudi的实践
22 0
|
1月前
|
SQL 关系型数据库 MySQL
Apache Hudi在信息服务行业构建流批一体的实践
Apache Hudi在信息服务行业构建流批一体的实践
69 2
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
2月前
|
缓存 前端开发 JavaScript
tomcat核心技术+Nginx性能调优技术
而Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话
37 1
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
28天前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
33 0
|
1月前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
14天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
17 4
|
1月前
|
存储 SQL 分布式计算
Apache Hudi在Linkflow构建实时数据湖的生产实践
Apache Hudi在Linkflow构建实时数据湖的生产实践
40 0
|
1月前
|
存储 分布式计算 分布式数据库
字节跳动基于Apache Hudi构建EB级数据湖实践
字节跳动基于Apache Hudi构建EB级数据湖实践
27 2

热门文章

最新文章

  • 1
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,遇到错误代码“Handled Error”如何解决
    3
  • 2
    Serverless 应用引擎操作报错合集之阿里函数计算中我打开sd时遇到错误,信息为"Function instance exited unexpectedly(code 1, message:operation not permitted) with start command ' '."如何解决
    10
  • 3
    Serverless 应用引擎操作报错合集之阿里函数计算中配置完fc,出现‘Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'npm run start '. 报错如何解决
    12
  • 4
    Serverless 应用引擎操作报错合集之阿里函数计算中,出现"Process exited unexpectedly before completing request"错误如何解决
    6
  • 5
    Serverless 应用引擎操作报错合集之阿里函数计算中,总是报错“Process exited unexpectedly before completing request (duration: 0ms, maxMemoryUsage: 0.00MB)”如何解决
    7
  • 6
    Serverless 应用引擎操作报错合集之阿里函数计算中{"ErrorCode":"AccessDenied","ErrorMessage":"Current user is in debt."}出现这个代码如何解决
    10
  • 7
    Serverless 应用引擎操作报错合集之阿里函数计算中我的3dopenpose报错 "error 预览失败" 如何解决
    10
  • 8
    Serverless 应用引擎操作报错合集之阿里函数计算中,(FC)无法正常运行如何解决
    7
  • 9
    Serverless 应用引擎操作报错合集之阿里函数计算中,出现FC 3 assert torch.cuda.is_available() 报错如何解决
    9
  • 10
    Serverless 应用引擎操作报错合集之阿里函数计算中,生成图片时进程卡住如何解决
    10
  • 推荐镜像

    更多