??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码一区东京热久久 ,亚洲va在线va天堂va不卡下载 ,亚洲日本VA午夜在线影院http://www.tkk7.com/czihong/category/50909.htmlzh-cnThu, 16 May 2013 10:15:52 GMTThu, 16 May 2013 10:15:52 GMT60Java MVC 比较http://www.tkk7.com/czihong/articles/398790.htmlChan ChenChan ChenSat, 04 May 2013 08:21:00 GMThttp://www.tkk7.com/czihong/articles/398790.htmlhttp://www.tkk7.com/czihong/comments/398790.htmlhttp://www.tkk7.com/czihong/articles/398790.html#Feedback0http://www.tkk7.com/czihong/comments/commentRss/398790.htmlhttp://www.tkk7.com/czihong/services/trackbacks/398790.html阅读全文

Chan Chen 2013-05-04 16:21 发表评论
]]>
计算500万PV/每天的网?/title><link>http://www.tkk7.com/czihong/articles/398789.html</link><dc:creator>Chan Chen</dc:creator><author>Chan Chen</author><pubDate>Sat, 04 May 2013 08:00:00 GMT</pubDate><guid>http://www.tkk7.com/czihong/articles/398789.html</guid><wfw:comment>http://www.tkk7.com/czihong/comments/398789.html</wfw:comment><comments>http://www.tkk7.com/czihong/articles/398789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/czihong/comments/commentRss/398789.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/czihong/services/trackbacks/398789.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">Refer to: </span><a >http://elf8848.iteye.com/blog/967049</a><br /><span style="font-size: medium;">你想一个能承受500万PV/每天的网站吗Q?500万PV是什么概念?服务器每U要处理多少个请求才能应对?如果计算呢? <br /><br /><strong>PV是什么:</strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">PV是page view的简写。PV是指面的访问次敎ͼ?/span><span style="font-size: medium;">打开或刷?/span><span style="font-size: medium;">一ơ页面,q做一个pv?nbsp;<br /><br /><strong>计算模型Q?nbsp;</strong><br />每台服务器每U处理请求的数量=((80%*总PV?/(24时*60?60U?40%)) / 服务器数??br />其中关键的参数是80%?0%。表CZ天中?0%的请求发生在一天的40%的时间内?4时?0%?.6时Q有80%的请求发生一天的9.6个小时当中(很适合互联|的应用Q白天请求多Q晚上请求少Q?nbsp;<br /></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;"><strong>单计的l果Q?/strong><br />((80%*500?/(24时*60?60U?40%))/1 = 115.7个请?U?nbsp;<br />((80%*100?/(24时*60?60U?40%))/1 = 23.1个请?U?nbsp;<br /><br /><strong>初步l论Q?/strong> <br />现在我们在做压力试Ӟ有了标准,如果你的服务器一U能处理115.7个请求,可以承?00万PV/每天。如果你的服务器一U能处理23.1个请求,可以承?00万PV/每天</span><span style="font-size: medium;">?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;"><strong>留余量Q?/strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">以上h数量</span><span style="font-size: medium;">?/span><span style="font-size: medium;">均匀的分布在白天?.6个小时中Q但实际情况q不会这么均匀的分布,会有高峰有低谗ؓ了应寚w峰时D,</span><span style="font-size: medium;">应该留一些余圎ͼ最也要x2倍,x3倍也不ؓq?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">115.7个请?U?nbsp;*2?231.4</span><span style="font-size: medium;">个请?U?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">115.7个请?U?nbsp;*3</span><span style="font-size: medium;">?/span><span style="font-size: medium;">=347.1</span><span style="font-size: medium;">个请?U?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">23.1个请?U?nbsp;*2</span><span style="font-size: medium;">?/span><span style="font-size: medium;">=46.2</span><span style="font-size: medium;">个请?U?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">23.1个请?U?nbsp;*3</span><span style="font-size: medium;">?/span><span style="font-size: medium;">=</span><span style="font-size: medium;">69.3</span><span style="font-size: medium;">个请?U?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><strong style="font-size: medium;">最l结论:</strong></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">如果你的服务器一U能处理</span><span style="font-size: medium;">231.4--</span><span style="font-size: medium;">347.1</span><span style="font-size: medium;">个请?U?/span><span style="font-size: medium;">Q就可以应对q_500万PV/每天?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">如果你的服务器一U能处理</span><span style="font-size: medium;">46.2--</span><span style="font-size: medium;">69.3</span><span style="font-size: medium;">个请求,可?/span><span style="font-size: medium;">应对q_100万PV/每天</span><span style="font-size: medium;">?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;"><strong>说明Q?/strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">q里说明每秒N个请求,是QPS。因为我兛_的是应用E序处理业务的能力?nbsp;</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;"><strong>实际l验Q?/strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">1、根据实际经验,采用两台常规配置的机架式服务器,配置是很常见的配|,例如一?核CPU+4G内存+服务器SAS盘</span><span style="font-size: medium;">?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">2、个人武断的认ؓ在服务器CPU领域Intel的CPU要优于AMD</span><span style="font-size: medium;">的CPU</span><span style="font-size: medium;">Q有反对的就反对吧,我都说我武断了(L</span><a style="color: #108ac6; font-size: medium;">CPU性能比较</a><span style="font-size: medium;">Q,不要太相信AMD的广告,比较CPU性能单办法就是比hQ不要比频率与核心数Qh格相差不多的性能也相差不多?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">3、硬盘的性能很重要,由其是数据库服务器。一般的服务器都?/span><span style="font-size: medium;">1.5万{的SAS盘Q高U一点的可以配SSD固态硬盘,性能会更好。最最最最重要的指标是“随机d性能”而不?#8220;序d性能”。(本例q是配置最常见?/span><span style="font-size: medium;">1.5万{的SAS盘?/span><span style="font-size: medium;">Q?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">4、一台服务器跑Tomcatq行j2eeE序,一台服务器跑MySql数据?E序写的中等水^(q个真的不好量化)Q是</span><span style="font-size: medium;">论坛cd的应?L回帖,不太Ҏ做缓?也无法静态化)?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">5、以上Yg情况下,是可以承?00万PV/每天的?已留有余量应对突然的讉K高峰)</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;"><strong>注意机房的网l带宽:</strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">有h说以上条件我都满了Q但实际性能q是达不到目标。这时请注意你对外的|络的带宽,在国内服务器便宜但带宽很贵,很可能你在机房是与大家共享一?00M的光U,实际每个人可分到2M左右带宽。再好一?M,再好一点双U机?0M独nQ这已经</span><span style="font-size: medium;">很贵</span><span style="font-size: medium;">了(北京hQ?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: small;"><span style="font-size: medium;">一天L量:每个面20k字节*100万个面/1024=19531M字节=19G字节Q?/span></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: small;"><span style="font-size: medium;">19531M/9.6时=2034M/时=578K字节/s   如果h是均匀分布的,需?M</span></span><span style="font-size: small;">Q?/span><span style="font-size: medium;">640K字节</span><span style="font-size: medium;">Q?/span><span style="font-size: medium;">带宽Q?Mb=640KB 注意大小写,b是位QB是字节,差了8倍)</span><span style="font-size: medium;">Q但所有请求不可能是均匀分布的,当有高峰?M带宽一定不够,X2倍就?0M带宽?/span><span style="font-size: medium;">10M带宽</span><span style="font-size: medium;">基本可以满要求?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">以上是假设每个页?0k字节Q基本不包含囄Q要?/span><span style="font-size: medium;">包含</span><span style="font-size: medium;">囄更大了Q?0M</span><span style="font-size: medium;">带宽</span><span style="font-size: medium;">也不能满求了。你自已计算吧?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;">Q全文完Q?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"> </p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;"><strong>附:性能试基本概念</strong><br />--------------------------------------------------------------------------------------- <br /><strong>基本概念Q?/strong> <br />ThroughputQ吞吐量Q:按照常规理解|络吞吐量表C在单位旉内通过|卡数据量之和,其中卛_括本机网卡发送出ȝ数据量也包括本机|卡接收到的数据量?一?00Mb(?的双工网卡,最大发送数据的速度?2.5M字节/s Q?/span> <span style="font-size: medium;">最大接收数据的速度?2.5M字节/sQ?/span> <span style="font-size: medium;">可以</span> <strong><span style="font-size: medium;">同时</span> <span style="font-size: medium;">收发</span> </strong><span style="font-size: medium;">数据?nbsp;</span><br /><span style="font-size: medium;">q发用户敎ͼ是同时执行操作的用户(U程??nbsp;<br />响应旉Q从h发出到收到响应花费的旉 ?/span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.1875px; background-color: #ffffff;"><span style="font-size: medium;"><br />QPS </span><span style="font-size: medium;">- Queries Per Second  </span><span style="font-size: medium;">每秒处理的查询数Q如果是数据库,q当于dQ?br />TPS </span><span style="font-size: medium;">- Transactions Per Second  </span><span style="font-size: medium;">每秒处理的事务数(如果是数据库Q就相当于写入、修?<br />IOPSQ每U磁盘进行的I/O操作ơ数<br /><br />例如Ҏ个数据库试Q分开两次QPS与TPS?br />QPSQ读取)值L高于TPS(写、改)Qƈ且有倍率关系Q因为:<br />1、数据库Ҏ询可能有~存?br />2、机械硬盘或SSD盘的读是比写快?/span> <span style="font-size: medium;"><br />--------------------------------------------------------------------------------------- <br /><strong>JMeter试参数说明Q?/strong> <br /><br />LabelQ每一个测试单元的名字?nbsp;<br /><br />#SamplesQ表CZ个测试单元一共发Z多少个请求?nbsp;<br /><br />AverageQ^均响应时?#8212;—默认情况下是单个 Request 的^均响应时_当用了 Transaction Controller Ӟ也可以以Transaction 为单位显C^均响应时间。,不重要?nbsp;<br /><br />MedianQ中位数Q也是 50Q?用户的响应时_如果把响应时间从到大顺序排序,那么50Q的h的响应时间在q个范围之内。重要?nbsp;<br /><br />90% LineQ?0Q?用户的响应时_如果把响应时间从到大顺序排序,那么90Q的h的响应时间在q个范围之内?span style="color: #ff0000;">重要</span> ?nbsp;<br /><br />MinQ最响应时_不重要?nbsp;<br /><br />MaxQ最大响应时_出现几率只不q是千分之一甚至万分之一Q不重要?nbsp;<br /><br />Error%Q本ơ测试中出现错误的请求的数量 <br /><br />ThroughputQ吞吐量——默认情况下表C每U完成的h敎ͼRequest per SecondQ,当用了 Transaction Controller Ӟ也可以表C类?LoadRunner ?Transaction per Second ?nbsp;<br /><br />KB/SecQ每U从服务器端<span style="color: #ff0000;">接收</span> 到的数据?只是接收)Q相当于LoadRunner中的Throughput/Sec <br />--------------------------------------------------------------------------------------- <br /><strong>loadrunner试参数说明Q?/strong> <br /><br /><strong>响应旉Q?/strong> ?0%|如果把响应时间从到大顺序排序,那么90Q的h的响应时间在q个范围之内。重要?nbsp;<br /><br /><strong>每秒点击?/strong> Qhits per Second,每秒钟向服务器提交请求的数量?nbsp;<br /><br /><strong>TPSQ?/strong> Transaction per Second Q每U事务数Q一个事务是指一个客h向服务器发送请求然后服务器做出反应的过E?nbsp;<br /><br /><strong>ThroughputQ吞吐量Q:</strong> Loadrunner记录的Throughput是接收到服务器返回的所有字节数之和Q与本地发出的字节数无关?nbsp;<br /><br /><strong>Throughput/SecQ?/strong> 每秒的吞吐量?nbsp;<br /><br />对于BS架构的一般分?响应旉、点ȝ、吞吐量、TPSQ每U事务数Q?nbsp;<br />对于CS架构的一般分?TPSQ每U事务数Q?nbsp;</span></p><img src ="http://www.tkk7.com/czihong/aggbug/398789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/czihong/" target="_blank">Chan Chen</a> 2013-05-04 16:00 <a href="http://www.tkk7.com/czihong/articles/398789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>静态技术详?/title><link>http://www.tkk7.com/czihong/articles/396950.html</link><dc:creator>Chan Chen</dc:creator><author>Chan Chen</author><pubDate>Mon, 25 Mar 2013 02:29:00 GMT</pubDate><guid>http://www.tkk7.com/czihong/articles/396950.html</guid><wfw:comment>http://www.tkk7.com/czihong/comments/396950.html</wfw:comment><comments>http://www.tkk7.com/czihong/articles/396950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/czihong/comments/commentRss/396950.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/czihong/services/trackbacks/396950.html</trackback:ping><description><![CDATA[     摘要: Refer to: http://www.cnblogs.com/funnyking/archive/2010/05/26/1744834.html一. 什么是静态化在此之前Q我们好多的Z知道什么是静态化Q说得简单点Q就是把所有不?htm或?html的页面改?htm或?html。我们在处理Ҏ上,有静态化和伪静态方法,希望大家不要把两者؜Z潭。当然更不要把他和纯静?..  <a href='http://www.tkk7.com/czihong/articles/396950.html'>阅读全文</a><img src ="http://www.tkk7.com/czihong/aggbug/396950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/czihong/" target="_blank">Chan Chen</a> 2013-03-25 10:29 <a href="http://www.tkk7.com/czihong/articles/396950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DALhttp://www.tkk7.com/czihong/articles/382970.htmlChan ChenChan ChenThu, 12 Jul 2012 22:41:00 GMThttp://www.tkk7.com/czihong/articles/382970.htmlhttp://www.tkk7.com/czihong/comments/382970.htmlhttp://www.tkk7.com/czihong/articles/382970.html#Feedback0http://www.tkk7.com/czihong/comments/commentRss/382970.htmlhttp://www.tkk7.com/czihong/services/trackbacks/382970.htmldata access layer (DAL) in computer software, is a layer of a computer program which provides simplified access to data stored in persistent storage of some kind, such as anentity-relational database.

