COSEA模型:软件系统模型的探索(1)

前言

系统研究,首先需要还原论,然后是系统论。还原论把系统进行拆解,对每一部分进行深入研究,相对静态,系统论将每一部分进行整合,形成整体,与外部进行交互,相对动态。如《庄子 · 养生主第三》庖丁解牛所言:“臣之所好者,道也,进乎技矣。始臣之解牛之时,所见无非牛者。三年之后,未尝见全牛也。方今之时,臣以神遇而不以目视,官知止而神欲行”。研究递进层次和生物学类似,从细胞(源码)->组织(包)->器官(功能)->系统(模块)->人体(软件)-> 生态(生态圈)。本文主要探讨了对软件系统的研究模型,模型对技术选型,体系化认知,以及更进一步学习技术有帮助。

模型

任务结构

COSEA模型是软件系统模型,全称 C:Config配置,O:Operation运维,S:System系统,E:Ecosystem生态,A:Admin管理。

模型回答了一个核心问题:如何研究软件系统?

模型给出的答案是:从配置C,运维O,系统S,生态E,管理A这五个角度研究软件系统。

黄色方框是五个最重要的因素,层级较高,蓝色方框是对五个因素的分解。总而言之:配置和运维影响系统,而系统会产生生态和管理。字母顺序也暗含了,先配置,后运维(安装),然后系统跑起来,然后产生管理和生态。

Config:配置

服务器配置,客户端配置等,理解配置对于理解系统,以及系统调优非常重要,很多系统概念都在配置中体现,系统的权衡也在配置中体现,需要精通最常用的配置。很多时候,调优的一大部分其实是改配置。配置分为操作系统层CPU(线程数),内存(虚拟内存),网络,磁盘,以及系统层的优化。系统层和操作系统层互相影响。借助操作系统实现系统本身的,操作系统配置非常重要。系统层配置也通过分形原则到达了操作系统层。通用配置有:压缩算法选择,磁盘读取/写入,缓存,线程。

Operation:运维

运维包括维护,安装,备份,硬件,安全,部署。包括常用命令,线上配置等。

System:系统

系统是软件本身,包括架构功能,架构包括设计和实现,功能有读写功能,以及业务代码编写等。系统架构回答的基本问题是:读写流程是什么?以及启动流程?功能和架构相互影响的是单机和分布式。单机特性有:数据模型,存储模型,读写性能,启动流程等,分布式特性有:用户视角:读/写(增删改查)路径,启动/关闭过程,系统视角:一致性模型,复制,分区,共识,容错。复制,共识,分区等等细节都会在用户读写路径视角展现。而系统视角具有通用性的,可以和其他系统进行类比,也可以更深一步分析(CAP,PACELC等)。系统核心是:内部实现,外部交互,系统属性。总结如下:

  • 内部实现,外部交互,系统属性。
  • 单机特性(对标数据库)
    • 数据模型,存储模型,查询模型(读写性能)
  • 分布式特性(对标分布式系统)
    • 用户视角:读写路径,启动/关闭。
    • 系统视角:复制和一致性,容错,分区,共识。

Ecosystem:生态

生态是围绕该软件的工具链,培训,开源社区,公司,客户,基金会,出版书籍,论文,创始人履历等等。

Admin:管理

管理主要是监控,包括管理控制台,主要判断系统是否健康,以及内部状态统计等。

总结

不同角色关注系统点不一样,想要全面了解系统,以上所有点均需要学习,不求甚解,对系统形成完整认识。本文虽然在讲系统,但是抽象层次还是较低,不够通用,但较为实用。