开发一个系统需要考虑的几个问题
在开发一个计算机软件/服务时,不论是大规模的分布式系统还是单机版然间,通常要考虑以下几个问题:
部署
如何把你的软件/服务部署到机器上,对于服务端,云上就是如何创建你的服务,对于客户端(通过网络)就是如何安装,Windows下Installer,Linux RPM ...
删除
如何把你的软件/服务从机器上删除
启/停
你的软件/服务如何启动/停止,需要准备什么东西?配置文件,环境变量...
配置更改
软件/服务的运行或多或少依赖一些配置,如何进行配置,是否支持动态修改,是否需要保存
健康检查
需不需要健康检查,如何做,出错的话怎么处理
错误信息收集
Log,如何记录,如何查看,记在哪?本地的话文件过大,过多要怎么处理。
横向扩展
更多的是针对服务端。一个运行在服务其的软件,若其长期负载较高,除了软件自身优化外,一般有两个维度来处理,第一个很容易想到就是换更快的CPU,更大的内存;第二个就是增加机器来分担负载。第一个维度是简单有效的,而第二个就比较复杂,这时你需要考虑多台机器如何分担负载;服务是有状态的吗;若有状态如何处理一致性问题
既然能扩展,也要能回缩,这也是考虑的问题
纵向扩展
是不修改软件/服务本身通过硬件配置来提升/降低处理能力的另一个维度,就像大家升级自己手机/电脑一样,纵向扩展简单粗暴然而有效
系统升级
软件/服务修复一个bug,增加新的功能时,如何安装到已经运行的系统上,更进一步,对于服务端,如何做到不中断服务完成升级
备份
运行数据是否需要备份,如何备份
导入导出
配置/数据是否支持导出导入,如何做