【JHipster】全栈代码开发架构

引言

前一段时间需要开发一款基于云原生的SaaS医疗平台,由于SaaS是一个老话题,有不少开源架构可供选择,因此开始调研那款最符合我的期望。

经过一段时间的调研,有不少基于Python或nodejs的SaaS架构,但由于团队开发人员以Java为主,还是希望保持原有技术栈,因此就有了一系列的甄选。

由此变诞生了这个系列的文章,本篇文章作为第一部,首先介绍SaaS选型的初衷及过程,以及为什么最终选择JHipster 作为全栈开发架构。

什么是SaaS

SaaS(Software as a Service,软件即服务)是一种通过互联网提供的软件服务模式,用户不需要购买、安装和维护软件,而是通过订阅的方式使用软件。SaaS应用通常托管在云端服务器上,用户通过浏览器或客户端访问,数据和应用的管理由服务提供商负责。

开源SaaS架构选择原则

SaaS要选择什么架构,取决于需求。由于SaaS的多租户和高可用特性,在开发时一般选择微服务架构或分布式架构,如SpringCloud、Micronaut等。

选择原则描述推荐技术
功能需求根据SaaS平台的功能需求选择架构,是否需要多租户、计费系统、API管理等。JHipster, Spring Boot, Spring Cloud
可扩展性确保架构能够支持随着用户增长和业务扩展而进行扩展,支持高并发和分布式系统。Spring Cloud, Kubernetes, Apache Kafka
技术栈兼容性选择与现有技术栈兼容的框架,减少学习成本和技术转换成本。Spring Boot, Quarkus, Micronaut
开发效率选择能够加速开发过程的框架,如自动化代码生成、脚手架、模板等工具。JHipster, Spring Roo, Grails
维护成本选择易于维护、文档完善、社区活跃的架构,减少后期运维的难度。Spring Boot, Quarkus, Micronaut
安全性确保架构能够满足SaaS应用的安全需求,如数据加密、用户认证、权限管理等。Spring Security, OAuth2, JWT, Keycloak
多租户支持SaaS平台通常需要支持多租户架构,确保每个客户的数据和配置隔离。Spring Boot + Spring Cloud, JHipster
部署和运维便利性选择支持自动化部署、云平台和容器化的架构,简化运维过程。Kubernetes, Docker, Helm, Jenkins
成本效益根据预算选择适合的架构,避免过度配置,并能按需扩展和计费。Kubernetes, Spring Cloud, AWS, Docker
技术社区与文档选择有活跃社区支持和完整文档的框架,确保开发者能快速获取帮助和解决问题。Spring Boot, JHipster, Quarkus

基于Java的SaaS开源架构有哪些

