【Java开发】Staffjoy 02 :系统架构设计

news2024/9/25 23:15:03

本文主要对 Staffjoy 项目的架构做一个介绍和衍生,包括数据模型、各服务接口模型及框架选择等,希望能让大家对于项目有个整体的把握和判断,本文最后也列举了 Dubbo、Spring Cloud 和 K8s 三种微服务框架的异同~

目录

1 架构设计

1.1 总体架构设计

1.2 Skywalking 依赖监控图

1.3 教学版项目技术栈

2 数据和接口模型设计

2.1 账户服务/Account API

2.2 公司服务/Company API

2.3 公司管理员/Admin 服务接口模型

2.4 员工目录/Directory 服务接口模型

2.5 团队/Team 服务接口模型 

2.6 雇员/Worker 服务接口模型 

2.7 任务/Job 服务接口模型  

2.8 班次/Shift 服务接口模型

3 Dubbo、Spring Cloud 和 K8s 对比选型

3.1 微服务公共关注点

3.2 横向比对

3.3 优劣比对


1 架构设计

1.1 总体架构设计

绿色标注就是框架的微服务,核心是 Account API 和 Company API 两服务,分别采用不同的数据库—符合微服务独立数据源的思想

  • Account API:账户服务,提供用户登录、注册和用户信息管理等基本信息功能
  • Company API:公司服务,提供团队、雇员、班次和任务核心领域的管理
  • Bot API:消息转发服务,一方面作为消息队列,缓冲高峰期大量的通知消息,另一方面作为代理,屏蔽将来可能的通知方式的变更
  • Mail Sender 和 SMS Sender:都是消息通知服务,分别支持邮件和短信通知方式,它们可以对接各种云服务,比如阿里云邮件或短信服务。
  • WhoAmI API:支持前端应用获取当前登录用户的详情信息,包括公司和管理员身份,团队信息等,它也可以看作是一个用户会话(Session)信息服务
  • App(也称 MyCompany):单页 SPA 应用,是整个 Staffjoy 应用的主界面,公司管理员通过它管理公司、雇员、任务和排班等信息
  • MyAccount :单页 SPA 应用,它主要支持公司雇员管理个人信息,包括邮件和电话等,方便接收排班通知消息
  • WWW 应用:前端 MVC 应用,它主要支持产品营销、公司介绍和用户注册登录/登出,这个应用也称为营销站点(Marketing Site)或者登录页(Landing Page)应用
  • Faraday(法拉弟):反向代理(功能类似 nginx),也可以看作是一个网关(功能类似 zuul),它是用户访问 Staffjoy 微服务应用的流量入口,它既实现对前端应用和后端 API 的路由访问,也实现登录鉴权和访问控制等安全功能Faraday 代理是 Staffjoy 微服务架构和前后分离架构的关键,并且它是唯一具有公网 IP 的服务

1.2 Skywalking 依赖监控图

上图是经过调用链埋点监控后,在 Skywalking Dashboard 上实时呈现出来的服务依赖关系图,这个依赖图和总体架构设计保持一致。

1.3 教学版项目技术栈

  • Spring Boot
  • Spring REST
  • Spring Data JPA
  • Spring MVC + Thymeleaf
  • MySql
  • ReactJs + Redux
  • Docker Compose
  • Kubernetes

本人将 Spring Data JPA 替换为 Mybatis-plus,然后采用较高的 Spring Boot 2.76 版本

SaaS 多租户设计:

普通用户可在 Staffjoy 上注册账户,首次注册提示创建公司--company,完成后该用户自动成为该公司的管理员,管理员之后登录 app 即可管理公司的雇员、任务和排班信息

2 数据和接口模型设计

接下来我们来剖析下它的账户服务和公司服务两核心服务的数据和接口模型设计~

2.1 账户服务/Account API

账户数据模型:

账户接口:

主要被前端及其他服务所调用~

2.2 公司服务/Company API

账户数据模型:

 实体关系ER图(简化):

各数据表直接的联系,1 * 是指一对多的关系,1 1 是指一对一的关系,比如一个 company 有多个Team,一个 Worker 有一个 Account(账户)~

接口模型:

2.3 公司管理员/Admin 服务接口模型

2.4 员工目录/Directory 服务接口模型

2.5 团队/Team 服务接口模型 

2.6 雇员/Worker 服务接口模型 

2.7 任务/Job 服务接口模型  

2.8 班次/Shift 服务接口模型

3 Dubbo、Spring Cloud 和 K8s 对比选型

3.1 微服务公共关注点

3.2 横向比对

3.3 优劣比对

至于到底选择哪个,首先理解微服务关注点,根据企业上下文综合考量,并尽量不要混搭,保持体系一致性,注意本项目采用 K8s + Spring Boot~


总结

大家如果有疑问都可以评论提出,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

毕业设计 基于PID控制的智能平衡车 - stm32 物联网 单片机【超详细】

文章目录0 前言1 课题背景2 设计内容3 设计方案3.1 设计思路3.3 硬件设计3.4 软件设计3.4.1 关键技术 - PID控制算法3.4.2 关键技术 - 倾角估计算法3.4.3 关键技术 - 直立控制算法3.4.4 速度控制3.4.5 方向控制4 视频演示5 最后0 前言 🔥 这两年开始毕业设计和毕业…

长短时记忆网络(LSTM)负荷预测项目(matlab)

目录 1. LSTM介绍 2. 数据集准备及预处理 3. LSTM模型搭建与训练 4. 预测模型测试 1. LSTM介绍 长短期记忆网络 LSTM(long short-term memory)是 RNN 的一种变体,其核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径…

