集群:集群基础概念
来源:互联网 发布:国内编程语言排行 编辑:程序博客网 时间:2024/06/07 00:37
集群:集群基础概念
如果用用LAMP,http搭建一个论坛,没有用长连接,是无状态的,同时有200个请求,其中有50个请求是动态的,150个请求是静态的。Apache工作在prefork模型,每一个进程占用2M内存,每一个动态的进程占用的内存是10M。
资源占用计算:
500M+150*2m = 800M
随着用户的增加,增加到1000个用户,假如这个1000请求里面里面,有800个是静态请求(图片,css),200个动态请求(查询数据库)。动态查询数据库比较慢。
资源占用计算:
800*2+200*10 =3.6G
假如1000个进程,2个CPU,每个CPU平均要处理500个请求。
研究显示,响应速度超过3秒,客户会流失60%。
面对这种硬件吃紧的情况,怎么办?
有2种方式:
(1)Scale On: 向上扩展
换一个更强的服务器,换一个32G内存,8个CPU。
换来的新的服务器是旧的服务器的4倍,是不是网站的性能会增加4倍呢?研究显示,不是线程增加的,因为CPU多了之后,会增加调度和资源请求等方面的消耗。此外,这种方式的缺点还有扩展的时候需要整体迁移。
(2)Scale out: 向外扩展
再加服务器,不需要整体迁移,只需要加入服务器。如果再加3台服务器,怎么让请求分配到这3台服务器呢?
DNS A记录,一个域名可以有N个记录:
www.magedu.com IN A 172.16.100.1
www.magedu.com IN A 172.16.100.2
www.magedu.com IN A 172.16.100.3
…….
通过DNS的负载均衡能力。
这种方式有什么缺陷呢?
为了增加DNS的查询效率,会加缓存,这样一个请求查询,
会缓存的,然后第二个请求来,直接从缓存里取,会访问同一
台服务器,所以我们不能依赖这种机制实现负载均衡(LoadBalanceing:LB)。
那应该怎么办?
怎样让请求平均的分发到服务器上?
必须依赖一个前端组件,放一个特殊设备。
请求通过该设备(使用某种算法),将用户请求分发到各台服务器。
Round Robit: 轮询
不但要兼顾公平,还要兼顾效率。
WRR: 加权
如果服务器1的性能是服务器2的2倍,应该多分发请求给服务器
。
以上,叫负载均衡集群(LB)。
但上述集群还存在问题:
如果一个用户发一个图片到服务器1,下次改用户再访问该图片,但
访问的是服务器2,该用户能访问到该图片吗?
怎么实现用户在那个服务器发的帖子,访问那台服务器都能看
到?
独立出一个服务器,做MySQL数据库服务器,所有的web服务器都
从该MySQL服务器中取数据。把图片放到某个服务器硬盘上,帖子
中只保持帖子的连接。MySQL是不能保持图片的。
代码每台服务器上放一份,每次修改代码的时候,是不是所有
服务器都要重新发布一份?会很麻烦
可以把其中一台主机目录做成一个文件共享服务,
主服务器更新的时候,都会通知从服务器,从服务器
都会自动更新。
Rsync: 文件同步工具,在同步前,会检测哪些文件已经更新的,只同步更新的,而且支持远程复制。
那rsync多少时间更新一次?
在主服务器上,如果有更新,会通过inotify机制,通知从服务器,自动更新。
文件是否发生改变,是内核管理。
随着用户量的增加,负载均衡服务器会成为瓶颈,
该怎么办?
功能切分,每一个小功能做一个集群。
负载均衡服务器主服务器挂了,会启用备份的。
怎么知道服务器挂了?切换时间是多长?
主服务器会把自己的心跳信息每个一秒钟外发一次,
如果从服务器没有收到主服务器的心跳信息,则取而代之。
这种集群叫高可用集群(HA: High Availability)
怎么实现Web服务器集群的高可用呢?
负载均衡定时对Web服务器进行health check:健康检查
连续检查3次,如果不正常,剔除;
但继续检查,如果发现主机重新上线,重新加回。
负载均衡集群和高可用集群的异同点?
负载均衡是为了提高并发处理能力为着眼点;
高可用集群是为了提高服务可用性为着眼点的。
可用性: 在线时间/(在线时间+故障时间)
99%相当高了,但是还有3天不在线,如果是淘宝
是不可接受的。
99.9%,1年只有0.3天不在线;
99.99%, 1年只有0.003天不在线。
如果做高可用集群,是不是备用的服务器就处在空闲了?
加入公司恰好好提高web和mail服务,就要4
台服务器,这样就造成一般的资源浪费。
再提供一个IP地址,如果web或者mail其中一个发送故障,
把其中一个服务的IP移到另外一个服务器。
相当于一台服务器启用了3个服务。假如由加了一个服务pop3,
如果其中一个服务挂了,可以往优先级高的服务器
迁移。
服务器之间的心跳信息通过多播或者组播传递。
推选一个DC(协调员),负载处理协调事务,如果DC挂了,再推选
一个新DC.
83分钟
DAS: Direct Attached Storage, 直接附加存储
NAS: Network Attached Storage,网络附加存储
怎么避免2个不同的主机上的进程修改同一个
NAS上的文件不出错呢?
NAS会代为持有锁,如果有一个主机的一个线程正在写NAS的
某个文件,此时还有另一台主机发起写请求,NAS会阻塞后者
。
UltraSCSI: 320Mbps/8=40M
DAS: 100M 以太网带宽有12.5M
1000M以太网有1000/8=125M
SAS: 6Gbps/8
Split-brain: 脑裂,某一台主机假死,但另外一台
主机以为前者真死了,把IP夺过来了,开始往NAS
写数据库,这是2台主机都往NAS写数据。
解决的方法是是第二台主机在夺IP的同时,
通过电源交换机关闭第一台主机,这叫
STONITH(Shoot the other node in the head)。
HP(HPC)
High Performance
向量机
并行处理集群
分布式文件系统
将大任务切割为小任务,分别进行处理的机制
如Hadoop
- 集群:集群基础概念
- 集群基础概念
- 集群概念
- 集群概念
- 集群概念
- 集群概念
- 集群的概念
- MySQL集群核心概念
- oracle 集群组件概念
- WebLogic11g-集群相关概念
- 集群(高并发)概念
- WebLogic11g-集群相关概念
- 集群的概念
- 集群的概念
- 集群概念以及介绍
- 优化 集群因子概念
- HA集群概念
- 分布式,集群概念理解
- iis网站.net版本选择
- osx升级到10.10后,用pod install报错最终解决办法
- HDU 5207Greatest Greatest Common Divisor
- Lua_键盘事件
- 湘潭大学oj1213
- 集群:集群基础概念
- fully distributed(hadoop&hbase)
- vim保存折叠信息的方法
- Spring MVC JSP页面无法加载.jpg .css .js的解决方案
- Lua_重力加速器
- 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)前言
- eclipse导入项目报错 :Unbound classpath container: 'JRE System Library'
- 图谱(Graph)API 概要
- 菜鸟变黑客终极教程