经过我们数月长期的努力,下一代乐青映射——乐青映射 3 即将发布。
本次更新有较大的架构改动,我们将在本文中与大家一起分享本次更新的改动及技术细节。
架构升级
数据库结构重新设计
长期以来,我们受限于 SakuraPanel 的数据库结构,导致我们的数据库/代码可维护性较差,数据库维护成本高。尽管我们在第二代乐青映射,对数据库进行了一定的结构升级,但想要长期维护,使用这样的数据库结构是不可能的。因此,我们在新一代乐青映射上,重新设计了我们的数据库结构,降低了我们的数据库维护成本,并提供清晰明了的数据库抽象类型,为我们的开发与调试节约了大量的时间。
此外,我们还单独提取了数据库抽象结构为模块,降低代码耦合,提高代码复用率,降低开发成本。
框架改进
后端体系
第二代乐青映射因为无法多地部署备灾,导致我们的服务器一但出现问题,便会导致全站服务瘫痪,这是长期以来一直存在的痛点。而在乐青映射 3 中,设计便考虑到了多地部署,通过数据库共享镜像 + 消息队列分发机制,实现多地部署支持。
我们从 Spring Boot 切换到了 Spring Cloud + Spring Boot 的模式,实现了微服务架构,协调管理资源调度。
前端体系
在新一代的前端,我们更换为更易于使用的 Nuxt.js 框架,通过自动导入、自动路由、约定的目录结构及 Nuxt 框架的各种便利的脚手架,提高了我们项目的可维护性,去除了不必要的手动编写路由、数据持久化环节,节约了大量的开发成本。
通过使用 Nuxt SSG,我们得以为页面提供更快的加载速度及更好的 SEO,提升用户服务体验。
技术栈变更
在第二代乐青映射中,我们主要采用 Java 语言编写后端,造成了诸多不便,譬如由于忘记非空判断导致的空指针异常,部分逻辑实现繁琐,代码复杂不易于维护等等.......在第三代乐青映射,我们更换为主要使用 Kotlin 语言编写,Kotlin 的诸多特性为我们提供了极大的便利,例如空安全、语法糖,使得我们可以用更精简的逻辑,实现相同的功能,并同时降低了代码复杂度且提高了可维护性。
而在前端,我们曾经使用 axios,在 Nuxt.js 中并不好集成,我们更换了 Nuxt 3 官方推荐的 ofetch 来实现前端请求,并对请求进行了封装,提供了一套更完善、更易于使用的 API 调用流程,提高开发效率。
软件更新
我们积极跟进 Frp 上游,已将我们的 Frp 版本从 0.51.3 更新到 0.62.1,并且后续有更新还会继续跟进。
通过更新版本,我们抛弃了上游弃用的 INI 配置,并使用新的 TOML\JSON\YAML 作为配置。
我们还计划更新 Eda,让其能够成为类似联机平台的软件,提供更方便的联机体验,简化配置流程。
开源共进
我们已对我们的前端进行开源,欢迎所有开发者提交 Pull Request 改进我们的前端,让乐青映射做的更好。同时我们也使用 GitHub Issues Tracker 来追踪问题等,您可以提交 Issue 来向我们建议意见,提交 BUG。