开发者社区> worldnote> 正文

分布式系统的复杂度度量思考

简介:
+关注继续查看

前言

在构建系统的时候,有时候自己会说,我的系统很复杂,但是这时候又遇到问题了,如何度量一个系统的复杂性呢,这个是个开放性的问题,本身答案见仁见智,这里记录一下自己的思考。

历史借鉴

  • 算法的复杂度
    • 在学习算法的时候,经常会有复杂度的分析,分为时间复杂度和空间复杂度;
    • 自我感觉在时间和空间维度,能够比较清晰的表述清楚;
  • 代码的圈复杂度

    • 概念

      • 循环复杂度(Cyclomatic complexity)也称为条件复杂度,是一种软件度量,是由老托马斯·J·麦凯布(英语:Thomas J. McCabe, Sr.) 在1976年提出,用来表示程序的复杂度,其符号为VG或是M。“循环复杂度”的名称有时会让人误解,因为此复杂度不只计算程序中的循环 (循环)个数,也包括条件及分支个数。

      • 概要解释,圈复杂度是一种软件度量,重点关注条件和分支个数;

    • 计算方法

      • 计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计 算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流 图的区域数,对应的计算公式为:V(G)=区域数=判定节点数+1。
    • 总结

      • 总是是计算条件和分支,PMD和checkstyle也有相应的支持,找出高复杂度的代码。

分布式系统

  • 总体概述
    • 总体分多个维度来列举,但是没有统一的公式,因为太复杂了
  • 存储复杂度
    • 表结构关联关系复杂度
      • 数据库表的个数
      • 数据库表和表之间的关联关系
      • 关联关系可以通过ER图来展现
      • ER图的话,可以借鉴圈复杂度,把表抽象为节点,关联关系抽象为路径,套用公式计算
    • 数据库表存储维度复杂
      • 单表存储
      • 分库分表的形式
      • 主备模式划分数据库
      • 读写分离模式
      • 采用类似HBASE的NOSQL形式
  • 应用工程分层复杂度
    • center类应用,仅仅提供SOA的服务
    • web和center共同体
    • 应用本身的module的划分
  • 缓存复杂度
    • JVM heap的缓存
    • 类似memcache的分布式缓存
    • 多级缓存的管理,类似CPU的一级、二级缓存等
  • 领域模型复杂度
    • 领域核心实体的数量
    • 领域核心实体的关联程度
    • 领域和子领域的划分
  • 物理环境复杂度
    • 应用构建的复杂程度
    • 例如nginx和tomcat是否能够一键部署
    • 是否依赖公共的集群,例如zk等集群
    • 在类似阿里云这一类公有云上能否快速部署
  • 依赖关系复杂度
    • 依赖的外部系统个数
    • 依赖的内部系统个数
    • 核心业务对于外部系统的依赖
    • 外部存储以及缓存的依赖
    • 传递依赖的情况
  • 多端支撑复杂度
    • web端的支撑
    • 无线端的支撑
      • android系统
      • IOS系统
      • winCe系统等
    • 硬件相关的支撑
  • 编程语言的选择
    • java编程语言
    • js等前端矿建
    • C#编程语言
    • C++编程语言
    • node、go等编程语言

总结

  • 总体来看,如果用单一维度考评,应该难度比较大,所以可以从多个维度来进行考评。

PS: 参考文档

  • https://github.com/shukai0828/MyTechNotes/blob/master/CodeMetric/CyclomaticComplexity.md
  • http://wobfei.iteye.com/blog/706875

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.2系统数字返回码(一)
带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.2系统数字返回码(一)
37 0
带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.2系统数字返回码(五)
带你读《SAS数据分析开发之道 软件质量的维度》第三章通信交流3.2系统数字返回码
26 0
《程序员度量:改善软件团队的分析学》一项目跟踪系统
本节书摘来华章计算机《程序员度量:改善软件团队的分析学》一书中的第2章 ,Jonathan Alexander 著 张燎原 周峰 张刚 宋励奋 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
970 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29062 0
软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题46-50题)
软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题46-50题) 46.()不属于风险管理计划编制的成果A、风险类别B、风险概率C、风险影响力的定义D、风险记录参考答案: 46. (D) 47.赫兹伯格的双因素激励理论中的激励因素类似于马斯洛的需求层次理论中的“()”。
945 0
软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题)
2017年上半年信息系统项目管理师上午试题分析与答案(试题16-20题) 16.信息系统的安全威胁分成七类,其中不包括()A、自然事件风险和人为事件风险B、软件系统风险和软件过程风险C、项目管理风险和应用风险D、功能风险和效率风险参考答案: 16.
1062 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20677 0
+关注
7
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载