【藏经阁一起读】(78)__《Apache Tomcat 的云原生演进》

【藏经阁一起读】(78)

__《Apache Tomcat 的云原生演进》

目录

__《Apache Tomcat 的云原生演进》

一、读后感

二、文章知识点摘要

2.1、Tomcat的技术内幕和在喜马拉雅的实践

2.2、GraalVM static compilation in web container application(Web容器应用程序中的GraalVM静态编译)

2.3、威胁建模

2.4、Apache Sling


技术作品介绍

CoC Asia 2023(原ApacheCon) WebServer/Tomcat 专题分享实录电子书旨在全面介绍 Apache Tomcat 的前世今生,我们将探索 Apache Tomcat 的技术内幕,并分享在喜马拉雅中实践的经验,也将介绍在下一个云原生时代 Tomcat 的新形态,探索在 GraalVM 静态编译在 Web 容器应用中的使用实践等。

作者: 彭荣新 饶子昊 李晗 陈承 吕梦超 Dennis Jacob Robert Munteanu
发布时间:2023-11-02
章节数:8

文章目录:

1、Tomcat的技术内幕和在喜马拉雅的实践

2、GraalVM static compilation in web container application(Web容器应用程序中的GraalVM静态编译)

3、How to participate in Tomcat community(如何参与 Tomcat 社区)

4、Web 容器可观测最佳实践

5、Dubbo Echo System-Dubbo Go Pixiu
6、Securing Apache Tomcat(保护 Apache Tomcat)

 7、nSecure By Default Web Applications Apache Sling-Robert Munteanu(默认安全 Web 应用程序 Apache Sling-Robert Munteanu)

一、读后感

  Tomcat 是一个非常完整、完善、功能非常强大的开源项目。我们每个人开始做开发,接触的第一个项目可能就是 Tomcat。在应用服务器的发展历程中,Apache Tomcat 在其中扮演着极其重要的角色。从最初的 WebLogic 到 Jboss , 到Tomcat/Jetty , 再 到 现 在 Spring Boot 使 用 的 嵌 入式 Tomcat,我们见证了应用服务器从封闭到开源,逐步轻量化的演变过程。

  文章中,威胁建模部分的分析提醒我们注意,在云原生时代,针对Tomcat的威胁建模需要结合具体的云环境和应用场景进行分析和评估,综合采取多种防护手段,以确保应用程序的安全性和稳定性。

  在云原生时代,威胁建模是指对云原生环境中的威胁进行建模和评估,以便确定可能的威胁来源、攻击方式和影响程度,并采取相应措施进行预防和应对。这是云原生安全的重要组成部分,因为云原生环境具有高度动态性和复杂性,而传统安全防护手段已经不能完全适应。

  Tomcat是一个开源的Web应用服务器,常用于Java应用程序的部署和运行。由于Tomcat具有广泛的使用和部署,因此也成为了攻击者针对Web应用程序的目标之一。

  不同公司有不同企业文化,在威胁建模应用上面的要求和部署也大不相同。一些企业可能因为在功能设计上的一个缺陷,后期维护运营时需要花上数百倍费用来修补,当然需要在设计阶段更多下功夫。在云原生时代,威胁建模对各个流程环节的细化把控,应用的级别,也会有理念上的冲突,需要全局权衡来看待里面的安全风险和解决方案。

二、文章知识点摘要

2.1、Tomcat的技术内幕和在喜马拉雅的实践

  主要对 Tomcat 的网络 io,线程模型,内存模型,类加载机器,以及对像池技术做了一个介绍

  作者通过在喜马拉雅的实践,总结出了以下几点经验:

  NIO 模型主要分为三个部分 Accept 线程,Poller 线程,Catalina work 线

  NIO2和 NIO区别比较图:

  那么到底怎么选呢?

  作者在文章中给出了建议:

  Tomcat 9 和 10 默认的还是 NIO。通过官方的配置我们也能看得出来,它建议的还是 NIO。
  虽然切换次数减少了,系统调用次数减少,系统的切换减少了。但是性能在我们平时功能可能感觉不到,所以对于稳定还是 NIO 这种模式。

