架构实战:图片库平台

目录

项目背景

基础版

S3 同步版

会员版

CMS 版

CQRS 版

IM 版

Cloudflare 版

CI/CD 版

总结


架构是指系统架构,广义上包含业务架构、运维架构、组织架构等所有系统构建场景。本文主要聚焦开发人员最关注的开发架构。

关于架构的理论众说纷纭,每个人都有不同的理解。在实际应用中,开发者往往会遇到各种问题和困惑。本文摒弃理论教条,通过一个实际项目的演进过程,来探讨架构的本质。

项目背景

让我们先了解一下项目背景。这个项目最初是为一家国外公司开发的图片库平台,主要提供图片授权服务,属于正规商业项目。然而当地市场环境复杂,各种不正当竞争手段频出——多个同类项目接连遭遇DDOS攻击、流量劫持或被恶意植入违规内容,导致该公司损失惨重。最终他们决定高薪聘请专业团队来解决问题。作为专业团队一员的你可能会觉得项目规模不大,但除了核心业务功能外,服务器架构和数据安全防护同样需要重点规划。

基础版

显然,用户浏览网站需要一个site,如果采用前后端分离还得有api-server

为了防止恶意用户上传违规内容,所有图片都由管理员上传至图床比如AWS-S3(公共读私有写模式)

S3 同步版

基础版虽然在业务端保证了数据安全,但由于两处服务器(S3、site/api,即红色节点)直接对外暴露,黑客能轻而易举地实现定位进而展开攻击。S3 是可靠的云服务,倒也不用太担心,然而惊弓之鸟的甲方要求管理员不能直接访问 S3,防止黑客嗅探到管理端。

于是,在管理端和 S3 中间新加一个中转节点minio,图片先上传到 minio,再同步给 S3,如此,管理端暴露的风险大大降低。

注意此时还没有解决 site/api 暴露的问题,后面会讲。

会员版

马上新的需求出来了,甲方要求加入收费会员模式,但是不能出现任何关于公司的账户信息(看来甲方真的是怕了,要彻底地隐藏自己)。

要有会员体系,得先有账号模块,为防止恶意注册,加上邮箱验证即可。

收费不能体现公司账号比较麻烦,常规走银行流水肯定不行,第三方甚至套壳支付总是会被追踪到,剩下的选择只有加密货币了,所幸加密货币在当地是被广泛使用的。

加密货币交易一般都是异步的,所以要设计一个定时器,定时从链上获取最新的交易记录,同步给账号中心处理。

图中虚线表示连接的是内部服务。

CMS 版

管理员除管理图片外,还需对网站本身进行管理,比如广告投放、布局调整、会员策略等。于是新增了CMS-Service

当然以后还会需要其它非 CMS 的站点管理功能比如会员管理、系统监控等,统一以admin-site对管理端提供服务。

CQRS 版

现在,把图片管理一同并入站点管理,并对各服务应用CQRS模式,为以后做读写策略/集群/分布式打下良好基础。

注意,其中 admin-site 兼具 site-command、album-command 职责。

IM 版

为了提升服务质量,甲方老板要求加上在线客服,客户诉求第一时间反馈,同时其它一些消息(比如客户下单、图片合约到期等),管理员也能第一时间收到。

这就不单单是一个即时聊天系统了,还得有消息推送的功能。

再考虑到当地朝九晚五懒散的工作状态,想要管理员一直呆在电脑前也不现实,那么客户消息和系统消息就容易错过。

还好,这里有一个人人都离不开的聊天 App ——Telegram,这玩意儿类似国内的微信,但是开放了很多接口和协议,使第三方系统能方便地接入它。比如我们可以使用它的Telegram-Bot,当客户发送消息时,IM 服务除向管理端实时推送外,还会推送给 Telegram-Bot,Telegram-Bot 再将消息推至 Telegram,如此,沉浸在美女频道的管理员就能及时知道有待反馈消息了。

Cloudflare 版

系统的主要功能基本都实现了,但甲方心心念念的安全问题反倒随着功能的扩展显得更加严峻。如之前所述,直接暴露给用户的节点风险等级最高,其次为管理员使用节点,进而会影响到整个系统内部。

自己搭建一套安全体系成本太高,实力也不允许,幸好市面上有免费的午餐,比如Cloudflare

Cloudflare 是全球知名的网络服务商,提供保护、优化、加速网站等相关服务。本项目中至少可以考虑如下服务:

  • 源站 IP 隐藏
  • Bots - 自动屏蔽恶意爬虫
  • Turnstile - 人机验证
  • S3 域名重写为本站域名(做了 cname 解析)

同时要求管理员在所使用的设备上安装VPN,将风险降到最低。

可以看到,图中的红黄线块都没了,整个系统只要内部不出问题,从外部攻破的可能性不大。

CI/CD 版

还有一个漏洞,甲方意味深长地说。他指的是从本地开发/测试机部署至生产环境这道工序,同样会出现本地设备直连线上节点的情况。虽然现在服务器已经藏得够深,直接登录被发现的几率不大,但安全起见,甲方还是要求每次都采用跳板机中转一下。

对于经常发版的任务,跳板中转属实也有点麻烦,可以采用CI/CD方案,自动化部署,既轻松又安全。

至此,开发架构与运维架构产生了交集,前者也总算可以告一段落了。


总结

架构既是名词也是动词,既是实体也是过程,它既是一种理念又是一种实践。但绝非千篇一律的模板——如果所有房屋都如出一辙,那也就不需要架构师了。

在这个项目中,甲方对安全性的要求近乎偏执,许多看似不合理的规定背后,敏锐的你或许能发现某些深意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YF云飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值