我不是专业程序员,最近公司在本地做一个图像识别算法,希望做一个演示demo,算法部署到云端,前端是微信小程序,用于上传手机拍摄照片并返回分析结果。
目前虽然不考虑高并发问题,但是在选型云服务器时发现带宽和流量都不便宜,对部署方案产生疑问。现在手机拍出来的像素都很高,一些大型应用如图片处理等app需要大并发地接收用户这么多大容量图片,究竟用什么架构来处理呢?
我考虑过以下方案:
【方案一】
前端:微信小程序上传原图到云服务器
后端:云服务器 + Django + python图像处理(压缩、裁剪、调色等)+ 自研识别算法
优点:原理简单,实现容易
缺点:手机原图分辨率大,云服务带宽有限,假如选100Mbps带宽,一张图片5MB=40Mb,单用户上传1张图占用0.4s,只要几个用户同时使用就会堵车。如果扩大带宽来解决,感觉是蛮力的方法,不太合理。
【方案二】
前端:微信小程序调用微信压缩图片接口,压缩后再上传
后端:云服务器 + Django + python图像处理(裁剪、调色等)+ 自研识别算法
优点:架构简单,折中的方法。
缺点:①虽然图片被压缩了,假设压了1/10,也只是把并发数扩大10倍,仍然是大力出奇迹。
②降低了图片分辨率,AI识别算法难度提高。
【方案三】
前端:微信小程序上传原图到云存储空间(如阿里云的OSS)、并通知后端执行业务逻辑
后端:云存储 + 云服务器 + Django + python图像处理(裁剪、调色等)+ 自研识别算法
后端方法①-调用云上图像处理API对原图进行图像处理(压缩、裁剪、调色等),接收小图到后端再执行AI算法
优点:利用API接口的高带宽,仍然能保持同步处理,即用户上传图片后,实时(略微等待)返回结果。
缺点:调用过程很复杂,只是减少了云服务器带宽要求,仍然要接收小图。
后端方法②-云服务器直接从云存储拉原图自己处理和AI识别
优点:利用云存储高带宽来加快图片上传,提高上传体验,且调用路径简单,可在后端自由实现图像处理算法。
缺点:云服务器仍然要接收原图,而且处理时间较长,需要异步操作,即用户上传完图片后,需要过一段时间再访问查看结果。
想要了解服务器是如何接住大流量高并发的?
我们处理方式是,用户上传图片的时候是存到阿里云oss的,然后后台调用oss返回的url。然后再去调用图片解析函数,然后得到结果反馈前端。
运用数据库。最进行图片编辑。