赞
踩
架构设计的复杂度来源其实就是架构设计要解决的问题,主要有如下几个:高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键,就是新旧技术之间不是完全的替代关系,有交叉,有各自的特点,所以才需要具体问题具体分析,基于各方考虑设计合适的架构,存在合适的架构,不存在最好的架构。这篇主要讨论高性能问题
软件系统中高性能带来的复杂度主要体现在两方面,一方面是单台计算机内部为了高性能带来的复杂度;另一方面是多台计算机集群为了高性能带来的复杂度
单机的性能是基于操作系统体现的。提升单机性能的过程就是不断升级迭代操作系统能力的过程,操作系统和性能最相关的就是进程和线程
单机性能在设计升级中得到了提升,但同时也增加了系统的复杂度,例如为了支撑多进程多线程,需要设计互斥、锁、进程通信等策略
单机情况下要完成一个高性能的软件系统,需要考虑如多进程、多线程、进程间通信、多线程并发等技术点,而且这些技术并不是最新的就是最好的,也不是非此即彼的选择。这些技术的出现也是为了不断提升性能过程中解决实际问题发生的
进入互联网时代后,业务的发展速度远远超过了硬件的发展速度,当单机的性能无法支撑时,必须采用机器集群的方式来达到高性能。但是机器集群又并不是简单的堆机器。
任务分配的意思是指每台机器都可以处理完整的业务任务,不同的任务分配到不同的机器上执行
从图中可以看到,1 台服务器演变为 2 台服务器后,架构上明显要复杂多了,主要体现在:
如果我们的性能要求继续提高,并不是单纯加业务服务器就能解决问题,因为随着性能的增加,任务分配器本身又会成为性能瓶颈,单台任务分配器也不够用了,任务分配器本身也需要扩展为多台机器
这样复杂度也进一步升级
这个任务可以指很多场景的任务,例如“存储”“运算”“缓存”等都可以作为一项任务,因此存储系统、运算系统、缓存系统都可以按照任务分配的方式来搭建架构。此外,任务分配器也并不一定只能是物理上存在的机器或者一个独立运行的程序,也可以是嵌入在其他程序中的算法。 例如kafka集群(zk集群作为任务分配器)、Redis集群(哨兵集群作为任务分配器),ES集群(候选主节点+协调节点+逻辑主节点联合作为任务分配器),都能抽象为类似的设计。
通过任务分配的方式,我们能够突破单台机器处理性能的瓶颈,通过增加更多的机器来满足业务的性能需求,但如果业务本身也越来越复杂,单纯只通过任务分配的方式来扩展性能,收益会越来越低。 水平扩容解决系统性能瓶颈的能力随着业务复杂度边际收益逐渐降低 ,这个时候需要任务分解
通过这种任务分解的方式,能够把原来大一统但复杂的业务系统,拆分成小而简单但需要多个系统配合的业务系统。从业务的角度来看,任务分解既不会减少功能,也不会减少代码量(事实上代码量可能还会增加,因为从代码内部调用改为通过服务器之间的接口调用),其提升性能的优势体现在:
总而言之就是 按业务逻辑进行任务隔离,精细化进行任务性能提升,性能瓶颈更容易被发现,优化和扩展更加容易,改动也不会影响其它模块,降低系统风险
但也不是越细越好,任务分解带来的性能收益是有一个度的,并不是任务分解越细越好
最主要的原因是如果系统拆分得太细,为了完成某个业务,系统间的调用次数会呈指数级别上升,而系统间的调用通道目前都是通过网络传输的方式,性能远比系统内的函数调用要低得多
性能差-》提升设计复杂度解决性能问题-》掌握如何编码和集群架构cover复杂的设计。高性能复杂度有单机和集群来源。单机主要通过操作系统(多进程、多线程)设计来压榨机器CPU进而提升性能,其设计复杂度体现在需要实现互斥、锁、进程通信等策略,所以要掌握并发编程技术。集群主要是搭建机器集群来扛住大的业务增量,其设计复杂度体现在任务分配(任务分配器、任务分配器与业务服务器连接管理、任务分配算法,其解决系统性能瓶颈的能力随着业务复杂度边际收益逐渐降低)和任务分解(业务逻辑垂直拆分,单项扩展或升级,其系统拆分带来的收益会随着系统间调用延迟边际降低),所以要掌握任务分配和任务分解的最佳实现模式。架构设计是取舍,是对度的把握。
关于学习笔记中的相关知识补充
进程之间通信方式 管道、消息队列、信号量、共享存储
进程间通信(Inter-Process Communication,IPC)是在不同进程之间交换数据的机制。这对于多任务操作系统中的进程协作是非常重要的。常见的进程间通信方式包括管道、消息队列、信号量和共享存储,每种方式都有其特点和适用场景:
管道(Pipes):
消息队列(Message Queues):
信号量(Semaphores):
共享存储(Shared Memory):
根据应用程序的特定需求和上下文,开发者可以选择最合适的进程间通信方式。例如,对于需要大量数据快速传输的应用,共享内存可能是最佳选择;而对于需要跨机器或模块化通信的系统,消息队列或命名管道可能更适用。
SMP、NUMA和MPP
SMP(Symmetric Multi-Processor,对称多处理器结构)、NUMA(Non-Uniform Memory Access,非一致存储访问结构)和MPP(Massive Parallel Processing,海量并行处理结构)是三种不同的计算机体系结构,它们都旨在通过使用多个处理器来提高性能,但各有其特点和应用领域:
SMP(Symmetric Multi-Processor,对称多处理器结构):
NUMA(Non-Uniform Memory Access,非一致存储访问结构):
MPP(Massive Parallel Processing,海量并行处理结构):
各种架构的选择取决于应用需求、性能要求和成本考量。在处理并行计算和复杂数据处理任务时,理解这些基础架构对于设计和优化系统至关重要。
硬件网络设备:F5和交换机
"F5"和"交换机"都是网络设备,但它们的功能和应用场景有所不同。二者的区别
根据网络设计的需求和特定的功能需求选择合适的设备非常重要。F5设备在确保应用交付和安全方面非常有效,而交换机则是实现网络互联的基础。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。