以下以java为基础讨论。
一般负载均衡,都是1个nginx 带N个tomcat。
更进一步,为了避免这个nginx挂掉,可能就用SLB(最近听到的阿里的项目)来带N个nginx。
于是疑惑开始,是否,更进一步,为了避免这个SLB挂掉,我们还需要在它之上再使用某些项目,来带N个SLB?
这样好像金字塔式的布局,最顶的那一个服务为了避免挂掉,又会要求上层继续有更高层的保障措施,不就无穷无尽了吗?
以下以java为基础讨论。
一般负载均衡,都是1个nginx 带N个tomcat。
更进一步,为了避免这个nginx挂掉,可能就用SLB(最近听到的阿里的项目)来带N个nginx。
于是疑惑开始,是否,更进一步,为了避免这个SLB挂掉,我们还需要在它之上再使用某些项目,来带N个SLB?
这样好像金字塔式的布局,最顶的那一个服务为了避免挂掉,又会要求上层继续有更高层的保障措施,不就无穷无尽了吗?
并不是完成是这样的,设备和软件集群要解决两个问题: 负载均衡(load balance),高可用(failover)
前端负载均衡:并行的设备越多承载力一般越强.但也不是线性的.
高可用:至少要消除单点故障的可能性.
消除单点故障要在网络的每一层做工作.
如:异地双活. 每个机房要至少双线接入, 电源要双路, 磁盘要raid1, 机器网多网卡, DNS可以解析出多个IP,
双路由, 双防火墙,双交换机等等.
这些双活设备需要仅需要交叉接入即可. 并不需要在同一层堆叠很多. 总之横向扩展并不需层的累积. 对于中心网站前端负载均衡设备一般只需双机热备就好.
附个不是很恰当的图, 表达一下
不会无穷无尽,因为任何对外提供的服务都是有一个交互的起点。
以访问一个网站的主页为例,其起点就是请求DNS,DNS服务器由ISP或大型专业服务公司提供,一般都可以认为这个是100%可靠的。
当DNS返回一个地址给用户后,用户请求这个地址,这个地址的可靠性由网站保障,网站可以通过负载均衡技术让多个服务器(或多个层级的服务器)共同为这个地址的请求提供服务。
这种情况下,只要用户到达这个地址的网络路径是通的就没问题,如果路径上存在问题,例如核心交换机故障、机房断电、光纤被挖等等,这种情况下,这个地址在网络层面就不可靠了。
那么如果想进一步提高可靠性,就需要配置多个地址,一个地址挂了后,让DNS解析到另外一个地址,另外一个地址可以在不同的机房、城市、省份甚至国家。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答2.4k 阅读✓ 已解决
2 回答3.8k 阅读
不会,因为需求是无限的,但预算是有限的……
╮(╯▽╰)╭
理论上无解的问题,到了现实中往往换个思路就好了。比如tomcat比较吃资源,那么就把它独立出来专职跑计算嘛;SLB倒是需要热备~但钞票都交了,干嘛不把问题丢阿里呢;还有运营上有没有办法提前做分流?架构有没有手段进一步优化?……办法总比困难多嘛。