每日一道LeetCode(一):两数之和

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

刷完这1000道JAVA面试题,让你成功逆袭上岸

内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈。 由于整个笔记比较全面,内容相当的多 ,这里仅展示面经中的面试真题&#xff0…

Keras深度学习实战(41)——语音识别

Keras深度学习实战(41)——语音识别0.前言1. 模型与数据集分析1.1 数据集分析1.2 模型分析2. 语音识别模型2.1 数据加载与预处理2.2 模型构建与训练小结系列链接0.前言 语音识别(Automatic Speech Recognition, ASR,或称语音转录文本)使声音…

openssl加密base64编码

openssl OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 首先,要安装 openssl: centos命令: sudo yum install openssl-devel ubuntu命令&#x…

WebService基于Baidu OCR和Map API的导航服务

哈尔滨工业大学国家示范性软件学院 《面向服务的软件系统》大作业 项目题目: 基于OCR和地图API的路牌定位与导航服务 项目组成员: 姓名 学号 李启明 120L021920 完成日期: 2022年 12 月 15 日 1.选题 1.1 作业…

NUS CS5477 assignment1

课程链接三维视觉 作业任务任务 课程任务就一个,实现一个Linear Sweep Algorithm,这个算法是用来检测两张图片之间的对应点。 因为SIFT检测如果把检测点的数量增大,可能会存在一些错误错误检测点,所有通常把SIFT检测的点的数量…

内网穿透:在家远程ssh访问学校内部网服务器

注册一个cpolar账号 cpolar官网注册即可(邮箱即可) cpolar支持http/https/tcp协议,不限制流量(花生壳免费只能使用1G流量),也不需要公网ip,只要在服务器上安装客户端即可配置,免费&…

攻防世界-file_include

题目 访问路径获得源码 <?php highlight_file(__FILE__);include("./check.php");if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} ?> 通过阅读php代码&#xff0c;我们明显的可以发现&#xff0c;这个一个文件包含的类型题…

Java项目:ssm校内超市管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本系统分为管理员与普通用户两种角色。采用后端SSM框架&#xff0c;前端BootStrap&#xff08;前后端不分离&#xff09;的系统架构模式&#x…

python中调用命令行执行外部程序

&#x1f31e;欢迎来到python的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f320;本阶段属于练气阶段&#xff0c;希望各位仙友顺利完成…

STM32的三种更新固件的方式

说明&#xff1a; stm32有三种更新固件的方式&#xff0c;分别为&#xff08;1&#xff09;DFU模式&#xff08; Development Firmware Upgrade 即“开发固件升级”&#xff09;&#xff1b;&#xff08;2&#xff09;SWD/JLINK 下载 &#xff08;3&#xff09;第三方bootload…

NoSQL数据库原理与应用综合项目——HBase篇

NoSQL数据库原理与应用综合项目——HBase篇 文章目录NoSQL数据库原理与应用综合项目——HBase篇0、 写在前面1、本地数据或HDFS数据导入到HBase2、Hbase数据库表操作2.1 Java API 连接HBase2.2 查询数据2.3 插入数据2.4 修改数据2.5 删除数据3、Windows远程连接HBase4、数据及源…

springboot常用组件集成

今天与大家分享spring-mybatis、reids集成&#xff0c;druid数据库连接池。如果有问题&#xff0c;望指教。 1. 创建项目 File -> New -> project ...Spring Initializr选择项目需要的第三方组件注&#xff1a;可以参考第二次课演示的操作步骤&#xff0c;有详细的拷图…

java药店网站药店系统药店源码刷脸支付源码

简介 首页&#xff0c;搜索商品&#xff0c;详情页&#xff0c;根据不同规格显示不同的商品价格&#xff0c;加入购物车&#xff0c;立即购买&#xff0c;评价列表展示&#xff0c;商品详情展示&#xff0c;商品评分&#xff0c;分类商品&#xff0c;标签查询&#xff0c;更多…

MapReduce 概述原理说明

文章目录MapReduce概述一、MapReduce定义二、MapReduce 优缺点1、MapReduce 优点(1)、MapReduce 易于编程(2)、良好的扩展性(3)、高容错性(4)、适合PB级以上的海量数据的离线处理2、MapReduce 缺点(1)、不擅长实时计算(2)、不擅长流式计算(3)、不擅长DAG(有向图)计算三、MapRed…

二叉树进阶

博主的博客主页&#xff1a;CSND博客 Gitee主页&#xff1a;博主的Gitee 博主的稀土掘金&#xff1a;稀土掘金主页 博主的b站账号&#xff1a;程序员乐 公众号——《小白技术圈》&#xff0c;回复关键字&#xff1a;学习资料。小白学习的电子书籍都在这。 目录根据二叉树创建字…

基于java+springmvc+mybatis+vue+mysql的协同过滤算法的电影推荐系统

项目介绍 基于协同过滤算法的电影推荐系统利用网络沟通、计算机信息存储管理&#xff0c;有着与传统的方式所无法替代的优点。比如计算检索速度特别快、可靠性特别高、存储容量特别大、保密性特别好、可保存时间特别长、成本特别低等。在工作效率上&#xff0c;能够得到极大地…

Hive自定义UDF函数

以下基于hive 3.1.2版本 Hive中自定义UDF函数&#xff0c;有两种实现方式&#xff0c;一是通过继承org.apache.hadoop.hive.ql.exec.UDF类实现&#xff0c;二是通过继承org.apache.hadoop.hive.ql.udf.generic.GenericUDF类实现。 无论是哪种方式&#xff0c;实现步骤都是&…