集群,冗余,负载均衡集群,负载均衡,主从复制,读写分离,分布式,分布式计算,分布式计算平台,并行计算……刚刚踏入服务器架构的菜鸟们往往会被这些概念弄的不知所云,一脸懵逼。那么今天就来谈谈这些概念所代表的意义以及它们的使用场景。
造成菜鸟们困惑的原因,主要是广义和狭义,以及目的和客观作用 两个方面。
所以,太深的概念不必深究,也没有必要吹毛求疵。纯概念化的东西毫无意义,更重要的是它的使用场景,当然,概念在一定程度上本身就是说明了它的使用场景。所有这些概念都是为了解决生产环境的实际问题。
那么,我们实际生产环境中都有什么问题呢?
1. 当数据库性能遇到问题时,是否能够横向扩展,通过添加服务器的方式达到更高的吞吐量,从而充分利用现有的硬件实现更好的投资回报率。
- 是否拥有实时同步的副本,当数据库面临灾难时,可以短时间内通过故障转移的方式保证数据库的可用性。此外,当数据丢失或损坏时,能否通过所谓的实时副本(热备)实现数据的零损失。
- 数据库的横向扩展是否对应用程序透明,如果数据库的横向扩展需要应用程序端进行大量修改,则所带来的后果不仅仅是高昂的开发成本,同时也会带来很多潜在和非潜在的风险。
集群和冗余的区别?
这两个概念并不是对立关系, 多台服务器做集群(不是主从),本身就有冗余和负载均衡的效果。
狭义上来说,集群就是把多台服务器虚拟成一台服务器,而冗余的每台服务器都是独立的。
**集群的侧重点在于协同,多台服务器协同分担工作,提升效率。
冗余的侧重点在于防止单点故障,一主多备的架构,也就是“主从复制”。所以数据冗余=高可用集群=主从。**
主从一定程度上起到了负载均衡的作用。但其实主要目的还是为了保证数据冗余和高可用性。
主从只提供一种成本较低的数据备份方案加上不完美的灾备和负载均衡。由于复制存在时间差,不能同步读,所以只是不完善的负载均衡和有损灾备。主从显然达不到集群的严格度,不论是HA 还AA(多活并行集群),主从都达不到数据一致性的集群要求,
主从很难严格界定是那种模式,可以归类为:有一定冗余度的非一致性异步副本(不可靠不同步),对于没有严格一致性要求的系统,可以定制为分担负载、查询过时报表的一种措施。
集群
还是上面提到的,所谓集群,简单来说就是“多台服务器协同分担工作”,重点在“协同”上。所以,任务调度是集群的核心技术,因为集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。
所谓的负载均衡,高可用,高性能又是什么呢?
集群有负载均衡集群,高可用集群,高性能集群,分别侧重于抗并发,避免单点故障和大数据下的并行处理。三者也有不同的实现方法,但同时这三者又是相辅相成的。
Load Balance负载均衡着重在于提供服务并发处理能力的集群。是为了消除性能瓶颈,当然也可以起到备份工作。把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
实现原理:一个负载均衡器加上一个集群实现的。负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求。分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
High Available高可用以提升服务在线的能力的集群。
高可用集群主要是为了避免单点故障存在的,备机平时不参与工作。高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发。
衡量标准:可用性=在线时间/(在线时间+故障处理时间)
高可用性群集,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。
实现原理:利用集群管理软件,当主机故障时,备机能够自动接管主机的工作,并及时切换过去,以实现对用户的不间断服务。
High Performance高性能着重用于处理一个海量任务。高性能的集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个任务,所以又被称为“并行处理集群”。充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分 析,化学分析等。
实现原理:并行处理集群是将大任务划分为小任务,分别进行处理的机制。一般这样的集群用来科学研究与大数据运算等方面的工作。现在比较火的Hadoop就是使用的并行处理集群。
高可用和负载均衡有什么区别?
HA和LB确实不是一个概念。解决方案的侧重点完全不同。HA偏重于备用资源,切机时会有业务的断开的,保证了数据的安全,但造成资源的浪费。LB侧重于资源的充分应用,没有主备的概念,只有资源的最大限度的加权平均应用,基本不会业务的中断。
从目的上来说:HA的目的是不中断服务,LB的目的是为了提高接入能力,虽然经常放一起用,但确实是两个不同的领域。从功能上来说:HA在一条路不通的时候提供另一条路可走;LB是春运时的多个窗口。通俗来说HA其实就是春运一共有八个窗口售票,但是大家就都集中到一号窗口,一号窗口累趴下了后,大家一起去二号,二号不行去三号,这样就造成了闲置资源的一种浪费,但是LB就相当于八个窗口同时开放,均衡负载,不会使一个窗口(服务器)的压力过大。LB通常采用在负载比较重的网络服务中。一些比较大型的网站和邮件服务,并发量比较大的情况。
HA和LB是两个概念的问题,一般来说没有谁优谁劣的标准,只有在特定的环境下,谁更适合的问题。 表面看LB一般都包含了高可用性,比HA功能更强,性能更好,但这只是概念上的“先进”,实际中很多场合HA是优选。 至于什么是“好用”,还是那句话,不好说,要看具体环境、应用和价格,没有绝对的好。
向上拓展和向外拓展(单机和多机)
向上拓展:升级单台服务器的硬件。
缺点是在一定的范围之内它的性能是上升的趋势,但是超出范围之后就是下降的趋势。因为随着它的cpu的个数增加我们需要给我们的cpu仲裁,而且随着cpu个数的增加资源竞争性越大。向外拓展:增加新的服务器。 优点是增减服务器很方便,而且没有向上扩展随着增加性能下降。
集群管理工具
Docker的Swarm, Fleet, 谷歌的Kubernetes, apache的Mesos
四大集群管理工具大比拼
负载均衡
所谓负载均衡,简单点来说就是“把大访问量分发给不同的服务器”,也就是分流请求。
六种实现负载均衡的方法?
LVS集群中实现的三种IP负载均衡技术
几种负载均衡技术的实现 – CSDN博客
web 负载均衡 – CSDN博客
六大Web负载均衡原理与实现 – CSDN博客
http重定向协议实现负载均衡(HTTP重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群)
优点:简单。
缺点:性能较差。
dns域名解析负载均衡(DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP。)
优点:交给DNS,不用我们去维护负载均衡服务器。
缺点:当一个应用服务器挂了,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理。
反向代理负载均衡(在用户的请求到达反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器。常用的apache,nginx都可以充当反向代理服务器。)
优点:部署简单。
缺点:代理服务器可能成为性能的瓶颈,特别是一次上传大文件。
IP负载均衡(LVS-NAT,在请求到达负载均衡器后,负载均衡器通过修改请求的目的IP地址,从而实现请求的转发,做到负载均衡。)
优点:性能更好。
缺点:负载均衡器的宽带成为瓶颈。直接路由负载均衡(LVS-DR,数据链路层负载均衡(在请求到达负载均衡器后,负载均衡器通过修改请求的mac地址,从而做到负载均衡,与IP负载均衡不一样的是,当请求访问完服务器之后,直接返回客户。而无需再经过负载均衡器。 ))
IP隧道负载均衡(LVS-TUN, )
LVS集群中的IP负载均衡技术
Linux服务器集群系统(三)–LVS集群中的IP负载均衡技术
集群之LVS(负载均衡)详解 – 一个人的天空@ – 博客园
LVS+Keepalived高可用负载均衡集群架构实验_服务器应用_Linux公社-Linux系统门户网站
负载均衡和反向代理有什么区别?
做了反向代理才能实现负载均衡。负载均衡是做反向代理的目的之一。
反向代理和负载均衡有何区别? – 知乎
nginx负载均衡分发请求的几种方式?
5种
基于Nginx的软件负载均衡实现解读 – 文章 – 伯乐在线
默认的轮询
指定权重
IP绑定IP_hash(每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题)
第三方的fair和url_hash两种方法
主从复制
主从复制的作用?
主从是一种用于数据容错和灾备的高可用解决方案,而不是一种处理高并发压力的解决方案(负载均衡是用来抗并发的)。这是一个客观作用和目的的问题。
- 主机负责查询,从机负责增删改。
- 可以在从机上执行备份,以避免备份期间影响主机的服务。
- 主从复制之后,也可以在从机上查询,以降低主机的访问压力。
但是,只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据仍需从服务器查询。(因为主从复制有同步延迟,所以不能够保证强数据一致性)
主从复制和读写分离的区别?
主从复制是实现读写分离的技术之一,也是实现读写分离的前提条件。
做读写分离时最重要的就是确保读库和写库的数据统一,而主从复制是实现数据统一最简单的方法(并不能够保证强数据一致性)。
读写分离,顾名思义,就是一个表只负责向前台页面展示数据,而后台管理人员对表的增删改查在另一个表中,把两个表分开,就是读写分离。
主从复制则是一个表数据增删改之后会即时更新到另一个表中,保证两个表的数据一致。
实现主从复制的方法?
MySQL 主从复制 – 学习心得 – SegmentFault
高性能Mysql主从架构的复制原理及配置详解 – CSDN博客
MySQL主从复制,双机热备实战 – CSDN博客
如何减少主从复制的同步延迟?
深入解析Mysql 主从同步延迟原理及解决方案
MySQL主从数据库同步延迟问题解决
主从复制侧重点不同的几种变形?
双机热备,双机互备,双机双工
双机热备(主从复制):主机+备机,
双机互备:主机(备机)+备机(主机),互为主备
双机双工:主机+主机,两台机器同时运行。
分布式
什么是分布式计算?
何为分布式计算 – CSDN博客
分布式计算泛型 – CSDN博客
分布式和集群有什么区别?
广义上的分布式是指===》将不同的服务分布在不同的服务器上,
而集群指的是===》将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。
而集群并不一定是分布式的。
举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。