2.2、GraalVM static compilation in web container application(Web容器应用程序中的GraalVM静态编译)

  从这张图我们可以看到,一个 Java 应用从启动到运行到性能的峰值,中间还是会经过一个比较长的时间,包括虚拟机初始化、应用初始化、应用预热等等过程。这就是 Java 应用/Java Web 应用启动比较耗时的原因。

  解释执行编译的过程,Java 程序它是解释执行,它在解释的过程中会把我们的代码全部逐步地加载到内存中,因为它不知道哪一块代码需要,哪一块不需要,所以实际加载的代码会比实际要执行的代码要多很多。这个就是应用在运行过程中的额外的内存开销。

  解决办法是静态编译技术

  上图右侧是微服务的框架,在适配了静态编译之后,展示了在启动速度、运行时、内存占用方面的表现,可以看到提升还是非常大的。

  任何技术都有两面性,静态编译也是一样。它虽然有很多优势,但也存在着一些不足。

  • 它让动态特性使用起来比较麻烦,
  • 如果它把某些代码误识别为不需要执行了,这些代码就不会包含在可执行文件里了。因此就会使运行过程出现问题。

  解决这个问题的方法是,动态特性可以通过配置文件,把程序里的动态特性做一些标注。在静态编译的时候,它会把配置文件里相关的类编译进去。

  GraalVM 提供了native-image-agent 的工具,也就是在静态编译之前,我们预执行一下,这样它就可以把应用程序中所有和动态特性的内容都扫描出来了,然后把它记录在配置文件里。等到静态编译的时候,它就会把相关的东西都包含进去,这样就解决了代码里面动态特性可能会被误识别的问题。

静态编译助力 Java Web 容器云原生

  作者测试的一些比较复杂的 demo,可以看到不光是简单的应用,复杂的应用通过静态编译之后,它的启动时间、运行时内存占用也都有非常明显的改善。

2.3、威胁建模

  在信息安全领域,很重要的三个基本要素是CIA——

  • 机密性(Confidentiality):保护信息免向未授权的人披露
  • 一致性(Integrity):保护信息免受未授权的人更改
  • 可用性(Availability):让信息供已授权的人需要时可取用

  当我们谈论安全时,我们会想到三个支柱或者想要达到的三个理想状态,它们是保密性、完整性和可用性。

  STRIDE 模型是为您的应用程序创建威胁模型的有用工具。
  STRIDE 是首字母缩略词,它包含:

  • Spoofing欺骗
  • Tampering篡改
  • Repudiation否认
  • Information disclosure信息披露
  • Denial of service拒绝服务
  • Elevation of privilege特权提升

威胁建模就是这样一种分析和解决问题的结构化方法,用来识别、量化并应对威胁,利用抽象的方法来帮助思考风险。威胁建模允许系统安全人员传达安全漏洞的破坏力,然后定义防范或减轻系统威胁的对策,并按轻重缓急实施补救措施。

2.4、Apache Sling

Apache Sling是一个基于Apache Felix OSGi容器构建的开源Web框架。它旨在通过提供一个 RESTful Web 框架来简化面向内容的 Web 应用程序的开发,该框架将 HTTP 请求 URL 映射到基于 JCR(Java 内容存储库)规范的内容资源。

  Apache Sling提供了一个模块化架构,允许开发人员通过使用OSGi捆绑包来添加功能。这种模块化设计使扩展和定制框架变得容易,以满足特定的项目要求。

  Apache Sling的主要功能之一是能够以各种格式呈现内容,包括HTML、JSON、XML等。这使得开发可供各种客户端(包括移动应用程序、Web 浏览器和其他系统)使用的 Web 应用程序变得容易。

  Apache Sling 是一个基于 Java 开发 web 应用程序的框架。它的主要特征是 RESTful,它组织了你的数据库或者分层结构中的资源。

  现在 Apache Sling 中的一条信息被称为资源,它有一个名字,非常简单的属性,可以是字符串、日期、二进制属性和可选的父属性。

  这基本上就是创建分层所需要做的一切,所以你不需要弄清楚如何创建一致的资源树,你的 API 端点应该是什么,是 /user/articles /comments 等等。你已经创造了资源并将它们填到了树中,就像在数据库中创建条目一样。当然也有一些,您可以从 Apache Sling 中
获得默认表示。所以不需要写 JSON 导出器,默认 XML 等。

  Apache Sling 的特殊之处在于它维护了用户的身份贯穿应用的所有层。这个的意思是,当用户请求使用浏览器或者命令行工具的时候,它自带会话 cookie 或身份验证数据。当它转到 Sling 时,Sling 能够确认用户的身份,然后将“这是 John Doe”,转给内容存储库。

  Apache Sling 的另一个特点是有安全性,即 XSS 保护。这意味着当在模板的脚本中呈现内容时,HTML 模板语言引擎意识到它是在 HTML 上下文中编写的,它会根据上下文自动转义输出。如果是 HTML 标签,它知道该怎么做。同样,如果它是一个属性,它知道该怎么确保内容不脱离边界。

  Apache Sling是一个功能强大的Web框架,可简化以内容为中心的应用程序的开发。它使用 OSGi 和 JCR 技术,以及其模块化架构,使其成为各种 Web 项目的灵活且适应性强的选择。

             推荐阅读:

