前言

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

历史借鉴

  • 算法的复杂度

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

    • 概念

      • 循环复杂度(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

分布式系统的复杂度度量思考相关推荐

  1. 算法及其复杂度度量简介

    1,算法: 1.1 所谓算法,是指基于特定的计算模型,旨在解决某一信息处理问题而设计的一个指令序列. 1.2 一般地,算法还应必须具备以下要素: 输入与输出:基本操作.确定性与可行性:有穷性与正确性: ...

  2. 8种相似度度量方式的原理及实现【笔记自用】【1】

    8种相似度度量方式的原理及实现 欧氏距离(Euclidean Distance) 曼哈顿距离(Manhattan Distance) 切比雪夫距离(Chebyshev Distance) 闵可夫斯基距 ...

  3. r语言把两个折线图图像放到一个图里_图像相似度度量

    图像相似度度量的应用场景很多,包括以图搜图,相似图像去重等多种功能,目前在项目中的场景是针对大量重复类似的图片,需要进行筛选剔除,自然需要用到图像相似度,简单调研了下图像相似度的方法,包括传统图像方法 ...

  4. 图像检索中相似度度量公式:各种距离

    基于内容的图像检索(Content-Based Image Retrieval)是指通过对图像视觉特征和上下文联系的分析,提取出图像的内容特征作为图像索引来得到所需的图像. 相似度度量方法 在基于内容 ...

  5. 大数据学习笔记:距离度量和相似度度量

    文章目录 一.度量 (一)概述 (二)距离度量 1.距离度量概念 2.常用距离度量 (三)相似度度量 1.相似度度量概念 2.常用相似度度量 二.欧式距离 (一)欧氏距离定义 1.二维空间欧式距离 2 ...

  6. 距离及相似度度量方法

    前言 关于距离度量的方法的专题其实已经想做好久了,正好趁这个机会总结出来. 这里讨论的距离度量应该是向量空间内的度量,两个点(即两个向量)之间的距离或相似性的度量.每种度量包括描述.定义和公式.优缺点 ...

  7. David P.Williams论文系列 Muesli_基于声呐图像寻雷难度的图像复杂度度量

    摘要 Muesli是一种新的图像复杂度度量手段,它融合了间隙度的概念(像素强度变化的度量)和空间信息的概念(捕捉边缘信息的量).它能成功地量化在合成孔径声纳(SAS)图像中执行目标探测的相对难度.这已 ...

  8. 软件源码复杂度度量方法

    软件源码复杂度度量方法主要有三种:代码行.Helstead方法.McCabe方法(环形复杂度) 代码行: 代码行方法度量是一种最简单的方法,该方法认为,代码行越多,软件越容易产生漏洞.程序复杂性随着程 ...

  9. 相似度度量:欧氏距离与余弦相似度(Similarity Measurement Euclidean Distance Cosine Similarity)...

    在<机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)>一文中,我们通过计算文本特征向量之间 ...

最新文章

  1. Asp.net core 学习笔记 ( Web Api )
  2. Unity Shader基本例子
  3. 【原创】MyEclipse反编译添加jadclipse_3.3.0 曲折的完美解决
  4. php 下载文件的函数
  5. 知识图谱与智能问答基础理解
  6. 一文说透产品信息结构图的本质
  7. 网页常用分享代码大全——整理摘抄至他人嘿嘿
  8. python中ta_非常详细的Ta-Lib安装及使用教程
  9. 通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串
  10. 汇编:1位16进制数到ASCII码转换
  11. ABAP 出库单打印 产品 A搭A A搭B显示方式
  12. 软件测试预演环境,什么是软件测试用例预演 有何优点?[3]
  13. 放不下的原理_通俗易懂,几张图看懂大数据存储和计算原理
  14. 国内有哪些小众但很有意思的网站?这6个网站值得收藏
  15. C. Make it Increasing
  16. 刘海屏启动空白页适配全面屏
  17. VMware的更新怎么这么恶心
  18. 【浅析STM32之GPIO寄存器(CRL/CRH)配置 】
  19. 计算机的英语作文模板,计算机英文模板 简历
  20. 建立企业的目标---团队凝聚力的开始

热门文章

  1. sql 分号变成多行_SQL(2)
  2. rich-text 图片控制_武汉煤制工业级乙二醇图片
  3. 御剑情缘服务器维护,御剑情缘10月31日安卓区部分服务器数据互通公告 10.31合服名称与时间[图]...
  4. 如何识别和避免间谍软件
  5. CDN网络究竟是怎么加速的?
  6. 如何在 Linux下进行文件切割操作?
  7. 如何在电脑桌面添加计算机网络等,如何实现在电脑桌面上添加文字提醒
  8. 易语言组合框连接mysql_用mysql填充的多动态组合框
  9. 线段树扫描线求矩形周长详解
  10. python编程可视化小程序_人人都可以写的可视化Python小程序第二篇:旋转的烟花...