??xml version="1.0" encoding="utf-8" standalone="yes"?>第一页在线观看,国产成人精品一区二,久久综合九色99http://www.aygfsteel.com/conans/articles/364566.htmlCONANCONANTue, 22 Nov 2011 07:01:00 GMThttp://www.aygfsteel.com/conans/articles/364566.html<script>
function getInfo()
{
var s = "";
s += " |页可见区域宽:"+ document.body.clientWidth;
s += " |页可见区域高:"+ document.body.clientHeight;
s += " |页可见区域宽:"+ document.body.offsetWidth + " (包括边线和滚动条的宽)";
s += " |页可见区域高:"+ document.body.offsetHeight + " (包括边线的宽)";
s += " |页正文全文宽:"+ document.body.scrollWidth;
s += " |页正文全文高:"+ document.body.scrollHeight;
s += " |页被卷ȝ?ff)Q?+ document.body.scrollTop;
s += " |页被卷ȝ?ie)Q?+ document.documentElement.scrollTop;
s += " |页被卷ȝ左:"+ document.body.scrollLeft;
s += " |页正文部分上:"+ window.screenTop;
s += " |页正文部分左:"+ window.screenLeft;
s += " 屏幕分L率的高:"+ window.screen.height;
s += " 屏幕分L率的宽:"+ window.screen.width;
s += " 屏幕可用工作区高度:"+ window.screen.availHeight;
s += " 屏幕可用工作区宽度:"+ window.screen.availWidth;
s += " 你的屏幕讄?"+ window.screen.colorDepth +" 位彩?;
s += " 你的屏幕讄 "+ window.screen.deviceXDPI +" 像素/英寸";
//alert (s);
}
getInfo();
</script>
在我本地试当中Q?
在IE、FireFox、Opera下都可以使用
document.body.clientWidth
document.body.clientHeight
卛_获得Q很单,很方ѝ?
而在公司目当中Q?
Opera仍然使用
document.body.clientWidth
document.body.clientHeight
可是IE和FireFox则?
document.documentElement.clientWidth
document.documentElement.clientHeight
原来是W3C的标准在作怪啊
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
如果在页面中dq行标记的话

在IE中:
document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度
在FireFox中:
document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度
?
在Opera中:
document.body.clientWidth ==> 可见区域宽度
document.body.clientHeight ==> 可见区域高度
document.documentElement.clientWidth ==> 面对象宽度Q即BODY对象宽度加上Margin宽)
document.documentElement.clientHeight ==> 面对象高度Q即BODY对象高度加上Margin高)
而如果没有定义W3C的标准,?
IE为:
document.documentElement.clientWidth ==> 0
document.documentElement.clientHeight ==> 0
FireFox为:
document.documentElement.clientWidth ==> 面对象宽度Q即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 面对象高度Q即BODY对象高度加上Margin高)
Opera为:
document.documentElement.clientWidth ==> 面对象宽度Q即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 面对象高度Q即BODY对象高度加上Margin高)
真是一仉烦事情,其实开发来看,宁可一些对象和ҎQ不使用最新的标准要方便许多啊?br />


有时候需要取面的底? ׃用到document.body.clientHeight , 在HTML 标准?q一句就能取到整个页面的高度, 不论body 的实际内容到底有多高, 例如, 1074*768 的分辨率, 面最大化? q个高度Uؓ720 , 即ə面上只有一?#8221;hello world” , 也仍然取?20.

可是在XHTML? 如果body 体中只有一? 则document.body.clientHeight 只能取到那一行的高度, U?0px, q时如何q想取到整个面的高? p用document.documentElement.clientHeight 来获取了.

原因? 在HTML ? body 是整个DOM 的根, 而在XHTML ? document 才是? body 不再是根, 所以取body 的属性时, 不能再取到整个页面的?

区别新旧标准的行?
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN” >
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
前者指明该面使用旧标? 后者指明该面使用新标?

ȝ:
XHTML中用 document.documentElement.clientHeight 代替
document.body.clientHeight



CONAN 2011-11-22 15:01 发表评论
]]>
主题Qsession的؜׃安全http://www.aygfsteel.com/conans/articles/338674.htmlCONANCONANMon, 22 Nov 2010 03:24:00 GMThttp://www.aygfsteel.com/conans/articles/338674.html[说明: 本文?nbsp;http://www.smithfox.com/?e=32 原创, 转蝲h明原? 谢谢]

session的安全有两层意?

1> Ҏl客h? 不会因ؓsession的share和造成混ؕ, 使end-user的信息泄漏以及其他安全问?/p>

2> 对系l本w来? 不会因ؓ有hacker通过模拟sessionid和cookie来获取server信Qq而进行恶意破?/p>

让我们逐层解释和展开问题:

1> 首先说明, 本文所有session专指Servlet HttpSession

2> 后台Session和Browser之间通过JSESSIONID来关? JSESSIONID是Servlet标准,也是关键? Servle规定Browser用Mem Cookie来存储JSESSIONID, 注意q不是disk cookie.一旦浏览器关闭后JSESSIONID׃PC消失, 更加安全.

