架构学习(二)架构设计目的和复杂度

架构设计的真正目的 为了解决软件系统复杂度带来的问题。 复杂度来源:高性能、高可用、可扩展性、低成本、安全、规模 1 高性能 软件系统中高性能带来的复杂度主

架构设计的真正目的
为了解决软件系统复杂度带来的问题。

复杂度来源:高性能、高可用、可扩展性、低成本、安全、规模

1. 高性能
软件系统中高性能带来的复杂度主要体现在两方面,
一方面是单台计算机内部为了高性能带来的复杂度;
另一方面是多台计算机集群为了高性能带来的复杂度。
单机复杂度
计算机内部复杂度最关键的地方就是操作系统。计算机性能的发展本质上是由硬件发展驱动的,尤其是 CPU 的性能发展。著名的“摩尔定律”表明了 CPU 的处理能力每隔 18 个月就翻一番。
操作系统和性能最相关的就是进程和线程。
让多个 CPU 能够同时执行计算任务,从而实现真正意义上的多任务并行。目前这样的解决方案有 3 种:SMP(Symmetric Multi-Processor,对称多处理器结构)、NUMA(Non-Uniform Memory Access,非一致存储访问结构)、MPP(Massive Parallel Processing,海量并行处理结构)。其中 SMP 是我们最常见的,目前流行的多核处理器就是 SMP 方案。
在做架构设计的时候,需要花费很大的精力来结合业务进行分析、判断、选择、组合,这个过程同样很复杂。举一个最简单的例子:Nginx 可以用多进程也可以用多线程,JBoss 采用的是多线程;Redis 采用的是单进程,Memcache 采用的是多线程,这些系统都实现了高性能,但内部实现差异却很大。
集群的复杂度
通过大量机器来提升性能,并不仅仅是增加机器这么简单,让多台机器配合起来达到高性能的目的,是一个复杂的任务。

  • 任务分配:指每台机器都可以处理完整的业务任务,不同的任务分配到不同的机器上执行。能够突破单台机器处理性能的瓶颈,通过增加更多的机器来满足业务的性能需求。
  • 任务分解:业务越来越复杂,单台机器处理的性能会越来越低。为了能够继续提升性能,我们需要采取第二种方式:任务分解。
    简单的系统更加容易做到高性能;
    可以针对单个任务进行扩展。

2.高可用
定义:系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计的准则之一。
本质上都是通过“冗余”来实现高可用。