企业级应用组件
由于现在互联网技术快速发展,无论前端还是后端,各领域的技术及框架层出不穷,百花争艳。目前很多工具、脚手架添加了数量惊人的企业级应用程序开箱即用的技术、组件。其中一些被用作生成的应用程序的基础或核心,而一些技术是通过在应用程序生成过程中做出的选择而选择加入的。我们将这些技术大致可分为以下几类:
- 客户端技术
- 服务器端技术
- 数据库选项
- 所需工具
- 部署环境
下面,我们将分别介绍这些技术里面常用的一些技术组件。
客户端组件
HTML5 和 CSS3
Web 技术,特别是 HTML 和 CSS,经历多年的更新,并且由于现代浏览器的出色支持而变得越来越好。
HTML5( https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5 )是超文本标记语言(HTML)标准的最新版本,它引入了新的元素、属性和行为。HTML5 也成为构建现代 Web 应用程序的所有 HTML 技术的统称。这次迭代引入了对离线存储、WebSocket、Web Worker 和WebGL 等特性的支持。
CSS3( https://developer.mozilla.org/en-US/docs/Web/CSS/CSS3 )是最新的层叠样式表(Cascading Style Sheets,CSS)规范。它增加了对媒体查询、动画、flexbox、圆角等的支持。CSS3 使原生动画元素、应用特效、应用过滤器等成为可能,从而摆脱了以前使用的许多 JavaScript。
Flexible box 或者 flexbox 是一种布局模式( https://developer.mozilla.org/en-US/docs/Web/CSS/Layout_mode ),可以代替传统的盒式模式。它允许你有一个灵活的框模型,使响应式布局更容易处理,没有浮动和边距折叠问题。
SASS
Syntactically Awesome Style Sheets (SASS, http://sass-lang.com ) 是一种 CSS 扩展语言。它在编译时被预处理并转换为 CSS。它具有与 CSS 相似的语义,并100%兼容所有版本的 CSS。它还支持诸如嵌套语法、变量、混合、继承、语法片断等高级特性。SASS 使重用 CSS 和编写可维护的样式表成为可能。
Bootstrap
Bootstrap( https://getbootstrap.com )是一个用于现代 Web 开发的响应式 UI 框架。它为Web 开发提供了一种 mobile-first 的方法,具有完全响应的实用程序和 UI 组件。Bootstrap 4 是最新版本,使用 flexbox 进行布局,并且完全使用 SASS 编写,这使得定制变得很容易。Bootstrap 支持一个12列的网格框架,它可以让您轻松地构建响应式 Web 页面。
Mobile-first Web 开发是一种将用户体验、UI 设计为更小屏幕尺寸的方法,从而迫使你专注于要呈现的最重要的数据、元素。这种设计在更大的屏幕尺寸下逐渐得到增强,从而使最终结果响应迅速且高效。
MVVM 框架
Model-View-View-Model (MVVM) 最初由 Microsoft 开发的一种体系架构模式。它有助于抽象或分离客户端(GUI)开发与服务器端(数据模型)。视图模型是视图的抽象,表示模型中数据的状态。
Angular
Angular( https://angular.io , 版本2及以上是对原始 AngularJS 框架的完全向后不兼容的重写),是一个客户端 MVVM 框架,由谷歌维护,帮助开发单页应用程序(SPA)。它基于声明式编程模型,扩展了标准 HTML,能够通过组件添加额外的行为、元素和属性。
Angular 是用 TypeScript 编写的,它也建议使用 TypeScript 来编写 Angular 应用。Angular 删除了一些在 AngularJS 中使用过的概念,比如作用域、控制器和工厂。在绑定属性和事件的语法上也不相同。另一个主要区别是,Angular 库是模块化的,因此你可以选择你需要的模块,以减少 bundle的大小。Angular 还引入了一些高级概念,比如 Ahead-of-Time(AOT)编译、延迟加载和响应式编程。
TypeScript 是 ECMAScript 6 (ES6, JavaScript的第6版)的超集,向后兼容 ES5。它还有其他特性,比如静态类型、泛型和类属性可见性修饰符。因为 TypeScript 是 ES6 的超集,所以我们也可以使用 ES6+ 特性( http://es6features.org ),比如模块、lambdas(箭头函数)、生成器、迭代器、字符串模板、反射和扩展操作符。
React
React ( https://reactjs.org ) 不是一个成熟的 MVVM 框架。它是一个用于构建客户端视图或用户界面的 JavaScript 库。它是由 Facebook 开发和支持的,背后有一个充满活力的社区和生态系统。React 采用了 JavaScript 的 HTML 方式,并且有一种叫做 JSX 的特殊格式来帮助我们编写 React组件。与 Angular 不同,React 没有太多概念或 API 来学习,因此更容易上手,但 React 只关心呈现 UI,因此要获得 Angular 提供的类似功能,我们必须将 React 与其他库,如 React Router( https://reactraining.com/react-router ),Redux( https://redux.js.org )和MobX( https://mobx.js.org )配合使用。
Vue.js
Vue.js ( https://vuejs.org )是一个发展中的 JavaScript 框架。它是开源的,完全由社区驱动。Vue.js 就是 AngularJS 和 React 的结合。它有类似于 AngularJS 的语法,但具有 React 的速度和性能。就像 React,Vue.js 也是一个 UI 框架,可以与其他库结合来构建 SPA。Vue.js 可以用 JavaScript 或 TypeScript 编写,并可用于编写小型 Web 组件或完整的 SPA。
构建工具 – webpack 和 BrowserSync
客户端近年来已经发展了很多,变得和服务器端一样复杂,因此它需要使用更多的工具来优化结果。你可以将 TypeScript 转换为 JavaScript,压缩和优化 CSS 和 JavaScript,编译 SASS,revision、hash 你的静态资源等等。其中最流行的是 webpack。
Webpack ( https://webpack.js.org ) 是一个模块捆绑器,具有非常灵活的加载器、插件系统。Webpack 会遍历依赖,并将其传递给配置好的加载器和插件。使用 Webpack,可以将 TypeScript 转换为 JavaScript,压缩和优化 CSS 和 JavaScript,编译SASS,revision、hash 你的静态资源等等。Webpack 可以在一个称为 tree shaking 的过程中移除死代码,从而减少 bundle 的大小。Webpack 是通过配置文件配置的,可以通过命令行或 NPM/Yarn 脚本运行。
BrowserSync ( https://browsersync.io ),这是一个 Node.js 工具,通过在多个浏览器和设备上同步文件变化和网页交互来帮助浏览器测试。它提供了文件更改时的自动重新加载、同步 UI 交互、同步滚动等特性。它与 Webpack 集成后可以提供一个高效的开发设置。使得在多个浏览器和设备上测试一个网页非常容易。
测试工具 – Jest 和 Protractor
客户端代码不需要单元测试的日子一去不复返了。随着客户端框架的发展,测试的可能性也得到了改进。有许多框架和工具可以用于单元测试、端到端测试等等。
Jest( https://jestjs.io/ )是一个 JavaScript 测试框架。它可以与 TypeScript、Angular、React 和Vue.js 一起工作。它有简单的 API 和很棒的特性,并能很好地与持续集成工具集成。
Protractor( http://www.protractortest.org )是 Angular 团队开发的端到端测试框架。它最初是为 Angular 和 AngularJS 应用准备的,但它足够灵活,可以用于任何框架,如 React、jQuery 和Vue.js。Protractor 使用 Selenium Web 驱动 API 对真实的浏览器运行端到端的测试。
国际化
国际化(i18n)现在是一个非常重要的特性。在客户端,是通过将 GUI 文本存储在每种语言的 JSON 文件中,并使用 Angular/React 库在运行时根据选择的语言动态加载它来实现的。
你知道国际化(internationalization)为什么被缩写为 i18n 吗?因为在 i 和 n 之间有18个字符。Web 技术中还有其他命名类似的缩写,例如,accessibility(a11y)、localization(l10n)、globalization(g11n)。
服务端组件
Web 开发中的服务器端技术已经有了很大的发展,随着 Spring 和 Play 等框架的兴起,对 Java EE 的需求减少,并为 Spring Boot 等功能更丰富的替代方案打开了大门。一些核心技术如 Hibernate 将继续存在,而一些更新的概念如 JWT、Liquibase、Swagger、Kafka 和 WebSocket 将带来很多额外的机会。
Spring Framework
Spring Framework( https://spring.io )可能是 Java 世界中最好的东西。它改变了 Java Web 应用程序的前景。在 Spring 兴起之前,这一领域被 Java EE 厂商所垄断,而在 Spring 出现之后不久,它就成为 Java Web 开发人员的首选,与 Java EE 展开了激烈的竞争。Spring 核心是控制反转(IoC, https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans ),提供依赖注入和应用程序上下文的容器。Spring 的主要特点是结合 IoC、面向切面编程(AOP, https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#aop ),并以一致的方式进行技术抽象。该框架有许多针对不同任务的模块,如数据管理、安全性、REST 和 Web 服务。Spring 框架及其模块是免费的、开源的。
Spring Boot
Spring Boot( https://spring.io/projects/spring-boot )是目前在 Java Web 应用程序开发中广泛使用的解决方案。它对配置有一种特殊的约定。它是完全由配置驱动的,使 Spring 框架和许多其他第三方库的使用变得非常简单。Spring Boot 应用程序是生产级的,可以在任何安装了 JVM 的环境中运行。它使用一个嵌入式 Servlet 容器,如 Tomcat、Jetty 或 Undertow 来运行应用程序。它在任何可能的情况下使用合理的默认值自动配置 Spring Bean,并为许多模块和第三方库提供了 starter POM。它不需要任何 XML 配置,并且允许使用 Java 配置自定义自动装配的 Bean。
默认情况下,在生成的应用程序中使用 Undertow 作为嵌入式服务器。Undertow 非常轻量,启动速度更快,是轻量应用程序开发和生产的理想选择。
Spring Security
Spring Security( https://spring.io/projects/spring-security )是基于 Spring 框架的应用程序中事实上的安全解决方案。它提供了 API 和工具来管理安全性的所有方面,比如身份验证和授权。它支持广泛的身份验证机制,如 OAuth2、JWT、Session(Web 表单)、LDAP、SSO (single sign-on)服务器、JAAS(Java身份验证和授权服务的缩写)和 Kerberos。它还具有 remember me 和并发会话等特性。
Spring MVC
Spring MVC( https://docs.spring.io/spring-framework/docs/current/reference/html/web.html )是 Spring 应用程序中使用 Servlet API 的默认解决方案。它是一个基于请求的系统,并且抽象了 Servlet API,使编写控制器来服务于 HTTP 请求变得更容易。REST 是如今设计 API 端点的事实上的标准,Spring MVC REST 是一个特定的子集,它使得设计和实现 RESTful 服务更加容易。
Spring Data
Spring Data( https://spring.io/projects/spring-data )是一个模块,它为许多不同的数据访问技术和数据库抽象数据访问操作。它提供了一致的 API 来与不同的底层实现无缝地工作。这使我们不必担心底层的数据库和数据访问技术。它具有强大的特性,如,根据方法名生成查询和自定义对象映射。Spring Data 支持与 JPA、MongoDB、Redis 和 Elasticsearch 等合作。它还允许将 Spring Data repositories 导出为 RESTful 资源。
Security
在现代企业应用程序中,有多种方法来实现身份验证和授权。Spring Security 支持多种机制。
在下一节中,我们将研究 JWT、Session 和 OAuth2/OIDC。
JWT
JSON Web Token(JWT, https://jwt.io )是安全令牌的开放行业标准。JWT 身份验证通过服务器和客户机来传递和验证声明。服务器在用户凭据成功验证后生成一个 JWT 令牌,并将其传回客户端。客户端将在本地存储这个令牌,然后通过在请求头中传递令牌,使用它向服务器请求受保护的资源。这是一种无状态身份验证机制。
Session
基于会话的身份验证是传统的基于 Web 表单的身份验证机制,其中服务器为经过验证的用户凭证创建并维护会话。这是有状态的,通常不具有很强的可伸缩性,除非使用分布式 HTTP 会话,可以使用分布式缓存,如 Hazelcast、Redis 或使用专用 Web 服务器、负载均衡器的会话复制特性。
OAuth2/OIDC
OAuth2( https://developer.okta.com/blog/2017/06/21/what-the-heck-is-oauth )是一种用于无状态身份验证和授权的协议。该协议允许应用程序获得对服务上用户帐户的有限访问权。用户身份验证被委托给服务,通常是一个 OAuth2 服务器。与前面提到的两种机制相比,设置 OAuth2 要复杂得多。
OpenID Connect( https://openid.net/connect/ )是 OAuth 2.0 协议之上的身份认证层。它由 OpenID 基金会维护,并有一个规范,因此允许不同的供应商实现。
- Keycloak( https://keycloak.org )
- Okta( https://developer.okta.com/blog/2017/10/20/oidc-with-jhipster )
构建工具 – Maven 和 Gradle
Maven( https://maven.apache.org )是一种构建自动化工具,它使用名为 pom.xml 的 XML 文档来指定如何构建应用程序及其依赖项。插件和依赖项从中央服务器下载并缓存在本地。Maven 构建文件称为项目对象模型(POM),它描述了构建过程。Maven 历史悠久,比 Gradle 更加稳定可靠。它也有一个庞大的插件生态系统。
Gradle( https://gradle.org )是一个构建自动化工具,它使用 Groovy DSL 来指定构建计划和依赖项。Gradle 比 Maven 灵活得多,特性也丰富得多,这使得它成为非常复杂的构建设置的理想选择。最新版本的 Gradle 在速度和特性方面轻松超越了 Maven。Gradle 的另一个独特优势是能够在构建脚本中编写标准的 Groovy 代码,这使得它能够以编程的方式完成几乎所有的事情。它也有很棒的插件支持。Gradle 还提供了 Kotlin DSL ( https://gradle.org/kotlin/ )。
Hibernate
Hibernate( http://hibernate.org )是 Java 最流行的 ORM (对象关系映射)工具。它有助于使用 Java 注解将面向对象的域模型映射到关系数据库方案。它实现了 JPA(Java Persistence API 的缩写),是 JPA 实现的首选提供者。Hibernate 还提供了许多附加特性,比如实体审计和 Java Bean 验证。Hibernate 根据底层数据库语义自动生成 SQL 查询,并且可以非常容易地切换应用程序的数据库。它使应用程序独立而不依赖特定的数据库。Hibernate 是免费的开源软件。
Liquibase
Liquibase( http://www.liquibase.org )是一个免费的、开源的数据库版本控制工具。它允许使用配置文件跟踪、管理和应用数据库模式更改,而无需使用 SQL。它是独立于数据库的,并且能与 JPA 很好地整合,使应用程序独立于数据库。Liquibase 可以从应用程序内部运行,使数据库设置和管理无缝。Liquibase 还可以在数据库中添加、删除数据,这也有利于迁移。
Caching
缓存在软件开发中是一种很好的实践,它大大提高了读操作的性能。可以为 Hibernate 二级缓存启用缓存,也可以使用 Spring Cache 启用方法级缓存。
Spring Cache( https://docs.spring.io/spring-framework/docs/current/reference/html/integration.html#cache )让我们可以轻松地在应用程序的不同层添加缓存。例如,通过这种方式,我们可以启用纯函数的缓存(不涉及任何副作用),这样对于同一组输入,就可以从缓存生成输出,而不是执行方法。
我们将在接下来的章节中看看 Ehcache、Hazelcast、Infinispan、Memcached 和 Redis。
Ehcache
Ehcache( http://www.ehcache.org )是一个开源的 JCache 提供者,是应用最广泛的 Java 缓存解决方案之一。它与 JCache 兼容,对于没有集群的应用程序来说是一个很好的选择。对于集群环境,需要额外的 Terracotta Server(这是一个提供缓存和操作存储的内存数据平台)。具有稳定、快速、安装简单等优点。
Hazelcast
Hazelcast ( https://hazelcast.org )是一个开源分布式内存数据网格解决方案。它对集群应用程序和分布式环境有很好的支持,因此是缓存好的选择。尽管 Hazelcast 有许多其他特性和用例,但缓存仍然是其中重要的一个。由于它的分布式特性,它具有高度的可伸缩性,也是微服务的良好选择。
Infinispan
Infinispan ( http://infinispan.org )是一个来自 Red Hat 的分布式缓存和键值存储。它是免费和开源的。它支持集群环境,因此是微服务的良好选择。它具有内存数据网格和支持 MapReduce 等特性。
Memcached
Memcached( https://memcached.org/ )是一个高性能的分布式内存对象缓存系统。它是一个简单但有效的缓存解决方案。
Redis
Redis( https://redis.io/ )是一个开源的内存数据存储。它具有复制、Lua 脚本、LRU 逐出、事务和不同级别的磁盘持久性等特性。高可用性可以使用 Redis Sentinel 来配置,自动分区可以使用 Redis Cluster 来完成。它可以用作数据库、缓存和消息代理。它可以通过 Spring Cache 在应用程序中使用,并可作为 Hibernate 的二级缓存使用。
Swagger
OpenAPI 规范(以前称为 Swagger 规范)是一个用于设计和使用 RESTful Web 服务和 API 的开放标准。OpenAPI 规范是由多个公司建立的标准,包括谷歌、Microsoft 和 IBM。Swagger( https://swagger.io )名称现在用于关联的工具。
Thymeleaf
Thymeleaf( http://www.thymeleaf.org )是一个开源的 Java 服务器端模板引擎,它可以与 Spring 很好的集成。Thymeleaf 可以用来在服务器端生成网页,用于模板电子邮件消息等等。尽管服务器端 Web 页面模板正在慢慢地输给客户端 MVVM 框架,但如果你想使用 Angular SPA 以外的东西,它仍然是一个有用的工具。
Micrometer
Micrometer metrics( https://micrometer.io/ )是针对 JVM 上的应用程序度量的一个开源的 vendor-neutral(厂商中立)的 facade。与 Spring Boot 结合使用,可以为度量 REST API、缓存层和数据库的性能等提供有用的信息。Micrometer 提供了很多方便的注解,用于标记要监视的方法。它可以与多数流行的监控解决方案集成。
WebSocket
WebSocket( https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API )是一个工作在 TCP 之上的通信协议。它在单个 TCP 连接上提供了全双工通信通道。它是由 W3C ( https://www.w3.org )标准化的。它是轻量级的,支持客户机和服务器之间的实时通信。就 Web 应用程序而言,这使得服务器可以与在客户机的浏览器通信,而无需客户机发出请求。这为实时地将数据从服务器推送到客户端打开了大门,并实现了诸如实时聊天和通知之类的功能。
Kafka
Kafka( https://kafka.apache.org )是一个开源的流处理系统。它有分布式的基于发布订阅的消息队列。它的容错和扩展功能帮助它取代 JMS 和 AMQP 成为首选消息队列。Spring 在 Kafka 之上提供了一个抽象,使配置和使用 Kafka 变得更容易。
JMS(Java Message Service 的缩写)是为 Java EE 开发的一种消息传递标准,允许使用主题和队列在组件之间发送和接收异步消息。AMQP(Advanced Message Queuing Protocol 的缩写,https://www.amqp.org/ )是面向消息中间件的开放标准协议,提供了诸如排队、路由和发布订阅机制等特性。
测试框架 – JUnit, Gatling, 和 Cucumber
服务器端测试主要分为单元测试、集成测试、性能测试和行为测试。
JUnit( https://junit.org/junit5/是使用最广泛的 Java 测试框架。它是免费的开源软件。它最初用于单元测试,但与 Spring 测试框架( https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testing-introduction )整合,也可以用于集成测试。
Gatling( https://gatling.io/ )是一个免费和开源的性能和负载测试工具。它基于 Scala,并使用 Scala DSL 来编写测试规范。它可以创建负载测试的详细报告,可以用来模拟系统上的各种负载。它是性能关键型应用程序所需的工具。
Cucumber( https://cucumber.io/ )是一个主要用于验收测试的行为驱动开发(BDD)测试框架。它使用了一个名为 Gherkin 的语言解析器,非常便于人类阅读,因为它看起来类似于普通的英语。
数据库
今天,有各种各样的数据库选项。可大致分为以下几类:
- SQL 数据库
- NoSQL 数据库
你可以访问https://db-engines.com/en/ranking查看不同数据库的流行度。
数据库模型分类
- Relational(关系型)
- Document(文档型)
- Key-value(键值型)
- Search engine(搜索引擎)
- Wide column(宽列)
- Graph(图)
- Time Series(时间序列)
- Multivalue(多值)
- Content(内容)
- Navigational(导航)
- RDF(Resource Description Framework,资源描述框架)
- Object oriented(面向对象型)
SQL 数据库
SQL 数据库或关系数据库管理系统(RDBMS)是支持 Relational 数据模型的数据库。它们支持由固定名称和固定数据类型的列定义的表模式。表中的每一行都包含每个列的值。表可以相互关联。
在下一节中,我们将看看 H2、MySQL、MariaDB、PostgreSQL、MS SQL 和 Oracle。
H2
H2( http://www.h2database.com/html/main.html )是一个免费的嵌入式 RDBMS,通常用于开发和测试。可以在文件系统模式和内存模式下运行。它占用的空间非常小,而且非常容易配置和使用。它没有许多其他主流数据库引擎提供的企业特性,因此通常不适合生产使用。
MySQL
MySQL( https://www.mysql.com/ )是最流行的数据库引擎之一,是免费和开源软件。它来自 Oracle,但也有一个非常活跃的社区。它
具有适合企业使用的特性,如分片、复制和分区。它是目前最流行的 SQL 数据库之一。
MariaDB
MariaDB( https://mariadb.org/ )是一个兼容 MySQL 的数据库引擎,侧重于安全性、性能和高可用性。它越来越受欢迎,并被视为 MySQL 的一个很好的替代方案。它是免费的开源软件。
PostgreSQL
PostgreSQL( https://www.postgresql.org/ )是另一个非常受欢迎的免费开源数据库系统。它是由社区积极维护的。PostgreSQL 的一个独特特性是支持 JSON 对象存储,能够在 JSON 中建立索引和查询。这使得它也可以作为 NoSQL 数据库或混合模式使用。它还具有企业级特性,如复制和高可用性。
MS SQL
MS SQL Server( https://www.microsoft.com/en-us/sql-server/ )是由微软公司开发和支持的企业数据库系统。它是一种商业软件,需要付费许可才能使用。它有面向企业的功能和来自微软的高级支持。
Oracle
Oracle( https://www.oracle.com/database/index.html )是使用最广泛的数据库。它是一种商业软件,需要付费许可才能使用。它具有企业可用的特性,如分片、复制和高可用性。
NoSQL 数据库
这是一个广泛的定义,包括任何非 RDBMS 数据库。这包括文档存储、宽列存储、搜索引擎、键值存储、图 DBMS 和内容存储。这类数据库的一个普遍特征是它们可以是无模式的,并且不依赖关系数据。
MongoDB
MongoDB( https://www.mongodb.com/ )是一个跨平台的文档存储,是 NoSQL 数据库最受欢迎的选择之一。它有一个专有的基于 JSON 的 API 和查询语言。支持 MapReduce,支持分片、复制等企业特性。它是一个免费的开源软件。
MapReduce 是一种数据处理范式,将一个作业分解为多个并行的 map 任务,将生成的输出排序并合并为结果。这使得处理大型数据集高效快速。
Cassandra
Apache Cassandra( http://cassandra.apache.org/ )是一个分布式列存储,专注于高可用性、可伸缩性和性能。由于它的分布式特性,它没有单点故障,这使得它成为高可用性系统的最流行选择。它最初是由 Facebook 开发和开源的。
Cassandra 每行最多可以有20亿列!
Couchbase
Couchbase( https://www.couchbase.com/ )是一种商业支持的 NoSQL 数据库。它是一个分布式的面向文档的数据库,具有企业级的特性和支持。
Elasticsearch
Elasticsearch( https://www.elastic.co/products/elasticsearch )是一个基于 Apache Lucene ( http://lucene.apache.org/ )的搜索和分析引擎。从技术上讲,它是一个 NoSQL 数据库,但由于其索引能力和高性能,它主要用作搜索引擎。它可以是分布式的、多租户的,并具有全文搜索功能。它是使用最广泛的搜索引擎之一。
所需工具
Git
Git( https://git-scm.com )是用于源代码管理的最广泛的版本控制系统。它促进了分布式版本控制,是当今开发不可或缺的一部分。
Node.js
Node.js( https://nodejs.org/ )是一个 JavaScript 运行时环境。它彻底改变了 JavaScript 世界,并使 JavaScript 成为当今开发人员中最流行的开发语言(根据 https://insights.stackoverflow.com/survey/2019#most-popular- technologies )。Node 生态系统是世界上最大的,拥有超过80万个包( http://www.modulecounts.com/ ),由默认的包管理器 npm 管理。
Maven Wrapper
Maven Wrapper( https://github.com/takari/maven-wrapper )是一种简单的工具,可以确保使用 Maven 构建的用户拥有运行 Maven 所需的一切。
Gradle Wrapper
执行任何 Gradle 构建的推荐方法是在 Gradle Wrapper( https://docs.gradle.org/current/userguide/gradle_wrapper.html )的帮助下。Wrapper 是一个脚本,它会调用一个已声明的 Gradle 版本,如有必要,会提前下载它。因此,开发人员可以快速启动并运行 Gradle 项目,而不必遵循手动安装流程,从而为公司节省时间和成本。
JHipster
JHipster( https://www.jhipster.tech )是一个用于快速生成、开发和部署现代 Web 应用程序和微服务架构的开发平台。它支持许多前端技术,包括 Angular、React 和 Vue.js。甚至还有支持 Ionic 和 React Native 的手机应用,在后端,它支持 Spring Boot(使用Java或Kotlin)、Micronaut、Quarkus、Node.js 和 .net。对于部署,它采用 Docker 和 Kubernetes 的云原生原则。部署支持 AWS、Azure、Cloud Foundry、谷歌云平台、Heroku 和 OpenShift。
目标
JHipster 的目标是生成一个完整的、现代的 Web 应用程序或微服务架构,以统一:
- 一个高性能和健壮的服务器端堆栈,具有出色的测试覆盖率
- 使用 Angular、React 或 Vue + Bootstrap 为 CSS 提供一个时尚、现代、移动优先的 UI
- 一个强大的工作流来调用 Webpack、Maven 或 Gradle 构建应用程序
- 灵活的微服务架构,考虑到云原生原则
- 基础设施作为代码,以便可以快速部署到云
JIB
JIB( https://github.com/GoogleContainerTools/jib )是一个可以与 Gradle 或 Maven 集成的工具,可以构建和推送 Docker 映像,而不需要 Docker 守护进程。这意味着你可以在一台有 JVM 的计算机上构建应用程序的 Docker 映像,而不需要安装 Docker。
CI / CD的工具
Jenkins
Jenkins( https://jenkins.io/ )是领先的 CI/CD 工具之一。它是免费和开源的。它是用 Java 编写的自动化服务器,支持与各种版本控制工具集成,如 Git、CVS 和 SVN。Jenkins 有一个庞大的插件生态系统,这使它成为最灵活的平台之一。Jenkins 可以用于构建项目、运行自动化测试、自动化部署等等。Jenkins 提出了管道的概念,通过使用多个插件和一个 Groovy DSL 来定义 CI/CD 管道来实现。Jenkins 管道插件提供了一个全面的基于 DSL 的配置,可以在一个名为 Jenkinsfile 的文件中定义。
GitLab CI
GitLab CI( https://about.gitlab.com/features/gitlab-ci-cd/ )是一个 CI/CD 解决方案,作为 GitLab 的一部分,提供基于 Git 的 Web UI。它很好地集成到平台中,是使用 GitLab 的最佳选择。它是免费和开源的,供公共项目使用,同时也有企业版本。它既有托管的解决方案,也有在本地使用的二进制文件。
部署环境
Docker
Docker( https://www.docker.com )是事实上的容器管理标准,它使使用容器变得轻而易举。它提供了用于创建、共享和部署容器的工具。
Kubernetes
Kubernetes( https://kubernetes.io )是云世界中事实上的容器编排工具。它具有许多附加功能,易于配置和管理。这使得 Kubernetes 成为容器编排的默认选择。Kubernetes 能够屏蔽较低级别的细节,并提供开箱即用的服务发现、自修复和运行状况检查等功能,吸引了许多公司和组织转而使用 Kubernetes。
Istio
Istio( https://istio.io/ )是分布式应用程序架构的一个服务网格,特别是使用 Kubernetes 的架构。Istio 可以与 Kubernetes 很好地集成在一起,为终端用户提供无缝的体验。
Istio 在微服务应用程序架构中提供了以下功能:
- 服务发现:这类似于 Netflix Eureka 或 Consul
- 自动负载均衡:这类似于 Netflix Zuul
- 路由、断路、重试、故障切换、故障注入:这些类似于 Netflix Ribbon、Hytrix 等
- 访问控制、限速、A/B测试、流量分割和配额的策略执行:一些特性类似于 Netflix Zuul
- 度量、日志和跟踪
- 安全的服务对服务通信
对于监控和可观察性,默认的 Istio Helm charts 可以配置一个 Grafana( https://grafana.com/ ), Prometheus( https://prometheus.io/ ), Jaeger( https://www.jaegertracing.io/ )和 Kiali( https://www.kiali.io/ )的实例。
结语
企业级应用技术选型通常要考虑开源许可证、行业认可度、组件活力、服务支持、安全性、兼容性、可维护性、可扩展性、功能性、可靠性、易用性、性能效率等方面。文章简单的罗列了企业级开发过程中可选择的前端、后端、数据库技术,也罗列了开发、部署常用的一些工具和软件,供大家参考。