For example, the DAL might return a reference to an object (in terms of object-oriented programming) complete with its attributes instead of a row of fields from a database table. This allows the client (or user) modules to be created with a higher level of abstraction. This kind of model could be implemented by creating a class of data access methods that directly reference a corresponding set of database stored procedures. Another implementation could potentially retrieve or write records to or from a file system. The DAL hides this complexity of the underlying data store from the external world.

For example, instead of using commands such as insertdelete, and update to access a specific table in a database, a class and a few stored procedures could be created in the database. The procedures would be called from a method inside the class, which would return an object containing the requested values. Or, the insert, delete and update commands could be executed within simple functions like registeruser or loginuser stored within the data access layer.

Also, business logic methods from an application can be mapped to the Data Access Layer. So, for example, instead of making a query into a database to fetch all users from several tables the application can call a single method from a DAL which abstracts those database calls.

Applications using a data access layer can be either database server dependent or independent. If the data access layer supports multiple database types, the application becomes able to use whatever databases the DAL can talk to. In either circumstance, having a data access layer provides a centralized location for all calls into the database, and thus makes it easier to port the application to other database systems (assuming that 100% of the database interaction is done in the DAL for a given application).

Object-Relational Mapping tools provide data layers in this fashion, following the active record model. The ORM/active-record model is popular with web frameworks.



