B/S 网络架构概述

1.目前B/S网络架构大都采用类似下图所示的架构
[img]http://dl.iteye.com/upload/attachment/0079/3324/a68106fc-7cba-3429-889e-9deb880ad4ac.jpg[/img]


2.如何发起一个HTTP请求 就是建立一个Socket通信的通过

浏览器在建立Socket连接连接之前,必须根据地址栏输入的URL的域名DNS解析出IP地址,再根据这个IP地址和默认的80 端口与远程服务器简历Socket连接,然后再根据这个URL组装成一个get类型的Http请求头,通过outputStream.write 发送到目标服务器,服务器等待inputStream.rea放回数据,最后断开这个连接. 不同的浏览简历连接的方式不同,管理连接的方式也不同.既然发送一个Http请求就是简历一个Socket通信,那么我们就可以不利用浏览器手动就可以发送一个Http请求了.

1.使用 HttpClient
2.linux 中 使用 curl +URL 就能够发起一个Http请求 可以加上 -I 来查看http协议头的信息,或者 -H来添加 HTTP


3.Http协议的解析

[img]http://dl.iteye.com/upload/attachment/0079/3331/8f50f8ee-893e-3c92-b8b2-7958b71cbfff.jpg[/img]

4.在浏览器中 查看http头的信息
1.Firefox中可以使用 firebug ,Httpfox这些插件来看看请求和返回的信息
2.IE 中可使用 httpWatch,httpfox ,
3.Google中自带了F12 就可以打开了.


5.浏览器的缓存

1.为了获取最新的数据,我们可以使用Ctrl+F5 来直接向目标URL发送请求.这样就不会使用浏览器缓存数据.
2.如果服务器前端部署了一个缓存服务器,比如 Varnish代理,也可能直接使用缓存数据.
3.所以为了保存能够看到最新的数据,必须通过Http协议来控制了. 在发送http请求的请求头中加入 Cache-Control(控制浏览器) 和 Pragma (控制服务器) 两个参数来控制,浏览器和缓存代理服务器 必须服从命令请求最新的数据.


HTTP的请求头中会增加一些请求头

1 .Cache-Control / Pragma
 
这个HTTP Head 字段用于指定所有缓存机制在整个请求/ 响应链中必须服从的指令,
如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP 协议相关的缓存
或代理服务器。HTTP Head 字段有一些可选值


[img]http://dl.iteye.com/upload/attachment/0079/3339/55c8494e-f041-3cbc-9da1-d6e74f31c2cd.jpg[/img]

2.Expires

Expires 通常的使用格式是Expires : Sat, 25 Feb 2012 12:22:17 GMT ,后面跟着一个日期和时间,超过这个时间值后,缓存的内容将失效,也就是浏览器在发出请求之前检查这
个页面的这个字段,看该页面是否已经过期了,过期了就重新向服务器发起请求。


3.Last-Modified / Etag
Last-Modified 字段一般用于表示一个服务器上的资源的最后修改时间,资源可以是静态(静态内容自动加上 Last-Modified字段)或者动态的内容(如 Servlet 提供了一个 getLastModified 方法用于检查某个动态内容是否已经更新),通过这个最后修改时间可以判断当前请求的资源是否是最新的。一般服务端在响应头中返回一个 Last-Modified字段,告诉浏览器这个页面的最后修改时间.
Etag: 与 Last-Modified 字段有类似功能的还有一个 Etag 字段,这个字段的作用是让服务端 给每个页面分配一个唯一的编号,然后通过这个编号来区分当前这个页面是否是最新的。
这种方式比使用Last-Modified 更加灵活,但是在后端的Web 服务器有多台时比较难处理,
因为每个Web 服务器都要记住网站的所有资源,否则浏览器返回这个编号就没有意义


6.DNS域名解析

1.将域名解析成IP就属于DN解析的工作范畴.目前世界上整个互联网有几个DNS根域名服务器.
步骤
1.用户输入域名--->浏览器检测缓存(查看有无此域名解析过的IP地址)--->有(解析结束)
浏览器的缓存域名是有限制的,大小限制,时间限制.时间的限制可以通过TTL(Time To Live) 属性来设置.(TTL的初值通常是系统缺省值,是包头中的8位的域)

2.如果用户浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果一般在 C:\Window\System32\drivers\etc\hosts 文件里面.如果有 浏览器就会使用这个ip地址. 在linux 中这个配置文件是/etc/named.conf 修改这个文件可以达到同样的目的.

前两个步骤都是在本地完成的. 如果上面的步骤没有得到域名解析的IP,此时就会请求域名服务器来解析这个域名了

3.根据网络配置中的 "DNS服务器地址(本地)"--->操作系统将(域名)--->LDNS服务器--如果有-->解析结束.(window:使用ipconfig linux: cat /etc/resolv.conf)

4.LDNS没有命中--->Root Server根域名服务器请求解析

5.Root Server根域名返回一个 查询域名的 主服务器地址 gTLD Server 地址----->LDNS 服务器

6.LDNS---请求-->gTLD服务器发送请求(gTLD:国际顶级域名服务器,如.com ,.cn,.org全球只有13台左右)----NameServer域名服务器地址--->NameServer(当初申请域名的提供商存储了当初域名对应的IP)----TTL+IP----->LDNS Server(存储 URL:IP,时间TTL控制)--->用户(浏览器将TTL,URL:IP 值缓存在本地中)--->解析结束


[img]http://dl.iteye.com/upload/attachment/0079/3545/2d11f95f-90cb-3aee-bcfc-ac223e0f5397.jpg[/img]

7.清除缓存的域名

