系统架构设计理论与原则
⼀、⽆共享架构
1、⽆共享架构
⽆共享架构是⼀种分布式计算架构,这种架构中不存在集中存储的状态,系统中每个节点都是独⽴⾃治的,整个系统中没有资源竞争,这种架构具有⾮常强的扩张性,⽬前在web应⽤中被⼴泛使⽤。
⽆共享架构的⼀个重要实践指导原则就是避免在互联系统中使⽤Session,因为实践已经证明,在⼀个集分布式计算环境中,若Session状态维护在各个节点服务器上,为了保证状态⼀致性,节点间Session数据需要互相拷贝同步,严重影响性能,我们需要尽可能的改造现有架构不要使⽤Session。
2、对⽐
shared-nothing、shared-memory、shared-disk是并⾏系统最常使⽤的模式。
shared-memory:多个cpu共享同⼀⽚内存,cpu之间通过内部通讯机制进⾏通讯
shared-disk:每⼀个cpu使⽤⾃⼰的私有内存区域,通过内部通讯机制直接访问所有磁盘系统
和shared-memory、shared-disk相⽐,shared-nothing优势明显,在针对多⽤户并⾏访问的时候,通过横向扩充资源,能够⼤⼤减少响应时间,提升整体吞吐量和效率。
3、分⽚
shared noting需要确⽴⼀种分⽚策略,使得依据不同的分⽚策略,减少资源竞争。
三种基本的分⽚策略结构:
(1)功能分⽚根据多个功能互相不重叠的特点进⾏分⽚,这种⽅式已经在ebay取得巨⼤成功。缺点也很明显,即技术⼈员需要深⼊理解应⽤领域,才能更好地分⽚;
(2)键值分⽚在数据中到⼀个可以均匀分布到各个分⽚中的键值。
(3)查表在集中有⼀个节点充当⽬录⾓⾊,⽤于查询哪个节点拥有⽤户要访问的数据。缺点在于这个表可能成为整个系统的瓶颈及单点失效点;
⼆、负载均衡
负载均衡(Load Balance),顾名思义,是把服务的并发请求均衡地负载到后端多个具有相同能⼒的服务进⾏处理分担,以廉价有效透明的⽅式扩展⽹络设备或服务的带宽,增加吞吐量,增强服务的整体处理能⼒,提供服务的灵活性和可⽤性。
常见的典型的负载均衡应⽤场景:
(1)、web集:将⼤量的并发访问或数据流量分担到多台节点设备上分别处理,减少⽤户等待响应的时间。
(2)、MapReduce:单个重负载的运算分担到多台节点设备上做并⾏处理,每个节点设备处理结束后,将结果汇总,返回给⽤户,系统处理能⼒得到⼤幅度提⾼。
负载均衡算法
负载均衡算法是负载均衡设备(包括虚拟设备或相关软件)在执⾏负载均衡调度,选择具体处理的后端服务的时候使⽤的调度和分发的逻辑。负载均衡的算法只是规定了调度和分发的逻辑,在不同的负载均衡⽅案中都可能使⽤相同和(或)类似的算法,它只是负载均衡⽅案的⼀部分。
常见的主流负载均衡算法包括:
(1)轮询算法:Round Robin/Weight Round Robin Scheduling
轮询算法通过依次轮叫的⽅式依次将请求调度不同的后端服务器(Real Server)。通常可以分为普通轮询和加权轮询两种⽅式。算法的优点是简洁且⽆状态。
算法简单表⽰为:i = ( i + 1 ) mod n
(2)Hash算法: 随机数Hash,Sources Hashing Scheduling
Hash算法,⼜叫取余算法。⼀般是对请求报⽂中的某项数据(key,⼀般常⽤客户端来源IP)计算Hash值,然后按机器数量(n)取模。
算法简单表⽰为:idx = Hash(key) % n
负载均衡应用场景Hash算法中,Key的选择常⽤实践如下:
a、请求时间或随机数特点是简单,具有⼀定分散性,但不稳定,⼀般⽤于要求不⾼的负载均衡场景。
b、来源IP
特点是简单。如果客户的分布⽐较⼴,这种⽅式分散性较好。但如果较多的客户请求来源于同⼀IP(公
司⽹络通过路由器上⽹),分散效果较差。
⼤多负载均衡设备都⽀持这种算法,著名的nginx和LVS等软件也⽀持。
(3)⼀致性Hash算法:Consistency Hash Scheduling
⼀致性Hash算法最常⽤于分布式缓存(如memcached、redis等)的定位,但同时也可以在系统或程序中⽤于负载均衡,该算法本来的意义就在于分散负载和快速定位。
(4)最少连接或请求数: (Weight)Least Connection/Request Scheduling
最⼩连接调度是⼀种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。
算法主要逻辑是,调度设备或服务记录后端服务器接受请求的计数,每次请求总是发给计数最⼩的服务器处理。
(5)最⼤空闲:Most idle First(基于监控CPU,内存,带宽等综合评估) (6)、平均最快响应:平均最快响应(7)、最少流量:Least Traffic Scheduling
还有⼀种常见的就是基于会话的负载实现,但是严格来说Session(⼀般⽤于WEB)不能算是算法。Sessi
on实现负载均衡的主要过程为:⾸次请求记录⽤户的SessionID,然后再通过轮询等算法选择后端服务器,如果⽤户后续使⽤同⼀SessionID发起请求,则⽆需再选择服务器,直接转发给前⾯根据SessionID到的对应的后端服务器。
负载均衡模式
负载均衡模式主要是指在整体⽅案中选择从服务⽹络的哪个层次或哪个产品来实现负载均衡⽅案。
1、外部模式(RR-DNS)
RR-DNS,即DNS轮询模式,它的原理是利⽤DNS服务器⽀持同⼀域名配置多个独⽴IP指向,然后轮询解析指向IP实现多次访问的调度和分发,实现负载均衡。
它的主要特点为:
a、负载均衡实现与后端服务完全没有关系,有DNS在本地解析指向实现轮询调度。这个⽅⾯来看性能最佳效率最⾼。
b、DNS服务⽆法检测到后端服务器是否正常,在TTL失效前,会⼀直指向失效的服务器,这就要求在实践⽣成中,必须解决后端服务器的⾼可⽤问题。
c、⼀般的第三⽅DNS服务提供商都⽀持该功能,但如果更新频率⾼或附带更新逻辑,⼀般会在系统内⾃键DNS服务,然后在注册为公共DNS服务。
2、应⽤层模式
正向代理:⽤户通过代理服务访问internet, 把internet返回的数据转发给⽤户。正向代理对于整个⽹络请求,它的⾓⾊实际是客户端,代理客户对外的访问请求。反向代理:接受internet上⽤户的请求,转发给内部的多台服务器处理,完成后转发后端服务器的返回给对应的⽤户。反向代理对于整个⽹络请求,它的⾓⾊实际是服务器,代理接受(accept)所有⽤户的请求。
反向代理应⽤模式:常见的反向代理应⽤模式,⽐如通过 Apache, nginx等Web服务器软件实现WEB应⽤的负载均衡和⾼可⽤。利⽤反向代理软件实现负载均衡是性价⽐较⾼的模式。
三、⾼可⽤性系统设计
系统⾼可⽤性的常⽤设计模式包括三种,包括:
1、主备(Active-Standby)
⼯作原理:主机⼯作,备机处于监控准备状况;当主机宕机时,备机接管主机的⼀切⼯作,待主机恢复
正常后,按使⽤者的设定以⾃动(热备)或⼿动(冷备)⽅式将服务切换到主机上运⾏。⼀般需要⼈⼯⼲预才能回复初始状态。
2、互备(Active-Active)
⼯作原理:两台主机(A标记为主,B标记为备)同时运⾏各⾃的服务⼯作且相互监测情况,当任⼀台主机(A)宕机时,另⼀台主机(B,启⽤并标记为主)⽴即接管它的⼀切⼯作,保证⼯作实时可⽤
3、集(Cluster)
⼯作原理:多台具有相同能⼒的服务同时对外提供透明服务,所有服务之间都是Active-Active关系,并分担处理服务请求,⼀般通过总控节点或集软件(例如zookeeper等)进⾏⾼可⽤的控制。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论