SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 - 第520篇

历史文章(文章累计520+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

《国内最全的Spring Boot系列之七》

idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇

Noisee AI中文站网页版 AI 音乐生成视频全新登场,快来抢先体验——国内第一个登场的中文站来袭  - 516篇

Spring的SmartLifecycle可以没用过,但没听过就不好了!- 第517篇

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇

导读

在前面的几篇文章提到了AI导航站,想必有些小伙伴会很好奇,现在不都前后端分离了吗?为什么博主你前端的代码还和后端放在一起呐?

这个问题就是一个技术选型的问题?本篇文章想和小伙伴们谈谈技术选型的问题 —— 观点仅代表个人意见,仅供参考!

项目地址:http://ai.dzwlai.com/

AI导航站,汇总800+工具集合:

缘起

一直有个梦 —— 拥有自己的一个导航站,刚好最近一直在研究AI相关的知识,所以就想那就从AI导航站开始吧 —— 梦该醒了。

AI导航站的思考

技术在落地之前,还是需要一定的可行性的思考的,对于AI导航站的落地实现方式有两种:

(1)纯静态前端代码:这种方式是不需要后端的,只要会前端代码编写就可以,维护的时候只需要修改前端的代码或者配置文件即可。好处就是实现简单,不会后端也可以搞定;弊端就是没有后台维护起来会比较费劲。

(2)后端+前端代码:这种方式是需要后端的,导航站的信息数据都在后端进行管理和返回,前端只做页面的渲染。弊端就是实现难度会增加,好处就是维护可以通过后台进行维护。

对于想要自己的一个导航站的小伙伴,需要根据自己的实际情况进行实现。没有服务器预算的,如果是纯前端代码可以把代码放在一些平台上即可完成部署。

我这里使用的是后端+前端的实现方式。使用这种方式主要是基于以下进行思考:

(1)本身有现成的服务器在运行《AI写歌》的项目,关注公众号《SpringBoot》进行体验。

(2)希望自己可以通过后台进行维护,而不是每次维护都要修改代码,然后重新部署。—— O(∩_∩)O哈哈~ 我比较懒~

(3)我希望我开发的不仅仅是AI导航站,而是一个通用的导航站,可以根据不同的域名,展示不同的导航站。

AI导航站的技术架构

当对整体技术架构进行了规划,那么技术架构就可以慢慢落地了,当然在具体架构之前,还有一个点要思考,那就是要不要前后端分离:

(1)前后端分离:这种架构的好处,就是后端只需要提供接口,不需要懂前端的技术,另外就是一旦展示方式或者要多个前端网站,后端接口都不需要动。—— 前端只管前端,后端提供接口。

(2)前后端不分离:这种架构前端的代码逻辑和后端架构混合在一起,好处 就是开发效率,自己写接口,自己调用开发效率高;其次就是性能:由于前后端紧密结合,对于一些性能关键的场景,可以更方便地进行整体的优化。

总的来说:不管是使用哪种方式都是可以的,这个要根据实际情况进行选择。

我这里选择的是前后端不分离,主要是基于以下进行思考:

(1)对于vue框架不是很熟悉,对于html+js+css还是比较熟悉的;

(2)对于vue的单体应用不知道怎么进行SEO优化,对于html页面还是知道的;

(3)对于Spring MVC这种开发模式很熟悉;

(4)只有一个人开发,没有专业的前端配合。

到这里就可以确定技术架构了:

SpringBoot + MyBatis-Plus + MySQL + Thymeleaf

(1)SpringBoot:作为整个框架的核心,没的说。

(2)MyBatis-Plus:使用mybatis-plus进行数据库的操作,当然使用spring data jpa也是可以的。

(3)MySQL:使用MySQL进行数据的存储。

(4)Thymeleaf:使用Thymeleaf模板进行数据的渲染,当然这里你可以使用自己熟悉的模板引擎,比如:velocity、freemarker。我选择Thyemeleaf的音乐,是因为Thyemeleaf的模板文件还是html文件,不会破坏html结构。

对于表信息:导航中重要的两个核心信息是导航菜单以及对应的工具:NavMenu和NavTool,以下只提供关键字段:

(1)NavMenu:id(主键)、name(菜单名称)、icon(图标)、pid(父菜单)、type(类型,左边导航还是顶部导航)…

(2)NavTool:id(主键)、name(工具名称)、logo(logo)、menuId(菜单id)、url(链接地址)、description(描述)….

技术架构选型综合考虑点

(1)业务需求:

l 明确业务的功能和特性要求,例如是侧重数据处理、实时交互还是高并发访问。

l 考虑业务的未来发展和扩展性,能否支持业务规模的增长和功能的扩展。

n 比如一个电商平台,初期可能流量不大,但要考虑到促销活动时的高并发情况,以及未来增加新的业务模块如直播带货的可能性。

(2)性能要求:

l 评估系统的响应时间、吞吐量、资源利用率等性能指标的要求。

l 确定是否需要支持大规模数据处理和高速数据传输。

n 像金融交易系统,对响应时间要求极高,毫秒级的延迟都可能造成巨大损失。

(3)技术成熟度:

l 选择成熟稳定的技术,降低技术风险。

l 考察技术的社区支持和文档完善程度。

n 例如,Java 作为一种成熟的编程语言,拥有丰富的文档和强大的社区支持。

(4)开发效率:

l 考虑所选技术是否能提高开发人员的效率,减少开发时间和成本。

l 评估技术的学习曲线,是否易于团队成员掌握。

n 采用一些流行的开发框架,如 Spring Boot,可以提高开发效率。

(5)可维护性:

l 思考技术架构是否易于维护和故障排查。

l 代码的可读性和可扩展性如何。

n 良好的代码结构和模块化设计有助于后期的维护工作。

(6)安全性:

l 确保所选技术能够提供足够的安全保障,防止数据泄露和恶意攻击。

l 评估技术在身份验证、授权和加密方面的能力。

n 对于涉及用户隐私数据的系统,安全性至关重要。

(7)成本:

l 包括技术的许可费用、硬件成本、运维成本等。

l 考虑开源技术和商业技术的成本差异。

n 某些商业数据库软件可能需要高昂的授权费用,而开源数据库则可以节省成本。

(8)技术团队的技能水平:

l 结合团队成员现有的技术能力和经验,选择他们熟悉或能够快速上手的技术。

l 考虑是否需要为新技术进行培训和学习。

n 如果团队主要熟悉 Python 开发,那么选择基于 Python 的技术栈可能更合适。

(9)兼容性:

l 与现有系统和技术的兼容性,能否顺利集成。

l 考虑不同技术组件之间的兼容性。

n 新引入的数据库是否能与现有的应用服务器兼容。

(10)技术生态:

l 考察技术周边的工具和资源是否丰富,如测试工具、监控工具等。

l 第三方库和插件的可用性。

n 例如,JavaScript 拥有丰富的第三方库,可以满足各种功能需求。

总结

AI导航站整体的一个架构和开发还是不复杂的,博主在这里也这是把自己的一个思考过程和大家进行分享,在碰到技术的选型的时候要根据自身和团队的实际情况进行灵活的调整。

总之,技术架构选型是一个综合性的决策过程,需要全面权衡各种因素,以确保选择的技术架构能够满足业务需求,并为系统的长期稳定运行和发展提供有力支持。

历史文章(文章累计520+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

《国内最全的Spring Boot系列之七》

ES 深度分页问题及针对不同需求下的解决方案[ES系列] - 第509篇

抖音主播/电商人员有福了,利用Suno创作产品宣传,让产品动起来-小米Su7 - 第510篇

Spring Boot整合ElasticSearch实战 - 第511篇

Transaction rolled back because it has been marked as - 第512篇

五音不全也浪漫,521清华学霸为爱人写歌 - 第513篇

一文讲清楚SpringBoot项目打包jar后运行报错template might not exist - 第514篇

idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇

Noisee AI中文站网页版 AI 音乐生成视频全新登场,快来抢先体验——国内第一个登场的中文站来袭  - 516篇

Spring的SmartLifecycle可以没用过,但没听过就不好了!- 第517篇

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#与PLC通信——如何设置电脑IP地址

前言: 我们与PLC通过以太网通信时,首先要做的就是先设置好电脑的IP,这样才能实现上位机电脑与PLC之间的通信,并且电脑的ip地址和PLC的Ip地址要同处于一个网段,比如电脑的Ip地址为192.168.1.1,那么PLC的Ip地…

【Android面试八股文】请描述一下 android 的系统架构?

Android 是一个基于 Linux 的开源软件堆栈,针对多种不同设备类型打造。下图显示了 Android 平台的主要组件。 早期的Android架构如下图所示 官方网站最新的Android平台架构图,如下所示: Linux 内核 Android 平台的基础是 Linux 内核。例如,Android 运行时 (ART) 依赖…

css-grid布局(栅格布局)

css新世界-auto-fit grid 一个比flex更强大的布局,适合做整体布局 grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); auto-fit的话有strech效果gap 不仅可以用于grid 也可用flex. 在grid-template-areas表示这个位置空着grid area 的 [a b]命名可重复命名 表示的…

RHCA II之路---EX442-6

RHCA II之路---EX442-6 1. 题目2. 解题3. 确认 1. 题目 2. 解题 sysctl -a|grep shmall echo kernel.shmall 367001 >> /etc/sysctl.conf sysctl -p3. 确认 去人这里max total shared memory的值使我们之前设定的即可.这里的值单位是kb所以只需要2个1024就可以了 ipc…

如何快速区分电子原件极性

表贴式电阻电容无极性 1表贴式.二极管 如图所示:有横杠的表示负极(竖杠标示),注意一定要查阅数据手册在引脚信息栏一般会有 铝电解电容 手册一般会对正负极有说明 钽电容有极性 发光二极管 芯片 一般规律:1.看丝印朝向正对丝印的…

监控易V7.6.6.15升级详解7,日志分析更高效

随着企业IT系统的日益复杂,日志管理成为了保障系统稳定运行、快速定位问题的重要工具。为了满足广大用户对日志管理功能的更高需求,监控易系统近日完成了重要版本升级,对日志管理功能进行了全面优化和新增。 一、Syslog日志与SnmpTrap日志统…

uniapp踩坑之项目:uni-table垂直居中和水平居中

uni-table 中的水平居中uni-td align"center" //html 水平居中<uni-table ref"table" :loading"loading" border stripe emptyText"暂无更多数据"><uni-tr><uni-th :width"tdWidth/6" align"center&quo…

7-Zip解压缩软件

7-Zip是一款完全免费而且开源的压缩软件&#xff0c;相比其他软件有更高的压缩比而且相对于WinRAR不会消耗大量资源 下载地址&#xff1a;7-Zip解压缩软件安装包_压缩软件安装包资源-CSDN文库

【Python3】自动化测试_用Playwright操作浏览器

创建浏览器实例 # 启动浏览器实例 myBrowser myPlaywright.chromium.launch(headlessFalse) # myBrowser myPlaywright.firefox.launch(headlessFalse) # myBrowser myPlaywright.webkit.launch(headlessFalse) args < List [ str ] >传递给浏览器实例的附加参数。 c…

仓颉语言 -- 函数

1、定义函数 仓颉使用关键字 func 来表示函数定义的开始&#xff0c;func 之后依次是函数名、参数列表、可选的函数返回值类型、函数体。其中&#xff0c;函数名可以是任意的合法标识符&#xff0c;参数列表定义在一对圆括号内&#xff08;多个参数间使用逗号分隔&#xff09;…

PyTorch论文

2019-12 PyTorch: An Imperative Style, High-Performance Deep Learning Library 设计迎合4大趋势&#xff1a; 1. array-based (Tensor) 2. GPU加速 3. 自动求导 (Auto Differentiation) 4. 拥抱Python生态 4大设计原则&#xff1a; 1. 使用算法和数据开发者熟悉的Python做编…

【Python学习笔记】:Python爬取音频

【Python学习笔记】&#xff1a;Python爬取音频 背景前摇&#xff08;省流可以不看&#xff09;&#xff1a; 人工智能公司实习&#xff0c;好奇技术老师训练语音模型的过程&#xff0c;遂请教&#xff0c;得知训练数据集来源于爬取某网页的音频。 很久以前看B站同济子豪兄的《…

开源AI生成连续一致性儿童故事书; GraphRAG结合本地版Ollama;AI辅助老年人用餐;开源无代码AI工作流VectorVein

✨ 1: SEED-Story SEED-Story 是一种能生成包含一致性图像的多模态长篇故事的机器学习模型&#xff0c;配套数据集已开放。 SEED-Story 是一种多模态长故事生成模型&#xff0c;具备生成包含丰富且连贯的叙事文本和一致性高的人物和风格图像的能力。此模型基于 SEED-X 构建。…

找到完美的横道图工具:2024年选择指南

国内外主流的10款项目进度横道图软件对比&#xff1a;PingCode、Worktile、灵动计划&#xff08;Wolai&#xff09;、飞书项目、Tapd、麦客CRM、Asana、Trello、Smartsheet、Basecamp。 在管理项目时&#xff0c;确保所有进度和任务都按计划进行是每个项目经理面临的一大挑战。…

iSAM: Incremental Smoothing and Mapping

文章目录 iSAM原理主要思想问题描述求解方法增量求解增量更新增量因式分解(基于[Givens Rotations](https://blog.csdn.net/weixin_41469272/article/details/140245327)) 回环处理数据association变量组合协方差 补充知识COLAMD排序算法原理步骤 JVC assignment iSAM原理 论文…

QT--控件篇二

一、文本框 1. QLineEdit 文本框通常使用QLineEdit和QTextEdit这两个类来实现。 QLineEdit&#xff1a;用于单行文本输入。QTextEdit&#xff1a;用于多行文本输入&#xff0c;可以包含丰富的文本格式。 用setText(QString txt);设置默认的显示内容&#xff0c;用QString tex…

Spring-Cache 缓存

1.简介 2.SpringCache 整合 简化缓存开发 1.导入依赖 <!-- spring cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>2.redis 作为缓存…

c#与欧姆龙PLC通信——如何更改PLC的IP地址

前言 我们有时候需要改变欧姆龙Plc的ip地址,下图有两种更改方式,一种是已知之前Plc设置的Ip地址,还有一种是之前不知道Pl的Ip地址是多少,下面分别做介绍。 1、已知PLC的IP地址的情况下更改地址 假设已知PLC的Ip地址,比如本文中PLC的IP为192.168.1.2,我首先将电脑的IP地…

宝塔面板以www用户运行composer

方式一 执行命令时指定www用户 sudo -u www composer update方式二 在网站配置中的composer选项卡中选择配置运行

ROS2从入门到精通5-1:详解代价地图与costmap插件编写(以距离场ESDF为例)

目录 0 专栏介绍1 代价地图介绍1.1 基本概念1.2 代价定义 2 代价地图配置2.1 通用配置2.2 障碍层配置2.3 静态层配置2.4 膨胀层配置 3 代价地图插件案例3.1 构造地图插件类3.2 注册并导出插件3.3 编译与使用插件 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握RO…