AIGC 是通向 AGI 的那条路吗?
数字人,虚拟数字人——你看好数字人领域的发展吗?
大数据的关键技术之——大数据采集
[你找到牵手一辈子的人了吗?] 七夕情人节特辑
数字技术能让古籍“活过来”吗?
心情不好时,帮自己训练个AI情绪鼓励师吧(基于PALM 2.0 finetune)
深度学习框架TensorFlow
人工智能开发人员工作流程、看法、工具统计数据
2023 年6月开发者调查统计结果——最流行的技术(2)
2023 年6月开发者调查统计结果——最流行的技术(1)
让Ai帮我们画个粽子,它会画成什么样呢?

9e598365ba5344e282453e71a676a056.jpeg​​​​​

b9b9f2b9374646798ca554110a498cda.jpeg​​​​​

23f61e3eac99458296be0fedea10019e.jpeg​​​​​

给照片换底色(python+opencv)猫十二分类基于大模型的虚拟数字人__虚拟主播实例

bfa502b957c247a7872d7e645d4c6f03.jpeg​​​​​

2f073e39924e42d2b33221f4262dcc1d.jpeg​​​​​

9d7e2b6a00aa45fd82291f0d5f9eea7e.jpeg​​​​​

计算机视觉__基本图像操作(显示、读取、保存)直方图(颜色直方图、灰度直方图)直方图均衡化(调节图像亮度、对比度)

01bfb23f2f894ee0b0164f52e57bbbbc.png​​​​​

47c92d6cf9fe4d279a142480a4340a0d.png​​​​​

1620a2a7b0914c42b3a8254e94269a79.png​​​​​

语音识别实战(python代码)(一)

 人工智能基础篇

 计算机视觉基础__图像特征

93d65dbd09604c4a8ed2c01df0eebc38.png​​​​​

 matplotlib 自带绘图样式效果展示速查(28种,全)

074cd3c255224c5aa21ff18fdc25053c.png​​​​​

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

fe88b78e78694570bf2d850ce83b1f69.png​​​​​

62e23c3c439f42a1badcd78f02092ed0.png​​​​​

cb4b0d4015404390a7b673a2984d676a.png​​​​​

立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦

 Python 3D可视化(一)

让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

e84d6708316941d49a79ddd4f7fe5b27.png​​​​​

938bc5a8bb454a41bfe0d4185da845dc.jpeg​​​​​

0a4256d5e96d4624bdca36433237080b.png​​​​​

 python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印

 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)

python爱心源代码集锦(18款)

dc8796ddccbf4aec98ac5d3e09001348.jpeg​​​​​

0f09e73712d149ff90f0048a096596c6.png​​​​​

40e8b4631e2b486bab2a4ebb5bc9f410.png​​​​​

 Python中Print()函数的用法___实例详解(全,例多)

 Python函数方法实例详解全集(更新中...)

 《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念

09e08f86f127431cbfdfe395aa2f8bc9.png​​​​​

6d64357a42714dab844bf17483d817c0.png​​​​​

用代码过中秋,python海龟月饼你要不要尝一口?

 python练习题目录

03ed644f9b1d411ba41c59e0a5bdcc61.png​​​​​

daecd7067e7c45abb875fc7a1a469f23.png​​​​​

17b403c4307c4141b8544d02f95ea06c.png​​​​​

草莓熊python turtle绘图(风车版)附源代码

 ​草莓熊python turtle绘图代码(玫瑰花版)附源代码

 ​草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码

4d9032c9cdf54f5f9193e45e4532898c.png​​​​​

c5feeb25880d49c085b808bf4e041c86.png​​​​​

 巴斯光年python turtle绘图__附源代码

皮卡丘python turtle海龟绘图(电力球版)附源代码

80007dbf51944725bf9cf4cfc75c5a13.png​​​​​

1ab685d264ed4ae5b510dc7fbd0d1e55.jpeg​​​​​

1750390dd9da4b39938a23ab447c6fb6.jpeg​​​​​

 Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细)

 色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名)

