




















前段时间在整理技术方案时,想起了之前公司的那个项目架构。我们当时做了一个中台系统,配合各种业务模块,效果还挺不错的。简单说就是:
有个中台统一管理所有应用
各个业务模块独立开发、独立部署
前端也是模块化的,可以动态加载
整个流程都是自动化的
总结一下原公司的架构可能为“中台 + 模块化微服务 + 微前端”结合的云原生架构体系,特点是:
中台统一管理:负责应用注册、菜单、权限、页面路由管理
模块化微服务:业务模块独立开发、独立打包、独立部署,Kubernetes 管理生命周期
前端微前端/模块化页面:业务页面可在中台中集成展示
CI/CD 构建流水线:模块从开发到部署全自动化
生命在于折腾。
在逛各位大佬们的博客的时候有幸遇到很多优秀的博客,其中不乏有一些独立开发的站点并且开源。
不过有些开源站点他设计的功能会很丰富,导致很多人可能用不上部分功能,所以导致功能冗余占用性能(虽然也只是蚊子腿)。
就好比说博客网站可能主要的就是博客列表、博客详情,除了一些强耦合在页面里的功能如:评论、推荐、总结等功能不能拆分的。
很多开源站点还支持履历、设备展示、照片墙、数据统计、旅游地图等这种单开一个页面的功能,那实际用户使用的时候可能就没有照片墙或者设备需要展示,这几个页面甚至是对应的查询api和库都是不需要的。
这次重构博客的时候我有在思考,博客本质就是文章,其他的内容能不能按类似的方案开发,比如添加一些功能模块,比如:
图书角:展示我读过的书
影视墙:记录看过的电影电视剧
旅游足迹:分享旅行经历
友链管理:方便管理友情链接
但是这套架构在企业环境里确实很香,但当我想要给自己的博客搞类似功能时,发现完全不是那么回事,其技术栈复杂、开发周期长、运维成本高,对于一个个人使用的博客而言无异于是“杀鸡用牛刀”、“大炮打蚊子”。
在前面几月折腾PT的时候发现了一个项目,使用了插件化的开发思路,为此我想借鉴一番。(玩PT的程序大佬是真的多,一个项目里学到好多东西)
用插件来注册对应需要拓展的页面,实现功能的扩展,方便开源后,用户们的自行组装,有点搭积木的意思。
最近没时间验证,尝试把想要使用的架构和逻辑思路丢给AI,不断的沟通修正,让他回答出一份看似可行的技术架构说明。
以下只是一个方向,还待验证
Module Federation是Webpack 5引入的革命性特性,它允许JavaScript应用在运行时动态加载远程模块。这一特性完美契合插件化架构的需求:
动态加载:主应用可在运行时动态加载插件的前端UI和逻辑
依赖共享:可配置共享依赖,避免重复加载
独立部署:各插件可独立开发、独立部署
PF4J(Plugin Framework for Java)是一个轻量级的Java插件框架,它提供了:
插件生命周期管理:支持插件的安装、启动、停止、卸载
扩展点机制:通过扩展点实现插件与主应用的解耦
类加载隔离:确保插件间的类冲突不会影响主应用
提供基础网站功能(博客、个人信息、主页等)
维持轻量级和稳定性,不受插件逻辑影响
负责插件的发现、加载和管理
插件系统职责:
支持功能的动态添加、移除和升级
每个插件独立开发、独立部署
实现具体业务功能(图书角、影视墙、旅游足迹等)
创建独立的book-ui项目
配置Module Federation,暴露./BookPage组件
构建产出dist/目录
创建book-plugin项目
实现MenuExtension接口,注册菜单项
实现RequestExtension接口,处理/books/list请求
将前端构建产物放入后端资源的static/目录
将后端JAR和前端资源打包成book-corner-1.0.0.zip发布包
在个人网站后台上传插件ZIP包
主应用后端使用PF4J解压并加载JAR文件
检测到MenuExtension,将菜单信息存入数据库
检测到静态资源,建立文件映射:http://api.site.com/plugins/book/assets/
执行插件内置的init.sql,创建plg_book_table表
用户访问首页,前端Shell请求/api/config获取配置
后端返回插件配置信息,包括模块名称、入口文件地址、路由路径
前端Shell根据配置生成"图书角"菜单项
用户点击菜单,前端动态加载remoteEntry.js文件
渲染远程组件,组件内部发起API请求获取数据
后端拦截请求,转交给book-plugin处理,返回JSON数据
各插件完全独立,互不影响
插件升级不会影响主应用和其他插件
支持并行开发和部署
核心功能精简,启动速度快
内存占用低,运行效率高
稳定性不受插件质量影响
插件开发者只需关注具体业务逻辑
标准化的接口降低了开发门槛
支持快速原型验证和功能迭代
考虑到是个人博客,一个人可以做一些简化:
统一技术栈,使用相同版本,避免版本冲突,减少插件体积。
数据库简化,使用一个实例,前缀区分表明、安装建表,卸载删除。
当插件量增大(如几十到上百个)时,核心矛盾从「单一插件的前后端协同」转变为「规模化插件的高效管理、性能控制、隔离稳定性、生态标准化」。
原方案的核心架构(MF + PF4J)仍适用,但需要在「加载机制、管理平台、隔离策略、性能优化、生态规范」五个维度进行升级,以下是具体落地方案:
规模化插件的核心需求是:「平台化管理 + 轻量化运行 + 强隔离 + 低损耗」
管理层面:从「手动加载插件」升级为「插件市场 + 统一管理平台」,支持插件的搜索、安装、升级、卸载全生命周期管理;
加载层面:从「全量加载」升级为「按需加载 + 预加载策略」,避免大量插件同时加载导致的性能问题;
隔离层面:从「基础隔离」升级为「强隔离(沙箱化)」,防止插件间的依赖冲突、数据泄露、资源抢占;
性能层面:通过「缓存、资源优化、异步处理」降低大量插件对主应用的性能损耗;
生态层面:通过「插件开发规范 + SDK」标准化插件接入,降低多开发者协作的成本。
当插件量增大时,原方案(MF + PF4J)通过「平台化管理 + 按需加载 + 沙箱隔离 + 标准化生态」的升级,完全可以支撑大量插件的稳定运行,核心优势:
管理效率:插件市场 + 管理后台解决了大量插件的安装、升级、卸载、监控问题,无需人工干预;
性能可控:按需加载 + 资源优化 + 隔离策略,避免大量插件导致的加载缓慢、内存溢出、资源抢占;
稳定性保障:强隔离(前端沙箱 + 后端类加载器 / 多数据源)+ 健康检查 + 熔断,防止单个插件异常影响全局;
生态可扩展:SDK + 规范 + 审核机制,降低第三方开发者的插件开发成本,形成良性生态。
先搭建「插件市场 + 管理后台」,解决大量插件的管理问题;
再优化「加载机制 + 隔离策略」,保障性能和稳定性;
最后完善「SDK + 规范 + 审核机制」,支撑生态扩展。
适合插件量:100 个以内(个人网站 / 中小型平台),通过上述方案可稳定支撑;
若插件量超 1000 个(大型开放平台),需进一步升级为「微服务化插件」(每个插件独立部署为微服务,主应用通过服务发现调用)
这篇博文的核心内容多由 AI 生成 —— 只因文中架构尚处于 “构想阶段”(是我 “云” 出的思路,未经过实际落地操作)。
但想借这点说明:AI 虽无法独立完成完整应用的开发,可只要我们提供明确的架构方向与逻辑,让它参与讨论、验证,它就能在关键环节帮我们排查漏洞、修正偏差。
带着思路和 AI 协作的方式,远比直接把问题丢给 AI、收到格式生硬的回复要舒服得多,对渴望成长为架构师的新手来说,这无疑是个实用的辅助功能。
也算是水一篇博文了,不然直接拷贝AI回复也太抽象了。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。