1.LDNS的缓存很难清理
2.所以只能清理本地
Window:ipconfig/flushdns 命令来刷新缓存
Linux:sudo /etc/init.d/nscd restart

3.在java应用中JVM也会缓存DNS的解析结果,这个缓存实在InetAddress类中完成,而且这个缓存时间还比较特殊,有两种缓存策略:
(在配置项在 %JAVA_HOME%\lib\security\java.security)
1.正确的结果缓存: networkaddress.cache.ttl 默认值 -1 永不失效
2.失败的结果缓存: networkaddress.cache.negative.ttl 默认值10 10秒

3.修改的方式,分别是
A:直接修改 java.security
B:在java启动参数中增加-Dsun.net.inetaddr.ttl=xx 来修改默认值
C:通过InetAddress类来动态修改.(如果我们需要InetAddress来解析域名一定要是单例模式.否则每次都解析,很耗时间)


8.域名记录的分类 A记录, MX记录, CNAME记录 NS记录 TXT记录
A:记录
 A表示的Address用来指定对应的Ip地址.
例如 item.taobao.com 指定到115.238.23.241
将switch.taobao.com记录到 121/14/23/231
A记录可以将多个域名解析到一个Ip地址.不能将一个域名解析到多个IP地址.


MX:记录表示
,Mail Exchange, 就是将某个域名下的邮件服务器窒息nag自己的Mail Server
例如: taobao.com域名的A记录的IP地址为 115.238.25.245.
如果 MX 记录设置为 112.238.25.246,是 [email protected]的邮件路由,DNS会讲邮件发送到115.238.25.246所在的服务器.而正常通过web请求的话仍然解析到A记录IP地址


CNAME记录
全程是 Canonical Name(别名解析).所谓的别名解析就是可以为一个域名设置一个或者多个别名. 如将 taobao.com 解析到 xulingbo.net 讲srcfan.com 接续到xulingbo.net
其中xulingbo.net 分别是taobao.com srcfan,com,前面的跟踪域名解析为 www.taobao.com 1542 IN CNAME www.bslb.taobao.com 就是CNAME 解析


NS记录 

 为某个域名指定的DNS服务器, 也就是域名有指定的IP地址的DNS服务器解析.
(可能类似  Name Server 域名提供商 会指定某个域名有某个 DNS服务器去解析 然后返回IP地址)


TXT记录

为某个主机名或域名设置说明,,如可以为xulinbo.net设置TXT记录 为 "君山的博客|徐令波" 这样的说明


9 CDN工作机制

CDN:内容分布网络 ( Content Delivery Network) 它是构筑在现有Internet上一种先进的流量分配网络.目的在现有的Interner中增加一层新的网络架构,讲网站的内容发布到最接近用户网络"边缘",是用户 就近获取所需的内容.提高用户访问网站的相应速度. 有别于镜像.比镜像跟智能.
CDN=镜像(Mirror)+缓存(Cache)+整体负载均衡(GSLB).因而.CDN可以明显提高Internet中信息流动的效率.
目前 CDN都是缓存网站中静态数据为主,CSS JS 图片 静态页面等数据.
用户从主站中请求到内容后在从CDN上下载静态的数据.从而加速网页的显示速度.如淘宝有90%以上的数据都是有CDN来提供的.
通常CDN要达到一下几个目标
1.可扩展Scalability.性能可扩展性.因对新增的大量数据.用户,和事物的扩展能力,成本可扩展性.用低廉的运营成本来提供动态的服务能力和高质量的内容分发.

2.安全性:强调提供物理设备,网络,软件,数据和服务过程的安全性.减少 DDos攻击性和其他恶意行为造成商业网站业务中断

3.可靠性,响应,执行 (Reliability,Responsiveness Performance).服务可用性.能够处理可能的故障,和用户体验的下降.通过负载均衡即使提供网络的容错机制.


10.CDN 架构

[img]http://dl.iteye.com/upload/attachment/0079/3938/eee7f12d-af42-3a8f-ad08-79f68844c7f1.jpg[/img]

11负载均衡

负载均衡: Load Balance 就是对工作任务进行平衡,均摊,到多个操作单元上执行,如 图片服务器,应用服务器,共同完成工作任务. 它可以提高服务器响应的速度和利用效率.解决网络拥堵问题.

分类:
A:链路负载均衡:
 就是前面提到的通过DNS解析成不同的IP.然后用户根据Ip来访问不同的目标服务器: 
缺点:如果一种一条webService 挂掉了,由于LDNS有缓存,那么用户就无法访问 这个域名.
优点:GDNS (全局DNS 服务器)给出的webServer IP后 用户可以直接访问目标服务器.速度快

[img]http://dl.iteye.com/upload/attachment/0079/3943/9d1f09e2-f026-374d-9c6c-c45f98eb49ce.jpg[/img]


B:集群负载均衡:
分为:
硬件负载均衡 :

使用一台专门的硬件设备来转发请求.
缺点: 价格贵,在超出服务极限时候不能动态扩容.如F5
优点:性能非常好,稳定.


[img]http://dl.iteye.com/upload/attachment/0079/3947/782d9f62-fb1d-3fa4-9128-2644161f8423.jpg[/img]

软件负载均衡:

使用最普遍的一种方式.直接使用廉价的PC就可以搭建
缺点:一般一次访问请求要经过多次代理服务器(使用Ip进行转发),增加的网络延时
有点:成本非常低


[img]http://dl.iteye.com/upload/attachment/0079/3949/6885a6d3-777a-372c-8f0c-a97dd3b87af5.jpg[/img]


C:操作系统负载均衡:

利用操作系统基本的软中断和硬件中断来达到负载均衡,如可以设置多队列网卡来等来实现.

你可能感兴趣的:(杂文选集)