复杂度来源

复杂度来源
    高性能
        单机高性能复杂度
            技术发展带来了性能上的提升,不一定带来复杂度提升;当新技术并不是用来取代旧技术、而是开辟了一个全新领域的技术才会给软件带来复杂度,因为系统设计时需要在这些技术间进行选择或者组合
            计算机内部复杂度最关键的地方就是操作系统。计算机性能的发展本质上是由硬件发展驱动的,尤其是CPU的性能发展,而将硬件性能充分发挥出来的关键就是操作系统,操作系统是软件系统的运行环境,操作系统的复杂度直接决定了系统的复杂度
            操作系统和性能最相关的是进程和线程
            批处理操作系统为解决手工操作带来的低效问题;批处理就是先把要执行的指令预先写下来,形成一个指令清单【任务】,然后将任务交给计算机去执行
            进程-用来对应一个任务,每个任务都有自己独立的内存空间,进程间互不相关,由系统来进行调度,为了达到多进程并行运行的目的,采用了分时的方式,即把cpu的时间分成很多片段,每个片段只能执行某个进程中的指令,进程间通信方式包括管道、消息队列、信号量、共享存储等
            线程是进程内部的子任务,这些任务都共享同一份进程数据。使用互斥锁机制保证数据的正确性。有了多线程后,操作系统调度的最小单位变成了线程,而进程变成了操作系统分配资源的最小单位
            多线程本质上还是分时系统,多个cpu能够同时执行计算任务从而实现真正的并行,最常用的方案是SMP(对称多处理结构-多核处理器)
        集群高性能复杂度
            任务分配复杂度;
                需要增加一个任务分配器,需要考虑性能、成本、可维护性、可用性等方面因素;硬件网络设备如F5、软件网络设备如LVS,负载均衡软件如nginx、HAProxy
                任务分配器和真正的服务器之间有连接和交互,需要选择合适的连接方式,并对连接进行管理,如:连接建立、连接检测、连接中断后如何处理等
                任务分配器之间需要增加分配算法,如轮询、权重、或者负载进行分配,其中负载分配需要能够上报自己的状态给任务分配器;
                当服务更多时需要增加任务分配器,任务分配器和服务之间的关系更复杂,机器变多,出现故障的概率更高
                任务分配器不一定只能是物理上存在的机器或者一个独立运行的程序,也可以是嵌套在其他程序中的算法
            任务分解
                通过任务分解的方式,能够将原来大一统但复杂的系统拆成小而简单但需要多个系统配合的业务系统
                简单的系统更加容易做到高性能;系统功能越简单,影响性能的点就越少,就更加容易进行有针对性的优化。
                可以针对单个任务进行扩展;当各个逻辑任务分解到独立的子系统后,整个系统的性能瓶颈更容易发现,发现后只需要针对有瓶颈的子系统进行性能优化,风险更低。
    高可用
        系统无中断的执行其功能的能力,代表系统的可用性程度
        系统中断原因:硬件会出故障会逐渐老化、软件会出bug,会越来越复杂和庞大;外部环境如断电水灾、地震等
        可以通过冗余的方式来实现高可用,高可用增加机器的目的在于冗余处理单元
        计算高可用,计算指的是业务的逻辑处理,无论在哪台机器上计算,同样的算法和输入数据,产出的结果是一样的。任务分配器需要增加分配算法:常见的双机算法有主备、主主,主备方案可分为:冷备、温备、热备
        存储高可用;将数据从一台机器搬到另一台机器,需要经过传输,传输会存在延迟问题;数据 + 逻辑 = 业务;存储高可用的难点不在于如何备份数据,而在于如何减少或者规避数据不一致对业务造成的影响
        状态决策:是计算高可用和存储高可用的基础,即系统需要判断当前状态是正常还是异常,如果出现异常则需要采取行动来保证高可用;但通过冗余来实现的高可用系统,状态决策本质上就不可能做到完全正确
        决策方式
            独裁式决策是指存在一个独立的决策主体,我们称它为“决策者”负责收集信息然后进行决策,通过冗余个体进行上报;独裁式决策方式不会出现决策混乱的问题,因为只有一个决策者;但当决策这本身故障时,整个系统无法实现准确的状态决策,如果决策者本身又做一套状态决策,那就陷入来一个递归的死循环了
            协商式决策指两个独立的个体通过交流信息,然后根据规则进行决策,最常用的协商式决策就是主备决策,难点在于,如果两者信息交换出现问题,此时决策应该怎么做,如果为了规避连接中断对状态决策带来的影响,可以增加更多连接,但又引入了这几条连接之间的信息取舍问题
            民主式决策指多个独立个体通过投票方式来进行状态决策。例如zookeeper集群选举leader时就是采用这种方式。其基础是独立个体之间交换信息,每个个体作出自己的决策,然后按照“多数取胜”的方式来确定最终状态,复杂点为算法复杂和脑裂,为了解决脑裂问题采用“投票节点数必须超过系统总节点一半”规则来处理
    可扩展性
        可扩展性是为了应对将来需求变化而提供的一种扩展能力。面向对象思想的提出和设计模式是为了解决扩展性带来的问题。需要正确预测变化、完美封装变化。
        第一种应对变化的常见方案是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”
        二种应对变化的方案是提炼出一个“抽象层”和一个“实现层”。抽象层是稳定的,实现层可以根据具体业务来定制开发。比如装饰者模式
    低成本
        低成本架构复杂度主要体现在往往只有“创新”才能达到低成本目标,包括开创一个全新的技术领域和引入新技术
    安全
        安全本身是一个庞大而复杂的技术领域,并且一旦出问题,对业务和企业形象影响非常大
        功能安全:如XSS攻击、CSRF攻击、SQL注入、Windows漏洞、密码破解等,通过系统不完善的方式潜入,功能安全其实是“防小偷”。从实现的角度来看,功能安全更多的是和具体编码相关
        架构安全:如DDos攻击,架构安全就是“防强盗”
    规模
        发展时间长、不断叠加功能,导致逻辑分支特别多
        规模带来复杂度的主要原因是“量变引起质变”
        功能越来越多,导致系统复杂度指数级上升。系统复杂度=功能数量+功能之间的连接数量,连接数量会成指数级增长
        数据越来越多,系统复杂度发生质变。比如数据库表中数据规模

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值