1,DNS服务
用户在浏览器的地址栏输入地址域名,浏览器会查询这个域名与ip的关系是否已经存在本机的host文件中,如果没有,则会把请求发送給本机指定的域名系统(Domain Name System,DNS)服务器
计算机世界是以IP地址来定位服务器或PC的,DNS这项服务的目的就是将域名翻译成IP,使用者可以更加方便地访问互联网,DNS服务器有一定的层级,如果某个DNS服务器不知道如何翻译,就会问另一个,再不知道,就问下一个,这样就会有一个递归的过程。幸运的是,DNS可以缓存查询结果,这样我们就不需要经历重复冗长的过程去查找一个域名映射的IP地址。
DNS系统中常见的资源记录类型有如下两种
主机记录(A记录):用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
别名记录(CNAME记录):用于将某个别名指向到某个A记录上,这样的好处是修改IP的时候改A记录就可以了,对于有大量子域名的网站可以简化操作,统一维护域名指向。
DNS查询有两种方式:递归和迭代。DNS客户端设置使用的DNS服务器一般都是递归服务器,它服务站全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询的方式。
例如查询zh.wikipedia.org,客户端发送查询报文“query zh.wikipedia.org”至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。如果记录老化或者不存在,则DNS服务器向根域名服务器发送查询报文“query zh.wikipedia.org”,根域名服务器返回“.org”域的权威域名服务器地址。DNS服务器向“.org”域的权威域名服务器发送插叙报文“query zh.wikipedia.org”,得到“.wikipedia.org”域的权威域名服务器的地址。DNS服务器向“wikipedia.org”域的权威域名服务器发送查询报文“query zh.wikipedia.org”,得到主机zh的A记录,存入自身缓存并返回给客户端。
这里有一个很重要的概念,TTL,简单的说,它表示的是一条域名解析记录在DNS服务器上的缓存时间,当一个递归域名服务器查询权威域名服务器获取某个域名的映射时,它会将该记录缓存上一定的时间,这个时间就是TTL指定的时间(以秒为单位),如果反复执行“dig www.msql.com”,就会发现这个缓存时间在减少,因为在你的DNS缓存中,这笔记录能够保存的时间开始倒计数,如果TTL没有归零,缓存服务器会简单的用已缓存的记录答复查询请求。若这个数字归零后,下次再有人重新搜寻这笔记录时,你的DNS就需要从权威域名服务器重新获取记录,也就是说,如果改变了域名的指向,那么最长需要TTL时间才会完全生效。
2,负载均衡
负载均衡软硬件设备如F5,Haproxy,LVS
负载均衡(Load Balance),即将负载进行平衡,分摊到多个操作单元上进行执行,例如Web服务器,FTP服务器,企业关键应用服务器和其他关键任务服务器等。
当后端的一台服务器宕机或过载,负载均衡软硬件设备将不再转发流量到这台服务器,转而发送到备用的服务器上,从而实现自动故障冗余切换。
最早的负载均衡技术是通过 DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询到这个名字的客户机将得到其中的一个地址,从而使不同的客户访问不同的服务器,达到负载均衡的目的。DNS负载均衡是一种简单而且有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态,对于高并发,大流量的请求,很容易导致负载并不均衡。现实中,它可能作为更上层的负载均衡存在,完成粗粒度的流量调度任务,比如在机房之间使用DNS负载均衡,在机房内部使用其他负载均衡的方式。
F5负载均衡器是应用交付网络的全球领导者F5 Networks公司提供的一个负载均衡器专用设备,一般需要配置双机故障冗余切换。F5主要应用与传统行业内,如电信,移动,银行等,也有许多互联网公司使用F5设备,虽然F5设备比较昂贵,但在一定规模下,它可以降低企业的成本,代替系统管理员,工程师管理各种资源。F5设备除了负载均衡外,还有一些其他的功能,如利用压缩技术降低带宽支出,减少连接数等。
F5f等硬件设备毕竟是商业化的产品,比较昂贵,对于互联网公司,一般使用开源软件实现负载均衡,常用的有LVS,Haproxy等。
3,反向代理
反向代理是代理服务器的一种,比如Squid,Vanish等,它根据客户端的请求,从后端的服务器上获取子软,然后将这些资源返回给客户端。常用的代理服务为Squid,它可以作为缓存服务器,可以过滤流量保证网络安全,也可以作为代理服务器链中的一环,想上级代理转发数据或直接连接互联网,一些网站往往在前端增加Squid反向代理加速响应,提高吞吐量。Squid可以缓存内容,特别是一些静态的数据,如图片和文件,如果反向代理靠近用户的网络,那么用户就会得到延时很低的高质量访问,这正是CND技术的核心。
4,web服务器
Web服务器包括Nginx,Apache,Tomcat等
Apache HTTP Server是Apache软件基金会的一个开放源代码的网页服务器,Nginx是轻量级的网页服务器,它也可以作为反向代理,负载均衡器。在常见的网络架构中,Nginx往往配合php-fpm使用,Nginx负责处理静态请求,把PHP等动态请求抛给后端的php-fpm处理。或者Nginx处理前端的静态请求,把Apache放在后端处理一些动态请求。
5,应用服务器
应用程序服务器是通过很多协议来为应用程序提供商业逻辑的服务器,它将通过各种协议(包括HTTP),把商业逻辑暴露给客户端应用程序。Web服务器主要是处理向流浪器发送HTML以供浏览,而应用程序服务器则提供访问商业逻辑的途径以供客户端应用程序使用。
6,访问数据库
客户端不直接和数据库打交道,如果处理逻辑需要访问数据,则有应用服务器或Web服务器访问数据库,获取数据。
综述
以上架构是比较普通三层/四层架构,架构中也可能有一个缓存服务,以减轻数据库的压力。Web服务器,应用服务器到数据库服务器中间可能存在数据中间件,但更常见的做法是通过在Web服务器,应用服务程序配置文件里指定IP或内网域名来配置数据库路由。