轻量级Java EE企业应用开发实战
上QQ阅读APP看书,第一时间看更新

1.3 轻量级Java EE的技术特点

正是由于传统企业级应用技术的不足,迫使开发者将目光转向了开源社区。Rod Johnson在2002年编著的Expert One-on-One J2EE Design and Development一书中可以说是一针见血地指出了当时Java EE架构在实际开发中的种种弊端,并推出了Spring框架来简化企业级应用的开发。

之后,开源社区日益繁荣,Hibernate、Structs等轻量级框架相继推出,以替换Java EE中的“重量级”实现。

本书主要介绍如何从零开始,吸收市面上优秀的开源框架,来实现属于自己的Java EE轻量级框架。轻量级Java EE意味着开源、简单、轻便、快捷。

接下来将介绍轻量级Java EE技术的特点。

1.3.1 轻量级架构

轻量级Java EE技术具有非侵入性,依赖的东西非常少,占用的资源也非常少,部署简单,启动快速,比较容易使用。

轻量级Java EE技术底层基于Spring框架来实现bean的管理,因此,只要你有Spring的开发经验,上手就非常简单。即便你是Spring的新手,通过学习本书的第6章也可以带领你入门Spring。

1.3.2 符合二八定律

轻量级Java EE技术旨在通过花较少的成本(20%)来解决大部分问题(80%)。

轻量级Java EE技术专注于解决企业级应用中的场景问题,比如对象管理、事务管理、认证与授权、数据存储、负载均衡、缓存等,而这些场景基本上涵盖了所有的企业级应用。

通过轻量级Java EE技术的学习,读者能够掌握互联网公司常用的技术,解决企业关注的大部分问题,有利于提升作为一名技术人员的核心竞争力。

1.3.3 基于开源技术

轻量级Java EE技术吸收市面上优秀的开源框架技术,去其糟粕,取其精华,使得基于轻量级Java EE技术的应用功能强大,但自身又保持着简单易于理解。

轻量级Java EE所使用的开源技术都是目前大型互联网公司所采用的成熟技术,包括:

  • 基于Maven实现模块化开发及项目管理。
  • 基于Jetty或者Tomcat提供开箱即用的Servlet容器。
  • 使用Spring实现IoC和AOP机制。
  • 基于Spring TestContext及JUnit实现开发过程中的单元测试和集成测试。
  • 使用Spring Web MVC实现MVC模式。
  • 使用Thymeleaf和Bootstrap实现基于原型的界面开发。
  • 使用Jersey实现RESTful风格的架构。
  • 基于Spring Security实现认证与授权。
  • 使用MySQL实现数据的高效存储。
  • 使用MyBatis实现数据库的操作与对象关系映射。
  • 使用WebSocket实现Web应用实时通信。
  • 使用JMS实现消息发送。
  • 使用Quartz Scheduler实现任务调度。
  • 使用JCache实现数据缓存。
  • 使用Spring Boot简化应用的配置。
  • 使用Spring Cloud简化应用的配置。

……

本书也会详细介绍上述技术。

1.3.4 支持微服务

在复杂的大型互联网应用架构中,倾向于使用微服务架构来划分为不同的微服务。这些微服务面向特定的领域,因此开发能够更加专注,所实现的功能也相对专一。

轻量级Java EE技术支持微服务架构。轻量级Java EE技术非常轻量,启动速度非常快。同时,轻量级Java EE技术倾向于将应用打包成Fat JAR(1)的形式,因而能够轻易在微服务架构常用的容器等技术中运行。

1.3.5 可用性和扩展性

由于轻量级Java EE技术支持微服务架构,因此轻量级Java EE技术所实现的应用很容易实现自身的横向扩展。

理论上,每个微服务都是独立部署的,且每个微服务会部署多个实例以保证可用性和扩展性。

同时,独立部署微服务实例有利于监控每个微服务实例运行的状态,方便在应用达到告警阈值时及时做出调整。

1.3.6 支撑大型互联网应用

正是由于轻量级Java EE技术具有良好的可用性和扩展性,使得轻量级Java EE技术非常适合用于大型互联网应用。因为大型互联网应用既要部署快、运行快,又要求在运维过程中能够及时处置突发事件。

图1-3展示了微服务实例自动扩展的场景。

图1-3 自动扩展

从图中可以清楚地看到,监控程序会对应用持续监控,当现有的服务实例CPU超过了预设的阈值(60%)时,监控程序会做出自动扩展的决策,新启动一个“实例3”来加入原有的系统中。