3> Session也是一U很好的安全认证机制, 后台会标识session是不是已l被认证? 如果?׃会让用户再输入password. JSESSIONID可以被理解成Z个已l认证的key, 所以Session有安全问?

4> Servlet容器不会构造相同的JSESSIONID, 客户端也很难预期JSESSIONID

5> HTTPS SSL{技术可以防止网l传输中有h恶意改JSESSIONID

6> 用Cookie的情况JSESSIONID必ȝURLRewrite. 我们可以通过对URL本n采用摘要法Q自认证来防止恶意篡改JSESSIONID.

比如:  http://www.smithfox.com/abc?x=x&y=y&JSESSIONID=sdfdfsdfsdfsdfsdf&HWD=4FE23AD9892C

HWD的值是Ҏ个URL的一个摘要算? 如果有h改动了URLQ这个HWD值就对不上了, 前提应该是这个算法别Z知道?

7> 用户在自qPC上肯定是可以看到当前的JSESSIONID? p׃在自q日记中看C自己备忘的password一? q个不是技术安全问?

8> 一台机器有多个自然人在使用Q?出现的JSESSIONIDƺ骗Q?应该没有技术办法可以解? 只能是end-user自己心Q用完就关闭Browser. 我想q应该是在情理之中的? 你是合租被盗应该是怪不得小Z安的, 也是需要自己^时提高防盗意识,呵呵.

9> 最q看到Tomcat7有个新的Ҏ说是支?防JSESSIONID劫持", q个需要更多了?

10> User和Session的关p?

Session是只认JSESSIONID不认人的, 包括自然人和pȝAccount. q个问题比较?

我们用EndUser来表C然hQ?User-Account表示pȝ帐号Q?我们分析以下几种情况

10.1> 两个EndUserq一个UserAccountq且在同一台PC, q个混ؕ不是技术问题, 大家都可以理?/p>

10.2> 两个EndUser分别使用不同的UserAccount在同一台PC, q个是合U情况, 造成混ؕ不一定是技术问?/p>

10.3> 某EndUser有两个UserAccount在同一台PC? 我们需要考虑JSESSIONID在client端可以会混ؕ的问?

因ؓ不同的浏览器对于Cookie share的策略不同, 我们按程序设计必L最Ҏ出问题的Case惻I比如IE8.

无论你是IE多窗口还是多TAB都是Share Cookie? 所以ȝ指导斚w是在client端做一些机制不允许用户q么?

Google 的gmail是q么做的, 你可以一台机器上用IE打开两个不同的gmail account(两个H口或是两个TAB都行)Q点新email或是其他需要和后台交互的行为时Qgmail会退Z个,提示让你重新loginq且 gmail account已经固定为后输入的User-Account.

具体在Client怎么防止两个Accountq需高手指点.

10.4> 某EndUserA用自qUserAccountA先已lloginQ再讉K另一个UserAccountB的资源,而且该资源是需要访问密码的. 

q种情况Q往往因ؓ后台Session设计的层ơ不清晰Q造成了UserAccountA无需Passwordq接访问到了UserAccountB的资? 而且q个解决Ҏ不能攑֜Client端, 因ؓ讉KUserAccountB的资源可能就是一个在Email中的LinkQ这个click动作客户端程序JavaScript是无法拦截的.

10.5> ȝ来说:  

11> 从第10>点可以看出, session和自然h或是UserAccount有着千丝万缕的联p,但不是所有的pȝ只有Userq一层业务概念,所以我们需要理解后台的Session分划和设计好Session.Attribute层次.

? 们以一个假设业务模型ؓ例说明问? q是一个只面向企业的图片共享web服务, 可以为多个公?企业)提供服务, 用户必须属于某一个公? 用户可以创徏"囄分组", 囄分组可以讄为private(需要密码访?, 也可以直接公开. 囄分组是公司胦? user可以创徏"囄分组", 但是囄分组资源是归属公? 同一公司内部的所有user可以直接讉K囄分组(如果是公开), 也可以通过password(如果需?讉K囄分组.

q个业务模型? 既有比User更高层的概念, 比如公司. 也有比User更底的概? 比如用户的上传图片分l?imageGroup).

11.1> 不同的war包部|在tomcat,不同的war包之间的session是不会؜q, q个是由tomcat架构军_? 另他的没有做q调? 也有可能是Servlet标准, 有高手可以帮认一?/strong>.

11.2> 多个公司又是q行在同一个tomcat application? 怎么防止不同公司之间的session混ؕ

可以采用cM于防止重复提交的技? 首先做一个优先很高的filter, 每次reqeust和response都需要经q这个filter

? 所有login模块, 讄一个ticket cookie,写入当前company信息, 每个reqeust到达的第一步就是检client cookie和当前的URL信息, 以及session信息是否一? 如果enduser是从一个company中click了一个其他company的link, 该filter׃发现ticket信息不一? 然后强制logout, 再次让user login. q且每次response时做ticket的改? 使client无法模拟

11.3> 怎么防止imageGroup信息混ؕ

Session本n是一个集? 具体q是使用session.attribute["key"]

Session本n是User level? 对于低于User level的信? 需要好好规划attribute key

惛_q样的case:

有两个imageGroup, 一个是public? 一个是需要password? 

http://www.smithfox.com/companyIBM/public_images/

http://www.smithfox.com/companyIBM/password_images/

后台对imageGroup输入密码逻辑的伪代码如下:

boolean needpasswd = true;
if(session.getAttribute("NEED_PASSWORD") == null){
session.setAttribute("NEED_PASSWORD", needpasswd);
boolean needpasswd = 一个很耗时很复杂的验证函数(user, imageGroup, xxx);
} else{
needpasswd session.getAttribute("NEED_PASSWORD");
}
if (needpasswd ){
showPasswordDialog() ;

看出什么问题没?

应该上面的代码中的所有attribute keyҎ "NEED_PASSWORD"+{imageGroupID}

否则用户只要先看了一个public? 后面的所有图片分l都无需passwd可以访问了, 即ɘq个imageGroup是private?

13> 在用session之前一定需要检查是否真的一定需要session来解? 比如只是想传value到JSP pageQ?nbsp;request.setAttribte()更适合

14> 比较而多的业务对象,如果必须save在session一定要及时removeAttribute否则session用的内存会暴?

因ؓSession不会因ؓ客户端不用了Q就会自动清理,而是必须到SessionTimeOut才会Q如果在SessionTimeOut期间内有很多的对象在Session内,׃有问题。所以需要即时清理已l不用的Session.Attribute

15> Cookie和Session一? 同样需要注?cookie key的层ơ问题,以及q期问题Qdomain, path问题{等



CONAN 2010-11-22 11:24 发表评论
]]>
各大型网站架构分析收?/title><link>http://www.aygfsteel.com/conans/articles/325054.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 02 Jul 2010 03:24:00 GMT</pubDate><guid>http://www.aygfsteel.com/conans/articles/325054.html</guid><description><![CDATA[form: http://blog.csdn.net/lovingprince/archive/2008/11/26/3379710.aspx<br /> <br /> 1. PlentyOfFish |站架构学习<br /> <a target="_blank">http://www.dbanotes.net/arch/plentyoffish_arch.html</a><br /> <br /> 采取 Windows 技术\U的 Web 2.0 站点q不多,除了 MySpace Q另外就是这? PlentyOfFish。这个站Ҏ?“Online Dating” 服务。一个o人|z乐道的、惊人的数据是这个只有一个h(创徏人Markus FrindQ的站点价?10 亿,估计要让很多人眼热,更何? Markus Frind 每天只用两个时打理|站–可操作性很强嘛?br /> <br /> 2. 从LiveJournal后台发展?大型|站pȝ架构以及性能优化Ҏ<br /> <a target="_blank">http://www.example.net.cn/archives/2006/03/olivejournaloio.html</a><br /> <br /> LiveJournal?9q始于校园中的项目,几个人出于爱好做了这样一个应用,以实C下功能:<br /> * 博客Q论?br /> * C会性网l,扑ֈ朋友<br /> * 聚合Q把朋友的文章聚合在一?br /> <br /> LiveJournal采用了大量的开源YӞ甚至它本w也是一个开源Y件?br /> <br /> 在上U后QLiveJournal实现了非常快速的增长Q?br /> * 2004q?月䆾Q?80万注册用戗?br /> * 2005q?月䆾Q?80万注册用戗?br /> * 2005q?月䆾Q?90万注册用戗?br /> * 辑ֈ了每U钟上千ơ的面h及处理?br /> * 使用了大量MySQL服务器?br /> * 使用了大量通用lg?br /> <br /> 3. YouTube 的架构扩?br /> <a target="_blank">http://www.dbanotes.net/opensource/youtube_web_arch.html</a><br /> <br /> 在西雅图扩展性的技术研讨会上,YouTube ?Cuong Do 做了关于 YouTube Scalability 的报告。视频内容在 Google Video 上有(地址)Q可惜国内用L不到?br /> Kyle Cordes 对这个视频中的内容做了介l。里面有不少技术性的内容。值得分n一下?Kyle Cordes 的介l是本文的主要来?<br /> <br /> 4. WikiPedia 技术架构学习分?br /> <a target="_blank">http://www.dbanotes.net/opensource/wikipedia_arch.html</a><br /> <br /> l基癄(WikiPedia.org)位列世界十大|站Q目前排名第八位。这是开攄力量?br /> <br /> 来点直接的数据:<br /> <br /> * 峰值每U钟3万个 HTTP h<br /> * 每秒?3Gbit 量, q乎375MB<br /> * 350 ?PC 服务?br /> <br /> 5. Tailrank |站架构<br /> <a target="_blank">http://www.dbanotes.net/review/tailrank_arch.html</a><br /> <br /> 每天C千万计的 Blog 内容中,实时的热Ҏ什? Tailrank q个 Web 2.0 Startup 致力于回{这个问题?br /> <br /> 专门爆料|站架构?Todd Hoff ?Kevin Burton q行了采ѝ于是我们能了解一?Tailrank 架构的一些信息。每时索引 2400 万的 Blog ?FeedQ内容处理能力ؓ 160-200MbpsQIO 写入大约?0-15MBps。每个月要处?52T 之多的原始数据。Tailrank 所用的爬虫现在已经成ؓ一个独立品:spinn3r?br /> <br /> 6. LinkedIn 架构W记<br /> <a target="_blank">http://www.dbanotes.net/arch/linkedin.html</a><br /> <br /> LinkedIn 雇员?180 个,?Web 2.0 公司中算是比较多的,不过人家自从 2006 q就盈利了,q在 Web 2.0 站点中可少的。用戯q?1600 万,现在每月新增 100 万,50Q?会员来自外(中国用户不少Q也包括?.<br /> <br /> 7. YahooQ社区架?br /> <a target="_blank">http://www.dbanotes.net/arch/yahoo_arch.html</a><br /> <br /> 旧金׃D行的 QCon 会议带给我们很多新鲜的信息。虽然没Z参加Q但是看看各个网?#8221;晒架?#8221;也是个比较过瘄事情。请参观q收藏这个页面:Architectures you’ve always wondered about?br /> <br /> 8. Craigslist 的数据库架构<br /> <a target="_blank">http://www.dbanotes.net/database/craigslist_database_arch.html</a><br /> <br /> Craigslist l对是互联网的一个传奇公司。根据以前的一则报道:<br /> <br /> 每月过 1000 万h使用该站服务Q月览量超q?30 亿次Q?Craigslist每月新增的帖子近 10 亿条??)|站的网|量在以每q近癑ր的速度增长。Craigslist 至今却只?18 名员?现在可能会多一些了)?br /> <br /> 9. Fotolog.com 的技术信息拾?br /> <a target="_blank">http://www.dbanotes.net/review/fotolog_arch.html</a><br /> <br /> 管是世界上最大的囄服务|站, Fotolog.com 在国内的名气q不是很响亮, 每当提到囄服务, 很多人第一个会惌v Flickr. 但实际上 Fotolog 也的是很猛? Alexa 上的排名一直在 Flickr 前面, 目前注册用户过 1100 ? 而前不久也卖了一个好价钱, 9000 万美? 下来的? 1 个注册用户大U?9 金. Yupoo 的刘q阳可以L算自己的网站如果卖l老外是怎样一个hg.<br /> <br /> 10. Digg |站架构<br /> <a target="_blank">http://www.dbanotes.net/arch/digg_arch_cache_and_shard.html</a><br /> <br /> Digg 工程师采?LAMP (Linux, Apache, MySQL and PHP) 模式。这?Alexa 排名?100 左右的、自我估?1.5 亿美金的站点目前有超q?100 台的 PC 服务?_了)Q可以粗略分成三个部分:数据库服务器QWeb 服务器,搜烦服务器?br /> <br /> 11. Amazon ?Dynamo 架构<br /> <a target="_blank">http://www.dbanotes.net/techmemo/amazon_dynamo.html</a><br /> <br /> 我在 DBAnotes.net 上记录过不少比较大的|站架构分析(eg: eBay [1], eBay [2]) QAmazon 一直找不到太多的资料。国庆期间读C一关?Amazon Dynamo 的论文,非常_ֽ。Amazon Dynamo q个高可用、可扩展存储体系支撑了Amazon 不少核心服务.<br /> <br /> 12. 财帮子(caibangzi.comQ网站架?br /> <a target="_blank">http://www.dbanotes.net/arch/caibangzi_web_arch.html</a><br /> <br /> 财帮?caibangzi.com) 定位?#8221;基金理胦C֌”。是国内讉K量最大的Z Ruby on rails ?startup 目?#8220;理胦”q个词据说是光大银行发明的,且不ȝQ不可否认的是,目前国内”理胦”是个很有潜力的切入点。胦帮子|站潜在用户还是很大的?br /> <br /> 13. 了解一?Technorati 的后台数据库架构<br /> <a target="_blank">http://www.dbanotes.net/web/technorati_db_arch.html</a><br /> <br /> 目前处理着大约 10Tb 核心数据, 分布在大U?20 台机器上.通过复制, 多增加了 100Tb 数据, 分布?200 台机器上. 每天增长的数?1TB. 通过 SOA 的运? 物理与逻辑的访问相隔离, g消除了数据库的瓶? 值得一提的? 该扩展过E始l是利用普通的g与开源Y件来完成? 毕竟 , Web 2.0 站点都不是烧q? 从数据量来看Q这l对是一个相Ҏ较大?Web 2.0 应用.<br /> <br /> 14. 说说大型高ƈ发高负蝲|站的系l架?br /> <a target="_blank">http://www.toplee.com/blog/?p=71</a><br /> <br /> 我在CERNET做过拨号接入q_的搭建,而后在Yahoo&3721从事q搜索引擎前端开发,又在MOP处理q大型社区猫扑大杂烩的架构升U等 工作Q同时自己接触和开发过不少大中型网站的模块Q因此在大型|站应对高负载和q发的解x案上有一些积累和l验Q可以和大家一h讨一下?br /> <br /> 15. 大型高负载网站架?的感?br /> <a target="_blank">http://atman.memoab.com/articles/194</a> <img src ="http://www.aygfsteel.com/conans/aggbug/325054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/conans/" target="_blank">CONAN</a> 2010-07-02 11:24 <a href="http://www.aygfsteel.com/conans/articles/325054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型|站架构演变和知识体p?/title><link>http://www.aygfsteel.com/conans/articles/325053.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 02 Jul 2010 03:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/conans/articles/325053.html</guid><description><![CDATA[<p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;"><span style="font-family: 宋体;">架构演变W一步:物理分离</span>webserver<span style="font-family: 宋体;">和数据库</span></span></span></strong></p> <p><span style="font-family: 宋体;">最开始,׃某些xQ于是在互联|上搭徏 了一个网站,q个时候甚x可能L都是U借的Q但׃q篇文章我们只关注架构的演变历程Q因此就假设q个时?/span> <span style="font-family: 宋体;">已经是托了一C机,q且有一定的带宽了,q个时候由于网站具备了一定的特色Q吸引了 部分问,逐渐你发现系l的压力来高Q响应速度来慢Q而这个时候比较明昄是数据库和应用互相媄响,应用出问题了Q数据库也很Ҏ出现问题Q? 数据库出问题的时候,应用也容易出问题Q于是进入了W一步演变阶D:应用和数据库从物理上分,变成了两台机器,q个时候技术上没有什么新的要求,但你 发现实起到效果了,pȝ又恢复到以前的响应速度了,q且支撑住了更高的流量,q且不会因ؓ数据库和应用形成互相的媄响?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/1.PNG" height="99" width="195" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">q一步架构演变对技术上的知识体pd本没? 要求?/span><span><br /> <br /> </span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;">架构演变W二步:增加面~存</span></span></strong></p> <p><span style="font-family: 宋体;">好景不长Q随着讉K的h来多Q你发现? 应速度又开始变慢了Q查扑֎因,发现是访问数据库的操作太多,D数据q接竞争Ȁ烈,所以响应变慢,但数据库q?/span> <span style="font-family: 宋体;">接又不能开太多Q否则数据库机器压力会很高,因此考虑采用~存机制来减数据库q接资源 的竞争和Ҏ据库ȝ压力Q这个时候首先也怼选择采用</span>squid <span style="font-family: 宋体;">{类似的机制来将pȝ中相寚w态的面Q例如一两天才会有更新的面Q进行缓存(当然Q也可以采用? 面静态化的方案)Q这L序上可以不做修改Q就能够</span> <span style="font-family: 宋体;">很好的减对</span>webserver<span style="font-family: 宋体;">的压力以及减数据库q接资源的竞争,</span>OK<span style="font-family: 宋体;">Q于是开始采?/span>squid<span style="font-family: 宋体;">来做相对静态的面的缓存?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/2.PNG" height="156" width="195" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">前端面~存技术,例如</span>squid<span style="font-family: 宋体;">Q如想用好的话还得深入掌握下</span>squid<span style="font-family: 宋体;">的实现方式以及缓存的失效法 {?/span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;">架构演变W三步:增加面片段~存</span></span></strong></p> <p><span style="font-family: 宋体;">增加?/span>squid<span style="font-family: 宋体;">做缓存后Q整体系l的速度实是提 升了Q?/span>webserver<span style="font-family: 宋体;">的压力也开始下降了Q但随着讉K量的增加Q发现系l又开始变的有些慢了,在尝</span> <span style="font-family: 宋体;">C</span>squid<span style="font-family: 宋体;">之类的动态缓存带来的好处后,开始想能不能让现在那些动态页面里相对静态的部分也缓存v来呢Q因此? 虑采用类?/span>ESI<span style="font-family: 宋体;">? cȝ面片段~存{略Q?/span>OK<span style="font-family: 宋体;">Q于是开始采?/span>ESI<span style="font-family: 宋体;">来做动态页面中相对静态的片段部分的缓存?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/3.PNG" height="235" width="337" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">面片段~存技术,例如</span>ESI<span style="font-family: 宋体;">{,想用好的话同样需要掌?/span>ESI<span style="font-family: 宋体;">的实现方式等Q?/span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;">架构演变W四步:数据~存</span></span></strong></p> <p><span style="font-family: 宋体;">在采?/span>ESI<span style="font-family: 宋体;">之类的技术再ơ提高了pȝ的缓存效? 后,pȝ的压力确实进一步降低了Q但同样Q随着讉K量的增加Q系l还是开始变慢,l过查找Q可能会发现p?/span> <span style="font-family: 宋体;">l中存在一些重复获取数据信息的地方Q像获取用户信息{,q个时候开始考虑是不是可以将 q些数据信息也缓存v来呢Q于是将q些数据~存到本地内存,改变完毕后,完全W合预期Q系l的响应速度又恢复了Q数据库的压力也再度降低了不?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/4.PNG" height="258" width="341" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">~存技术,包括?/span>Map<span style="font-family: 宋体;">数据l构、缓存算法、所选用的框架本 w的实现机制{?/span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;"><span style="font-family: 宋体;">架构演变W五步:</span> <span style="font-family: 宋体;">增加</span>webserver</span></span></strong></p> <p><span style="font-family: 宋体;">好景不长Q发现随着pȝ讉K量的再度增加Q?/span>webserver<span style="font-family: 宋体;">机器的压力在高峰期会? 升到比较高,q个时候开始考虑增加一?/span>webserver<span style="font-family: 宋体;">Q这也是Z同时解决可用性的问题Q避免单台的</span><span>webserver down</span><span style="font-family: 宋体;">机的话就没法使用了,在做了这些考虑后,军_增加一?/span>webserver<span style="font-family: 宋体;">Q增加一?/span>webserver<span style="font-family: 宋体;">Ӟ会碰C些问题,? 型的有:</span><span><br /> 1</span><span style="font-family: 宋体;">、如何让讉K分配到这两台机器上,q个时候通常会考虑的方案是</span>Apache<span style="font-family: 宋体;">自带的负载均衡方案,?/span>LVS<span style="font-family: 宋体;">q类的Y件负载均衡方案;</span><span><br /> 2</span><span style="font-family: 宋体;">、如何保持状态信息的同步Q例如用?/span>session<span style="font-family: 宋体;">{,q个时候会考虑的方案有? 入数据库、写入存储?/span>cookie<span style="font-family: 宋体;">或同?/span>session<span style="font-family: 宋体;">信息{机制等Q?/span><span><br /> 3</span><span style="font-family: 宋体;">、如何保持数据缓存信息的同步Q例如之前缓存的用户数据{,q个时候? 怼考虑的机制有~存同步或分布式~存Q?/span><span><br /> 4</span><span style="font-family: 宋体;">、如何让上传文gq些cM的功能l正常,q个时候通常会考虑的机制是 使用׃n文gpȝ或存储等Q?/span><span><br /> </span><span style="font-family: 宋体;">在解决了q些问题后,l于是把</span>webserver<span style="font-family: 宋体;">增加Z两台Q系l终于是 又恢复到了以往的速度?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/5.PNG" height="244" width="341" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">负蝲均衡技术(包括但不限于g负蝲均衡? 软g负蝲均衡、负载算法?/span>linux<span style="font-family: 宋体;">转发协议、所选用的技术的实现l节{)、主备技术(包括但不限于</span>ARP<span style="font-family: 宋体;">ƺ骗?/span><span>linux heart-beat</span><span style="font-family: 宋体;">{)、状态信息或~存同步技术(包括但不限于</span>Cookie<span style="font-family: 宋体;">技术?/span>UDP<span style="font-family: 宋体;">协议、状态信息广播、所选用的缓存同 步技术的实现l节{)、共享文件技术(包括但不限于</span>NFS<span style="font-family: 宋体;">{)、存储技术(包括但不限于存储讑֤{)?/span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;">架构演变W六步:分库</span></span></strong></p> <p><span style="font-family: 宋体;">享受了一D|间的pȝ讉K量高速增长的q福 后,发现pȝ又开始变慢了Q这ơ又是什么状况呢Q经q查找,发现数据库写入、更新的q些操作的部分数据库q接?/span> <span style="font-family: 宋体;">资源竞争非常Ȁ烈,D了系l变慢,q下怎么办呢Q此时可选的Ҏ有数据库集群和分库策 略,集群斚w像有些数据库支持的ƈ不是很好Q因此分库会成ؓ比较普遍的策略,分库也就意味着要对原有E序q行修改Q一通修改实现分库后Q不错,目标辑ֈ 了,pȝ恢复甚至速度比以前还快了?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/6.PNG" height="243" width="341" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">q一步更多的是需要从业务上做合理的划分, 以实现分库,具体技术细节上没有其他的要求;</span></p> <p><font face="宋体">但同旉着数据量的增大和分库的q行Q在数据库的设计、调优以及维护上需? 做的更好Q因此对q些斚w的技术还是提Z很高的要求的?/font></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;"><span style="font-family: 宋体;">架构演变W七步:分表?/span>DAL<span style="font-family: 宋体;">和分布式~存</span></span></span></strong><span><br /> </span><span style="font-family: 宋体;">随着pȝ的不断运行,数据量开始大q度增长Q这个时候发现分库后查询仍然 会有些慢Q于是按照分库的思想开始做分表的工作,当然Q这不可避免的会需要对E序</span> <span style="font-family: 宋体;">q行一些修改,也许在这个时候就会发现应用自p兛_分库分表的规则等Q还是有些复? 的,于是萌生能否增加一个通用的框架来实现分库分表的数据访问,q个?/span>ebay<span style="font-family: 宋体;">的架构中对应的就?/span>DAL<span style="font-family: 宋体;">Q这个演变的q程相对而言需要花费较长的旉Q当Ӟ也有可能q个通用的框架会{到分表做完后才开 始做Q同Ӟ在这个阶D可</span> <span style="font-family: 宋体;">能会发现之前的缓存同步方案出现问题,因ؓ数据量太大,D现在不太可能缓存存在本 圎ͼ然后同步的方式,需要采用分布式~存Ҏ了,于是Q又是一通考察和折,l于是将大量的数据缓存{Ud分布式缓存上了?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/7.PNG" height="439" width="342" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">分表更多的同h业务上的划分Q技术上涉及 到的会有动?/span>hash<span style="font-family: 宋体;">法?/span><span>consistent hash</span><span style="font-family: 宋体;">法{;</span></p> <p>DAL<span style="font-family: 宋体;">涉及到比较多的复杂技术,例如数据库连接的理Q超时、异常)、数据库操作的控Ӟ时、异常)、分 库分表规则的装{;</span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;"><span style="font-family: 宋体;">架构演变W八步:增加更多?/span>webserver</span></span></strong></p> <p><span style="font-family: 宋体;">在做完分库分表这些工作后Q数据库上的压力 已经降到比较低了Q又开始过着每天看着讉K量暴增的q福生活了,H然有一天,发现pȝ的访问又开始有变慢的趋?/span> <span style="font-family: 宋体;">了,q个时候首先查看数据库Q压力一切正常,之后查看</span>webserver<span style="font-family: 宋体;">Q发?/span>apache<span style="font-family: 宋体;">d了很多的hQ而应用服? 器对每个h也是比较快的Q看?/span> <span style="font-family: 宋体;">是请求数太高D需要排队等待,响应? 度变慢,q还好办Q一般来_q个时候也会有些钱了,于是d一?/span>webserver<span style="font-family: 宋体;">服务器,在这个添?/span> webserver<span style="font-family: 宋体;">服务器的q程Q有可能会出现几U挑战:</span><span><br /> 1</span><span style="font-family: 宋体;">?/span>Apache<span style="font-family: 宋体;">的Y负蝲?/span>LVS<span style="font-family: 宋体;">软负载等无法承担巨大?/span>web<span style="font-family: 宋体;">讉K量(hq接数、网l流量等Q的调度了,q个时候如果经费允许的话,会采取的Ҏ是购</span> <span style="font-family: 宋体;">买硬件负载,例如</span>F5<span style="font-family: 宋体;">?/span>Netsclar<span style="font-family: 宋体;">?/span>Athelon<span style="font-family: 宋体;">之类的,如经费不允许的话Q会采取的方案是应用从逻辑上做一定的分类Q然后分散到不同的Y负蝲? 中Q?/span><span><br /> 2</span><span style="font-family: 宋体;">、原有的一些状态信息同步、文件共享等Ҏ可能会出现瓶颈,需要进行改 q,也许q个时候会Ҏ情况~写W合|站业务需求的分布式文件系l等Q?/span><span><br /> </span><span style="font-family: 宋体;">在做完这些工作后Q开始进入一个看似完的无限伸羃的时代,当网站流量增 加时Q应对的解决Ҏ是不断的添?/span>webserver<span style="font-family: 宋体;">?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/8.PNG" height="441" width="466" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">Cq一步,随着机器数的不断增长、数据量 的不断增长和对系l可用性的要求来高Q这个时候要求对所采用的技术都要有更ؓ深入的理解,q要根据网站的需求来做更加定制性质的品?/span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;">架构演变W九步:数据d分离和廉价存储方?/span></span></strong></p> <p><span style="font-family: 宋体;">H然有一天,发现q个完美的时代也要结? 了,数据库的噩梦又一ơ出现在眼前了,׃d?/span>webserver<span style="font-family: 宋体;">太多了,D数据库连接的资源q是不够用,而这个时候又已经分库分表了,开始分析数据库的压力状况, 可能会发现数据库的读写比很高Q这个时候通常会想到数据读写分ȝҎQ当Ӟq个Ҏ要实现ƈ?/span> <span style="font-family: 宋体;">ҎQ另外,可能会发C些数据存储在数据库上有些费Q或者说q于占用数据库资源,? 此在q个阶段可能会Ş成的架构演变是实现数据读写分,同时~写一些更为廉L存储ҎQ例?/span>BigTable<span style="font-family: 宋体;">q种?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/9.PNG" height="398" width="555" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">数据d分离要求Ҏ据库的复制?/span>standby<span style="font-family: 宋体;">{策略有深入的掌握和理解Q? 同时会要求具备自行实现的技术;</span></p> <p><span style="font-family: 宋体;">廉h存储Ҏ要求?/span>OS<span style="font-family: 宋体;">的文件存储有深入的掌握和理解Q同时要 求对采用的语a在文件这块的实现有深入的掌握?/span></p> <p><strong><span style="font-family: 宋体;"><span style="font-size: 14pt;">架构演变W十步:q入大型分布式应用时代和廉h服务器群梦想时代</span></span></strong></p> <p><span style="font-family: 宋体;">l过上面q个漫长而痛苦的q程Q终于是再度 q来了完的时代Q不断的增加</span>webserver<span style="font-family: 宋体;">可以支撑越来越高的讉K量了Q对于大型网站而言Qh气的重要?/span> <span style="font-family: 宋体;">庸置疑,随着人气的越来越高,各种各样的功能需求也开始爆发性的增长Q这个时候突然发 玎ͼ原来部v?/span>webserver<span style="font-family: 宋体;">上的那个</span>web<span style="font-family: 宋体;">应用已经非常庞大</span> <span style="font-family: 宋体;">了, 当多个团队都开始对其进行改动时Q可真是相当的不方便Q复用性也相当p糕Q基本是每个团队都做了或多或重复的事情Q而且部v和维护也是相当的ȝQ?/span> <span style="font-family: 宋体;">因ؓ庞大的应用包?/span>N<span style="font-family: 宋体;">台机器上复制、启动都需要耗费不少的时_出问题的时候也不是很好查,另外一个更p糕的状冉|很有 可能会出现某个应用上?/span>bug<span style="font-family: 宋体;">导</span> <span style="font-family: 宋体;">致了全站都不可用Q还有其他的像调优不好操作(因ؓ? 器上部v的应用什么都要做Q根本就无法q行针对性的调优Q等因素Q根据这L分析Q开始痛下决心,?/span> <span style="font-family: 宋体;">pȝҎ职责q行拆分Q于是一个大型的分布式应用就诞生了,通常Q这个步骤需要耗费相当 长的旉Q因Z到很多的挑战:</span><span><br /> 1</span><span style="font-family: 宋体;">、拆成分布式后需要提供一个高性能、稳定的通信框架Qƈ且需要支持多U? 不同的通信和远E调用方式;</span><span><br /> 2</span><span style="font-family: 宋体;">、将一个庞大的应用拆分需要耗费很长的时_需要进行业务的整理和系l? 依赖关系的控制等Q?/span><span><br /> 3</span><span style="font-family: 宋体;">、如何运l_依赖理、运行状늮理、错误追t、调优、监控和报警{) 好这个庞大的分布式应用?/span><span><br /> </span><span style="font-family: 宋体;">l过q一步,差不多系l的架构q入相对E_的阶D,同时也能开始采用大? 的廉h器来支撑着巨大的访问量和数据量Q结合这套架构以及这么多ơ演变过E吸取的l验来采用其他各U各LҎ来支撑着来高的访问量?/span></p> <p><span style="font-family: 宋体;">看看q一步完成后pȝ的图C:</span></p> <p><span><!--[if gte vml 1]> <![endif]--><img alt="" src="../../images/blogjava_net/bluedavy/arch/10.PNG" height="431" width="554" /><br /> <!--[if gte mso 9]><![endif]--></span></p> <p><span style="font-family: 宋体;">q一步涉及到了这些知识体p:</span></p> <p><span style="font-family: 宋体;">q一步涉及的知识体系非常的多Q要求对? 信、远E调用、消息机制等有深入的理解和掌握,要求的都是从理论、硬件、操作系l以及所采用的语a的实现都有清楚的理解?/span></p> <p><span style="font-family: 宋体;">q维q块涉及的知识体pM非常的多Q多数情 况下需要掌握分布式q行计算、报表、监控技术以及规则策略等{?/span></p> <p><span style="font-family: 宋体;">说v来确实不怎么费力Q整个网站架构的l典演变q程都和上面比较的类|当然Q每步采取的ҎQ演? 的步骤有可能有不同,另外Q由于网站的业务不同Q会有不同的专业技术的需求,q篇</span>blog<span style="font-family: 宋体;">更多的是从架构的角度来讲解演变的q程Q当Ӟ其中q有很多的技术也未在此提及,像数据库集群、数 据挖掘、搜索等Q但在真实的演变q程中还会借助像提升硬仉|、网l环境、改造操作系l?/span>CDN<span style="font-family: 宋体;">镜像{来支撑更大的流量,因此在真实的发展q程中还会有很多的不同,另外一个大型网站要做到的远q? 不仅仅上面这些,q有像安全、运l、运营、服务、存储等Q要做好一个大型的|站真的很不ҎQ写q篇文章更多的是希望能够引出更多大型|站架构演变的介 l,</span>:)<span style="font-family: 宋体;">?/span></p> <br /> ps:最后附上几LiveJournal架构演变的文章:<br /> 从LiveJournal后台发展看大规模|站性能优化Ҏ<br /> http://blog.zhangjianfeng.com/article/743    <br /> 另外从这里:http://www.danga.com/words/大家可以扑ֈ更多关于现在LiveJournal|站架构的介l? <img src ="http://www.aygfsteel.com/conans/aggbug/325053.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/conans/" target="_blank">CONAN</a> 2010-07-02 11:23 <a href="http://www.aygfsteel.com/conans/articles/325053.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ޭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̺</a>| <a href="http://" target="_blank">«ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ҳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӥ̶</a>| <a href="http://" target="_blank">ȳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">μ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">԰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǡ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƹ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԫ</a>| <a href="http://" target="_blank">μԴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¸</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">괨</a>| <a href="http://" target="_blank">ͼ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>