首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

架构实战

编程知识
2024年08月29日 11:38

所谓架构,意即系统架构,广义上它涵盖业务架构、运维架构、组织架构等所有系统构建场景,本文特指一般开发人员主要关注的开发架构

关于架构的理论有很多,每个人也都有各自的理解,笔者相信很多人在实际运用中也会遇到各种各样的问题和困惑,本文抛开教条,从一个实际项目的演化看何为架构。

项目背景

开始之前,先了解下项目背景。该项目原本是为某东南亚公司开发的图库,提供图片使用授权服务,正规项目。无奈当地营商环境鱼龙混杂,黑白手段层出不穷,有好几个其它项目要么被 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方案,自动化部署,既轻松又安全。

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


总结

架构,既是名词,亦是动词,既是实体,亦是变化,它是一种理念,也是一种实施。但它肯定不是一套模板 —— 如果所有的房屋都千篇一律,那也不存在架构师了。

整个项目,甲方对安全的要求简直到了偏执的程度,很多要求看似无理,聪明的你也许能看出些端倪:)

From:https://www.cnblogs.com/newton/p/18385754
本文地址: http://shuzixingkong.net/article/1552
0评论
提交 加载更多评论
其他文章 ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享
上一篇我们分析了 Workflow、WorkflowTemplate、template 之间的关系。本篇主要分析如何在 argo-workflow 中使用 S3 存储 artifact 实现步骤之间的文件共享。
ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享 ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享 ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享
AI驱动的PlantUML:快速生成专业级UML类图和用例图
承接前文关于如何运用 AI 工具生成时序图的内容【1】,今天我们继续探讨 AI 驱动的 PlantUML:高效创建专业的 UML 类图与用例图。 【1】: https://juejin.cn/post/7407637717206728755 【2】: 案例参照开源项目ruoyi-cloud:http
AI驱动的PlantUML:快速生成专业级UML类图和用例图 AI驱动的PlantUML:快速生成专业级UML类图和用例图 AI驱动的PlantUML:快速生成专业级UML类图和用例图
Python 项目及依赖管理工具技术选型
Python 项目及依赖管理工具,类似于 Java 中的 Maven 与 Node 中的 npm + webpack,在开发和维护项目时起着重要的作用。使用适当的依赖管理工具可以显著提高开发效率,减少依赖冲突,确保项目的稳定性、可靠性和安全性。 一、常见项目及依赖管理工具需具备的功能 1. 依赖管理
MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题
大家好呀,我是summo,最近遇到了一个功能需求,虽然也是CURD,但属于那种比较复杂一点的CURD,话不多说,我们先看一下需求。 需求如下: 有三张表,学生表、课程表、学生课程关联表,关联关系如下图: 要求实现的功能: 支持输入名称模糊查询,可以是学生名称也可以是课程名称,但只有一个输入框; 要求
MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题 MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题 MySQL的GROUP_CONCAT函数轻松解决多表联查的聚合问题
使用 nuxi analyze 命令分析 Nuxt 应用的生产包
title: 使用 nuxi analyze 命令分析 Nuxt 应用的生产包 date: 2024/8/29 updated: 2024/8/29 author: cmdragon excerpt: 使用 nuxi analyze 命令可以帮助你深入了解生产包的结构和大小,从而做出针对性的优化。通
使用 nuxi analyze 命令分析 Nuxt 应用的生产包 使用 nuxi analyze 命令分析 Nuxt 应用的生产包
Mac上HomeBrew安装及换源教程
Mac上HomeBrew安装及换源教程 Mac的Mac OS系统来源于Unix系统,得益于此Mac系统的使用类似于Linux,因此Linux系统中的包管理概念也适用于Mac,而HomeBrew便是其中的一个优秀的包管理工具,而包管理工具是什么呢?软件包管理工具,拥有安装、卸载、更新、查看、搜索等功能
Linux | Ubuntu 16.04.4 通过docker安装单机FastDFS
Ubuntu 16.04.4 通过docker安装单机fastdfs 前言 很久没有写技术播客了,这是一件很不应该的事情,做完了事情应该有沉淀的。 我先说一点前情提要,公司的fastdfs突然就挂了,做过的操作就是日志文件太大了,所以把日志文件给删了,理论上这个动作应该不影响程序运行才对。 然后tr
Linux | Ubuntu 16.04.4 通过docker安装单机FastDFS
以Top-Down思维去解决问题——递归
目录递归的基础递归的底层实现(不是重点)递归的应用场景编程中 两种解决问题的思维自下而上(Bottom-Up)自上而下(Top-Down)自上而下的思考过程——求和案例台阶问题 案例易位构词生成 案例 递归和for循环(迭代法)很像,都是通过循环去完成一件事。 但采用Top-Down思维去设计的递归
以Top-Down思维去解决问题——递归 以Top-Down思维去解决问题——递归 以Top-Down思维去解决问题——递归