Undertow是JBoss开源组织旗下一款Web服务器的名称,随着Wildfly(原JBossAS)版本8,一并发布出来,是内置缺省的Web容器。我们知道JBoss应用服务器之前一直使用Tomcat作为Web容器,而Web容器可以说是应用服务器中最重要的模块之一,所以这个改变引起开发者的广泛关注。
为什么要重新设计一款新的Web服务器呢?官网FAQ给出一个说明:
“Before we created Undertow we needed multiple web server technologies to meet our needs. Undertow was designed to be flexible and efficient enough to meet every use case we had and every use case we could think of. Undertow is embeddable and easy to use, but is also well suited for application servers. It has great performance, but also rich enterprise Java capabilities. It has efficient non-blocking reactive APIs, but also more familiar traditional blocking APIs. It has new innovative APIs, but also standard APIs. It can run large dynamic applications, but is also lightweight enough to replace a native web server.”
归纳来说就是三点:
1. 更好的满足JBoss应用服务器的集成需要。Tomcat最初设计于10年前,体系结构没有办法进行灵活的修改。在和JBoss应用服务器集成时,需要写大量的组合代码使得Tomcat和JBossAS协同工作。
2. 嵌入式需求。不论是JBoss应用服务器本身,还是目前微服务(MicroService)的设计倾向,都希望能够web容器足够小而精悍,可以嵌入使用,而Tomcat很难满足这个需要。
3. 支持Websocket协议需求和NIO,异步化思路等的促进。异步通信框架在并发连接数,性能的优异表现促使开发人员想重新按照新的思路来设计一款Web服务器。
Undertow的主力开发人员是Stuart Douglas,也是JBossAS的核心开发者,另外David M. Lloyd(JBossAS架构师)和Jason Greene(JBossAS技术领导人)也参与了设计和开发。
在Undertow刚发布beta版时,参加了由Techempower设计的著名框架集合性能测试竞赛,在纯文本EC2服务上一举拿下第一,而且比第二名netty多出近一倍!(http://www.techempower.com/benchmarks/#section=data-r6&hw=ec2&test=plaintext)这个不俗的成绩让人侧目。最新的测试结果显示,undertow依然名列前茅。
新出炉的Web服务器能获得这么好的成绩,和它采用的异步事件机制的内核架构是分不开的。我们知道目前有一款明星Java项目Netty,在互联网应用中广泛采用,比如Finagle, Akka, Vertx, Dubbo等。Undertow同样使用了异步IO,但不是Netty,而是一款同样源自JBoss的项目XNIO。Netty和XNIO有渊源,Netty的设计师Trustin Lee和XNIO的设计师David M. Lloyd原来都是JBossRemoting的项目成员。
我们简单说一下JBossRemoting,这个IO框架一直是JBoss应用服务器自带的通信框架,从3.X版本到今天的Wildfly8,它是JBoss服务器外部通信的基础组件,包括EJB,早先的JBossMessaging等。今天它依然是同步通信框架的设计典范和良好实现。
NIO是从Java1.4引入的,带来了新的异步设计方式,到Java7引入NIO2。Netty针对早期NIO的一些不足和缺陷,进行了极大的改进,包括性能和易用性,从而一举被广大互联网公司青睐。而XNIO一直不温不火,只在JBoss内部使用,直到undertow出现才被更多人知道。
要熟悉undertow,必须得了解其强依赖的XNIO和背后的NIO思想。所以这个文章分为三个部分,除了这一篇概述之外,还有专门介绍XNIO的一篇,以及Undertow自身一篇内容。
相关推荐
SringBoot的概述# SpringBoot解决上述Spring的缺点SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码...
- **概述**:Spring Boot 支持内嵌 Tomcat、Jetty 或 Undertow 等 Web 服务器。这意味着开发者无需额外安装和配置 Web 服务器,可以直接使用 Spring Boot 启动一个 Web 应用。 - **优势**:简化了开发流程,降低了...
- **嵌入式服务器**:可以直接使用内嵌的Tomcat、Jetty或Undertow服务器启动应用。 - **生产就绪特性**:提供健康检查、指标收集等功能,方便监控和管理。 #### 三、系统分析 ##### 1. 可行性分析 - **技术可行性*...
- 内嵌服务器:支持直接在应用内部运行Tomcat、Jetty或Undertow等服务器。 - 监控和度量:提供了对应用状态的监控和度量支持,便于运维。 2. **Vue.js**: - **简介**:Vue.js是一种用于构建用户界面的渐进式...
- 客户端发起请求,到达Reactor Netty或Undertow等服务器。 - WebFlux的ServerWebExchange处理请求,通过RouterFunction进行路由。 - HandlerFunction处理请求,可以是非阻塞的,返回Mono或Flux响应。 - 响应...
- **嵌入式服务器**:内置Tomcat、Jetty或Undertow等容器。 - **形象比喻**:Spring是制作蛋糕所需的食材,而SpringBoot则是完整的成品蛋糕。 #### 4. Ribbon与Feign的对比 - **Ribbon**: - **手动构建请求**:...
- 嵌入式服务器:默认支持内嵌Tomcat、Jetty或Undertow作为Web服务器。 - 易于使用:提供了大量的starter POMs,可以快速集成各种功能模块。 #### 2.2 Vue.js简介 - **定义**:Vue.js是一种用于构建用户界面的渐...
- 嵌入式服务器:内置Tomcat、Jetty或Undertow。 - **使用场景**:快速搭建RESTful API服务、微服务架构等。 2. **MyBatis**: - **简介**:MyBatis是一款优秀的持久层框架,提供了映射查询语句、参数和结果集的...
- 内嵌服务器:Spring Boot支持内嵌Tomcat、Jetty或Undertow服务器,使得部署更加灵活。 - **适用场景**:适用于快速构建微服务架构中的独立应用,特别适合企业级Java应用的快速开发。 #### MySQL数据库 - **简介*...
4. **内嵌服务器**:支持内嵌 Tomcat、Jetty 或 Undertow 等 Web 服务器,降低了部署复杂度。 5. **生产就绪特性**:具备监控、度量和健康检查等功能,适合生产环境使用。 #### 二、Spring Boot 开发工具 在开发 ...
- **内嵌Web服务器**:开箱即用的Tomcat、Jetty或Undertow服务器。 - **无需XML配置**:使用注解和Java配置类代替XML配置文件。 综上所述,通过这些知识点的学习和理解,开发者能够全面掌握Spring框架的核心概念和...
Spring Boot 2 支持各种集成,包括嵌入式 Tomcat、Jetty 和 Undertow 服务器,以及多种语言和工具支持。 #### Spring Boot 2 的特点: - **自动配置**:根据类路径中的 jar 文件自动配置 Spring。 - **启动器依赖*...
- **嵌入式服务器**:Spring Boot支持嵌入式Tomcat、Jetty或Undertow服务器,无需安装独立的Web服务器。 #### 3.2 数据库设计 - **ER图设计**:绘制实体关系图,清晰地表示出各个实体之间的关系。 - **索引优化**:...
- **嵌入式服务器**:支持使用嵌入式Tomcat、Jetty或Undertow作为服务器,无需单独安装服务器软件。 - **项目启动器**:提供了一种简单的方式来添加常见的依赖库。 这些特性共同构成了Spring Boot的核心价值所在,...
- **可独立运行**:Spring Boot 应用程序可以在没有外部依赖的情况下运行,它已经内置了Tomcat、Jetty或Undertow等服务器。 - **易于部署**:应用程序可以被打包成可执行的 JAR 或 WAR 文件。 #### 二、Spring Boot...
- 嵌入式服务器:无需部署WAR文件,内置Tomcat、Jetty或Undertow等嵌入式容器。 - 独立运行:SpringBoot应用打包成可执行的JAR或WAR文件,无需外部依赖即可运行。 - 开箱即用:提供了大量的starter POMs,简化了...
2. **内嵌服务器**:Spring Boot 可以内嵌 Tomcat、Jetty 或 Undertow 服务器,无需额外打包部署。 3. **starter 父项目**:Spring Boot 提供了 starter 父项目,简化了 Maven 配置,自动导入常用依赖。 4. **...
- **Web支持**:内置Tomcat、Jetty或Undertow服务器,无需打包部署即可运行Web应用。 ##### 4.2 MySQL数据库 MySQL 是一个开源的关系型数据库管理系统(RDBMS),因其性能高效、易于使用而广泛应用于Web应用中。关键...