框架/工具特点适用场景优点缺点
JHipster全栈开发平台,集成Spring Boot和前端框架(Angular/React/Vue),支持微服务架构微服务架构、全栈开发、快速原型开发、SaaS平台高效的代码生成,支持微服务架构和云原生,前后端整合,自动化构建和部署,支持多种技术栈(Spring Boot、React/Angular/Vue)生成的代码灵活性有限,学习曲线较陡,项目结构复杂,依赖Spring和Java
Spring Boot + Spring Cloud微服务框架,基于Spring Boot,集成Spring Cloud进行服务发现、负载均衡、断路器等功能大规模分布式系统、微服务架构、高并发、SaaS平台完全可定制,强大的生态系统,广泛的社区支持,能够轻松实现微服务架构和云原生应用,强大的安全机制配置复杂,微服务架构的学习曲线较陡,可能出现过多的技术债务
Quarkus为GraalVM和OpenJDK优化的Java框架,轻量级、高性能,支持微服务和无服务器架构云原生应用、高性能SaaS应用、大规模微服务快速启动时间和低内存占用,支持GraalVM编译和无服务器架构,性能优秀,支持Spring兼容扩展生态和社区相对较小,尚在成长中,学习曲线可能较陡
Micronaut高性能微服务框架,专为构建云原生应用和微服务架构而设计,支持依赖注入和AOP微服务架构、无服务器架构、云原生应用快速启动和低内存占用,支持微服务、云原生架构,内建依赖注入和AOP,支持多种数据库和消息队列与Spring相比,生态较小,学习曲线较陡,需要较强的Java基础
Grails基于Groovy和Spring的Web应用框架,遵循“约定大于配置”原则,适合快速开发快速开发中小型Web应用、快速原型开发快速开发、自动化配置,支持插件和扩展,内建集成Spring框架,适合快速原型和中小型应用性能较低,相比Spring,社区支持较少,Groovy可能不适应部分Java开发者
Spring Roo快速开发框架,基于命令行工具生成代码,简化Spring应用的开发过程快速开发中小型应用、Spring全栈应用自动化生成代码,简化Spring开发过程,基于Spring生态系统,快速搭建开发环境可扩展性较低,生成的代码灵活性差,适用于简单项目
Dropwizard轻量级框架,专为构建RESTful Web服务设计,集成了Jetty、Jersey等技术构建RESTful API、小型Web应用高效轻量,适合小型RESTful服务,内建日志、监控和配置功能,非常适合快速部署和开发不支持复杂微服务架构,不如Spring Cloud全面,适用于较小项目
Play Framework异步Web框架,支持Scala和Java,擅长高并发、异步I/O处理高并发应用、分布式系统、SaaS平台支持异步I/O和响应式编程,适合高并发应用,灵活集成其他Java技术栈配置复杂,学习曲线较陡,社区支持不如Spring

为什么选择JHipster

官网:https://www.jhipster.tech/

选择 JHipster 做SaaS简单来说:

开发快:可以快速启动项目,减少开发周期。
微服务:适合大规模分布式SaaS平台。 多租户支持:方便实现不同客户的数据和配置隔离。
有全栈:采用现代化前后端分离技术,提升开发效率。
高可用:适合高并发、高扩展性的应用需求。
安全性:与Spring Security集成,确保SaaS平台的安全性。

选择理由描述
快速开发JHipster提供了丰富的代码生成器,可以快速生成全栈应用,帮助开发者快速启动项目,缩短开发周期。
微服务架构支持JHipster默认支持微服务架构,并与Spring Cloud集成,适合构建大规模、分布式的SaaS应用。
多租户支持JHipster可以轻松实现多租户架构,支持数据隔离和配置定制,非常适合为多个客户提供SaaS服务。
前后端分离提供前后端分离的全栈开发方案,前端使用现代化框架如Angular、React或Vue,后端使用Spring Boot,适合现代Web应用。
DevOps集成支持Docker、Kubernetes等容器化技术,能够与DevOps流程无缝集成,支持持续集成和部署(CI/CD)。
高性能与可扩展性通过微服务架构和Spring Boot,JHipster提供了高性能、可扩展的解决方案,适用于高并发场景。
丰富的生态系统基于Spring生态系统,JHipster可以利用Spring Security、Spring Data等技术,简化开发。
社区支持与文档JHipster拥有活跃的社区和完善的文档,开发者可以快速上手,并且能从社区获得及时支持。
安全性与Spring Security集成,支持OAuth2、JWT等认证与授权机制,确保应用的安全性。
支持云原生JHipster支持容器化部署,并且与云平台如AWS、Azure兼容,适合云原生应用的部署和扩展。

部署JHipster 步骤

安装

  1. 安装依赖项:

  2. 安装JHipster:
    执行命令:npm install -g generator-jhipster

初始化

执行命令并按需选择初始化配置,命令:jhipster

在这里插入图片描述

重要选项

  • 应用类型:选择 Monolithic 或 Microservice。前者单服务,后者微服务。
  • 身份验证类型:可以选择 JWT(JSON Web Tokens)认证,适合需要分布式和安全的SaaS平台。
  • 数据库类型:可以选择 SQL(例如 PostgreSQL 或 MySQL) 或 NoSQL(例如 MongoDB)。
  • 开发框架:选择前端框架,JHipster 支持 Angular、React 或 Vue。