2023年4月多家权威机构____编程语言排行榜__薪酬状况

aa17177aec9b4e5eb19b5d9675302de8.png​​​​​​

38266b5036414624875447abd5311e4d.png​​​​​

6824ba7870344be68efb5c5f4e1dbbcf.png​​​​​

 手机屏幕坏了____怎么把里面的资料导出(18种方法)

【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向)

 查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决

1408dd16a76947e4a7eb3c54cd570d95.png​​​​​

vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)

fea225cb9ec14b60b2d1b797dd8278a2.png​​​​​

bba02a1c4617422c9fbccbf5325850d9.png​​​​​

37d6aa3e03e241fa8db72ccdfb8f716b.png​​​​​

2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特

 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套)

SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)

5d409c8f397a45c986ca2af7b7e725c9.png​​​​​

6176c4061c72430eb100750af6fc4d0e.png​​​​​

1f53fb9c6e8b4482813326affe6a82ff.png​​​​​

【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码)

 2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载)

fffa2098008b4dc68c00a172f67c538d.png​​​​​

5218ac5338014f389c21bdf1bfa1c599.png​​​​​

c6374d75c29942f2aa577ce9c5c2e12b.png​​​​​

 tomcat11、tomcat10 安装配置(Windows环境)(详细图文)

 Tomcat端口配置(详细)

 Tomcat 启动闪退问题解决集(八大类详细)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/198817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业级开发链表思路

项目结构 头文件代码 头文件代码LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #include <stdio.h> #include <stdlib.h> #include <iostream> // 链表小节点 typedef struct LINKBODE {struct LINKBODE* next;}LinkNode; // 遍历的函数指针 typedef …

UE5、CesiumForUnreal实现加载GeoJson绘制多面(MultiPolygon)功能(支持点选高亮)

文章目录 1.实现目标2.实现过程2.1 数据与预处理2.2 GeoJson解析2.3 Mesh构建与属性存储2.4 核心代码2.5 材质2.6 蓝图应用测试3.参考资料1.实现目标 在之前的文章中,基于GeoJson数据加载,实现了绘制单面功能,但只支持单个要素Feature。本文这里实现对Geojson内所有面要素的…

Python字典类型

目录 目标 版本 官方文档 简介 实战 创建 循环 常用方法 目标 掌握字典类型的使用方法&#xff0c;包括&#xff1a;创建、循环、常用方法等操作。 版本 Python 3.12.0 官方文档 Mapping Types — dicthttps://docs.python.org/3/library/stdtypes.html#mapping-type…

绝地求生:成长型皮肤异色定价是否有些夸张?

大家好&#xff0c;我闲游盒小盒子&#xff01; 自从26.2更新上架回归的黑市中四款成长型皮肤以后&#xff0c;能看到社区里很多玩家都分享抽中了自己心仪的成长型皮肤。 但是对于异色很少有人去实装&#xff0c;大多数玩家都是选择去分解异色换取五张图纸然后追求升级原皮等级…

【PyQt】(自定义类)阴影遮罩

写了一个感觉有些用的小玩具。 用于给控件添加阴影遮罩(强调主控件的同时屏蔽其余控件的点击) 自定义阴影遮罩Mask&#xff1a; from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout from PyQt5.QtGu…

L型骨牌覆盖问题。

问题&#xff1a;解决一个2k*2k的特殊棋牌上的L型骨牌覆盖问题。 思路&#xff1a; 棋盘覆盖实现的基本方法为分治法 当k0时(1ⅹ1棋盘)&#xff0c;及特殊方格&#xff0c;骨牌数为0 当k >0时&#xff0c;将2kⅹ2k棋盘分割为4个2k-1ⅹ2k-1子棋盘了 特殊方格位于4个较小…

【3D程序软件】SideFX与上海道宁一直为设计师提供程序化 3D动画和视觉效果工具,旨在创造高质量的电影效果

Houdini是一个 从头开始构建的程序系统 使艺术家能够自由工作 创建多次迭代 并与同事快速共享工作流程 Houdini FX为 视觉特效艺术家创作故事片 广告或视频游戏 凭借其基于程序节点的工作流程 Houdini FX可让 您更快地创建更多内容 从而缩短时间并 在所有创意任务中…

制作电脑微信双开快捷方式