Chan Chen 2012-07-13 06:41 发表评论
]]>
Round Robin http://www.tkk7.com/czihong/articles/378241.htmlChan ChenChan ChenTue, 15 May 2012 18:57:00 GMThttp://www.tkk7.com/czihong/articles/378241.htmlhttp://www.tkk7.com/czihong/comments/378241.htmlhttp://www.tkk7.com/czihong/articles/378241.html#Feedback0http://www.tkk7.com/czihong/comments/commentRss/378241.htmlhttp://www.tkk7.com/czihong/services/trackbacks/378241.html轮叫调度QRound-Robin SchedulingQ?/span>
  轮叫调度QRound Robin SchedulingQ算法就是以轮叫的方式依ơ将h调度不同的服务器Q即每次调度执行i = (i + 1) mod nQƈ选出Wi台服务器。算法的优点是其z性,它无需记录当前所有连接的状态,所以它是一U无状态调度?/span>
  在系l实现时Q我们引入了一个额外条Ӟ当服务器的权gؓ零时Q表C服务器不可用而不被调度。这样做的目的是服务器切出服务Q如屏蔽服务器故障和pȝl护Q,同时与其他加权算法保持一致。所以,法要作相应的改动,它的法程如下Q?/span>
  轮叫调度法程
  假设有一l服务器S = {S0, S1, …, Sn-1}Q一个指C变量i表示上一ơ选择?/span>
  服务器,W(Si)表示服务器Si的权倹{变量i被初始化为n-1Q其中n > 0?/span>
  j = i;
  do {
  j = (j + 1) mod n;
  if (W(Sj) > 0) {
  i = j;
  return Si;
  }
  } while (j != i);
  return NULL;
  轮叫调度法假设所有服务器处理性能均相同,不管服务器的当前q接数和响应速度。该法相对单,不适用于服务器l中处理性能不一的情况,而且当请求服务时间变化比较大Ӟ轮叫调度法ҎD服务器间的负载不q?/span>
  虽然Round-Robin DNSҎ也是以轮叫调度的方式一个域名解析到多个IP地址Q但轮叫DNSҎ的调度粒度是Z每个域名服务器的Q域名服务器对域名解析的~存会妨轮叫解析域名生效,q会D服务器间负蝲的严重不q。这里,IPVS轮叫调度法的粒度是Z每个q接的,同一用户的不同连接都会被调度C同的服务器上Q所以这U细_度的轮叫调度要比DNS的轮叫调度优很多?/span>

~辑本段Round-robin

  RTX51 Tiny可以配置成?/span>round-robin多Q务。Round-robin容许quasi-parallel执行多Q务。Q务ƈ不是q箋执行的,而是分时间片执行的(可用的CPU旉被分成时间片QRTX51 Tiny把时间片分配l各个Q务)。时间片的时间很短(以毫Uؓ单位Q,所以Q务看h像连l执行一栗Q务在分配l他的时间片内执行(除非攑ּQ。然后切换到下一个就l的d。这个时间片在RTX51 Tiny Configuration.配置文g中定?
  下面的例子是一个用round-robin多Q务的RTX51 Tiny的程序。这个程序中的两个Q务都是@环计数器。RTX51 Tiny执行UCؓjob0的Q?。这个函数创Z另一个Q务job1。Job0执行完它的时间片后,RTX51 Tiny开始执行job1。Job1执行完它的时间片后,RTX51 Tiny又返回到job0开始执行。然后再切换到job1Q如此@环?/span>
  Qinclude
  int counter0;
  int counter1;
  void job0 (void) _task_ 0 {
  os_create (1); /* mark task 1 as ready */
  while (1) { /* loop forever */
  counter0++; /* update the counter */
  }
  }
  void job1 (void) _task_ 1 {
  while (1) { /* loop forever */
  counter1++; /* update the counter */
  }
  }
  注意Q除了一个Q务的时片到时Q也可以使用函数os_wait 或函数os_switch_task通知RTX51 Tiny可以切换到另一个Q务。函数os_wait挂v当前d直到特定的事件发生。在q期间Q何其他的d都可以执行?/span>
  Cooperative d切换??如果你禁止了round-robin多Q务,你必设计ƈ执行你的d从而让他你们以cooperativ方式工作。特别地Q你必须在每个Q务的某个地方调用。这些函数告知RTX51 Tiny切换到另一d?/span>
  函数os_wait 和函数os_switch_task的不同之处在于os_wait可以让你的Q务等待某一事g的发生,而函数os_switch_task直接切换到另一个准务就l的d?/span>
  I闲d
  当没有Q务需要运行时QRTX51 Tiny执行I闲d。空闲Q务只是一个简单的无限循环Q比如:
  SJMP $
  有些8051器g提供了空闲模式,通过持vd的执行以降低功耗,直到出现中断。在q种模式下,所有外围设备包括中断系l仍然在l箋工作?/span>
  RTX51 Tiny允许你在I闲d中初始化I闲模式Q没有其他Q务需要执行)。当RTX51 Tiny旉节拍中断Q或M其他中断Q出玎ͼ微控制器恢复执行E序。空闲Q务执行的代码可以通过配置文gCONF_TNY.A51q行配置q?/span>
  堆栈理
  RTX51 Tiny?051的IDATA内存Zؓ每个dl持一个堆栈。当一个Q务执行时Q给他准备了最大可能需要地堆栈。当d切换Ӟ前一个Q务的堆栈被压栈ƈ重定位,而把当前d的堆栈被重定位ƈҎ。STACK是堆栈的起始地址。在q个例子中,位于堆栈中的对像包括全局变量Q寄存器和位地止内存Q剩下的内存用作d堆栈。内存的端在配|文件中定义?/span>

配置RTX51 Tiny?

  RTX51 Tiny可以由根据用L应用来定制?/span>
  配置
  RTX51 Tiny必须Ҏ你的嵌入式应用来配置。所有地配置参数都在椟置文gCONF_TNY.A51中,q个文g位于\KEIL\C51\RTXTINY2\文g夹中Q文件中的椟|选可以你做如下事情?/span>
  指定旉节拍中断寄存器组
  指定旉节拍间隔Q多?051机器周期Q?/span>
  指定在时钟节拍中断中执用的用户代?/span>
  指定round-robin溢出旉
  使能能round-robind切换
  指定你的应用E序包含了长旉的中?/span>
  指定是否使用了code banking
  定义RTX51 Tiny的栈?/span>
  指o需要最的堆栈I间
  指定堆栈错误时执行代?/span>
  定义I闲d操作
  CONF_TNY.A51的默认配|包含在RTX51 Tiny的库中。然而,要在q中用配|文Ӟ必须把配|文件拷贝到你的工程文g夹ƈd到工E中?/span>
  要定制RTX51 Tiny的配|,必须改变CONF_TNY.A51的设|?/span>
  注意Q?/span>
  如果在工E中不包括配|文Ӟ默认的配|文件将会自动地包含到工E中。后事存在库中的配置文g可能会对你的应用起到相反效果
  g旉
  以下参数指定了如何配|制RTX51 Tiny的配件时?/span>
  INT_REGBANK 指定制RTX51 Tiny旉中断使用的寄存器l,默认的是寄存器组1
  INT_CLOCK 指定旉产生中断前的周期数据。这个值的范围?000~65535。较的g生中断较快。这个值用来计时钟的重新装蝲|65536-INT_CLOCKQ。缺省值是10000?/span>
  HW_TIMER_CODE 是一个宏定义Q它用来指定在制RTX51 Tiny旉节拍中断中执的代码。这个宏~省的设|是从中断中q回QRETIQ如Q?/span>
  HW_TIMER_CODE MACRO
  ; Empty Macro by default
  RETI
  ENDM
  Round-robin
  Round-robin切换是默认能的Q以下参数用来设定Round-robin切换的时间或能Round-robin切换
  TIMESHARING 指定d在进行Round-robin切换前执行的RTX51 Tiny旉节拍数。当q个gؓ0时禁止Round-robin切换。缺省值是5个时钟节拍?/span>
  长时间中?/strong>
  一般情况下Q中断服务程序(ISRsQ都要求很快执行完毕。有时候,中断服务E序可能需执行很长一D|间。如果一个高优先U的中断执的旉过了节拍间隔,RTX51的时钟中断就可能被这个更高优先的中断中断了Qƈ且被以后的RTX51 旉中断重入了?/span>
  如果使用了需要运行很长时间的高优先中断Q就应该考虑减少中断服务E序的工作量Q改变RTX51 旉节拍的速率Q或考用以下配|?/span>
  LONG_USR_ISR 指定是否使用执行旉过旉节拍的中断。当q个值置?ӞRTX51 Tiny׃把保护RTX51 Tiny旉节拍中断重入的代码包含进厅R这个值缺省ؓ0
  Code banking
  以下讄指定RTX51 Tiny应用中是否用code banking
  CODE_BANKING |?使用code bankingQ清0不用code banking。缺省gؓ0
  注意QL51_BANK.A51?.2或更高版本需要RTX51 Tiny E序使用code banking
  堆栈
  堆栈的配|选项有几个。以下参指定了用于堆栈的内存I间的大和堆栈的最空间。当CPU的堆栈空间不够时用一个宏指定L行哪一D代码?/span>
  RAMTOP指定栈顶地址。最好不要修改这个地址除非你在q个堆栈的上面用了IDATA变量?/span>
  FREE_STACK指定堆栈上的最可用空间。当切换C个Q务是Ӟ如果RTX51 Tiny到可用的堆栈空间小于这个|STACK_ERROR宏就会被执行。置?禁止对堆栈的检查,~省gؓ20字节
  STACK_ERROR是一个宏Q它代表了一D在堆栈出现错误时执行的代码。这个宏的缺省代码ؓ能中断q进入一个无限@环。如
  STACK_ERROR MACRO
  CLR EA ; disable interrupts
  SJMP $ ; endless loop if stack space is exhausted
  ENDM
  I闲d
  没有d需要执行时QRTX51 Tiny执行空闲Q务。空闲Q务什么都不做Q只是等待RTX51 Tiny的时钟节拍中断ƈ切换到另一个就l的d。以下参数用来配|RTX51 TinyI闲d的不同方?/span>
  CPU_IDLE q是一个宏Q代表了在空闲Q务中执行的代码。缺省指令是讄寄存器PCON的空闲模式位。这样就可以通过挂vE序节省能耗。如
  CPU_IDLE MACRO
  ORL PCON,#1 ; set 8051 CPU to IDLE
  ENDM
  CPU_IDLE_CODE 指定CPU_IDLE宏在I闲d中是否执行。缺省gؓ0Q这L闲Q务将不包含CPU_IDLE?/span>
  库文?/strong>
  RTX51 Tiny包括两个库文?/span>
  RTX51TNY.LIB is used for non-banking RTX51 Tiny programs
  RTX51BT.LIB is used for code-banking RTX51 Tiny programs.
  The RTXTINY2.PRJ project found in the \KEIL\C51\RTXTINY2\SOURCECODE\ folder is used to build these two libraries.
  注意Q不需要在应用昑ּ地包含这两个文g。如果你使用μVision2 IDE或command-line linker时这两个文g会自动地包含q去?/span>
  如果要徏立RTX51 Tiny的库Q缺省的配置文g会加入进厅R如果不昑ּ地声明包含配|文Ӟ默认的配|文件会包含q去。以后对配置文g做的修改会对q产生意想不到的效果?/span>
  优化
  可以通过以下方式优化RTX51 TinyE序
  如果可能Q禁能round-robind切换。Round-robin需?3字节堆栈I间来存储Q务地址和所有寄存器。如果Q务切换是通过RTX51 Tinyq行时库Q比如os_wait?os_switch_taskQ来触发的就不需要这些空间了?/span>
  使用os_wait而不是用round-robin的时间耗尽来切换Q务。这些会提高pȝ的反应时间和d的反应速度
  避免把系l时钟节拍的中断速率讄太高。把旉溢出的时间设的比较短增加了每U的旉节拍C是减了每个ȝ可用旉Q因为每个时钟节拍中断会使用100-200个周期来q行。所以要把湔出时间设的够的从而减时钟节拍中断带来的副作用?/span>
  使用RTX51 Tiny
  要用RTX51 TinyQ必L功地生成RTX51E序q编译连接他?/span>
  ~写E序
  定义RTX51E序使用关键?_task_
  以RTX51TNY.H的模板用RTX51 Tiny的内?/span>
  包含文g
  RTX51 Tiny只需包含一个文件RTX51TNY.H。所有的q行时库来常量都在这个头文g中定义。可以采用以下方式包含它Q?/span>
  Qinclude <rtx51tny.h>
  ~程指南
  使用RTX51 Tiny~程旉遵@下规则:
  包含文grtx51tny.h
  不要创徏Cd敎ͼRTX51 Tiny有它自已的主要函?/span>
  E序臛_创徏一个Q?/span>
  E序必须臛_调用一ơRTX51 Tinyq行时库Q如os_waitQ。否则,q接器将不会把RTX51 Tiny库包含进?/span>
  d0是你的程序执行的W一d。必调用在d0中调用os_create_task函数来运行其他Q?/span>
  d怸q回或退出。Q务必M用while(1)或类似的l构。用os_delete_task函数可以挂v一个Q?/span>
  必须?#956;Vision2中或在连接编译命令行中指定RTX51 Tiny
  定义d
  实时或多d应用׃个或多个完成特定功能的Q务组成。RTX51 Tiny支持最?6个Q?/span>
  d必须是用_task_声明的C函数Q返回值和参数都必Lvoidcd的,?/span>
  void func (void) _task_ task_id
  q里
  func is the name of the task function.
  task_id is a task ID number from 0 to 15
  以下例子定义了函数job0作ؓ一个Q务,d~号??/span>
  void job0 (void) _task_ 0 {
  while (1) {
  counter0++; /* increment counter */
  }
  }
  注意Q所有的d都必通过循环实现Q而且怸q回 

Chan Chen 2012-05-16 02:57 发表评论
]]>
memcached协议http://www.tkk7.com/czihong/articles/373216.htmlChan ChenChan ChenSun, 01 Apr 2012 11:21:00 GMThttp://www.tkk7.com/czihong/articles/373216.htmlhttp://www.tkk7.com/czihong/comments/373216.htmlhttp://www.tkk7.com/czihong/articles/373216.html#Feedback0http://www.tkk7.com/czihong/comments/commentRss/373216.htmlhttp://www.tkk7.com/czihong/services/trackbacks/373216.html阅读全文

Chan Chen 2012-04-01 19:21 发表评论
]]>
RESTful HTTP的实?/title><link>http://www.tkk7.com/czihong/articles/373215.html</link><dc:creator>Chan Chen</dc:creator><author>Chan Chen</author><pubDate>Sun, 01 Apr 2012 10:56:00 GMT</pubDate><guid>http://www.tkk7.com/czihong/articles/373215.html</guid><wfw:comment>http://www.tkk7.com/czihong/comments/373215.html</wfw:comment><comments>http://www.tkk7.com/czihong/articles/373215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/czihong/comments/commentRss/373215.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/czihong/services/trackbacks/373215.html</trackback:ping><description><![CDATA[     摘要: 本文对RESTful HTTP的基原理做了一个概览,探讨了开发者在设计RESTful HTTP应用时所面的典型问题,展示了如何在实践中应用REST架构风格Q描qC常用的URI命名ҎQ讨Z如何使用l一接口q行资源交互Q何时用PUT或POST以及如何支持非CURD操作{。虽然REST受Web技术的影响很深Q但是理ZREST架构风格ql定在HTTP上。然而,HTTP是唯一与REST相关的实...  <a href='http://www.tkk7.com/czihong/articles/373215.html'>阅读全文</a><img src ="http://www.tkk7.com/czihong/aggbug/373215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/czihong/" target="_blank">Chan Chen</a> 2012-04-01 18:56 <a href="http://www.tkk7.com/czihong/articles/373215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SOAP Webservice和RESTful Webservicehttp://www.tkk7.com/czihong/articles/370774.htmlChan ChenChan ChenSat, 25 Feb 2012 09:21:00 GMThttp://www.tkk7.com/czihong/articles/370774.htmlhttp://www.tkk7.com/czihong/comments/370774.htmlhttp://www.tkk7.com/czihong/articles/370774.html#Feedback0http://www.tkk7.com/czihong/comments/commentRss/370774.htmlhttp://www.tkk7.com/czihong/services/trackbacks/370774.htmlRefer to: http://blog.sina.com.cn/s/blog_493a845501012566.html
REST是一U架构风|其核心是面向资源QREST专门针对|络应用设计和开发方式,以降低开发的复杂性,提高pȝ的可伸羃性。REST提出设计概念和准则ؓQ?/span>

