WEB访问过程
首先简述一下访问网页的过程:
在浏览器地址栏输入网址如京东:”jd.com“回车,浏览器很智能,会把你输入的地址转换成标准url即:http://jd.com/:80,最后面”/“指请求资源的uri,不带任何字符则是请求根目录,”:80”指端口号,指访问地址的对应端口,默认”/“和80端口会隐藏,让普通用户看起来不疑惑,专注于网页内容。你可能看到返回的网址会变成https://www.jd.com,是因为京东的web服务器对用户输入的jd.com做处理了,返回一个安全的页面。实际是发送http请求。
浏览器会先对域名进行DNS解析,把域名解析成公网地址。浏览器会通过以下几步来获取解析:
- 先检查浏览器本身DNS缓存
- 查找系统HOST文件是否有对应记录
- 查找系统DNS缓存
- 查找本地的DNS服务器缓存
- 发送DNS请求到根服务器来获得IP地址
获取到IP地址后,就向该地址服务器发送HTTP请求,服务器响应请求并返回一个页面,浏览器收到响应后渲染页面。
从点击访问到看到页面经历哪些时间
- DNS解析时间:通常在20-50ms左右
- 数据传输时间:发送HTTP请求(跟网络带宽有关),接收并返回数据(请求数据内容大小有关)
- 处理请求时间:建立连接,等待服务器响应(服务器查库,计算,生成页面)
- 浏览器渲染时间(浏览器算法不一样渲染的时间也不一样)
单机架构
LNMP+ECSHOP开源商城搭建在同一台服务器
- 单点故障(可以定期备份)
- 性能有瓶颈
- web和db在一起会相互影响(web忙的时候查询数据库,数据库也很忙,就会很慢,web处理请求就会很慢,就会一堆请求排队,会导致web更慢,这是一个叠加的效应)
组件及读写分离
实现方法:
- 在web1上做负载均衡把请求分发到两台web服务器上,在web2上做备节点
- 弄两域名如web1.xxx.com和web2.xxx.com,无论用户访问哪个域名都是同一个页面(原理跟游戏选网络节点一样,是电信还是联通或者软件站下载通道),所有技术都是有应用场景,整个框架的设计是根据业务来决定的,而不是新技术。
- DNS轮询,使用单条域名绑定多条A记录,有负载均衡的局限性:
- 无法快速踢出故障节点:假如其中一台服务器宕机,即其中一条记录失效,需要手动删除失效的记录,但是DNS有缓存时间,在DNS时间失效前,访问就会出问题,当然可以使用脚本当宕机就直接切换IP。
- 负载不均衡:服务器硬件配置不同,DNS缓存影响,不同地区DNS缓存劫持不一样,有些地区永远获取到同一个地址
DNS轮询应用场景:
- 有多个集群,有多个A记录,配成智能DNS,根据客户IP来做
- 全局负载均衡
- 用于主机流量的切换或节点的替换,给域名添加多一条记录就是新主机IP,在DNS失效前就是用DNS轮询
集群
什么是集群
多台同构或异构的服务器集中起来对外提供相同的服务,可以叫这堆服务器做集群,服务器不一定是要全部是linux或windows的,也可以是异构的。
分类:
负载均衡LB
提高资源利用率,使用多种调度策略,尽量把任务分发得更均匀。当出现故障能够快速切换,但不能把负载均衡配置在web服务器上,可以放到DB服务器上,因为要有第三方仲裁才能确保宕机的消息是可靠的。不能单纯PING不同就认为节点DONM了,有可能是到该节点的网络不通,也可能是网络拥堵,并不意味着服务器宕机,如果这时候切换,就会造成混乱。需要过一段时间再尝试PING,需要有次数限制,如果再不通,就设置一个SLEEP时间,过了SLEEP时间再尝试。经典案例是支付宝回调通知的一种方式。实现:
- DNS轮询
- HTTP重定向:使用location跳转,一般为业务原因需要用到,或者备案原因
- 反向代理:代理用户的请求,向真实服务器发送请求,再把结果返回给用户,下载类网站不适合使用反向代理局限于带宽和性能问题,如果是下载类很容易把带宽占满,同时有高并发的情况,性能会很差。可以马上停掉从库,主库读写,然后从库再弄一个反向代理来分流,后面再优化架构。
- IP负载均衡:
- 如LVS的NAT模式:LB充当网关的功能,用户发送请求,目的地址是VIP虚拟IP,源地址是用户IP,到达LB设备后进行调度,发送数据包目的地址为服务器IP,源地址是用户IP,到达服务器后,服务器根据用户IP发送给网关,也就是LB设备,LB设备再修改数据包,把源IP改为VIP。这样最大特点是服务器的网关必须要设置成LB服务器的VIP,不然就无法通讯,LB设备对双向的数据包进行改写,与反向代理不同的是,LVS不向用户负责,只负责转发,不负责请求。而且LVS不支持健康检查,健康检查是keepalived或者是其他软件如heartbeat里面的active director做的。
- LVS的DR模式:用户请求到达LB设备,LB设备进行调度,转发数据包到服务器,服务器直接返回给用户,不再经过LB设备。此模式实际上是二层负载均衡,LB设备只修改MAC地址(ARP协议)。缺点是配置麻烦,不能跨局域网,监听端口不能改。下载类可以用DR模式,少了一次转发。
高可用HA
健康检查,高可用性,防止脑裂—仲裁设备:关机。两台反向代理服务器合理利用如何实现:
- 多组互备:使用两套集群,集群A中代理A为主,B为备,集群B中代理A为备,B为主。缺点:雪崩效应
- 备机做服务器监控,数据库备份或者定时任务等
- 做web节点
高性能HPC
WEB架构集群
WEB架构缓存
打开京东网站,查看源代码,可以看到有link rel的内容
1 | <link rel="dns-prefetch" href="//static.360buyimg.com"/> |
这个是HTML5的新功能,叫DNS预获取。在HTTP头部插入,把页面内所有需要获取DNS的元素先获取缓存一遍,这样当请求到对应资源的时候就会很快。
WEB架构存储
数据库扩展
结语
没有绝对好的架构,只有合适的架构,当引入一个新的架构,解决了当前问题,同时也会产生其他问题。没必要指点他人架构,存在即合理,当你看到别人的架构,多想想为何这样用,这种架构的好处是什么,优点是什么。一个好的架构,就是在有限的资源里,把架构做到最优,能充分利用所有资源,达到最大的效果。