典型实现
一、DNS
(1)当用户在浏览器中输入网站地址后,浏览器会检查浏览器缓存中是否存在对应域名的解析结果。如果有,则解析过程结束;否则进入下一个步骤
(2)浏览器查找操作系统缓存中是否存在这个域名的解析结果。这个缓存的内容来源就是操作系统的hosts文件。如果有,则解析过程结束;否则进入下一个步骤
(3)前两个步骤都是本地查找,没有发生网络交互。在本步骤中,会使用到在网络配置的中DNS地址。这个地址我们通常称之为LDNS(Local DNS)。操作系统会把域名发送给LDNS解析。如果解析成功,则解析过程结束;否则进入下一个步骤
(4)LDNS将请求返回给GTLD(Global Top Level Domain)服务器,GTLD服务器查找此域名对应的Name Server域名的地址。这个Name Server通常就是你的域名提供商的服务器。Name Server根据客户请求,返回该域名对应的IP地址和TTL(Time To Live)值
(5)浏览器根据TTL值,把这个域名对应的IP缓存在本地系统中。域名至此解析结束。
二、CDN
CDN(Content Delivery Network,内容分发网络)部署在网络提供商的机房里面。在用户请求网站服务时,可以从距离自己最近的网络提供商获取数据。比如视频网站和内容网站的热点内容。
如果需要自己搭建CDN系统,有3种主流方案可以选择:
(1)squid是缓存服务器科班出生,自己实现了一套内存页/磁盘页的管理系统
(2)varnish是觉得squid性能不行,varnish觉得linux内核已经把虚拟内存管理做得很好了,squid的多此一举反而影响了性能。
(3)nginx cache是属于不务正业,得益于nginx强大的插件机制。
三、LB
LB(Load Balance,负载均衡)就是将负载( 用户的请求 )根据某些 策略 ,将负载 分摊 给多个操作单元执行。该技术可以提供服务器的响应速度以及利用效率,避免出现单点失效。
(1) 数据分类: 根据数据 更新频率 ,分为 动态文件 , 静态文件
(2) 在 DNS 和 CDN 具体实现时,也是大量使用了 负载均衡技术
(3) 常见的负载均衡算法由:RR(Round Robin, 轮询 ),WRR(Weighted RR, 加权轮询 ),Random( 随机 ),LC(Least Connection, 最少连接 ),SH(Source Hash, 源址哈希 )
(4)负载均衡方法 一、硬件负载F5,Array 二、采用LVS+Keepalived 实现软负载
四、WEB APP
前端技术
(1)动态页面静态化
(2)无限滚动翻页技术
(3)WEB前端优化最佳实践
后端技术
(1) HTTP协议:HTTP协议大概分为请求头,请求体,响应头,响应体。无论是WebServer还是ApplicationServer,很多花样都是基于请求头的请求路径来玩的
(2) API接口:使用 RESTFUL API ,暴露接口。它具有如下好处:1.充分利用 HTTP 协议本身语义。2.面向资源,一目了然,具有自解释性。3.无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,极大的降低了复杂度
(3) Session Framework: 在大型互联网架构中,单台机器已经存放不了用户的登录信息。同时为了支持故障转移等特性,需要一套session管理机制,支持海量用户同时在线。 使用分布式缓存系统来实现。
五、SOA
网站架构的演进之路,从单一应用架构到垂直应用架构,分布式服务架构以及流动计算架构,越来越体现SOA框架的重要性。这里以优秀的开源实现dubbo为例,简单介绍下。
六、MQ
MQ(Message Queue,消息队列)使服务调用异步化,可以消除并发访问洪峰,提升网站响应速度。 在MQ实现中,笔者写过一篇介绍Kafka的学习笔记,详细介绍见 Kafka/Metaq设计思想学习笔记(javascript:void(0)) ,不再多言。