1.|络上的所有事物都可以被抽象ؓ资源(resource)
2.每一个资源都有唯一的资源标?resource identifier)Q对资源的操作不会改变这些标?/span>
3.所有的操作都是无状?/span>?/span>

REST化开发,其架构遵循CRUD原则Q该原则告诉我们对于资源(包括|络资源)只需要四U行为:创徏Q获取,更新和删除就可以完成相关的操作和处理。您可以通过l一资源标识W(Universal Resource IdentifierQURIQ来识别和定位资源,q且针对q些资源而执行的操作是通过 HTTP 规范定义的?/span>其核心操作只有GET,PUT,POST,DELETE?/span>

׃REST强制所有的操作都必Lstateless的,q就没有上下文的U束Q如果做分布式,集群都不需要考虑上下文和会话保持的问题。极大的提高pȝ的可伸羃性?/span>

对于SOAP Webservice和Restful Webservice的选择问题Q首先需要理解就?/span>SOAP偏向于面向活动,有严格的规范和标准,包括安全Q事务等各个斚w的内容,同时SOAP操作Ҏ和操作对象的分离Q有WSDL文g规范和XSD文g分别对其定义。而REST面向资源Q只要我们要操作的对象可以抽象ؓ资源卛_以用REST架构风格?/span>

如果从这个意义上Ԍ是否使用REST需要考虑资源本n的抽象和识别是否困难Q如果本w就是简单的cM增删Ҏ的业务操作,那么抽象资源比较容易,而对于复杂的业务zd抽象资源q不是一个简单的事情。比如校验用LU,转̎Q事务处理等Q这些往往q不Ҏ单的抽象源?/span>

其次如果有严格的规范和标准定义要求,而且前期规范标准需要指导多个业务系l集成和开发的时候,SOAP风格׃有清晰的规范标准定义是明显有优势的。我们可以在开始和实现之前׃格定义相关的接口Ҏ和接口传输数据?/span>

单数据操作,无事务处理,开发和调用单这些是使用REST架构风格的优ѝ而对于较为复杂的面向zd的服务,如果我们q是使用RESTQ很多时候都是仍然是传统的面向活动的思想通过转换工具再{换得到REST服务Q这U用方式是没有意义的?/span>

正如另外一文章里面谈到的Q?/span>REST核心是url和面向资源,url代替了原来复杂的操作Ҏ。REST允许我们通过url设计pȝQ就像测试驱动开发用测试用例设计类接口一栗所有可以被抽象源的东西都可以用RESTful的urlQ当我们以传l的用SOAP方式实现的一个查询订单服务的时候可以看刎ͼq个服务首先存在输入的查询条Ӟ然后才是输出l果集。那么对于类似场景要使用RESTQ?/span>不可避免的会传l的SOAP服务拆分Z个HTTP POST操作和一个HTTP GET操作。前面是输入Q而后面是输出?/span>

使用REST的关键是如何抽象资源Q抽象的精,对REST的应用越?/span>。如何进行抽象,面向资源的设计和传统的面向结构和对象设计区别Q资源和对象Q数据库表之间的差别是另外一个在分析设计时候要考虑的问题。在REST分析设计中如何改变传l的SOAP分析设计思想又是一个重要问题?/span>

下文转蝲自:http://hi.baidu.com/gaohong230/blog/item/cd3924396bc7332fb9998f52.html

在SOA的基技术实现方式中WebService占据了很重要的地位,通常我们提到WebServiceW一x是SOAP消息在各U传输协议上交互。近几年REST的思想伴随着SOA逐渐被大家接受,同时各大|站不断开放API提供l开发者,也激起了REST风格WebService的热潮?/span>

SOAP

什么是SOAPQ我想不用多_google一把满眼都是。其实SOAP最早是针对RPC的一U解x案,单对象访问协议,很轻量,同时作ؓ应用协议可以Z多种传输协议来传递消息(Http,SMTP{)。但是随着SOAP作ؓWebService的广泛应用,不断地增加附加的内容Q得现在开发h员觉得SOAP很重Q用门槛很高。在SOAP后箋的发展过E中QWS-*一pd协议的制定,增加了SOAP的成熟度Q也lSOAP增加了负担?/span>

REST

REST其实q不是什么协议也不是什么标准,而是Http协议的设计初衷作了诠释,在Http协议被广泛利用的今天Q越来越多的是将其作Z输协议,而非原先设计者所考虑的应用协议。SOAPcd的WebService是最好的例子QSOAP消息完全是Http协议作ؓ消息承蝲Q以至于对于Http协议中的各种参数Q例如编码,错误码等Q都|之不顾。其实,最轻量U的应用协议是Http协议。Http协议所抽象的get,post,put,delete好比数据库中最基本的增删改查,而互联网上的各种资源好比数据库中的记录Q可能这么比M是很好)Q对于各U资源的操作最后L能抽象成四种基本操作Q在定义了定位资源的规则以后Q对于资源的操作通过标准的Http协议可以实玎ͼ开发者也会受益于q种轻量U的协议?/span>

REST的思想归结以下有如下几个关键点Q?/span>

1Q面向资源的接口设计

所有的接口设计都是针对资源来设计的Q也很cM于我们的面向对象和面向过E的设计区别Q只不过现在网l上的操作实体都作ؓ资源来看待,同时URI的设计也是体C对于资源的定位设计。后面会提到有一些网站的API设计说是REST设计Q其实是RPC-REST的؜合体Qƈ非是REST的思想?/span>

2Q抽象操作ؓ基础的CRUD

q点很简单,Http中的get,put,post,delete分别对应了read,update,create,delete四种操作Q如果仅仅是作ؓ对于资源的操作,抽象成ؓq四U已l够了Q但是对于现在的一些复杂的业务服务接口设计Q可能这L抽象未必能够满。其实这也在后面的几个网站的API设计中暴露了q样的问题,如果要完全按照REST的思想来设计,那么适用的环境将会有限制Q而非放之四v皆准的?nbsp;     

3QHttp是应用协议而非传输协议

q点在后面各大网站的API分析中有很明昄体现Q其实有些网站已l走CSOAP的老\上,说是REST的理念设计,其实是作了一套私有的SOAP协议Q因此称之ؓREST风格的自定义SOAP协议?/span>

4Q无状态,自包?/span>

q点其实不仅仅是对于REST来说的,作ؓ接口设计都需要能够做到这点,也是作ؓ可扩展和高效性的最基本的保证,q是用SOAP的WebService也是一栗?/span>

SOAP Webservice和RESTful Webservice的比?/span>

成熟?ȝ来说SOAP在成熟度上优于REST)

SOAP虽然发展到现在已l脱M初衷Q但是对于异构环境服务发布和调用Q以及厂商的支持都已l达C较ؓ成熟的情c不同^収ͼ开发语a之间通过SOAP来交互的web service都能够较好的互通(在部分复杂和Ҏ的参数和q回对象解析上,协议没有作很l致的规定,Dq是需要作部分修正Q?/span>

REST国外很多大网站都发布了自q开发APIQ很多都提供了SOAP和REST两种Web ServiceQ根据调查部分网站的REST风格的用情况要高于SOAP。但是由于REST只是一U基于Http协议实现资源操作的思想Q因此各个网站的REST实现都自有一套,在后面会讲诉各个大网站的REST API的风根{也正是因ؓq种各自实现的情况,在性能和可用性上会大大高于SOAP发布的web serviceQ但l一通用斚wq远不及SOAP。由于这些大|站的SP往往专注于此|站的API开发,因此通用性要求不高?/span>

׃没有cM于SOAP的权威性协议作范,REST实现的各U协议仅仅只能算是私有协议,当然需要遵循REST的思想Q但是这L节方面有太多没有U束的地斏VREST日后的发展所走向规范也会直接影响到这部分的设计是否能够有很好的生命力?/span>

效率和易用?REST更胜一{?

SOAP协议对于消息体和消息头都有定义,同时消息头的可扩展性ؓ各种互联|的标准提供了扩展的基础QWS-*pd是较ؓ成功的规范。但是也׃SOAP׃各种需求不断扩充其本n协议的内容,D在SOAP处理斚w的性能有所下降。同时在易用性方面以及学习成本上也有所增加?/span>

REST被h们的重视Q其实很大一斚w也是因ؓ光效以及简z易用的Ҏ。这U高效一斚w源于光向资源接口设计以及操作抽象简化了开发者的不良设计Q同时也最大限度的利用了Http最初的应用协议设计理念。同Ӟ在我看来RESTq有一个很吸引开发者的是能够很好的融合当前Web2.0的很多前端技术来提高开发效率。例如很多大型网站开攄REST风格的API都会有多U返回Ş式,除了传统的xml作ؓ数据承蝲Q还有(JSON,RSS,ATOMQ等形式Q这对很多网站前端开发h员来说就能够很好的mashup各种资源信息?/span>

安全性:

q点其实可以攑օ到成熟度中,不过在当前的互联|应用和q_开发设计过E中Q安全已l被提到了很高的高度Q特别是作ؓ外部接口l第三方调用Q安全性可能会高过业务逻辑本n?/span>

SOAP在安全方面是通过使用XML-Security和XML-Signature两个规范l成了WS-Security来实现安全控制的Q当前已l得C各个厂商的支持,.net Qphp Qjava 都已l对其有了很好的支持Q虽然在一些细节上q是有不兼容的问题,但是互通基本上是可以的Q?/span>

REST没有M规范对于安全斚w作说明,同时现在开放REST风格API的网站主要分成两U,一U是自定义了安全信息装在消息中Q其实这和SOAP没有什么区别)Q另外一U就是靠gSSL来保?但是q只能够保证点到点的安全Q如果是需要多点传输的话SSL无能ؓ力了。安全这块其实也是一个很大的问题Q今q在BEAC上看到有演示采用SAML2实现的网站间SSOQ其实是直接采用了XML-Security和XML-SignatureQ效率看h也不是很高。未来REST规范化和通用化过E中的安全是否也会采用这两种规范Q是未知的,但是加入的越多,REST失去它高效性的优势多?/span>

应用设计与改造:

我们的系l要么就是已l有了那些需要被发布出去的服务,要么是刚刚设计好的服务Q但是开发h员的传统设计思想让REST的Ş式被接受q需要一Ҏ间。同时在资源型数据服务接口设计上来说按照REST的思想来设计相Ҏ说要Ҏ一些,而对于一些复杂的服务接口来说Q可能强要去按照REST的风格来设计会有些牵强。这一点其实可以看看各大网站的接口可以知道,很多|站q要传入function的名UC为参敎ͼq就明显已经q背了REST本n的设计思\。而SOAP本n是面向RPC来设计的Q开发h员十分容易接受,所以不存在什么适应的过E。ȝ来说Q其实还是一个老观念,适合的才是最好的

技术没有好坏,只有是不是合适,一U好的技术和思想被误用了Q那么就会得到反效果。REST和SOAP各自都有自己的优点,同时如果在一些场景下如果L造RESTQ其实就会走向SOAPQ例如安全)?/span>

REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高Q但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语a的,对于安全性要求较高的接口设计带来便利。所以我觉得Ua说什么设计模式将会占据主导地位没有什么意义,关键q是看应用场景?/span>

同时很重要一点就是不要扭曲了REST现在很多|站都跟风去开发REST风格的接口,其实都是在学其ŞQ不知其心,最后弄得不伦不c,性能上不去,安全又保证不了,徒有一个看D摸象L皮囊?/span>

Chan Chen 2012-02-25 17:21 发表评论
]]>
~译器工作原?/title><link>http://www.tkk7.com/czihong/articles/370624.html</link><dc:creator>Chan Chen</dc:creator><author>Chan Chen</author><pubDate>Thu, 23 Feb 2012 14:25:00 GMT</pubDate><guid>http://www.tkk7.com/czihong/articles/370624.html</guid><wfw:comment>http://www.tkk7.com/czihong/comments/370624.html</wfw:comment><comments>http://www.tkk7.com/czihong/articles/370624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/czihong/comments/commentRss/370624.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/czihong/services/trackbacks/370624.html</trackback:ping><description><![CDATA[     摘要: ~译器,是将便于人编写,阅读Q维护的高计算a译机能识别,q行的低U机器语a的程序。编译器源E序QSource programQ作入,译产生使用目标语言QTarget languageQ的{hE序。源E序一般ؓ高语言QHigh-level languageQ,如PascalQC++{,而目标语a则是汇编语言或目标机器的目标代码QObject codeQ,有时也称作机器代码(M...  <a href='http://www.tkk7.com/czihong/articles/370624.html'>阅读全文</a><img src ="http://www.tkk7.com/czihong/aggbug/370624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/czihong/" target="_blank">Chan Chen</a> 2012-02-23 22:25 <a href="http://www.tkk7.com/czihong/articles/370624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是RESThttp://www.tkk7.com/czihong/articles/370515.htmlChan ChenChan ChenWed, 22 Feb 2012 05:21:00 GMThttp://www.tkk7.com/czihong/articles/370515.htmlhttp://www.tkk7.com/czihong/comments/370515.htmlhttp://www.tkk7.com/czihong/articles/370515.html#Feedback0http://www.tkk7.com/czihong/comments/commentRss/370515.htmlhttp://www.tkk7.com/czihong/services/trackbacks/370515.html什么是RESTQ?/strong>

REST (REpresentation State Transfer) 描述了一个架构样式的|络pȝQ比?web 应用E序。它首次出现?2000 q?Roy Fielding 的博士论文中Q他?HTTP 规范的主要编写者之一?strong style="font-weight: bold; text-align: center; background-color: yellow; ">REST 指的是一l架构约束条件和原则?/strong>满q些U束条g和原则的应用E序或设计就?RESTful?/span>

Web 应用E序最重要?REST 原则是,客户端和服务器之间的交互在请求之间是无状态的?span style="background-color: yellow; ">从客L到服务器的每个请求都必须包含理解h所必需的信?/span>。如果服务器在请求之间的M旉炚w启,客户端不会得到通知?span style="background-color: yellow; ">此外Q无状态请求可以由M可用服务器回{,q十分适合云计之cȝ环境。客L可以~存数据以改q性能?/span>

在服务器端,应用E序状态和功能可以分ؓ各种资源。资源是一个有的概念实体Q它向客L公开。资源的例子有:应用E序对象、数据库记录、算法等{?/span>?span style="background-color: yellow; ">每个资源都?URI (Universal Resource Identifier) 得到一个惟一的地址。所有资源都׃nl一的界面,以便在客L和服务器之间传输状态。用的是标准的 HTTP ҎQ比?GET、PUT、POST ?DELETE。Hypermedia 是应用程序状态的引擎Q资源表C通过链接互联?/p>

另一个重要的 REST 原则是分层系l?/strong>Q这表示lg无法了解它与之交互的中间层以外的lg。通过系l知识限制在单个层,可以限制整个pȝ的复杂性,促进了底层的独立性?/span>

?REST 架构的约束条件作Z个整体应用时Q将生成一个可以扩展到大量客户端的应用E序。它q降低了客户端和服务器之间的交互延迟。统一界面化了整个pȝ架构Q改q了子系l之间交互的可见性?strong style="font-weight: bold; text-align: center; ">REST 化了客户端和服务器的实现?/strong>

RESTful的实玎ͼRESTful Web 服务?RPC 样式?Web 服务

了解了什么是什么是RESTQ我们再看看RESTful的实现。最q,使用 RPC 样式架构构徏的基?SOAP ?Web 服务成ؓ实现 SOA 最常用的方法。RPC 样式?Web 服务客户端将一个装满数据的信封Q包括方法和参数信息Q通过 HTTP 发送到服务器。服务器打开信封q用传入参数执行指定的Ҏ。方法的l果打包C个信ƈ作ؓ响应发回客户端。客L收到响应q打开信封?span style="background-color: yellow; ">每个对象都有自己独特的方法以及仅公开一?URI ?RPC 样式 Web 服务QURI 表示单个端点。它忽略 HTTP 的大部分Ҏ且仅支?POST Ҏ?/span>

׃轻量U以及通过 HTTP 直接传输数据的特性,Web 服务?RESTful Ҏ已经成ؓ最常见的替代方法。可以用各U语aQ比?Java E序、Perl、Ruby、Python、PHP ?Javascript[包括 Ajax]Q实现客L。RESTful Web 服务通常可以通过自动客户端或代表用户的应用程序访问。但是,q种服务的简便性让用户能够与之直接交互Q用它们的 Web 览器构Z?GET URL q读取返回的内容?/p>

?REST 样式?Web 服务中,每个资源都有一个地址。资源本w都是方法调用的目标Q方法列表对所有资源都是一L。这些方法都是标准方法,包括 HTTP GET、POST、PUT、DELETEQ还可能包括 HEADER ?OPTIONS?/span>

?RPC 样式的架构中Q关注点在于ҎQ而在 REST 样式的架构中Q关注点在于资源 —— 用标准方法检索ƈ操作信息片段Q用表C的形式Q。资源表CŞ式在表示形式中用超链接互联?/p>

Leonard Richardson ?Sam Ruby 在他们的著作 RESTful Web Services 中引入了术语 REST-RPC 混合架构。REST-RPC 混合 Web 服务不用信包装方法、参数和数据Q而是直接通过 HTTP 传输数据Q这?REST 样式?Web 服务是类似的。但是它不用标准的 HTTP Ҏ操作资源。它?HTTP h?URI 部分存储Ҏ信息。好几个知名?Web 服务Q比?Yahoo ?Flickr API ?del.icio.us API 都用这U؜合架构?/p>

RESTful的实玎ͼRESTful Web 服务?Java 框架

有两?Java 框架可以帮助构徏 RESTful Web 服务。erome Louvel ?Dave Pawson 开发的 RestletQ见 参考资料)是轻量的。它实现针对各种 RESTful pȝ的资源、表C、连接器和媒体类型之cȝ概念Q包?Web 服务。在 Restlet 框架中,客户端和服务器都是组件。组仉过q接器互盔R信。该框架最重要的类是抽象类 Uniform 及其具体的子c?RestletQ该cȝ子类是专用类Q比?Application、Filter、Finder、Router ?Route。这些子c能够一起处理验证、过滤、安全、数据{换以及将传入h路由到相应资源等操作。Resource cȝ成客L的表CŞ式?/p>

JSR-311?Sun Microsystems 的规范,可以为开?RESTful Web 服务定义一l?Java API。Jersey是对 JSR-311 的参考实现?/p>

JSR-311 提供一l注释,相关cd接口都可以用来将 Java 对象作ؓ Web 资源展示。该规范假定 HTTP 是底层网l协议。它使用注释提供 URI 和相应资源类之间的清晰映,以及 HTTP Ҏ?Java 对象Ҏ之间的映。API 支持q泛?HTTP 实体内容cdQ包?HTML、XML、JSON、GIF、JPG {。它q将提供所需的插件功能,以允怋用标准方法通过应用E序d其他cd?/p>

RESTful的实玎ͼ构徏 RESTful Web 服务的多层架?/strong>

RESTful Web 服务和动?Web 应用E序在许多方面都是类似的。有时它们提供相同或非常cM的数据和函数Q尽客L的种cM同。例如,在线电子商务分类|站为用h供一个浏览器界面Q用于搜索、查看和订购产品。如果还提供 Web 服务供公司、零售商甚至个h能够自动订购产品Q它非常有用。与大部分动?Web 应用E序一PWeb 服务可以从多层架构的x点分M受益。业务逻辑和数据可以由自动客户端和 GUI 客户端共享。惟一的不同点在于客户端的本质和中间层的表C层。此外,从数据访问中分离业务逻辑可实现数据库独立性,qؓ各种cd的数据存储提供插件能力?/p>

?1 展示了自动化客户端,包括 Java 和各U语a~写的脚本,q些语言包括 Python、Perl、Ruby、PHP 或命令行工具Q比?curl。在览器中q行且作?RESTful Web 服务消费者运行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都属于此列,因ؓ它们都代表用户以自动化样式运行。自动化 Web 服务客户端在 Web 层向 Resource Request Handler 发?HTTP 响应。客L的无状态请求在头部包含Ҏ信息Q即 POST、GET、PUT ?DELETEQ这又将映射?Resource Request Handler 中资源的相应操作。每个请求都包含所有必需的信息,包括 Resource Request Handler 用来处理h的凭据?/p>

?Web 服务客户端收到请求之后,Resource Request Handler 从业务逻辑层请求服务。Resource Request Handler 定所有概忉|的实体Q系l将q些实体作ؓ资源公开Qƈ为每个资源分配一个惟一?URI。但是,概念性的实体在该层是不存在的。它们存在于业务逻辑层。可以?Jersey 或其他框Ӟ比如 RestletQ实?Resource Request HandlerQ它应该是轻量的,大量职责工作委托给业务层?/p>

Ajax ?RESTful Web 服务本质上是互ؓ补充的。它们都可以利用大量 Web 技术和标准Q比?HTML、JavaScript、浏览器对象、XML/JSON ?HTTP。当然也不需要购买、安装或配置M主要lg来支?Ajax 前端?RESTful Web 服务之间的交互。RESTful Web 服务?Ajax 提供了非常简单的 API 来处理服务器上资源之间的交互?/p>

?1 中的 Web 览器客L作ؓ GUI 的前端,使用表示层中?Browser Request Handler 生成?HTML 提供昄功能。Browser Requester Handler 可以使用 MVC 模型QJSF、Struts ?Spring 都是 Java 的例子)。它从浏览器接受hQ从业务逻辑层请求服务,生成表示q对览器做出响应。表CZ用户在浏览器中显CZ用。表CZ仅包含内容,q包含显C的属性,比如 HTML ?CSS?/p>

多层 Web 应用E序环境? src= 

业务规则可以集中C务逻辑层,该层充当表示层和数据讉K层之间的数据交换的中间层。数据以域对象或值对象的形式提供l表C层。从业务逻辑层中解?Browser Request Handler ?Resource Request Handler 有助于促q代码重用,q能实现灉|和可扩展的架构。此外,׃来可以使用新的 REST ?MVC 框架Q实现它们变得更加容易,无需重写业务逻辑层?/p>

数据讉K层提供与数据存储层的交互Q可以?DAO 设计模式或者对?关系映射解决ҎQ如 Hibernate、OJB ?iBATISQ实现。作为替代方案,业务层和数据讉K层中的组件可以实Cؓ EJB lgQƈ取得 EJB 容器的支持,该容器可以ؓlg生命周期提供便利Q管理持久性、事务和资源配置。但是,q需要一个遵?Java EE 的应用服务器Q比?JBossQ,q且可能无法处理 Tomcat。该层的作用在于针对不同的数据存储技术,从业务逻辑中分L据访问代码。数据访问层q可以作接其他系l的集成点,可以成ؓ其他 Web 服务的客L?/p>

数据存储层包括数据库pȝ、LDAP 服务器、文件系l和企业信息pȝQ包括遗留系l、事务处理系l和企业资源规划pȝQ。用该架构Q您可以开始看?RESTful Web 服务的力量,它可以灵zd成ؓM企业数据存储的统一 APIQ从而向以用户ؓ中心?Web 应用E序公开垂直数据Qƈ自动化批量报告脚本?/p>

什么是RESTQ结束语

REST 描述了一个架构样式的互联pȝQ如 Web 应用E序Q。REST U束条g作ؓ一个整体应用时Q将生成一个简单、可扩展、有效、安全、可靠的架构。由于它ѝ轻量以及通过 HTTP 直接传输数据的特性,RESTful Web 服务成ؓZ SOAP 服务的一个最有前途的替代Ҏ。用?web 服务和动?Web 应用E序的多层架构可以实现可重用性、简单性、可扩展性和lg可响应性的清晰分离。Ajax ?RESTful Web 服务本质上是互ؓ补充的。开发h员可以轻松?Ajax ?RESTful Web 服务一起创Z富的界面?/p>

Chan Chen 2012-02-22 13:21 发表评论
]]>
վ֩ģ壺 պѸһëƬ| ߹ۿɫëƬ| ˾Ʒձ| þþƷ޾Ʒ| ޳ַ| ҹAV| Ƶ߹ۿƵ| AVպAV߳ר| 99ƷƵ| ؼëƬѹۿƵ| þѾƷav| ĻӰԺѹۿ| Сӵ߹ۿ| վɫƵѿ½ | վƵ| ˾ҹƷƵ߹ۿ| AVһլɫӰ| վ߹ۿ| Ƶ| ɫҳѹۿ| ŷ޹Ʒ㽶| ߹ۿ| ŮƵվa| þ99׾Ʒ| ĻƵ| ۺһ| þþþavӰ| վ߹ۿ| պѲ| йѹۿ߹ۿ| 123Һ| 77777ҹþö| þ޹Ʒ| ޾ƷƷ벻| ձþþѸ| һĻ | 99þù-99þù| һƵۿ| ޹ۺϾƷ| ˳ɵӰ߲| Ļ|