smart-servlet v0.1.0 首发,筹备了 3 年的开源 Servlet 服务器

smart-servlet 是一款实现了 Servlet 3.1 规范,支持多应用隔离部署的的 Web 服务器。尽管开源时长仅 1 个月,还有着诸多不成熟,但希望未来能成为如同 Tomcat、Undertow 般优秀的项目。为了这个目标,smart-servlet 准备了三年:

  • 3年前,开源 AIO 通信框架 smart-socket。为从事通信开发的朋友提供了除 netty、mina 之外的另一个选择,同时也为 smart-servlet 开发迈出了第一步。
  • 2年前,开源 http 服务器 smart-http。不仅支持了 http 1.0/1.1、websocket 协议,还在 TFB 评测中表现优异。
  • 1个月前,开源 smart-servlet。在 smart-http 的基础上实现 servlet 3.1 规范。

项目特色

  • 零学习成本,素未谋面,却已相知。保留用户原有的 Tomcat、Undertow 使用习惯。
  • 朴实无华,用最初级的设计手法打造专业级服务器。
  • 实现 Servlet 核心规范:Request、Response、Session、Cookie、Dispatcher、ServletContext。
  • 插件化设计,自由 DIY 服务器。
  • 延续一贯的极简、易用、高性能设计风格。
  • 开箱即用,运行程序包、maven本地开发/调试插件、springboot starter 一应俱全,满足你的开发、部署等各项需求。

架构设计

smart-servlet 在 smart-http 的基础之上,通过继承 HttpHandle 实现了 Servlet 规范。这意味着任何 smart-http 服务都可以通过单独引入 smart-servlet 核心包的方式,将普通的 http 应用改造成 servlet 应用,而且这个成本是极低的。

示例演示

为了验证 smart-servlet 对 servlet 3.1 实现的规范性,我们的演示示例直接移植了 Tomcat 安装包中自带的工程:docs、examples。其中examples 工程依赖需要依赖 tomcat 自身的一些 jar 包,故我们将 ${TOMCAT_HOME}/lib 目录下的 jar 包拷贝到了 examples/WEB-INF/lib 目录下。

接下来对工程进行编译并运行 org.smartboot.servlet.starter.Bootstrap ,若控制台打印如下信息说明启动成功。打开浏览器访问:http://127.0.0.1:8080/examples 便可体验 smart-servlet 。

非正式评测

对于这款 servlet 容器,用户可能更关心它相较于 tomcat 的优势,为此我们做了一次简单的评测。特别说明:这次评测并不正规,一方面 smart-servlet 既当裁判又当选手本就不公平;另一方面现阶段 smart-servlet 还不够成熟,不具备比较的条件。所以这里提供的非正式评测结果权当 smart-servlet 的一种宣传方式。

我们采用的测试方式为:

用 ab 压测 examples 工程中的示例请求:http://127.0.0.1:8080/examples/servlets/servlet/HelloWorldExample,最终的表现结果如下:

  • smart-servlet 性能表现结果比 tomcat 高出 50%~100 以上 。
  • tomcat 压测期间 CPU 使用率高于 40%,smart-servlet 压测时低于 40% 。
  • tomcat 线程数随并发数递增,上限 200;smart-servlet 线程数固定,不受并发数影响 。
  • 内存开销两者基本持平。

详细过程见:https://smartboot.gitee.io/book/smart-servlet/performance/test-data.html

最后

后面我们会保持稳定的开发节奏,持续打磨 servlet 规范的实现细节,争取早日让 smart-servlet 运行到生产环境中。同时非常欢迎社区中的朋友反馈改进建议,或者参与到这个项目的开发中来,一起见证它的成长。

猜你喜欢

转载自www.oschina.net/news/123245/smart-servlet-0-1-0-released