参考选项如下(第一次尝试配置,我们选择单服务作为demo):
在这里插入图片描述

启动

启动后端服务(gradle模式):

./gradlew

启动前端界面:

npm start

界面展示:
在这里插入图片描述
使用默认账号登录,以确认后端服务正常(admin/admin):
在这里插入图片描述
其他界面:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


问题

问题:
1.如果登录报错:

org.springframework.boot.docker.compose.core.ProcessExitException:
‘docker compose --file E:\Code\jhipster-test\src\main\docker\services.yml --ansi never up --no-color --detach --wait’ failed with exit code 1. Stdout: Stderr: Container jhipstertest-mysql-1 Starting Error response from daemon: Ports are not available: exposing port TCP 127.0.0.1:3306 -> 0.0.0.0:0: listen tcp 127.0.0.1:3306: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

解决:
可能是Docker内的MySQL服务没有启动,启动即可。
可能是Docker内的MySQL的端口不是3306,确认端口并修改对应配置,目录位于项目src/main/docker/mysql.yml
在这里插入图片描述


拓展:JHipster选项的解释

服务发现

  1. Consul (recommended)
  • Consul 是一种现代化的服务发现工具,通常被认为是最先进和功能最全的选择。它不仅提供了服务发现功能,还支持健康检查、键值存储、以及多数据中心支持等功能。
  • 优点:
  • 多数据中心支持:Consul 可以在多个数据中心之间进行服务发现。
  • 健康检查:Consul 可以自动进行服务的健康检查。
  • 广泛支持:有很多工具和生态系统与 Consul 集成,适用于微服务架构。
  • Kubernetes 支持:Consul 与 Kubernetes 集成良好,可以作为云原生服务发现的解决方案。
  • 适用场景:如果你正在构建一个有很多服务需要动态扩展和管理的系统,Consul 是一个很好的选择。
  1. JHipster Registry (legacy, uses Eureka, provides Spring Cloud Config support)
  • JHipster Registry 是 JHipster 提供的一个自定义服务发现解决方案,基于 Eureka,并且支持 Spring Cloud Config 配置管理。
  • 优点:
  • 集成 Spring Cloud Config:提供集中配置管理,适合微服务架构。
  • 成熟的生态:Eureka 在 Spring Cloud 生态中非常流行,许多传统的 Spring 项目都使用 Eureka 来做服务发现。
  • 缺点:
  • 不如 Consul 现代:尽管 Eureka 长时间在 Spring Cloud 中被使用,但相比 Consul,它的功能和社区支持不如前者活跃。
  • 过时:这个选项被标记为 “legacy”,表明它正在逐渐被其他更现代的技术(如 Consul)替代。
  • 适用场景:如果你已有基于 Eureka 的项目,或者在使用传统 Spring Cloud 生态中的其他工具,那么可以选择 JHipster Registry。对于新项目,推荐使用 Consul。
  1. No service discovery
  • 无服务发现:如果你不打算在微服务架构中使用服务发现,或者只是做一个简单的单体应用,选择此选项。
  • 适用场景:适合非常简单的应用,或者你计划手动管理服务间的通信(例如,通过直接硬编码服务地址),这种情况下不需要服务发现。

Spring WebFlux

Spring WebFlux 是 Spring 框架中的一个模块,用于构建响应式、非阻塞的 Web 应用程序。它是 Spring MVC 的替代方案,专为高并发、低延迟的场景设计,支持异步和非阻塞的编程模型。

Spring WebFlux 与 Spring MVC 对比:

特性Spring WebFluxSpring MVC
编程模型响应式、非阻塞同步、阻塞
并发模型基于事件循环,少量线程处理大量请求每个请求占用一个线程
性能高并发场景下性能更优适合低并发、计算密集型任务
适用场景实时数据处理、高并发服务传统 Web 应用、RESTful API
学习曲线需要掌握响应式编程更简单直观
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值