一、介绍 电脑下载的微信正常只能打开一个&#xff0c;那有时候需要双开甚至多开微信我们需要怎么操作呢&#xff1f; 我这里就讲一个制作微信双开快捷键方式的办法&#xff0c;争对其他应用也是一样的原理。 二、制作过程 1、右击微信快捷方式 2、点击属性 3、复制目标 …

微服务实战系列之Cache

前言 欢迎来到Cache&#xff08;缓存&#xff09;的世界&#xff01; 自从世界第一台计算机诞生之日起&#xff0c;人们对效率的渴望逐步增强。从CPU到存储&#xff0c;从芯片到内存&#xff0c;一批又一批的先驱以一种孜孜不倦的“工匠”精神&#xff0c;为计算机运行效率的提…

MyBatis-Plus及多数据源入门教程

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2、MySQL 8.0.34 框架介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyBatis 是一款非常优秀的开源…

快速了解Spring AOP的概念及使用

文章目录 1. AOP概念1.1 什么是AOP&#xff1f;1.2 什么是Spring AOP&#xff1f; 2. Spring AOP的使用2.1 引入Spring AOP依赖2.2 编写AOP程序 3. Spring AOP详解3.1 Spring AOP核心概念1. 切点&#xff08;Pointcut&#xff09;2. 连接点&#xff08;Join Point&#xff09;3…

C++ day37 贪心算法 单调递增的数字 监控二叉树

题目1&#xff1a;738 单调递增的数字 题目链接&#xff1a;单调递增的数字 对题目的理解 返回小于或等于n的最大数字&#xff0c;且数字是单调递增&#xff08;单调递增数字的定义&#xff1a;每个相邻位上的数字满足x<y&#xff09; 贪心算法 注意本题的遍历顺序是从…

【算法刷题】Day7

文章目录 283. 移动零1089. 复写零 283. 移动零 原题链接 看到题目&#xff0c;首先看一下题干的要求&#xff0c;是在原数组内进行操作&#xff0c;平切保持非零元素的相对顺序 这个时候我们看到了示例一&#xff1a; [ 0, 1, 0, 3,12 ] 这个时候输出成为了 [ 1, 3, 12, 0, …

16.spirng源码解析-registerBeanPostProcessors

注册拦截bean创建的bean处理器 此部分实质上是在BeanDefinitions中寻找BeanPostProcessor&#xff0c;之后调用BeanFactory.addBeanPostProcessor方法保存在一个List中&#xff0c;注意添加时仍然有优先级的概念&#xff0c;优先级高的在前面。

内测分发平台是否支持敏捷开发和持续集成?

大家好&#xff0c;我是咕噜-凯撒。敏捷开发和持续集成是软件开发中非常重要的流程和方法。内测分发平台作为应用开发和测试的关键环节需要具备这种能力。下面我简单的介绍一下敏捷开发和持续集成和提供的功能。图片来源&#xff1a;news.gulufenfa.com 敏捷开发是一种迭代、协…

在 The Sandbox 设置总部,SCB 10X 和 T-POP 为 4EVE 元宇宙音乐会揭幕

协作学习为全球粉丝提供了无限的可能性&#xff0c;让他们通过革命性的元宇宙体验沉浸在泰国流行文化中。 作为 SCBX 集团背后的创新力量&#xff0c;SCB 10X 很高兴宣布与 T-POP Incorporation 展开开创性合作&#xff0c;T-POP Incorporation 是泰国流行文化在全球舞台上的领…

leetcode算法之字符串

目录 1.最长公共前缀2.最长回文子串3.二进制求和4.字符串相乘 1.最长公共前缀 最长公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//法一&#xff1a;两两比较string ret strs[0];for(int i1;i<strs.size();i){ret f…

Ps:子路径的上下排列以及对齐与分布

不论是一个形状图层&#xff08;或图层的矢量蒙版&#xff09;上的多个形状还是同一路径层上多个路径&#xff0c;只要对应“路径”面板的一个路径层&#xff0c;可以将这些路径称为该路径层的“子路径”&#xff0c;也称为“组件”。 当一个路径层上有两个以上的子路径时&…

量子力学:科技前沿的探索与挑战

量子力学:科技前沿的探索与挑战 一、量子力学的魅力与挑战 量子力学是研究微观粒子如电子、光子等行为的物理学分支。与经典力学不同,量子力学描述了一个充满不确定性和概率性的世界。在这个世界里,粒子可以同时处于多个状态,只有当我们对其进行测量时,它才会“选择”一个…

【Python基础】爬取豆瓣电影Top250+爬取知乎专栏文章标题

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…