根据浩然同学写的方案进行整理。
本系统主要满足以下功能:
原有方案:

更新后的方案:

本系统基于java语言的开源web客户端开发框架SpringBoot进行开发。客户在客户端上传图片后,经过nginx网关将数据反向代理到SpringBoot服务器上,并在服务器上执行具体的业务。服务的运行流程如下:
首先,为防止大量用户同时使用导致服务器崩溃,用户上传的图片和数据会首先保存在消息队列中,后端服务会以安全的速度通过FIFO的形式读取并执行任务。
然后,通过java-OpenCV,腾讯数据万象等图片处理框架,对图片进行预处理。为减轻服务器压力,将图片和预处理后的图片上载到提供OSS(对象存储)服务的云平台进行存储,服务端仅保存链接和临时文件。
获得临时文件后,首先将文件处理成模型接口要求的格式,然后通过Jpython调用部署在服务端的模型或直接将模型部署在弹性运算平台上进行模型计算,得到模型结果。模型结果通过处理后获得文字返回前端页面。同时,可以直接通过java2word等框架操作word文档来生成排版后的word文档。
服务端程序通过Redis提供缓存支持,保证查询,用户交互等操作高速进行。Mybatis持久层框架进行数据存储。使用MySQL作为数据库,通过主从数据库模式实现读写分离。Redis和MySQL保持数据同步。日志存储使用SpringBoot支持的日志框架,保存日志文件以便于故障排查和程序调试。为保持可用性,可以使用MySQL集群或Redis集群,也可以考虑使用云数据库服务。
服务端和前端的传输使用JWT框架进行加密,通过md5加密json数据并生成token保证请求的合法性。前后端使用AES等加密方案保证数据的安全性。
服务器安全框架采用shiro框架集成JWT完成用户登录,用户权限验证和对后端数据接口的鉴权处理,防止用户越权访问开发接口等情况出现。用户登录可以支持手机验证码登录,账号密码登录等成熟方案。
用户敏感数据加密部分采用shiro实现,使用业界常用的随机盐MD5加密算法,保证客户个人敏感信息/识别文本信息的安全性。
以上为一个单体springboot项目,但是具有很强的扩展性,由于微服务框架和技术的发展,在此项目基础上如果有其他功能和业务,可以不断集成这些业务形成分布式的微服务后端系统。