除了刷题之外的事 - System Architecture

除了刷题之外的事

刷题是练习解决问题的能力的一种方法,而这里的「问题」主要是指演算法问题。但在实务的工作场景当中,「演算法问题」只是程序工作的一小部分而已。我们除了在意「一个问题中的算法怎麽解之外」,我们更在意的「如何把这些算法实现成完整的应用」。因此除了刷题之外的事是如何用「工程化」的方式解决一个真实问题,除了刷题之外想写好程序还有以下几个技能需要掌握:

  • 软件工程 (Software Engineering)
  • 专案管理(Project Management)
  • 系统架构(System Architecture) ← Today

从「可以动」的程序码到「写得漂亮」的程序码,是我们第一阶段从 LeetCode 刷题的持续锻链的程序开发基础功。这些一段一段的程序码就像乐高积木一样,每一个程序码片段都有各自可以解决的问题与功能。透过设计模式与软件工程的经验,我们知道如何把这些程序码片段组装成完整的专案,用於解决一个大型的问题。不过开发过程中,需求无限但人力时间有限,因此如何在正确的时间要求下将投入资源效益最大化是透过软件专案管理教我们的事。最後一段想要延伸的进议题是「系统架构(System Architecture)」,让我们继续看下去。

部署上线之後,然後呢?

在介绍系统架构的重要性之前,你可以先思考当一个专案 部署上线 之後可能会随之成长,例如:

  • 使用者从 4000 个用户到 4000 万个用户
  • 同时在线从 10 个使用者变成 1000 个使用者
  • 资料库纪录从数百笔到数千万笔数据
  • 更新频率从 3 个星期变成 7 天迭代
  • 开发人员从 3 个人进化到 30 个人

你觉得这样的成长对於「程序功能」与「软件开发」会产生怎样的影响吗?

先讲结论,其实在系统成长的过程中功能是差不多的,像是 10 个人使用的留言板跟 100 个人用留言板功能本身应该差不多。但是「功能背後的程序」可能就会有巨大的改变,为了满足 10 个人使用跟维持 100 个人使用需要的资源绝对不是同一个量级的。换句话说,这其实一种从程序能动就好的世界到没那麽简单的世界的升级;用专业术语来说就是从 Prototype 到 Production。

系统架构

接着,我们回到上述的问题的解法 - 「系统架构(System Architecture)」。系统架构会将一个系统用模组化 (Module)与元件(Component)的概念,将原系统拆成小的单元再进行组合与拼装。系统架构是软件专案中的一个进阶议题,目的在於如何让程序专案能够更弹性的应用於不同的量级。对於系统架构,会在意以下几个点:

  • 可靠性 (Reliability)
  • 可扩展性 (Scalability)
  • 可维护性 (Maintainability)

实务上系统架构有很多中实现的方式,例如「主从式架构」、「三层式架构」或是「分散式架构」等等,能够将系统拆解成不同的关注点或是自动化的弹性扩充。


嗨,大家好!我是维元,一名擅长网站开发与资料科学的双栖工程师,斜杠於程序社群【JSDC】核心成员及【资料科学家的工作日常】粉专经营。目前在 ALPHACamp 担任资料工程师,同时也在中华电信、工研院与多所学校等单位持续开课。拥有多次大型技术会议讲者与竞赛获奖经验,持续在不同的平台发表对 #资料科学、 #网页开发 或 #软件职涯 相关的分享,邀请你加入 订阅 接收最新资讯。


<<:  自动化 End-End 测试 Nightwatch.js 串接 Google sheet

>>:  Proxmox VE 群组管理与双因素认证

[Day28]进阶挑战花式通灵CTF

再来就是我觉得难度较高的 CTF… 通常 CTF 的赛制因为范围较大,由於题型的机制范围较广,所以可...

Day 2 弄好环境,跑一个范例服务器

作业系统是 Windows 10 安装 Anaconda 安装完後可以在开始选单中找到 Anacon...

Day#03 初始专案

前言 如同第一天所说,基本语法的练习实在是太无聊了。不如就马上来实作,从做中学吧₍₍ ◝(●˙꒳˙●...

Day13 Composition(组合) vs Inheritance (继承)

一开始学习React时,常常会使用继承的方式使用Component,而React官方建议每个Comp...

EP21 - 持续部署使用 Octopus Deploy 首部曲,建置 Octopus 基础设施

在第十天的时候, 我们使用 AWS CodeDeploy 部署到 EC2, 当时只有阳春版的部署, ...