ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>91精品综合久久,精品一区亚洲,日韩欧美在线中字http://www.aygfsteel.com/wealupa/archive/2016/08/07/431487.html常言½W?/dc:creator>常言½W?/author>Sun, 07 Aug 2016 09:50:00 GMThttp://www.aygfsteel.com/wealupa/archive/2016/08/07/431487.htmlhttp://www.aygfsteel.com/wealupa/comments/431487.htmlhttp://www.aygfsteel.com/wealupa/archive/2016/08/07/431487.html#Feedback0http://www.aygfsteel.com/wealupa/comments/commentRss/431487.htmlhttp://www.aygfsteel.com/wealupa/services/trackbacks/431487.html1、ä‹É用jedis的原生JedisCluster

spring的applicationContext.xml配置redis的连接、连接池、jedisCluster Bean
     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
             <property name="locations">
                 <list>
                      <value>classpath:redis.properties</value>
                 </list>
             </property>
     </bean>

     <!-- redis config start -->
    <!-- redis pool config -->
    <bean id="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
        <property name="maxTotal"  value="${redis.maxActive}" />
        <property name="maxIdle"   value="${redis.maxIdle}" />
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
    </bean>

    <!-- jedisCluster config -->
    <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg index="0">
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host1}"/>
                    <constructor-arg type="int" value="${redis.port1}"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg type="String" value="${redis.host2}"/>
                    <constructor-arg type="int" value="${redis.port2}"/>
                </bean>
            </set>
        </constructor-arg>
        <constructor-arg index="1" ref="genericObjectPoolConfig" />
    </bean>
    <!-- redis config end -->
redis.properties的配¾|®ï¼š
#redis config
redis.maxActive=1000
redis.maxIdle=10
redis.maxWaitMillis=30000
redis.testOnBorrow=true

#redis host and port config
redis.host1=192.168.1.2
redis.port1=6379
redis.host2=192.168.1.2
redis.port2=6380

jedisClusterçš„ä‹É用:

@Autowired
private JedisCluster jedisClust;
2、自定义spring工厂¾cȝ”Ÿäº§jedisCluster

JedisClusterFactory.java

package com.www.core.utils;

import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Pattern;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

public class JedisClusterFactory implements FactoryBean<JedisCluster>, InitializingBean {

    private String address;

    private JedisCluster jedisCluster;
    private Integer timeout;
    private Integer maxRedirections;
    private GenericObjectPoolConfig genericObjectPoolConfig;
    
    private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$");

    @Override
    public JedisCluster getObject() throws Exception {
        return jedisCluster;
    }

    @Override
    public Class<? extends JedisCluster> getObjectType() {
        return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);
    }

    @Override
    public boolean isSingleton() {
        return true;
    }



    private Set<HostAndPort> parseHostAndPort() throws Exception {
        try {
            String[] addressArr=address.trim().split(",");
            Set<HostAndPort> haps = new HashSet<HostAndPort>();
            for(String addressStr:addressArr){
                String[] ipAndPort = addressStr.trim().split(":");
                HostAndPort hap = new HostAndPort(ipAndPort[0].trim(), Integer.parseInt(ipAndPort[1].trim()));
                haps.add(hap);
            }
            
            return haps;
        } catch (IllegalArgumentException ex) {
            throw ex;
        } catch (Exception ex) {
            throw new Exception("解析 jedis é…ç½®æ–‡äšgå¤ÞpÓ|", ex);
        }
    }
    
    @Override
    public void afterPropertiesSet() throws Exception {
        Set<HostAndPort> haps = this.parseHostAndPort();
        
        jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig);
        
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    public void setMaxRedirections(int maxRedirections) {
        this.maxRedirections = maxRedirections;
    }



    /**
     * @Param String address to set
     
*/
    public void setAddress(String address) {
        this.address = address;
    }

    public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {
        this.genericObjectPoolConfig = genericObjectPoolConfig;
    }

}
spring的applicationContext.xml配置redis的连接池和工厂bean
 <!-- redis˜qžæŽ¥é…ç½® start-->
    
    <bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" >
            <property name="maxIdle" value="${redis.maxIdle}"/>
            <property name="maxTotal" value="${redis.maxTotal}"/>
            <property name="minIdle" value="${redis.minIdle}" />
    </bean>
    
    <!-- redis˜qžæŽ¥é…ç½® end-->
    
    <bean id="jedisCluster" class="com.www.core.utils.JedisClusterFactory">
        <property name="address" value="${redis.adress}" />
        <property name="timeout" value="${redis.timeout}" />
        <property name="maxRedirections" value="${redis.maxRedirections}"  />
        <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />
    </bean>
redis.properties配置
#redis config
redis.maxTotal=200
redis.maxIdle=50
redis.minIdle=10

#redis host and port config
redis.adress=192.168.1.2:6379,192.168.1.2:6380,192.168.1.2:6381
redis.timeout=300000
redis.maxRedirections=6

jedisClusterçš„ä‹É用:

@Autowired
private JedisCluster jedisCluster;


]]>
Redis 3.X版本引入了集¾Ÿ¤çš„æ–°ç‰¹æ€§çš„三种用法http://www.aygfsteel.com/wealupa/archive/2016/08/07/431486.html常言½W?/dc:creator>常言½W?/author>Sun, 07 Aug 2016 09:32:00 GMThttp://www.aygfsteel.com/wealupa/archive/2016/08/07/431486.htmlhttp://www.aygfsteel.com/wealupa/comments/431486.htmlhttp://www.aygfsteel.com/wealupa/archive/2016/08/07/431486.html#Feedback0http://www.aygfsteel.com/wealupa/comments/commentRss/431486.htmlhttp://www.aygfsteel.com/wealupa/services/trackbacks/431486.html一、利用Jedis来实çŽ?br />

        Set<HostAndPort>  jedisClusterNodes = new HashSet<HostAndPort>();

          //Jedis Cluster will attempt to discover cluster nodes automatically

         jedisClusterNodes.add(new HostAndPort("10.96.5.183",9001));

         jedisClusterNodes.add(new HostAndPort("10.96.5.183",9002));

         jedisClusterNodes.add(new HostAndPort("10.96.5.183",9003));

        JedisCluster jc = new JedisCluster(jedisClusterNodes);

二、利用spring-data-redis来实�br />

     <!--通过构造方法注入RedisNode-->

     <bean id="clusterRedisNodes1"   class="org.springframework.data.redis.connection.RedisNode"> 

            <constructor-arg value="10.96.5.183" />

           <constructor-arg value="9002" type="int" />

     </bean>

     ....

    <!--setter方式注入-->

    <bean id="redisClusterConfiguration"   class="org.springframework.data.redis.connection.RedisClusterConfiguration">

       <property name="clusterNodes">

              <set>

                        <ref bean="clusterRedisNodes1"/>

                       <ref bean="clusterRedisNodes2"/>

                       <ref bean="clusterRedisNodes3"/>

              </set>

       </property>
    </bean>

  <!--setter方式注入,对应的属性需存在setterXXXæ–ÒŽ³•-->


   <bean id="jedisPoolConfig"   class="redis.clients.jedis.JedisPoolConfig">

            <property name="maxToal" value="1000" />

           <property name="maxIdle" value="1000" />

           <property name="maxWaitMillis" value="1000" />

   </bean>

  <bean id="jedisConnFactory"   class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true">

           <constructor-arg ref="redisClusterConfiguration" />

           <constructor-arg ref="jedisPoolConfig" />

  </bean>

 <bean id="redisTemplate"   class="org.springframework.data.redis.core.RedisTemplate"  p:connection-factory-ref="jedisConnFactory" />

<!--setter方式注入PersonRepoImpl-->

<bean id="personRepo"  class="com.example.repo.impl.PersonRepoImpl">

       <property name="redisTemplate" ref="redisTemplate" />

</bean>

三、简单集成Spring

    è‡ªå·±¾~–写jedisCluster的工厂类JedisClusterFactory,然后通过Spring注入的方式获取jedisCluster,实现客户端ä‹É用Redis3.0版本的集¾Ÿ¤ç‰¹æ€§ã€?/p>



]]>
Perl、PHP、Python、Javaå’ŒRuby的比è¾?/title><link>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381724.html</link><dc:creator>常言½W?/dc:creator><author>常言½W?/author><pubDate>Thu, 28 Jun 2012 07:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381724.html</guid><wfw:comment>http://www.aygfsteel.com/wealupa/comments/381724.html</wfw:comment><comments>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wealupa/comments/commentRss/381724.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wealupa/services/trackbacks/381724.html</trackback:ping><description><![CDATA[<div>提问<br /><br />◆ Perl、Python、Rubyå’ŒPHP各自有何特点?<br /><br />◆ ä¸ÞZ»€ä¹ˆåŠ¨æ€è¯­­a€å¤šä½œä¸ø™½»é‡çñ”的解å†Ïx–¹æ¡?<br /><br />◆ LAMPä¸ÞZ»€ä¹ˆå—‹Æ¢è¿Ž?<br /><br />◆ Ruby on Railsä¸ÞZ»€ä¹ˆä¼š‹¹è¡Œ?<br /><br />◆ ¾~–程语言的发展趋势是什ä¹?<br /><br />讲解<br /><br />“剩下四种动态语­a€åQŒæˆ‘们将之归为后台脚本语­a€ã€?#8221;冒号说着ç”ÖMº†å¼ å›¾è¡?#8212;—<br /><br /><br /><br />引号听得仔细åQ?#8220;我记得您开始是把这些语­a€åˆ’分为C族静态语­a€ã€éžC族静态语­a€å’ŒåŠ¨æ€è¯­­a€ä¸‰ç±»çš„ã€?#8221;<br /><br />冒号解释åQ?#8220;那是按语法来划分的,偏重理论;现在是按应用来划分,偏重实践ã€?#8221;<br /><br />句号旋即联想刎ͼš“˜q™ç§åˆ†æ³•貌似三层架构——前台语言对应表现å±?òq›_°è¯­è¨€å’ŒåŽå°è„šæœ¬è¯­­a€å¯¹åº”业务逻辑å±?¾pȝ»Ÿè¯­è¨€å¯¹åº”数据层ã€?#8221;<br /><br />“çš?¼‹®æœ‰å‡ åˆ†¼œžä¼¼åQŒä½†åƒä¸‡ä¸å¯æ·äh·†ã€?#8221;冒号提醒道,“三层架构(three-layer architecture)是模块设计上的逻辑划分[1];而这里是按语­a€åº”用范围˜q›è¡Œçš„物理划åˆ?#8212;—与用户交互的是前台语­a€åQŒä¸Žæœºå™¨äº¤äº’的是¾pȝ»Ÿè¯­è¨€åQ?ä»‹äºŽå…¶ä¸­çš„äØ“å‰å°æä¾›æœåŠ¡åŒæ—¶åˆéœ€è¦åº•å±‚ç³»¾lŸæœåŠ¡çš„æ˜¯åŽå°è¯­­a€ã€?#8221;<br /><br />逗号询问åQ?#8220;后台语言又细分成òq›_°è¯­è¨€ä¸ŽåŽå°è„šæœ¬è¯­­a€?”<br /><br />“˜q?是基于程åº?program)与脚æœ?script)、静态与动态而分的ã€?#8221;冒号˜q›è¡Œè¯´æ˜ŽåQ?#8220;其实PerlåQŒPHPåQŒPythonå’ŒRuby都有自己的虚 拟机(virtual machine)åQŒä»Ž˜q™ç§æ„ä¹‰ä¸Šè¯´å®ƒä»¬ä¹Ÿå¯ä½œäØ“òq›_°è¯­è¨€ã€‚但在实际应用中åQŒå®ƒä»¬æ²¡æœ‰Javaòq›_°å’?NETòq›_°é‚£ç§æ•´åˆå‡èšåŠ›å’Œæ ¸å¿ƒä½œç”¨åQŒé€šå¸¸ä½œäؓ轻量¾U?的解å†Ïx–¹æ¡ˆã€?#8221;<br /><br />问号æƒÏxŽ¢ä¸ªç©¶ç«Ÿï¼š“˜q™æ˜¯ç”׃ºŽå®ƒä»¬éƒ½æ˜¯åŠ¨æ€è¯­­a€çš„缘故吗?”<br /><br />冒号回答åQ?#8220;理论上动态语­a€åŒæ ·èƒ½æ‰¿æ‹…大型应 用,但实践上它们多作为粘合语­a€æˆ–用于中ž®åž‹åº”用。用句时髦的话来形容åQŒæš‚时还是主‹¹çš„配角或非ä¸ÀLµçš„主角。毕竟在˜qè¡Œæ•ˆçŽ‡ã€ç±»åž‹å®‰å…¨ã€å¯ç”¨èµ„æºã€å¼€å‘å·¥ å…—÷€æŠ€æœ¯æ”¯æŒç­‰æ–šw¢åQŒå®ƒä»¬ä¸ŽJava、C#相比ž®šæœ‰ä¸€å®šå·®è·ã€‚另外它们同å±?#8216;草根’语言åQŒè™½æœ‰å¼€æºç¤¾åŒºçš„大力支持åQŒåœ¨å½±å“åŠ›ä¸Šä¸ŽåŽè€…æœªå¯åŒæ—¥è€Œè¯­ã€?#8221;<br /><br />叹号揣测åQ?#8220;说不定在不久的将来,动态语­a€ä¹Ÿä¼šæˆäØ“ä¸ÀLµçš„主角ã€?#8221;<br /><br />“ä¸?易时¿U»ï¼ŒŒDŠéš¾é€†æ–™ã€‚但有一点可以肯定,语言的发展趋势一定是动静¾l“åˆã€åˆšæŸ”åÆˆ‹¹Žã€?#8221;冒号断言åQ?#8220;一斚w¢ä»¥Javaå’ŒC#ä¸ÞZ»£è¡¨çš„静态语­a€ä¸­å«æŽ¥äº†åŠ¨æ€è¯­­a€ 的枝æ?另一斚w¢ä»¥Javaå’?NETä¸ÞZ»£è¡¨çš„òq›_°ä¸ŽåŠ¨æ€è¯­­a€çš„交壤地带也在逐步扩大。比如JRuby允许Ruby与Java之间互相调用åQŒç±»ä¼¼çš„˜q˜æœ‰ Jython、IronRuby、IronPython½{‰ç­‰ã€‚此外值得一提的是,动态语­a€æœ€‹z»è·ƒçš„舞台当数LAMPåQŒL-A-M-Pã€?#8221;<br /><br />引号接茬åQ?#8220;L是LinuxåQŒA是ApacheåQŒM是MySQLåQŒP是PHP。这四大¾l„äšg形成了一个完整的开源网¾lœå¼€å‘åã^台ã€?#8221;<br /><br />冒号补充道:“P也可指Perl、PythonåQŒç”šè‡³Rubyã€?#8221;<br /><br />逗号调侃åQ?#8220;可惜Rubyçš?#8216;R’æ¯?#8216;P’多了一根尾巴ã€?#8221;<br /><br />“æœ?äºÞZؓ了自圆其è¯ß_¼Œòq²è„†è®©P表示‘Programming language’åQŒè¿™ä¸‹æ‰€æœ‰è¯­­a€éƒ½å›Šæ‹¬å…¶ä¸­äº†ã€‚老外ž®±å–œ‹Æ¢çŽ©˜q™ç§é¦–字母羃ç•?acronym)的文字游戏,ž®¤å…¶LAMP正好˜q˜æœ‰‘ç?#8217;的含义,寓意开æº?世界的一盏明灯,他们一定更得意了ã€?#8221;冒号语带调笑åQ?#8220;前面我们曾提及,¾|‘络应用是生长动态语­a€æœ€è‚¥æ²ƒçš„土壤,而LAMPž®±æ˜¯˜q™å—土壤上搭建的òq›_°ã€‚作ä¸?¾|‘络òq›_°åQŒLAMP以其开攄¡µ‹z…R€å¼€å‘迅速、部¾|²æ–¹ä¾Ñ€é«˜å¯é…¾|®ã€å®‰å…¨å¯é ã€æˆæœ¬ä½Žå»‰ç­‰ç‰¹è‰²è€Œä¸ŽJavaòq›_°å’?NETòq›_°é¼Žèƒö三分åQŒå°¤å…¶å—中小企业的欢 ˜qŽã€‚LAMP中Linux是操作系¾lŸï¼ŒApache是Web服务器,MySQL是数据库¾pȝ»ŸåQŒè€Œæˆ‘们当下最兛_¿ƒçš„æ˜¯‘P族语­a€’åQšPHP、Perlã€?Python˜q˜æœ‰Rubyã€?#8221;<br /><br />é—®å·å»ø™®®åQ?#8220;ä½œäØ“åŠ¨æ€è¯­­a€åQŒå®ƒä»¬çš„共性上节课已经谈了不少åQŒèƒ½è¯´è¯´å®ƒä»¬çš„个性吗?”<br /><br />“它们 的个性极为鲜明:Perl凝练晦æÓ†åQŒPython优雅明晰åQŒRuby¾_‘Öéy灵动åQŒPHP½Ž€æ˜Žå•¾U¯ã€‚先看老大哥PerlåQŒå®ƒåšé‡‡ä¼—家之长åQŒç»¼åˆäº†C语言的结 构、sed的正则表辑ּã€AWK的关联数¾l?associative array)、Lisp的表(list)å’ŒUnix Shell的命令,此外˜q˜æœ‰å€Ÿé‰´äº†ä¸€¿Uè¯­­a€åQŒä½ ä»¬çŸ¥é“是哪种å?”冒号忽然卖了个关子ã€?br /><br />逗号猜想åQ?#8220;应该是某¿UOOP语言吧ã€?#8221;<br /><br />“Perl 中确有不ž®‘C++的媄子,但它的对象模型在5.0以后才引入,典型的半路出å®Óž¼Œ˜qœä¸å¦‚前面的特征那么自然。与其说是一¿Uè‡ªç„¶è€Œç„¶çš„发展,不如说是在OOP 潮流è£ÒŽŒŸä¸‹çš„一¿Uèín不由å·Þqš„˜qŽåˆã€‚真正深入骨髓的借鉴是自然语­a€ã€?#8221;冒号¾l™å‡ºäº†ç­”案,“我们提过åQŒPerl的发明者Larry Wall是一名语­a€å­¦å®¶åQŒä»–è®¤äØ“½E‹åºè¯­è¨€åº”该与自然语­a€ä¸€æ øP¼Œ½Ž€‹zè‡ªç„¶ã€æ˜“è¯ÀL˜“å†™ã€è¡¨è¾‘Ö¤šæ —÷€ä¸æ‹˜ä¸€æ ¹{€‚Perl˜q˜æœ‰ä¸å°‘的格­a€æˆ–哲学,使得¾~–程语言一æ”?严è°}åˆÀL¿çš„面孔,散发出浓郁的人文气息ã€?#8221;<br /><br />叹号òq½äº†ä¸€é»˜ï¼š“我见˜q‡Perl的代码,人文气息没闻出来åQŒä½†æˆ‘怀疑有乙醚气息——看一会就觉得晕晕乎乎的ã€?#8221;<br /><br />ä¼—äh大笑ã€?br /><br />“æœ?äºÞZ»…用一行Perl代码ž®±å®žçŽîCº†RSA½Ž—法åQŒä½ çœ‹äº†é‚£è¿˜ä¸å¾—当场晕倒啊?”冒号打趣道,“Perl的各¿Ué­”½W¦å¥½ä¼ég¸€æŠŠæŠŠé”‹åˆ©çš„剪刀åQŒåšèµäh–‡æœ¬è£å‰ªä¹‹¾cȝš„å·?作来游刃有余。这是它最大的长处åQŒå½“初Perlž®±æ˜¯Wall用来做Unix¾pȝ»Ÿ½Ž¡ç†çš„,以后在CGI上的òq¿æ³›åº”用也得益于此。这也赋予Perl极强的粘å?力,因而有‘internet上的胶带(duct tape)[2]’的说法。它又号¿U°ç‘žå£«å†›åˆ€åQŒç²¾¾lƒè€Œå¤æ‚,实用而强大。但Perl˜q‡äºŽç‰|´»è‡ªç”±åQŒç¼ºä¹è§„范,影响了程序的可读性、一致性、整‹zæ€§å’Œå¯ç»´æŠ?性。不熟悉该语­a€çš„固然如è¯Õd¤©ä¹¦ï¼Œç†Ÿæ‚‰è¯­è¨€è€Œä¸ç†Ÿæ‚‰é—®é¢˜çš„也颇费思量。相比之下Python被认为是Perl有力的挑战者,不仅在于它天然的OO设计和丰 富的¾cÕdº“åQŒæ›´é‡è¦çš„æ˜¯å®ƒå¯¹½E‹åºå‘˜å‹å¥½åº¦å¤§å¤§­‘…过Perl。Python也有一¾pÕdˆ—的被¿UîCØ“¼›?Zen)的哲学,不少与Perl是针锋相对的。比 如:Perlè®¤äØ“åšä¸€ä»¶äº‹å¯ä»¥æœ‰å¤š¿Uæ–¹æ³•,而Pythonè®¤äØ“ä¸€ä»¶äº‹åº”è¯¥æœ€å¥½åªæœ‰ä¸€¿Uæ–¹æ³?Perl˜q½æ±‚语言的表现力åQŒPython˜q½æ±‚½Ž€å•优 é›?Perl喜欢隐性暗½Cºï¼ŒPythonå¼ø™°ƒæ˜¾æ€§æ˜Ž½C?Perlå¼ø™°ƒç´§å‡‘åQŒPythonå¼ø™°ƒæ¾æ•£; Perl的语法和语义丰富åQŒPython的语法和语义½Ž€å•而类库丰富。或许Python最让äh不习惯的是它对空白符敏感性ã€?#8221;<br /><br />引号感到惊奇åQ?#8220;对空白符敏感?˜q™ä¸ªå€’真怪异ã€?#8221;<br /><br />å†?可‚§æƒ¯ä¸æ€ªï¼š“虽然有点˜qåä¹ æƒ¯åQŒä½†éžå¸¸½W¦åˆPython一贯的规范½Ž€‹zçš„风格——一斚w¢ä»Žè¯­æ³•上保证了良好的¾~–码风格;另一斚w¢åQŒæ¯ä¸ªä»£ç å—不再需要è“v 始的大括åähˆ–begin/end之类的,减少了的代码行数。顺便插一句,另外一¿Uä¼˜é›…的语言Haskell同样对空白符敏感åQŒæˆ–è®æ€¼˜é›…正是来自对¾l†èŠ‚å’Œè§„ 范的重视吧。此外许多äh抱怨Python中的自引用self太多åQŒæ®Šä¸çŸ¥˜q™ä¹Ÿæ˜¯å®ƒå€¡å¯¼æ˜‘Ö¼è¡¨è¾¾çš„一¿Uä½“现。æ€Èš„看来åQŒPython主要的问题还是在性能æ•?率上不尽如äh意ã€?#8221;<br /><br />叹号好奇地问åQ?#8220;Ruby怎么æ ?据说它将取代Javaã€?#8221;<br /><br />“不要轻言‘取代’二字ã€?#8221;冒号规诫 道,“Java没有取代C++åQŒä¹Ÿä¸ä¼šè¢«Ruby取代åQŒè‡³å¤šåªæ˜¯ä¸€¿Uå†åˆ†é…ã€‚不˜q‡Ruby的确是门很可çˆÞqš„语言åQŒå…¼å…·Perl的表现力和Python的可 è¯ÀL€§ã€‚Ruby背后最å…ïL‰¹è‰²çš„理念是:å…Ïx³¨½E‹åºå‘˜ä‹É用语­a€æ—¶çš„æ„Ÿå—­‘…过语言本èín的功能。通俗地说åQŒå…µå™¨çš„¿U°æ‰‹æ¯”锋利更重要;文雅地说åQŒåº”¾l™äºˆ½E‹åºå‘˜æ›´å¤šçš„ 人文å…Ïx€€ã€‚就拿代码块(block)å’Œè„P代器(iterator)来说åQŒè™½ç„¶å‡éžRuby首创åQŒä½†å…¶è¯­æ³•æœ€ä¸ø™µå¿ƒæ‚¦ç›®ã€‚类似的例子比比皆是。Ruby的元 ¾~–程能力特别强,也是它高度灵‹zȝš„一¿Uä½“玎ͼŒä½†åƈ不是所有äh都喜‹Æ¢è¿™¿Ué£Žæ ¹{€‚Ruby的主要弱ç‚ÒŽœ‰ä¸¤ä¸ªåQšä¸€ä¸ªä¸ŽPython¾cÖM¼¼åQŒåœ¨æ€§èƒ½ä¸Šè¿˜æœ‰å¾…提高;å?一个是它的¾U¿ç¨‹ç”Þq”¨æˆïL©ºé—?user space)而不是内核空é—?kernel space)来管理[3]åQŒä¸èƒ½å……分利用多核或多CPU。真正让Ruby变得炙手可热的是web应用框架 Ruby on Rails(RoR)的成功,它们˜q˜å‚¬ç”Ÿäº†Javaòq›_°ä¸Šçš„Groovy语言和Groovy on Grails框架。RoR奉行的CoC(Convention over Configuration)å’ŒDRY(Don’t repeat yourself )原则以及MVC架构看似了无新意åQŒä½†ä¸ŽRuby¾l“合之后åQŒä¾¿å¦‚一只猱íw«è€Œä¸ŠçëŠŒ«åQŒç«‹åˆ»è¡¬æ‰˜å‡ºJavaå’?NET大象般的íw«åª„ã€?#8221;<br /><br />逗号有些怀疑:“框架竟然捧红了语­a€åQŒæ¡†æž¶çœŸæœ‰è¿™ä¹ˆé‡è¦å—?”<br /><br />“å¦?æžœweb应用中动态页面较ž®‘或业务逻辑不复杂,框架的ä­hå€¼åÆˆä¸å¤§ã€‚ä»¥å‰CGI¾~–程ž®±æ˜¯å¾€Perl之类的代码中嵌入HTML代码åQŒå¦‚同Java中的 Servlet;PHP则单¾U¯åœ°åœ¨HTML代码中插入PHP代码åQŒå¦‚同早期的JSP。没有MVCåQŒä¹Ÿä¸ç®¡ä»€ä¹ˆä¸‰å±‚架构,更没有ORM。但æ˜?#8212;—”冒号拖了 个è{折音åQ?#8220;一旦业务逻辑变得复杂åQŒå¼€å‘äh员增多,手工作坊式编½E‹å¼€å§‹æ‰è¥Ÿè§è‚˜ï¼Œå¼•入框架˜q™ä¸ª‹¹æ°´ç”Ÿäñ”¾U¿æ¥æé«˜ç”Ÿäñ”力便是大势所­‘‹ã€?#8221;<br /><br />句号不解åQ?#8220;我想Perl、Pythonå’ŒPHP一定也有不ž®‘框æžÓž¼ŒJava中的框架更是泛滥成灾åQŒä½•以独独RoR脱颖而出?”<br /><br />å†?号作出分析:“正值web2.0和敏捷开å?agile development)的概忉|µè¡Œä¹‹é™…,RoRž®†AJAX与Ruby¾l„合在一èµähˆä¸ºç»ä½³çš„回应。以前各¿Uweb应用框架是不ž®‘,但在RoR之前轻量¾U§å¥— ˜¡å¼è§£å†³æ–ÒŽ¡ˆòq¶ä¸å¤šã€‚Perl中的Catalyst、Python中的Pylon˜q˜æœ‰PHP中的CakePHP½{‰åº”是效仿之作。因此RoR出现的时机可è¯?是不早不晚,正当其时。此外,Perlå’ŒPHPç”׃ºŽ˜q‡äºŽ‹¹è¡ŒåQŒåè€Œæœ‰ä¸å°‘的历史包袱,äºÞZ»¬ä¹ æƒ¯äº†å°†è¡¨ç¤ºé€»è¾‘和业务逻辑¾~–织在一赗÷€‚至于Java企业解决æ–?案,框架太多åQŒæ­é…ç»„合更多,增加了选择的难度。即佉K‡‡ç”¨æœ€å¸¸è§çš„轻量çñ”SSH(Struts+Spring+Hibernate)¾l„合åQŒç»´æŠ¤è“v来也æ¯?RoR¾Jæ‚得多ã€?#8221;<br /><br />叹号愈发担忧åQ?#8220;听这意思,Java˜q˜æ˜¯å±é™©å•?”<br /><br />“­a€ä¹‹è¿‡æ—©ã€?#8221;冒号不以为然åQ?#8220;首先RoR˜q˜æœ‰å¾…进一步检验,目前无论是应用广度还是深度上ž®šæ— æ³•与Java相提òq¶è®º;其次Java在性能、安全等斚w¢˜q˜æ˜¯æœ‰ä¸ž®‘优势,而这些对于大型和关键性的应用来说ž®¤äؓ重要。即使在中小型web应用中,RoR较之PHP˜q˜è¿œä¸ÞZ¸åŠã€?#8221;<br /><br />问号接下话题åQ?#8220;PHPä¸ÞZ½•如此‹¹è¡Œ?”<br /><br />“å›?为它½Ž€å•、专一ã€?#8221;冒号½{”得很干脆,“与Pythonå’ŒRuby一开始就定位通用语言不同åQŒPHP是专为网¾lœè€Œç”Ÿçš„。同早期的Perlç›æ€¼¼åQŒPHP起初ä¸?要è“v文本˜q‡æ×o器的作用åQŒåªä¸è¿‡Perl多处理文件流(file stream)åQŒè€ŒPHP多处理套接字‹¹?socket stream)。PHPçš„è¯­æ³•ç®€å•ï¼Œä¸”äØ“¾|‘络应用度èín定造,受到¾|‘络开发äh员的˜q½æ§å½“åœ¨æƒ…ç†ä¹‹ä¸­ã€‚å®ƒè™½å¾ˆå®žç”¨å¾ˆæµè¡Œï¼Œä½†åÆˆä¸å®Œ¾ŸŽã€‚比如:变量名大ž®å†™æ•æ„Ÿ 而函数名大小写不敏感;函数命名规则不一è‡?不支持namespaceå’Œunicode[4];与Perlä¸€æ øP¼Œå®ƒçš„对象模型不是先天的,直到PHP 5才真正完å–?对线½E‹æ”¯æŒä¸­‘?相比Perl、Pythonå’ŒRubyåQŒå®ƒçš„功能稍昑֍•è–„ç­‰½{‰ã€?#8221;<br /><br />引号½Hç„¶æƒŒ™“våQ?#8220;我记得您在第一堂课提到PHP˜q˜èƒ½ç”¨äºŽæ¡Œé¢åº”用ã€?#8221;<br /><br />“ä¸?ä»…PHPåQŒPerl、Python˜q˜æœ‰RubyåQŒéƒ½èƒ½ä½œä¸ºå‰å°è¯­­a€æ¥å¼€å‘命令行或图形界面的应用。同样地åQŒVB、Delphiå’ŒJavaScript也能 ä½œäØ“åŽå°è¯­è¨€ã€‚çŽ°ä»£çš„½E‹åºè¯­è¨€æ—¢æœ‰è‡ªå·±çš„专长,又向通用化和全能化发展,以争取更多的生存½Iºé—´ã€‚试想一下,çŽîC»£çš„程序员又何ž®ä¸æ˜¯å¦‚此呢?”­a€åŠäºŽæ­¤ï¼Œå†?åäh”¶ä½è¯é¢˜ï¼Œ“语言½Ž€è¯„告一ŒDµè½åQŒè¿˜æœ‰ä¸ž®‘既有趣又有用的语言åQŒåœ¨æ­¤å°±ä¸ä¸€ä¸€è¯„说了。我们看刎ͼŒæ¯ç§¾~–程语言都有其独特的惯例用法和哲学理念,它们与编½E?范式一道åŞ成了语言的编½E‹é£Žæ ¹{€‚体悟愈æ·Þp€…ç¼–½E‹è¯­æ„Ÿæ„ˆå¼ºï¼Œæ€ç»´ä¸Žè¯­­a€æ„ˆäº¤èžæ— ¼„ï¼Œæ¸ä»Žå¿…然王国走向自由王国ã€?#8221;<br /><br />逗号满怀憧憬åQ?#8220;那是不是一¿Uäh剑合一的境ç•?”<br /><br />“或许人器合一更准¼‹®å§åQŒç¨‹åºå‘˜å¯ä¸èƒ½åªä¼šä¸€¿Uå…µå™¨å“Ÿã€?#8221;冒号故意抠他的字çœû|¼Œ“现在请大家每人写一句对本节评¡š„感言ã€?#8221;<br /><br />ä¼—äh沉思片刻,齐齐挥笔而就——<br /><br />叹号——没有最好的语言åQŒåªæœ‰æœ€åˆé€‚的语言ã€?br /><br />逗号——没有¾pŸç³•的语­a€åQŒåªæœ‰ç³Ÿ¾p•çš„½E‹åºå‘˜ã€?br /><br />问号——没有一¿Uè¯­­a€æ˜¯ä¸‡èƒ½çš„åQŒåªä¼šä¸€¿Uè¯­­a€æ˜¯ä¸‡ä¸‡ä¸èƒ½çš„ã€?br /><br />引号——废除对语­a€çš„宗教信从ͼŒå»ºç«‹å¯¹è¯­­a€çš„哲学思维ã€?br /><br />句号——¾~–程ž®±æ˜¯åœ¨äh脑和电脑之间å¯ÀL‰¾æœ€ä½›_ã^衡点的过½E‹ã€?br /><br />冒号è¯ÈÅžå¤§æ‚¦åQŒé¡ºæ‰‹ä¸€æŽŒæ‹å‡ÞZº”记马屁:“¾_‘Ö½©ä¹‹æž!可谓字字珠玑、句句联璧啊。兹军_®šåQŒç»™è¯æ€½çš„奖赏是——立时下课!”<br /><br />ä¼—äh‹Æ£ç„¶é¢†èµè€ŒåŽ»ã€?br /><br />插语<br /><br />[1] 有两¿Uä¸‰å±‚架构,一¿Uæ˜¯three-layer architectureåQŒä¸€¿Uæ˜¯three-tier architecture。它们经常换用,但其实是有分别的åQšå‰è€…仅仅在逻辑˜q›è¡Œåˆ’分åQŒè€ŒåŽè€…在物理上也˜q›è¡Œäº†åˆ’åˆ?#8212;—不同层次的模块运行在不同的主æœÞZ¸Šã€?br /><br />[2] 不少地方译作‘输送带’ã€?#8216;传送带’åQŒå› ä¸ºductæœ?#8216;输送管’ã€?#8216;导管’之意åQŒäºŽæ˜¯æƒ³å½“ç„¶åœ°è®¤ä¸ø™¿™è¡¨æ˜ŽPerl在internet上è“v着输送作用。殊不知‘duct type’专指一¿Uä¸‡èƒ½çš„¾_˜æ€§æžå¼ºçš„胶带åQŒç”¨ä»¥æ¯”å–»Perl的粘合力ã€?br /><br />[3] ˜q™ç±»¾U¿ç¨‹è¢«ç§°ä¸ºç»¿è‰²çº¿½E?green thread)åQŒä¹Ÿ¿UîC¼ª¾U¿ç¨‹ã€‚据¿U°Ruby2.0ž®†æ”¯æŒåŽŸç”Ÿçº¿½E?native thread)ã€?br /><br />[4] PHPž®†åœ¨5.3.0支持namespaceåQŒå°†åœ?.0支持unicodeã€?br /><br />æ€È»“<br /><br />◆ 比è“vJavaòq›_°å’?NETòq›_°åQŒåŠ¨æ€è¯­­a€è½ÖM¾¿ç‰|´»ã€å¼€å‘效率高åQŒä½†æ•´åˆå‡èšåŠ›è¿˜ä¸å¤ŸåQŒåœ¨˜qè¡Œæ•ˆçŽ‡ã€ç±»åž‹å®‰å…¨ã€å¯ç”¨èµ„æºã€å¼€å‘å·¥å…—÷€æŠ€æœ¯æ”¯æŒä»¥åŠåª„响力½{‰æ–¹é¢ä¹Ÿæœ‰ä¸€å®šå·®è·ï¼Œæ•…é€šå¸¸ä½œäØ“è½»é‡¾U§çš„解决æ–ÒŽ¡ˆã€?br /><br />◆ LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在内的脚本语­a€¾l„成的网¾lœå¼€å‘åã^収ͼŒå…ähœ‰å¼€æ”„¡µ‹z…R€å¼€å‘迅速、部¾|²æ–¹ä¾Ñ€é«˜å¯é…¾|®ã€å®‰å…¨å¯é ã€æˆæœ¬ä½Žå»‰ç­‰ä¼˜ç‚¹ã€?br /><br />◆ Perl¾_„¡»ƒã€å¤æ‚、强大、灵‹z…R€è‡ªç”±ã€é𐿙¦ã€è¡¨çŽ°åŠ›å¼ºï¼Œä½†è§„èŒƒæ€§ã€å¯è¯ÀL€§ã€ä¸€è‡´æ€§ã€æ•´‹zæ€§å’Œå¯ç»´æŠ¤æ€§è¾ƒå·®ã€?br /><br />◆ Python优雅规范、简‹zæ˜Žæ™°ã€æ˜“学易用、类库丰富,但效率稍差,有些äºÞZ¸å–œæ¬¢å®ƒå¯¹½Iºç™½½W¦æ•æ„Ÿçš„ç‰ÒŽ€§ã€?br /><br />◆ Ruby语法¾_‘Öéy、高度灵‹z»ï¼Œå…¼å…·Perl的表现力和Python的可è¯ÀL€§ï¼Œž®¤å…¶æ³¨é‡½E‹åºå‘˜çš„æ„Ÿå—åQŒä½†å…¶æ€§èƒ½å’Œçº¿½E‹æ¨¡åž‹å°šæœ‰å¾…改进ã€?br /><br />◆ PHP½Ž€å•、专一、实用、流行,在但相比其他三种语言åQŒåœ¨è¯­æ³•和功能上½Eæœ‰‹Æ ç¼ºã€?br /><br />◆ RoR是一¿Uè½»é‡çñ”套餐式的web应用解决æ–ÒŽ¡ˆåQŒæ˜¯ç”±å¥½çš„设è®?MVC架构和CoC、DRY原则)加上好的语言(Ruby)在好的时æœ?web2.0和敏捷开发风行之é™?打造出的好的框架ã€?br /><br />◆ 静态语­a€ä¸ŽåŠ¨æ€è¯­­a€ä»Žè¯­­a€ç‰¹å¾åˆ°è¿è¡ŒçŽ¯å¢ƒéƒ½åœ¨é€æ¸èžåˆã€?br /><br />◆ ½E‹åºå‘˜åº”该与½E‹åºè¯­è¨€ä¸€æ øP¼Œæ—¢è¦æœ‰è‡ªå·Þqš„专长åQŒåˆè¦å‘通用化和全能化发展ã€?br /><br />◆ ¾~–程语言惯例用法、哲学理念和¾~–程范式形成了语­a€çš„ç¼–½E‹é£Žæ ¹{€?/div><img src ="http://www.aygfsteel.com/wealupa/aggbug/381724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wealupa/" target="_blank">常言½W?/a> 2012-06-28 15:41 <a href="http://www.aygfsteel.com/wealupa/archive/2012/06/28/381724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LAMP¾|‘站架构æ–ÒŽ¡ˆåˆ†æžhttp://www.aygfsteel.com/wealupa/archive/2012/06/28/381722.html常言½W?/dc:creator>常言½W?/author>Thu, 28 Jun 2012 07:00:00 GMThttp://www.aygfsteel.com/wealupa/archive/2012/06/28/381722.htmlhttp://www.aygfsteel.com/wealupa/comments/381722.htmlhttp://www.aygfsteel.com/wealupa/archive/2012/06/28/381722.html#Feedback0http://www.aygfsteel.com/wealupa/comments/commentRss/381722.htmlhttp://www.aygfsteel.com/wealupa/services/trackbacks/381722.htmlLAMPåQˆLinux-Apache-MySQL-PHPåQ‰ç½‘站架构是目前国际‹¹è¡Œçš„Web框架åQŒè¯¥æ¡†æž¶åŒ…括åQšLinux操作¾pȝ»ŸåQŒApache¾|?¾lœæœåС噍åQŒMySQL数据库,Perl、PHP或者Python¾~–程语言åQŒæ‰€æœ‰ç»„成äñ”品均是开源èÊYä»Óž¼Œæ˜¯å›½é™…上成熟的架构框æžÓž¼Œå¾ˆå¤š‹¹è¡Œçš„商业应用都是采 取这个架构,和Java/J2EE架构相比åQŒLAMPå…ähœ‰Web资源丰富、轻量、快速开发等特点åQŒå¾®è½¯çš„.NET架构相比åQŒLAMPå…ähœ‰é€šç”¨ã€è·¨òq›_°ã€é«˜ 性能、低ä»äh ¼çš„优势,因此LAMP无论是性能、质量还是ä­h格都是企业搭建网站的首选åã^台ã€?p>  对于大流量、大òq¶å‘量的¾|‘ç«™¾pȝ»Ÿæž¶æž„来说åQŒé™¤ 了硬件上使用高性能的服务器、负载均衡、CDN½{‰ä¹‹å¤–,在èÊY件架构上需要重点关注下面几个环节:使用高性能的操作系¾lŸï¼ˆOSåQ‰ã€é«˜æ€§èƒ½çš„网™å‰|œåС噍 åQˆWeb ServeråQ‰ã€é«˜æ€§èƒ½çš„æ•°æ®åº“åQˆDatabseåQ‰ã€é«˜æ•ˆçŽ‡çš„ç¼–½E‹è¯­­a€½{‰ã€‚下面我ž®†ä»Ž˜q™å‡ ç‚¹å¯¹å…¶ä¸€ä¸€è®¨è®ºã€?/p>

  操作¾pȝ»Ÿ

   Linux操作¾pȝ»Ÿæœ‰å¾ˆå¤šä¸ªä¸åŒçš„发行版åQŒå¦‚Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS½{‰ï¼Œæ¯ä¸€ä¸ªå‘行版都有自己的特è‰ÔŒ¼Œæ¯”如RHEL的稳定,Ubuntu的易用,åŸÞZºŽ½E›_®šæ€?和性能的考虑åQŒæ“ä½œç³»¾lŸé€‰æ‹©CentOSåQˆCommunity ENTerprise Operating SystemåQ‰æ˜¯ä¸€ä¸ªç†æƒ³çš„æ–ÒŽ¡ˆã€?/p>

   CentOSåQˆCommunity ENTerprise Operating SystemåQ‰æ˜¯Linux发行版之一åQŒæ˜¯RHEL/Red Hat Enterprise Linux的精½Ž€å…è´¹ç‰ˆï¼Œå’ŒRHEL为同æ ïLš„æºä»£ç ï¼Œä¸è¿‡åQŒRHELå’ŒSUSE LE½{‰ä¼ä¸šç‰ˆåQŒæä¾›çš„升çñ”服务均是收费升çñ”åQŒæ— æ³•免费在¾U¿å‡¾U§ï¼Œå› æ­¤è¦æ±‚免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用ã€?/p>

LAMP¾|‘站架构æ–ÒŽ¡ˆåˆ†æž

LAMP¾|‘站架构å›?/p>

  Web服务器、缓存和PHP加�/strong>

   Apache是LAMP架构最核心的Web ServeråQŒå¼€æºã€ç¨³å®šã€æ¨¡å—丰富是Apache的优åŠÑ€‚但Apache的缺ç‚ÒŽ˜¯æœ‰äº›è‡ƒè‚¿åQŒå†…存和CPU开销大,性能上有损耗,不如一些轻量çñ”çš„Web 服务器(例如nginxåQ‰é«˜æ•ˆï¼Œè½»é‡¾U§çš„Web服务器对于静态文件的响应能力来说˜qœé«˜äºŽApache服务器ã€?/p>

  ApacheåšäØ“Web Server是负载PHP的最佳选择åQŒå¦‚果流量很大的话,可以采用nginx来负载非PHPçš„Webè¯äh±‚。nginx是一个高性能的HTTP和反向代理服 务器åQŒNginx以它的稳定性、丰富的功能集、示例配¾|®æ–‡ä»¶å’Œä½Žç³»¾lŸèµ„源的消耗而闻名。Nginx不支持PHPå’ŒCGI½{‰åŠ¨æ€è¯­­a€åQŒä½†æ”¯æŒè´Ÿè²å‡è¡¡å’Œå®¹ 错,可和Apache配合使用åQŒæ˜¯è½»é‡¾U§çš„HTTP服务器的首选ã€?/p>

  Web服务器的¾~“存也有多种æ–ÒŽ¡ˆåQŒApache提供了自å·Þqš„¾~“å­˜æ¨?块,也可以ä‹É用外加的Squid模块˜q›è¡Œ¾~“å­˜åQŒè¿™ä¸¤ç§æ–¹å¼å‡å¯ä»¥æœ‰æ•ˆçš„æé«˜Apache的访问响应能力。Squid Cache是一个Web¾~“å­˜æœåŠ¡å™¨ï¼Œæ”¯æŒé«˜æ•ˆçš„ç¼“å­˜ï¼Œå¯ä»¥ä½œäØ“¾|‘页服务器的前置cache服务器缓存相兌™¯·æ±‚来提高Web服务器的速度åQŒæŠŠSquid攑֜¨ Apache的前端来¾~“å­˜Web服务器生成的动态内容,而Web应用½E‹åºåªéœ€è¦é€‚当地设¾|®é¡µé¢å®žæ•ˆæ—¶é—´å³å¯ã€‚如讉K—®é‡å·¨å¤§åˆ™å¯è€ƒè™‘使用memcacheä½?为分布式¾~“å­˜ã€?/p>

  PHP的加速ä‹É用eAccelerator加速器åQŒeAccelerator是一个自由开放源码PHP加速器åQŒä¼˜åŒ–å’ŒåŠ?态内容缓存,提高了性能PHP脚本的缓存性能åQŒä‹Éå¾—PHP脚本在编译的状态下åQŒå¯¹æœåŠ¡å™¨çš„å¼€é”€å‡ ä¹Žå®Œå…¨æ¶ˆé™¤ã€‚å®ƒ˜q˜æœ‰å¯¹è„šæœ¬è“v优化作用åQŒä»¥åŠ å¿«å…¶æ‰§è¡Œæ•ˆçŽ‡ã€?使PHP½E‹åºä»£ç æ‰§æ•ˆçŽ‡èƒ½æé«˜1-10倍ã€?/p>

  具体的解å†Ïx–¹æ¡ˆæœ‰ä»¥ä¸‹å‡ ç§åQ?/p>

  1、squid + Apache + PHP + eAccelerator

  使用Apache负蝲PHPåQŒä‹É用squid˜q›è¡Œ¾~“å­˜åQŒhtml或图片的è¯äh±‚可以直接由squid˜q”回¾l™ç”¨æˆ—÷€‚很多大型网站都采用˜q™ç§æž¶æž„ã€?/p>

  2、nginx/Apache + PHPåQˆfastcgiåQ?+ eAccelerator

  使用nginx或Apache负蝲PHPåQŒPHP使用fastcgi方式˜qè¡ŒåQŒæ•ˆçŽ‡è¾ƒé«˜ã€?/p>

  3、nginx + Apache + PHP + eAccelerator

  此方案综合了nginxå’ŒApache的优点,使用Apache负蝲PHPåQŒnginx负责解析其他Webè¯äh±‚åQŒä‹É用nginxçš„rewrite模块åQŒApache端口不对外开放ã€?/p>

  数据�/strong>

   开源的数据库中åQŒMySQL在性能、稳定性和功能上是首选,可以辑ֈ°ç™¾ä¸‡¾U§åˆ«çš„æ•°æ®å­˜å‚¨ï¼Œ¾|‘站初期可以ž®†MySQLå’ŒWebæœåŠ¡å™¨æ”¾åœ¨ä¸€èµøP¼Œä½†æ˜¯å½“访é—?量达åˆîC¸€å®šè§„模后åQŒåº”该将MySQL数据库从Web Server上独立出来,在单独的服务器上˜qè¡ŒåQŒåŒæ—¶ä¿æŒWeb Serverå’ŒMySQL服务器的½E›_®š˜qžæŽ¥ã€?/p>

  当数据库讉K—®é‡è¾¾åˆ°æ›´å¤§çš„¾U§åˆ«åQŒå¯ä»¥è€ƒè™‘使用MySQL Cluster½{‰æ•°æ®åº“集群或者库表散列等解决æ–ÒŽ¡ˆã€?/p>

  æ€Èš„来说åQŒLAMP架构的网站性能会远˜qœä¼˜äºŽWindows IIS + ASP + AccessåQˆä¾‹å¦‚月光博客)˜q™æ ·çš„网站,可以负蝲的访问量也非常大åQŒå›½å†…的大量个äh¾|‘站如果惌™¦æ”¯æ’‘大访问量åQŒé‡‡ç”¨LAMP架构是一个不错的æ–ÒŽ¡ˆã€?/p>

  ¾lég¸Šæ‰€˜qŽÍ¼ŒåŸÞZºŽLAMP架构设计å…ähœ‰æˆæœ¬ä½Žå»‰ã€éƒ¨¾|²çµ‹z…R€å¿«é€Ÿå¼€å‘、安全稳定等特点åQŒæ˜¯Web¾|‘络应用和环境的优秀¾l„合ã€?/p>

]]>
大型¾|‘站架构设计及技术分æž?/title><link>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381720.html</link><dc:creator>常言½W?/dc:creator><author>常言½W?/author><pubDate>Thu, 28 Jun 2012 06:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381720.html</guid><wfw:comment>http://www.aygfsteel.com/wealupa/comments/381720.html</wfw:comment><comments>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wealupa/comments/commentRss/381720.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wealupa/services/trackbacks/381720.html</trackback:ping><description><![CDATA[<div><span style="font-size:16px;">一个小型的¾|‘ç«™åQŒæ¯”如个人网站,可以使用最½Ž€å•çš„html静态页面就实现了,配合一 些图片达到美化效果,所有的™åµé¢å‡å­˜æ”‘Öœ¨ä¸€ä¸ªç›®å½•下åQŒè¿™æ ïLš„¾|‘站对系¾lŸæž¶æž„、性能的要求都很简单,随着互联¾|‘业务的不断丰富åQŒç½‘站相关的技术经˜q‡è¿™äº›å¹´çš?发展åQŒå·²¾lç»†åˆ†åˆ°å¾ˆç»†çš„æ–¹æ–šw¢é¢ï¼Œž®¤å…¶å¯¹äºŽå¤§åž‹¾|‘站来说åQŒæ‰€é‡‡ç”¨çš„æŠ€æœ¯æ›´æ˜¯æ¶‰åŠé¢éžå¸¸òq¿ï¼Œä»Žç¡¬ä»¶åˆ°è½¯äšg、编½E‹è¯­­a€ã€æ•°æ®åº“、WebServer、防火墙½{?各个领域都有了很高的要求åQŒå·²¾lä¸æ˜¯åŽŸæ¥ç®€å•çš„html静态网站所能比拟的ã€?</span><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    大型¾|‘ç«™åQŒæ¯”如门æˆïL½‘站。在面对大量用户讉K—®ã€é«˜òq¶å‘è¯äh±‚æ–šw¢åQŒåŸºæœ¬çš„解决æ–ÒŽ¡ˆé›†ä¸­åœ¨è¿™æ ·å‡ ä¸ªçŽ¯èŠ‚ï¼šä½¿ç”¨é«˜æ€§èƒ½çš„æœåŠ¡å™¨ã€é«˜æ€§èƒ½çš„æ•°æ®åº“ã€é«˜æ•ˆçŽ‡çš„ç¼–½E‹è¯­­a€ã€è¿˜æœ‰é«˜æ€§èƒ½çš„Web容器。但是除了这几个斚w¢åQŒè¿˜æ²¡æ³•æ ÒŽœ¬è§£å†³å¤§åž‹¾|‘站面äÍ的高负蝲和高òq¶å‘问题ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    上面提供的几个解å†Ïx€èµ\在一定程度上也意味着更大的投入,òq¶ä¸”˜q™æ ·çš„è§£å†Ïx€èµ\具备瓉™¢ˆåQŒæ²¡æœ‰å¾ˆå¥½çš„æ‰©å±•性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经éª?ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-size: 14px; padding-top: 0px"><strong><span style="font-size:16px;">1、HTML静态化</span></strong></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    其实大家都知道,效率最高、消耗最ž®çš„ž®±æ˜¯¾U¯é™æ€åŒ–çš„html™åµé¢åQŒæ‰€ä»¥æˆ‘们尽可能使我们的¾|‘站上的™åµé¢é‡‡ç”¨é™æ€é¡µé¢æ¥å®žçްåQŒè¿™ä¸ªæœ€½Ž€å•çš„æ–ÒŽ³•其实也是最 æœ‰æ•ˆçš„æ–¹æ³•ã€‚ä½†æ˜¯å¯¹äºŽå¤§é‡å†…å®¹åÆˆä¸”é¢‘¾Jæ›´æ–°çš„¾|‘ç«™åQŒæˆ‘们无法全部手动去挨个实现åQŒäºŽæ˜¯å‡ºçŽîCº†æˆ‘们常见的信息发布系¾lŸCMS åQŒåƒæˆ‘们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布¾pȝ»Ÿæ¥ç®¡ç†å’Œå®žçŽ°çš„ï¼Œä¿¡æ¯å‘å¸ƒ¾pȝ»Ÿå¯ä»¥å®žçŽ°æœ€½Ž€å•的信息录入自动生成静æ€?™åµé¢åQŒè¿˜èƒ½å…·å¤‡é¢‘道管理、权限管理、自动抓取等功能åQŒå¯¹äºŽä¸€ä¸ªå¤§åž‹ç½‘站来è¯ß_¼Œæ‹¥æœ‰ä¸€å¥—高效、可½Ž¡ç†çš„CMS是必不可ž®‘çš„ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    除了门户和信息发布类型的¾|‘ç«™åQŒå¯¹äºŽäº¤äº’性要求很高的½C‘ÖŒº¾cÕdž‹¾|‘站来说åQŒå°½å¯èƒ½çš„静态化也是提高性能的必要手ŒDµï¼Œž®†ç¤¾åŒºå†…的帖子、文章进行实时的静态化åQŒæœ‰æ›´æ–°çš„æ—¶å€™å†é‡æ–°é™æ€åŒ–也是大量使用的策略,像Mop的大杂烩ž®±æ˜¯ä½¿ç”¨äº†è¿™æ ïLš„½{–ç•¥åQŒç½‘易社区等也是如此ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    同时åQŒhtml静态化也是某些¾~“å­˜½{–略使用的手ŒDµï¼Œå¯¹äºŽ¾pȝ»Ÿä¸­é¢‘¾Jä‹É用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实玎ͼŒæ¯”如论坛ä¸?论坛的公用设¾|®ä¿¡æ¯ï¼Œ˜q™äº›ä¿¡æ¯ç›®å‰çš„主‹¹è®ºå›éƒ½å¯ä»¥˜q›è¡ŒåŽå°½Ž¡ç†òq¶ä¸”存储在数据库中,˜q™äº›ä¿¡æ¯å…¶å®žå¤§é‡è¢«å‰å°ç¨‹åºè°ƒç”¨ï¼Œä½†æ˜¯æ›´æ–°é¢‘率很小åQŒå¯ä»¥è€ƒè™‘ž®†è¿™éƒ?分内容进行后台更新的时候进行静态化åQŒè¿™æ ·é¿å…äº†å¤§é‡çš„æ•°æ®åº“讉K—®è¯äh±‚ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><strong><span style="font-size:16px;">2、图片服务器分离</span></strong></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    大家知道åQŒå¯¹äºŽWeb服务器来è¯ß_¼Œä¸ç®¡æ˜¯Apache、IIS˜q˜æ˜¯å…¶ä»–容器åQŒå›¾ç‰‡æ˜¯æœ€æ¶ˆè€—资源的åQŒäºŽæ˜¯æˆ‘们有必要ž®†å›¾ç‰‡ä¸Ž™åµé¢˜q›è¡Œåˆ†ç¦»åQŒè¿™æ˜¯åŸºæœ¬ä¸Šå¤§åž‹¾|?站都会采用的½{–ç•¥åQŒä»–们都有独立的囄¡‰‡æœåŠ¡å™¨ï¼Œç”šè‡³å¾ˆå¤šå°å›¾ç‰‡æœåŠ¡å™¨ã€‚è¿™æ ïLš„æž¶æž„可以降低提供™åµé¢è®‰K—®è¯äh±‚的服务器¾pȝ»ŸåŽ‹åŠ›åQŒåƈ且可以保证系¾lŸä¸ä¼šå› ä¸ºå›¾ 片问题而崩溃,在应用服务器和图片服务器上,可以˜q›è¡Œä¸åŒçš„配¾|®ä¼˜åŒ–,比如apache在配¾|®ContentType的时候可以尽量少支持åQŒå°½å¯èƒ½ž®‘çš„ LoadModuleåQŒä¿è¯æ›´é«˜çš„¾pȝ»Ÿæ¶ˆè€—和执行效率ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><strong><span style="font-size:16px;">3、数据库集群和库表散åˆ?/span></strong></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    大型¾|‘站都有复杂的应用,˜q™äº›åº”用必须使用数据库,那么在面对大量访问的时候,数据库的瓉™¢ˆå¾ˆå¿«ž®Þpƒ½æ˜„¡Ž°å‡ºæ¥åQŒè¿™æ—¶ä¸€å°æ•°æ®åº“ž®†å¾ˆå¿«æ— æ³•满­‘›_º”用,于是æˆ?们需要ä‹É用数据库集群或者库表散列。在数据库集¾Ÿ¤æ–¹é¢ï¼Œå¾ˆå¤šæ•°æ®åº“都有自å·Þqš„解决æ–ÒŽ¡ˆåQ? Oracle、Sybase½{‰éƒ½æœ‰å¾ˆå¥½çš„æ–ÒŽ¡ˆåQŒå¸¸ç”¨çš„MySQL提供的Master/Slave也是¾cÖM¼¼çš„æ–¹æ¡ˆï¼Œæ‚¨ä‹É用了什么样的DBåQŒå°±å‚考相应的解决 æ–ÒŽ¡ˆæ¥å®žæ–½å³å¯ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    上面提到的数据库集群ç”׃ºŽåœ¨æž¶æž„、成本、扩张性方面都会受到所采用DB¾cÕdž‹çš„限åˆÓž¼ŒäºŽæ˜¯æˆ‘们需要从应用½E‹åºçš„角度来考虑改善¾pȝ»Ÿæž¶æž„åQŒåº“表散列是常用òq¶ä¸” 最有效的解å†Ïx–¹æ¡ˆã€‚我们在应用½E‹åºä¸­å®‰è£…业务和应用或者功能模块将数据库进行分¼›»ï¼Œä¸åŒçš„æ¨¡å—对应不同的数据库或者表åQŒå†æŒ‰ç…§ä¸€å®šçš„½{–ç•¥å¯ÒŽŸä¸ªé¡µé¢æˆ–者功 能进行更ž®çš„æ•°æ®åº“散列,比如用户表,按照用户ID˜q›è¡Œè¡¨æ•£åˆ—,˜q™æ ·ž®Þpƒ½å¤Ÿä½Žæˆæœ¬çš„æå‡ç³»¾lŸçš„æ€§èƒ½òq¶ä¸”有很好的扩展性。sohu的论坛就是采用了˜q™æ ·çš„æž¶ 构,ž®†è®ºå›çš„用户、设¾|®ã€å¸–子等信息˜q›è¡Œæ•°æ®åº“分¼›»ï¼Œç„¶åŽå¯¹å¸–子、用æˆähŒ‰ç…§æ¿å—å’ŒID˜q›è¡Œæ•£åˆ—数据库和表,最¾lˆå¯ä»¥åœ¨é…ç½®æ–‡äšg中进行简单的配置便能让系¾l?随时增加一åîC½Žæˆæœ¬çš„æ•°æ®åº“˜q›æ¥è¡¥å……¾pȝ»Ÿæ€§èƒ½ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;"><strong>4、缓å­?/strong> </span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    ¾~“存一词搞技术的都接触过åQŒå¾ˆå¤šåœ°æ–¹ç”¨åˆ°ç¼“存。网站架构和¾|‘站开发中的缓存也是非帔R‡è¦ã€‚这里先讲述最基本的两¿Uç¼“存。高¾U§å’Œåˆ†å¸ƒå¼çš„¾~“存在后面讲˜q°ã€‚æž¶ 构方面的¾~“å­˜åQŒå¯¹Apache比较熟悉的äh都能知道Apache提供了自å·Þqš„¾~“存模块åQŒä¹Ÿå¯ä»¥ä½¿ç”¨å¤–加的Squid模块˜q›è¡Œ¾~“å­˜åQŒè¿™ä¸¤ç§æ–¹å¼å‡å¯ä»¥æœ‰æ•ˆçš„ æé«˜Apache的访问响应能力ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; margin-bottom: 0.5em; margin-left: 0px; font-size: 14px; margin-right: 0px; padding-top: 0px"><span style="font-size:16px;">    ¾|‘ç«™½E‹åºå¼€å‘方面的¾~“å­˜åQŒLinux上提供的Memory Cache是常用的¾~“存接口åQŒå¯ä»¥åœ¨web开发中ä½? 用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯å…׃ínåQŒä¸€äº›å¤§åž‹ç¤¾åŒÞZ‹É用了˜q™æ ·çš„æž¶æž„。另外,在ä‹É用web语言开 发的时候,各种语言基本都有自己的缓存模块和æ–ÒŽ³•ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><strong><span style="font-size:16px;">5、镜åƒ?/span></strong></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    镜像是大型网站常采用的提高性能和数据安全性的方式åQŒé•œåƒçš„æŠ€æœ¯å¯ä»¥è§£å†³ä¸åŒç½‘¾lœæŽ¥å…¥å•†å’Œåœ°åŸŸå¸¦æ¥çš„用户讉K—®é€Ÿåº¦å·®å¼‚åQŒæ¯”如ChinaNetå’?EduNet之间的差异就促ä‹É了很多网站在教育¾|‘内搭徏镜像站点åQŒæ•°æ®è¿›è¡Œå®šæ—¶æ›´æ–°æˆ–者实时更新。在镜像的细节技术方面,˜q™é‡Œä¸é˜˜q°å¤ªæ·±ï¼Œæœ‰å¾ˆå¤šä¸“业的çŽ?成的解决架构和äñ”品可选。也有廉ä»ïLš„通过软äšg实现的思èµ\åQŒæ¯”如Linux上的rsync½{‰å·¥å…?ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-size: 14px; padding-top: 0px"><strong><span style="font-size:16px;">6、负载均è¡?/span></strong></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    负蝲均衡ž®†æ˜¯å¤§åž‹¾|‘站解决高负药‚®¿é—®å’Œå¤§é‡òq¶å‘è¯äh±‚采用的终极解军_Šžæ³•ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin-top: 1em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; margin-left: 0px; font-size: 14px; margin-right: 0px; padding-top: 0px"><span style="font-size:16px;">    负蝲均衡技术发展了多年åQŒæœ‰å¾ˆå¤šä¸“业的服务提供商和äñ”品可以选择åQŒæˆ‘个äh接触˜q‡ä¸€äº›è§£å†Ïx–¹æ³•,其中有两个架构可以给大家做参考ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">¼‹¬äšg四层交换</span></p><p style="padding-bottom: 0px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    ½W¬å››å±‚交换ä‹É用第三层和第四层信息包的报头信息åQŒæ ¹æ®åº”用区间识别业务流åQŒå°†æ•´ä¸ªåŒºé—´ŒD늚„业务‹¹åˆ†é…åˆ°åˆé€‚的应用服务器进行处理。第四层交换功能ž®Þp±¡æ˜¯è™š IPåQŒæŒ‡å‘物理服务器。它传输的业务服从的协议多种多样åQŒæœ‰HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基¼‹€ä¸Šï¼Œéœ€è¦å¤æ‚çš„ 载量òqŒ™¡¡½Ž—法。在IP世界åQŒä¸šåŠ¡ç±»åž‹ç”±¾lˆç«¯TCP或UDP 端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCPå’ŒUDP端口共同军_®šã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px"><span style="font-size:16px;">    在硬件四层交换äñ”品领域,有一些知名的产品可以选择åQŒæ¯”如Alteon、F5½{‰ï¼Œ˜q™äº›äº§å“å¾ˆæ˜‚贵,但是物有所å€û|¼Œèƒ½å¤Ÿæä¾›éžå¸¸ä¼˜ç§€çš„æ€§èƒ½å’Œå¾ˆç‰|´»çš„管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteonž®±æžå®šäº†ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">软äšg四层交换</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    大家知道了硬件四层交换机的原理后åQŒåŸºäºŽOSI模型来实现的软äšg四层交换也就应运而生åQŒè¿™æ ïLš„解决æ–ÒŽ¡ˆå®žçŽ°çš„åŽŸç†ä¸€è‡ß_¼Œä¸è¿‡æ€§èƒ½½Eå·®ã€‚但是满­‘³ä¸€å®šé‡çš„压力还是游刃有余的åQŒæœ‰äºø™¯´è½¯äšg实现方式其实更灵‹z»ï¼Œå¤„理能力完全看你配置的熟悉能力ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    软äšg四层交换我们可以使用Linux上常用的LVS来解冻I¼ŒLVSž®±æ˜¯Linux Virtual ServeråQŒä»–提供了基于心跳线heartbeat的实时灾隑ֺ”对解å†Ïx–¹æ¡ˆï¼Œæé«˜¾pȝ»Ÿçš„鲁‹‚’性,同时可供了灵‹zȝš„虚拟VIP配置和管理功能,可以同时æ»?­‘›_¤š¿Uåº”用需求,˜q™å¯¹äºŽåˆ†å¸ƒå¼çš„ç³»¾lŸæ¥è¯´å¿…不可ž®‘ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    一个典型的使用负蝲均衡的策略就是,在èÊY件或者硬件四层交换的基础上搭建squid集群åQŒè¿™¿Uæ€èµ\在很多大型网站包括搜索引擎上被采用,˜q™æ ·çš„æž¶æž„低æˆ?本、高性能˜q˜æœ‰å¾ˆå¼ºçš„æ‰©å¼ æ€§ï¼Œéšæ—¶å¾€æž¶æž„里面增减节点都非常容易。这æ ïLš„æž¶æž„我准备空了专门详¾l†æ•´ç†ä¸€ä¸‹å’Œå¤§å®¶æŽ¢è®¨ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    对于大型¾|‘站来说åQŒå‰é¢æåˆ°çš„æ¯ä¸ªæ–ÒŽ³•可能都会被同时ä‹É用到åQŒæˆ‘˜q™é‡Œä»‹ç»å¾—比较浅显,具体实现˜q‡ç¨‹ä¸­å¾ˆå¤šç»†èŠ‚è¿˜éœ€è¦å¤§å®¶æ…¢æ…¢ç†Ÿæ‚‰å’Œä½“ä¼šåQŒæœ‰æ—¶ä¸€ä¸ªå¾ˆž®çš„squid参数或者apache参数讄¡½®åQŒå¯¹äºŽç³»¾lŸæ€§èƒ½çš„媄响就会很大,希望大家一赯‚®¨è®ºï¼Œè¾‘Öˆ°æŠ›ç –引玉之效ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">è®¨è®ºå¤§åž‹é«˜åÆˆå‘è´Ÿè½½ç½‘ç«™çš„¾pȝ»Ÿæž¶æž„问题åQŒä½œè€…提å‡ÞZº†å‡ ç‚¹å»ø™®®åQ?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">1. HTML静态化åQŒè¿™å¯ä»¥é€šè¿‡CMS 自动实现åQ?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2. 囄¡‰‡æœåŠ¡å™¨åˆ†¼›»ï¼ˆ¾cÖM¼¼çš„,在视频网站中åQŒè§†é¢‘文件也应独立出来)åQ?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; padding-top: 0px"><span style="font-size:16px;">3. 数据库集¾Ÿ¤å’Œåº“表散列åQŒOracle、MySQL½{‰DBMS都有完美的支持;</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">4. ¾~“å­˜åQŒæ¯”如ä‹Éç”?Apacheçš„Squid模块åQŒæˆ–者是开发语­a€çš„缓存模块,åQ?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">5. ¾|‘站镜像åQ?/span></p><p style="padding-bottom: 0px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">6. 负蝲均衡ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    作者将负蝲均衡¿UîCØ““是大型网站解决高负荷讉K—®å’Œå¤§é‡åƈ发请求采用的¾lˆæžè§£å†³åŠžæ³•”åQŒåƈ提出“一个典型的使用负蝲均衡的策略就是,在èÊY件或者硬件四层交æ?的基¼‹€ä¸Šæ­å»ºsquid集群”。在实践时可以考虑建立应用服务器集¾Ÿ¤å’ŒWeb服务器集¾Ÿ¤ï¼Œåº”用服务器集¾Ÿ¤å¯ä»¥é‡‡ç”¨Apache+Tomcat集群å’?WebLogic集群½{‰ï¼ŒWeb服务器集¾Ÿ¤å¯ä»¥ç”¨åå‘代理åQŒä¹Ÿå¯ä»¥ç”¨NAT的方式,或者多域名解析均可ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    ä»Žæå‡ç½‘ç«™æ€§èƒ½çš„è§’åº¦å‡ºå‘ï¼Œé™æ€èµ„æºä¸åº”å’Œåº”ç”¨æœåŠ¡å™¨æ”¾åœ¨ä¸€èµøP¼Œæ•°æ®åº“服务器也应ž®? 量独立开来。在典型的MVC模式中,ç”Þp°æ¥å®Œæˆæ•°æ®é€»è¾‘处理的,对系¾lŸæ€§èƒ½æœ‰ç€è‡›_…³é‡è¦çš„媄响。以Java EEä¸ÞZ¾‹åQŒåœ¨OOçš„è®¾è®¡æ€æƒ³ä¸­ï¼Œæˆ‘ä»¬å¼ø™°ƒ¾pȝ»Ÿçš„æŠ½è±¡ã€é‡ç”¨ã€å¯¾l´æŠ¤æ€§ï¼Œå¼ø™°ƒä¸‹å±‚的更改不会扩散到上层逻辑åQŒå¼ºè°ƒç³»¾lŸç§»æ¤çš„便捷性, 因而往往存在一¿Uè¿‡åˆ†æŠ½è±¡çš„问题åQŒæ¯”如在Hibernate的基¼‹€ä¸Šå†åР入䏀层DAO的设计。另外一斚w¢åQŒå´ä¼šå¿½è§†åˆ©ç”¨DBMS本èín的优¿U€ç‰ÒŽ€§ï¼ˆå­˜å‚¨˜q?½E‹ã€è§¦å‘器åQ‰æ¥å®Œæˆé«˜æ•ˆçš„æ•°æ®å¤„理。诚ç„Óž¼Œå¦‚果客户要求ž®†æ•°æ®ä»ŽOracle¿UÀL¤åˆ°MySQLåQŒé‚£ä¹ˆDBMSç‰ÒŽ€§çš„东西­‘Šå°‘åQŒç§»æ¤ä¾¿­‘Šå®¹æ˜“。但事实上,åœ?实践中,提出¾cÖM¼¼¿UÀL¤è¦æ±‚的情况非常少见,因此在做架构设计æ—Óž¼Œä¸ä¸€å®šäؓ了这¿Uæ½œåœ¨çš„需求而大òq…牺牲系¾lŸçš„æ€§èƒ½ä¸Žç¨³å®šæ€§ã€‚æ­¤å¤–ï¼Œæˆ‘ä¸å»ø™®®é‡‡ç”¨åˆ†å¸ƒå¼æ•°æ®åº“ ½Ž¡ç†¾l“æž„åQŒè¿™æ ·å¸¦æ¥çš„开销太大åQŒæ•°æ®ç»´æŠ¤ä¹Ÿæ˜¯ä¸ªå¤´ç—›çš„问题,ž®½å¯èƒ½é‡‡ç”¨é›†ä¸­å¼çš„æ•°æ®ç®¡ç†ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    在商业系¾lŸä¸­åQŒç®—法逻辑本èínòq¶ä¸å¤æ‚åQŒåœ¨˜q™ç§æƒ…况下,½E‹åºè®¾è®¡æœ¬èín的好坏不会对¾pȝ»Ÿçš„æ€§èƒ½é€ æˆè‡´å‘½çš„åª„å“ã€‚é‡è¦çš„å½±å“å› ç´ åè€Œå˜ä¸ø™ÊYä»¶ç³»¾lŸæž¶æž„本íw«ã€‚在ä¼?¾lŸçš„CORBA、J2EE、DCOM½{‰å¯¹è±¡æ¨¡ 型中åQŒæˆ‘们看åˆîC¸“家们对分布式对象计算的理论偏好,但实践证明,对象的分布带来的恶劣影响˜qœè¿œèƒœè¿‡å…¶ç§¯æžæ„ä¹‰ã€‚è¿™ä¹? 是现在轻量çñ”的开发框架受推崇的一个重要原因。如果能用简单的åQŒå°±ä¸è¦ç”¨å¤æ‚çš„åQŒä¾‹å¦‚能够用Python、RoR完成的ä“Q务,是否一定要用Java来做åQ?我看未必。对于用æˆäh¥è¯ß_¼Œä»–们兛_¿ƒçš„不是采用什么先˜q›çš„æŠ€æœ¯ï¼Œè€Œæ˜¯æˆ‘们提供的äñ”品能否满­‘³ä»–的需求。而且åQŒPython、RoR˜q™äº›å¼€å‘工具已¾lå¼ºå¤§åˆ°­‘?以应对大部分¾|‘站应用åQŒåœ¨å„种¾~“å­˜¾pȝ»Ÿçš„帮助下åQŒåœ¨å…¶ä»–技术的协调配合下,完全能够胜ä“Q高负载高òq¶å‘的网站访问ä“Q务ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    在HTML静态化斚w¢åQŒå¦‚果是对于更新相对较少的页面,可以˜q™æ ·å¤„理åQŒä¾‹å¦‚æ–°é—…R€ç¤¾åŒºé€šå‘Šã€æˆ–者类ä¼ég¸Žæ·˜å®¾|‘的产品分类信息。但若数据更新频¾Jï¼Œ˜q™æ ·åšçš„æ„ä¹‰ä¾¿ä¸å¤§ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">    ¾|‘站镜像是个传统的技术,更高¾U§çš„应用来自‹¹åª’体领域的CDN(Content Delivery Network)åQŒCDN的概念可以由‹¹åª’体数据扩展到囄¡‰‡ã€è§†é¢‘文件等静态资源的传输。不˜q‡ï¼Œåœ¨ç”µå­å•†åŠ¡é¢†åŸŸï¼Œå¾ˆå°‘æœ‰è¿™æ ïLš„应用ã€?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"> </p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">开源åã^å°çš„é«˜åÆˆå‘é›†¾Ÿ¤æ€è€ƒç›®å‰ç¢°åˆ°çš„é«˜åÆˆå‘åº”ç”¨ï¼Œéœ€è¦é«˜æ€§èƒ½éœ€æ±‚çš„ä¸»è¦æ˜¯ä¸¤ä¸ªæ–¹é?</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">1。网¾l?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2。数据库 </span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">˜q™ä¸¤ä¸ªæ–¹é¢çš„解决方式其实˜q˜æ˜¯ä¸€è‡´çš„</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">1。充分接˜q‘单机的性能瓉™¢ˆåQŒè‡ªæˆ‘优åŒ?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2。单机搞不定的时å€?数据传输瓉™¢ˆ:单位旉™—´å†…磁盘读å†?¾|‘络数据包的收发cpu计算瓉™¢ˆ)åQŒæŠŠè´Ÿè·åˆ†æ‹…¾l™å¤šå°æœºå™¨ï¼Œž®±æ˜¯æ‰€è°“的负蝲均衡</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">¾|‘络斚w¢å•机的处ç?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">1。底层包收发处理的模式变åŒ?从select 模式到epoll / kevent)</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2。应用模式的变化</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2.1 应用层包的构造方å¼?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2.2 应用协议的实çŽ?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2.3 包的¾~“冲模式</span></p><p style="padding-bottom: 0px; line-height: 21px; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; margin-bottom: 0.5em; margin-left: 0px; font-size: 14px; margin-right: 0px; padding-top: 0px"><span style="font-size:16px;">2.4 单线½E‹åˆ°å¤šçº¿½E?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">¾|‘络负蝲均衡的几个办æ³?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">1。代理模式:代理服务器只½Ž¡æ”¶å‘包åQŒæ”¶åˆ°åŒ…以后转给后面的应用服务器¾Ÿ¤ï¼ˆæœåŠ¡å™¨ç¾¤åŽå¯èƒ½è¿˜ä¼šæœ‰ä¸€å †å †çš„æ•°æ®åº“æœåŠ¡å™¨ç­‰½{‰ï¼‰åQŒåƈ且把˜q”回的结果再˜q”回¾l™è¯·æ±‚端</span></p><p style="padding-bottom: 0px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2。虚拟代理ipåQšä»£ç†æœåŠ¡å™¨æ”¶å‘åŒ…è¿˜è´Ÿè²å¤ªé«˜åQŒé‚£ž®±å¢žåŠ å¤šåîC»£ç†æœåС噍åQŒéƒ½æ¥ç®¡åŒ…的转发。这些代理服务器可以用统一的虚拟ipåQŒä¹Ÿå¯ä»¥å•独的ip</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">3。p2påQšä¸€äº›å¹¿æ’­çš„æ•°æ®å¯ä»¥p2p的模式来减轻服务器的¾|‘络压力</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">数据åº?指mysql)å?机的处理</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">1。数据库本èín¾l“构的设计优化(分表åQŒåˆ†è®°å½•åQŒç›®çš„在于保证每个表的记录数在可定的范围内)</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2。sql语句的优åŒ?/span></p><p style="padding-bottom: 0px; line-height: 21px; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; margin-bottom: 0.5em; margin-left: 0px; font-size: 14px; margin-right: 0px; padding-top: 0px"><span style="font-size:16px;">3。master + slave模式</span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">数据库集¾Ÿ¤çš„处理</span></p><p style="padding-bottom: 0px; line-height: 21px; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; margin-bottom: 0.5em; margin-left: 0px; font-size: 14px; margin-right: 0px; padding-top: 0px"><span style="font-size:16px;">1。master + slave模式 åQˆå¯æœ‰æ•ˆåœ°å¤„ç?òq¶å‘查询åQ?/span></p><p style="padding-bottom: 0px; line-height: 21px; margin: 1em 0px 0.5em; padding-left: 0px; padding-right: 0px; font-family: verdana, sans-serif; font-size: 14px; padding-top: 0px"><span style="font-size:16px;">2。mysql cluster 模式 åQˆå¯æœ‰æ•ˆåœ°å¤„ç†åÆˆå‘æ•°æ®å˜åŒ–ï¼‰</span></p></div><img src ="http://www.aygfsteel.com/wealupa/aggbug/381720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wealupa/" target="_blank">常言½W?/a> 2012-06-28 14:53 <a href="http://www.aygfsteel.com/wealupa/archive/2012/06/28/381720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型互联¾|‘网站架构心å¾?/title><link>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381719.html</link><dc:creator>常言½W?/dc:creator><author>常言½W?/author><pubDate>Thu, 28 Jun 2012 06:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381719.html</guid><wfw:comment>http://www.aygfsteel.com/wealupa/comments/381719.html</wfw:comment><comments>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381719.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wealupa/comments/commentRss/381719.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wealupa/services/trackbacks/381719.html</trackback:ping><description><![CDATA[<div> <p>我们知道åQŒå¯¹äºŽä¸€ä¸ªå¤§åž‹ç½‘站来è¯ß_¼Œå¯äŽ×¾~©æ€§æ˜¯éžå¸¸é‡è¦çš„,怎么样在¾Uµå‘和横向有良好的可伸羃性,ž®±éœ€è¦åœ¨åšæž¶æž„设计的时候考虑åˆîC¸€ä¸ªåˆ†çš„原则,我想在多个方面说一下怎么分:</p><p>    é¦–先是横向的分:</p><p>    1. 大的¾|‘站化解为多个小¾|‘ç«™åQšå½“我们一个网站有多个功能的时候,可以考虑把这个网站拆分成几个ž®æ¨¡å—,每一个模块可以是一个网站,˜q™æ ·çš„话我们到时候就可以很灵‹zÕdœ°åŽÀLŠŠ˜q™äº›¾|‘站部çÖvåˆîC¸åŒçš„æœåŠ¡å™¨ä¸Šã€?/p><p>    2. 静态动态分¼›»ï¼šé™æ€æ–‡ä»¶å’ŒåŠ¨æ€æ–‡ä»¶æœ€å¥½åˆ†¼›Õd¼€æˆ?个网站,我们知道静态网站和动态网站对服务器来说压力的侧重不同åQŒå‰è€…可能重IO后者重CPUåQŒé‚£ä¹ˆæˆ‘ä»?在选择¼‹¬äšg的时候也可以有侧重,而且静态和动态内容的¾~“å­˜½{–略也不一栗÷€‚典型的应用åQŒæˆ‘们一般会有独立的文äšg或图片服务器。而且åQŒä‹É用不用的域名˜q˜å¯ä»¥æ 高浏览器òq¶è¡ŒåŠ è²çš„èƒ½åŠ›ã€?/p><p>    3. 按照功能来分åQšæ¯”å¦‚æœ‰ä¸€ä¸ªæ¨¡å—æ˜¯è´Ÿè´£ä¸Šä¼ çš„ï¼Œä¸Šä¼ æ“ä½œå¾ˆæ¶ˆè€—æ—¶é—ß_¼Œå¦‚æžœå’Œå…¶å®ƒåº”ç”¨æØœåœ¨ä¸€èµïLš„话很可能åQŒä¸€ç‚¹ç‚¹è®‰K—®ž®×ƒ¼šä½¿æœåŠ¡å™¨ç˜«ç—ªåQŒè¿™¿Uç‰¹ŒDŠçš„æ¨¡å—应该分开。安全的不安全的也要分开åQŒè¿˜éœ€è¦è€ƒè™‘åˆîC»¥åŽSSL的购买ã€?/p><p>    4. 我们不一定要全部用自å·Þqš„æœåŠ¡å™¨ï¼Œæœçƒ¦ã€æŠ¥è¡¨å¯ä»¥ä¾é åˆ«äººçš„æœåŠ¡åQŒæ¯”如google的搜索和报表服务åQŒè‡ªå·±åšçš„不一定比得过别ähåQŒæœåŠ¡å™¨å¸¦å®½éƒ½çœäº†ã€?/p><p>    å…¶æ¬¡æ˜¯çºµå‘的分:</p><p>    1. æ–‡äšg也相当于数据库,IO的流量可能比数据库还大,˜q™ä¹Ÿ½Ž—是¾Uµå‘¾U§åˆ«çš„访问,上传的文件图片一定要和WEB服务器分开。当ç„Óž¼Œæ•°æ®åº“å’Œ¾|‘站都放在一个服务器上的很少了,˜q™æ˜¯æœ€åŸºæœ¬çš„ã€?/p><p>    2. 对于涉及到数据库讉K—®çš„动态程序来è¯ß_¼Œæˆ‘们可以使用一个中间层åQˆæ‰€è°“的应用层或逻辑层)来访问数据库åQˆéƒ¨¾|²åœ¨ç‹¬ç«‹çš„æœåŠ¡å™¨ä¸Šï¼‰åQŒæœ€å¤§çš„好处ž®±æ˜¯¾~“存和灵‹z?性。缓存的内存占用比较大,我们要把它和¾|‘ç«™˜q›ç¨‹åˆ†å¼€åQŒè€Œä¸”˜q™æ ·åšæˆ‘们可以很方便的去改变一些数据访问的½{–ç•¥åQŒå³ä½¿åˆ°æ—¶å€™æ•°æ®åº“有分布的话在˜q™é‡Œå¯ä»¥åšä¸€ 个调配工作,˜q™æ ·ç‰|´»æ€§å°±å¾ˆå¤§äº†ã€‚还有好处是中间层可以做ç”늺¿¾|‘通桥梁,可能¾|‘通访问双¾U¿å†è®‰K—®ç”µä¿¡ä¼šæ¯”¾|‘通直接访问电信服务器快ã€?/p><p>    æœ‰äh说我不分åQŒæˆ‘可以做负载均衡,对,是可以的åQŒä½†æ˜¯å¦‚果分的话åQŒåŒæ ïLš„10台机器肯定比不分10台机器可以承受更多的讉K—®é‡ï¼Œè€Œä¸”对硬件的需求可能不 ä¼šå¾ˆé«˜ï¼Œå› äØ“çŸ¥é“éœ€è¦å“ªä¸ªç¡¬ä»¶ç‰¹åˆ«å¥½ã€‚äº‰å–è®©æ¯ä¸€ä¸ªæœåŠ¡æœŸéƒ½ä¸½Iºé—²åQŒåˆéƒ½ä¸æ˜¯å¤ªå¿™ï¼Œåˆç†˜q›è¡Œ¾l„合调整和扩充,˜q™æ ·çš„ç³»¾lŸäŽ×¾~©æ€§å°±é«˜äº†åQŒèƒ½æ ÒŽ®è®‰K—®é‡æ¥è°ƒæ•´ 的前提就是之前有考虑到分åQŒåˆ†çš„好处是灉|´»æ€§ã€äŽ×¾~©æ€§ã€é𔼛ÀL€§ä»¥åŠå®‰å…¨æ€§ã€?/p><p>    å¯ÒŽœåŠ¡å™¨æ¥è¯´åQŒæˆ‘们有几点是要长期观察的,ä»ÖM½•一炚wƒ½å¯èƒ½æ˜¯ç“¶é¢ˆï¼š</p><p>    1. CPUåQšåŠ¨æ€æ–‡ä»¶çš„è§£æžéœ€è¦æ¯”è¾ƒå¤šçš„CPUåQŒCPU出现瓉™¢ˆž®Þp¦çœ‹æ˜¯ä¸æ˜¯å“ªä¸ªåŠŸèƒ½˜q‡é•¿æ—‰™—´å ç”¨¾U¿ç¨‹åQŒå¦‚果是ž®±åˆ†å‡ºåŽ»ã€‚æˆ–è€…å°±æ˜¯æ¯ä¸€ä¸ªè¯·æ±‚å¤„ç†æ—¶é—´ä¸é•¿ï¼Œä½†æ˜¯è®‰K—®é‡å¾ˆé«˜ï¼Œé‚£ä¹ˆž®±åŠ æœåŠ¡å™¨ã€‚CPU是好东西åQŒä¸èƒ½è®©ä»–å¹²½{‰ï¼Œä¸åšäº‹æƒ…ã€?/p><p>    2. 内存åQšç¼“存从IIS˜q›ç¨‹ç‹¬ç«‹å‡ºåŽ»åQŒä¸€èˆ¬å¯¹WEB服务器来说内存不够的情况不是很多。内存比¼‚ç›˜å¿«ï¼Œè¦åˆç†åˆ©ç”¨ã€?/p><p>   3. ¼‚ç›˜IOåQšç”¨æ€§èƒ½ç›‘视器找到哪些文件IO特别大,扑ֈ°äº†å°±åˆ†åˆ°ç‹¬ç«‹çš„一¾l„文件服务器上去åQŒæˆ–者直接做CDN。磁盘慢åQŒå¤§è§„模è¯Õd–数据的应用靠¾~“å­˜åQŒå¤§è§„模写入数据的应用可以靠队列来降低突发的òq¶å‘ã€?/p><p>    4. ¾|‘络åQšæˆ‘ä»¬çŸ¥é“ï¼Œ¾|‘络的通讯是比较慢的,比磁盘还慢,如果是做分布式缓存,分布式计½Ž—的话,要考虑到物理服务器之间¾|‘络通讯的时é—ß_¼Œå½“ç„¶åQŒåœ¨‹¹é‡å¤§äº†ä»?后,˜q™å¯ä»¥æé«˜ç³»¾lŸçš„æŽ¥çº³èƒ½åŠ›ä¸€ä¸ªç­‰¾U§ã€‚静态内容可以借助CSD分担一部分åQŒåœ¨åšæœåŠ¡å™¨å‡è®¾çš„æ—¶å€™è¿˜è¦è€ƒè™‘ä¸­å›½ç‰¹è‰²çš„ç”µä¿¡ç½‘é€šæƒ…å†µä»¥åŠé˜²ç«å¢™ã€?/p><p>   对SQL SERVER数据库服务器来说åQ?/p><p>    å…¶å®ž˜q˜æ˜¯æ°´åã^分割和纵向分å‰ÔŒ¼Œä¸€ä¸ªäºŒ¾l´è¡¨åQŒæ°´òq›_ˆ†å‰²å°±æ˜¯æ¨ª˜q‡æ¥åˆ‡ä¸€åˆ€åQŒçºµå‘分割就是竖直切一刀åQ?/p><p>    1、纵向分割就是,我们不同的应用可以分åˆîC¸åŒçš„DB中,不同的实例中åQŒæˆ–者说把某个拥有很多字ŒD늚„表拆分成ž®è¡¨ã€?/p><p>    2、横向分割就是,某些应用可能不负载,比如用户注册åQŒä½†æ˜¯ç”¨æˆ¯‚¡¨ä¼šéžå¸¸å¤§åQŒå¯ä»¥æŠŠå¤§è¡¨åˆ†å¼€ã€‚可以采用表分区åQŒæ•°æ®å­˜å‚¨åœ¨ä¸åŒæ–‡äšg上,然后再部¾|²åˆ°ç‹¬ç«‹ 物理服务器增加IO吞吐以改善读写性能åQŒåœŸä¸€ç‚¹çš„做法ž®±æ˜¯è‡ªå·±å®šæœŸæŠŠè€çš„æ•°æ®å­˜æ¡£ã€‚表分区的另外一个优势可以增加数据查询速度åQŒå› ä¸ºæˆ‘们的™å늃¦å¼•可以有å¤?层了åQŒå°±åƒä¸€ä¸ªæ–‡ä»¶å¤¹ä¸­çš„æ–‡äšg不要太多åQŒå¤šåˆ†å‡ å±‚文件夹一栗÷€?/p><p>    3、还可以通过数据库镜像、复制订阅、事物日志,把读写分开åˆîC¸åŒçš„镜像物理数据库上åQŒä¸€èˆ¬æ¥è¯´å¤Ÿç”¨ï¼Œå¦‚æžœ˜q˜ä¸è¡Œå¯ä»¥ç”¨¼‹¬äšg来实现数据库的负载均衡。当ç„Óž¼Œå¯¹äºŽBIåQŒæˆ‘们可能还会有数据仓库ã€?/p><p>      æž¶æž„上考虑åˆîCº†˜q™äº›ä¹‹åŽåQŒæµé‡å¤§äº†ï¼Œž®±å¯ä»¥åœ¨˜q™ä¸ªçš„基¼‹€ä¸Šå†åŽ»è°ƒæ•´æˆ–è€…åšWEB服务器或者应用服务器的负载均衡。很多时候我们都是在重复发现问题-》找到瓶é¢?》解册™¿™ä¸ªè¿‡½E‹ã€?/p><p>    å…¸åž‹çš„æž¶æž„如下:</p><p id="div4556062" style="text-align:center;"><img src="http://img.ddvip.com/2012/0619/201206190553134255.jpg" height="451" width="546" alt="" /></p><p>    åŠ¨æ€WEB服务器配好点的CPUåQŒé™æ€WEB服务器和文äšg服务器磁盘好ç‚?br style="font-size:12px;" />    åº”用服务器内存大点,¾~“存服务器也是,数据库服务器当然内存和CPU都要å¥?/p><p>上次说的“åˆ?#8221;是一个比较大的原则也是一个比较高层的原则åQŒè¿™‹Æ¡æˆ‘惌™¯´ä¸€ä¸‹å…¶å®ƒä¸¤ä¸ªåŽŸåˆ™ï¼šòq¶ä¸Žæ¢ã€?/p><p> òq?/p><p>     ä¸ÞZ»€ä¹ˆè¦åˆ†ï¼Ÿæ˜¯å› ä¸ºæˆ‘们希望通过分来提高¾pȝ»Ÿçš„æ‰¿è½½èƒ½åŠ›ï¼Œé‚£åÆˆåˆæ˜¯òq¶ä»€ä¹ˆå‘¢åQŸæˆ‘想了一下有几个斚w¢å¯ä»¥òqÓž¼š</p><p>     1. åˆåÆˆç”¨æˆ·è¯äh±‚åQŒæœ€åŸºæœ¬çš„就是合òq¶CSS/囄¡‰‡/脚本åQŒè¿˜å¯ä»¥åˆåƈ™åµé¢ã€‚不˜q‡åˆòq¶å°±å¯èƒ½äº§ç”Ÿ‹¹é‡çš„æµªè´¹ï¼Œéœ€è¦æœ‰ä¸€ä¸ªåã^衡点ã€?/p><p>    2. åˆåÆˆæŽ¥å£çš„ç²’åº¦ï¼Œå¦‚æžœåšåˆ†å¸ƒå¼åº”ç”¨çš„è¯åQŒæˆ‘们可能不会直接访问数据库而是调用应用层提供的接口åQŒç”±äºŽæ˜¯¾|‘络调用åQŒä»£ä»äh¯”较大åQŒå› æ­¤åœ¨è®¾è®¡çš„æ—¶å€™å°½é‡æä¾›ç²’度比较粗的接口,一‹Æ¡è°ƒç”¨è¿”回比较多的数据,而不是细化到æ·ÕdŠ åˆ é™¤ä¿®æ”¹çš„å±‚‹Æ¡ã€?/p><p>    3. åˆåÆˆæŽ¥å£çš„éƒ¨¾|ÔŒ¼Œå¯¹äºŽé¢‘繁的跨机器调用可以考虑有一些数据冗余,把跨¾|‘络的服务编½E‹è¿›½E‹é—´é€šè®¯åQŒç”šè‡Œ™{到客æˆïL«¯æ¥åšã€‚比如论坛发贴时候脏词的˜q‡æ×oåQŒç›´æŽ¥è°ƒç”¨åº”用层提供的接口(跨机器)是可以的åQŒä½†æ˜¯å¯èƒ½ä»£ä»äh¯”较大åQŒå¯ä»¥æŠŠ˜q™ä¸ªæŽ¥å£ä½¿ç”¨IPC方式部çÖv在本机ã€?/p><p> æ?/p><p>     æ—‰™—´æ¢ç©ºé—ß_¼Œ½Iºé—´æ¢æ—¶é—´æ˜¯å¸¸è§çš„做法,具体一点说åQ?/p><p>     1. ¾~“存。缓存的重要性早计算机的¼‹¬äšg中就有重要的体现。对于网站,有很多种¾~“å­˜åQŒå¯ä»¥æ˜¯å®¢æˆ·ç«¯èµ„源的¾~“å­˜åQŒå¯ä»¥æ˜¯™åµé¢è¾“出¾~“å­˜åQŒä¹Ÿå¯ä»¥æ˜¯åº”用层的数据缓存, 目的都是一æ ïLš„åQŒæˆ–是减ž®‘了服务器请求次敎ͼŒæˆ–是减少了请求的处理˜q‡ç¨‹åQŒæˆ–是减ž®‘了数据库的讉K—®‹Æ¡æ•°ã€‚当ç„Óž¼Œç”Ÿæˆé™æ€æ–‡ä»¶ä¹Ÿå¯ä»¥½Ž—是一¿Uç¼“存。不讉K—®¼‚ç›˜ 固然不可能,但是我们要极大限度降低磁盘访问的æœÞZ¼šã€?/p><p>    2. æœ‰çš„æ—¶å€™äØ“äº†èŽ·å–æžå¿«çš„å“åº”åQŒæˆ‘们还会不惜代价采用重复计½Ž—。比如,我们的某个操作很可能会由于网¾lœé—®é¢˜ç­‰åŽŸå› å“åº”æ¯”è¾ƒæ…¢ï¼Œåœ¨è®¾è®¡çš„æ—¶å€™å¯ä»¥æœ‰ä¸€ä¸ªç»Ÿä¸€çš?处理接口åQŒç”±˜q™ä¸ªæŽ¥å£åˆ†å‘åˆîC¸åŒçš„æœåŠ¡å™¨åŽ»å¼‚æ­¥å®žçŽ°˜q™ä¸ªæ“ä½œåQŒå“ªä¸ªæœåŠ¡å™¨å…ˆè¿”å›žäº†¾l“果我们ž®Þq”¨˜q™ä¸ª¾l“æžœåQŒç„¶åŽæ€æ­Õd…¶ä»–服务器的冗余操作ã€?/p><p>    3. ¾|‘站一般追求比较快的响应,一般不太会在比较高的层‹Æ¡ç”¨æ—‰™—´æ¥æ¢å–空é—ß_¼Œä½†æ˜¯åœ¨ä¸€äº›ç”¨æˆïL‹¬æœ‰æ•°æ®çš„处理½Ž—法上可能还是会考虑到空间的节省问题ã€?/p><p>    4. 有的时候我们会用一些聚合表来存放聚合数据,也就是进行一些预计算提高复杂计算åQˆæ¯”如报表)的性能。当ç„Óž¼Œå¯¹äºŽæ•°æ®åˆ†æžåQŒæž„建多¾l´æ•°æ®åº“也是一¿Uä¸é”™çš„选择ã€?/p><p>     有很多网友留­a€è¯´è¯´çš„æ¯”较粗åQŒæ²¡æœ‰ä»€ä¹ˆå…·ä½“的东西。我觉得架构˜q™ä¸ªä¸œè¥¿å¾ˆéš¾åŽ»è¯´å…·ä½“æ€Žä¹ˆåšï¼Œå› äØ“å…·ä½“å®žæ–½çš„æ—¶å€™è¦çœ‹æƒ…å†µåŽ»åº”ç”¨çš„ï¼Œç”׃ºŽæ²¡æœ‰å®Œç¾Žçš„东西,所 以做架构通常是去做一个åã^衡,很可能某一个侧重不同会影响到架构的实施。希望我的这些文章能¾l™å¤§å®¶ä¸€ä¸ªæ½Cºçš„作用åQŒçœ‹äº†ä¹‹åŽå¦‚果你觉得“˜q™ç‚¹æˆ‘倒没有考虑 刎ͼŒä»¥åŽè¦æ³¨æ„?#8221;那或许就是最大的帮助了,下面我想说一些其它方面的问题åQŒæ¯ä¸€æ¡éƒ½å¾ˆé›¶æ•£ï¼Œ½Ž—是一个补充吧åQ?/p><p>     1. 到底是采用已有的东西˜q˜æ˜¯è‡ªå·±åŽÕdšéœ€è¦è¯¦¾l†è€ƒè™‘的,采用别äh的东西可能比较稳定,但是自己的控制少了一点,采用自己做的东西可以很灵‹z»ï¼Œä½†æ˜¯å¯èƒ½ä¼šé—®é¢˜æ¯” 较多。不½Ž¡æ€Žä¹ˆæ øP¼Œæˆ‘们在采用一个第三方框架的时候务必要˜q›è¡Œ¾~œå¯†çš„调查,看到他的不èƒöåQŒå¦åˆ™é¡¹ç›®å¾ˆå¯èƒ½åœ¨åŽæœŸè¢«˜q™ä¸ªæ¡†æž¶åˆ¶çº¦åQŒåä¹‹ï¼Œå†›_®šè‡ªå·±åŽÕdšä¸€ä¸ªæ¡† 架的时候也要看到自己需要什么其他框架不能提供的东西ã€?/p><p>    2. 数据传输的时候可以做压羃åQŒä½†è¦è€ƒè™‘到压¾~©è§£åŽ‹ç¾ƒéœ€è¦CPU资源åQŒåœ¨IOåQˆç£ç›˜ï¼Œå¸¦å®½åQŒä¼ è¾“能力)和CPU之间有一个åã^衡的考虑ã€?/p><p>    3. 理想的可伸羃性架构是可以自由增加或替换服务器åQŒæ— éœ€åŽÕdœæœºç»´æŠ¤æˆ–做很大的调整。在使用一个统一的调度中心来调度˜q™äº›æœåŠ¡å™¨ï¼Œåˆ†é…è¯äh±‚的时候,我们要考虑一下调度服务器能承受多ž®‘流量ã€?/p><p>   4. 使用大量的廉ä»ähœåС噍˜q˜æ˜¯ž®‘量的高配服务器åQŸå¦‚何根据需求来¾l„合服务器发挥最大作用ã€?/p><p>    5. 对于分布式构æžÓž¼Œæˆ‘们ž®½é‡è®©æ¯ä¸€ä¸ªèŠ‚ç‚¹ä¿æŒç®€å•çš„é€»è¾‘åQŒå°½é‡å‡ž®‘同一层次节点之间的依赖,另外。需要有¾lŸä¸€çš„地æ–ÒŽ¥½Ž¡ç†æ‰€æœ‰çš„节点ã€?/p><p>    6. 功能分解、ä‹É用异步进行整合、故障è{¿U…R€å¤±æ•ˆä¿æŠ¤ã€?/p><p>   7. 软äšg的架构升¾U§å’Œè®¡ç®—机硬件的架构升çñ”很像åQŒå¯èƒ½æœ‰ä¸€ŒD‰|—¶æœŸï¼Œæˆ‘们是在慢慢提高整体能力åQ?òq´ä¹Ÿæ‰æé«˜äº†å‡ å€ï¼Œä¹‹åŽå‘现只有通过某种å½Õdº•的架构改变才能提高数十倍的能力åQŒå‡¾U§ä¹‹åŽï¼Œæˆ‘们或许又会遇到其他问题。就像CPUåQŒæ˜¯½Ž€å•提高主频还是彻底更换架构ã€?/p><p>    8. 数据斚w¢åQŒè¯»å†™åˆ†¼›…R€æ•°æ®åº“分隔、功能划分、缓存、镜像ã€?/p><p>   9. ¼‹¬äšg¾|‘络上的架构很重要,但èÊY件开发中的一些细节不可忽略,好的架构不意味着不需要代码审阅ã€?/p></div><img src ="http://www.aygfsteel.com/wealupa/aggbug/381719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wealupa/" target="_blank">常言½W?/a> 2012-06-28 14:48 <a href="http://www.aygfsteel.com/wealupa/archive/2012/06/28/381719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型¾|‘站架构设计及技术æ€È»“http://www.aygfsteel.com/wealupa/archive/2012/06/28/381717.html常言½W?/dc:creator>常言½W?/author>Thu, 28 Jun 2012 06:37:00 GMThttp://www.aygfsteel.com/wealupa/archive/2012/06/28/381717.htmlhttp://www.aygfsteel.com/wealupa/comments/381717.htmlhttp://www.aygfsteel.com/wealupa/archive/2012/06/28/381717.html#Feedback0http://www.aygfsteel.com/wealupa/comments/commentRss/381717.htmlhttp://www.aygfsteel.com/wealupa/services/trackbacks/381717.html随着中国大型IT企业信息化速度的加快,大部分应用的数据量和讉K—®é‡éƒ½æ€¥å‰§å¢žåŠ åQŒå¤§åž‹ä¼ä¸šç½‘站正面äÍ性能和高数据讉K—®é‡çš„压力åQŒè€Œä¸”对存储、安全以及信息检索等½{‰æ–¹é¢éƒ½æå‡ºäº†æ›´é«˜çš„要求……
     本文中,我想通过几个国外大型IT企业及网站的成功案例åQŒä»ŽWeb技术äh员角度探讨如何积极地应对国内大型¾|‘站卛_°†é¢äÍ的扩展(主要是技术方面,而较ž®‘涉及管理及营销½{‰æ–¹é¢ï¼‰çŸ›ç›¾ã€?

一ã€?国外大型IT¾|‘站的成功之é?/strong>
(一) MySpace
     今天åQŒMySpaceå·²ç»æˆäØ“å…¨çƒä¼—å£çš†ç¢‘çš„ç¤¾åŒºç½‘ç«™ä¹‹çŽ‹ã€‚å°½½Ž¡ä¸€‹¹å’Œè¥é”€å’Œç®¡ç†ç»éªŒè‡ªç„¶æ˜¯æ¯ä¸ªIT企业取得成功的首要因素,但是本节中我们却抛弃˜q™ä¸€ç‚¹ï¼Œè€Œä¸»è¦ç€çœégºŽæŽ¢è®¨åœ¨æ•°‹Æ¡é¢ä¸´ç³»¾lŸæ‰©å¼ çš„紧急关头MySpace是如何从技术方面采取应对策略的ã€?
½W¬ä¸€ä»£æž¶æž?#8212;æ·È½®æ›´å¤šçš„Web服务å™?
     MySpace最初的¾pȝ»Ÿå¾ˆå°åQŒåªæœ‰ä¸¤å°Web服务器(分担处理用户è¯äh±‚的工作量åQ‰å’Œä¸€ä¸ªæ•°æ®åº“服务器(所有数据都存储在这一个地方)。那时ä‹É用的æ˜? Dell双CPUã€?G内存的系¾lŸã€‚在早期阶段åQŒMySpace基本是通过æ·È½®æ›´å¤šWeb服务器来对付用户暴增问题的。但到在2004òq´æ—©æœŸï¼Œåœ? MySpace用户数增长到五十万后åQŒå…¶æ•°æ®åº“服务器已经开始疲于奔命了ã€?

½W¬äºŒä»£æž¶æž?#8212;增加数据库服务器
     与增加WebæœåŠ¡å™¨ä¸åŒï¼Œå¢žåŠ æ•°æ®åº“åÆˆæ²¡é‚£ä¹ˆç®€å•ã€‚å¦‚æžœä¸€ä¸ªç«™ç‚¹ç”±å¤šä¸ªæ•°æ®åº“æ”¯æŒï¼Œè®¾è®¡è€…å¿…™å»è€ƒè™‘的是åQŒå¦‚何在保证数据一致性的前提下让多个数据库分担压力ã€?br />
     MySpace˜qè¡Œåœ¨ä¸‰ä¸ªSQL Server数据库服务器ä¸?#8212;ä¸€ä¸ªäØ“ä¸»ï¼Œæ‰€æœ‰çš„æ–°æ•°æ®éƒ½å‘å®ƒæäº¤åQŒç„¶åŽç”±å®ƒå¤åˆ¶åˆ°å…¶å®ƒä¸¤ä¸ªåQ›å¦ä¸¤ä¸ªæ•°æ®åº“服务器全力向用户供¾l™æ•°æ®ï¼Œç”¨ä»¥åœ¨åšå®¢å’Œä¸ªäh资料 栏显½Cºã€‚è¿™¿Uæ–¹å¼åœ¨ä¸€ŒD‰|—¶é—´å†…效果很好——只要增加数据库服务器åQŒåŠ å¤§ç¡¬ç›˜ï¼Œž®±å¯ä»¥åº”对用æˆäh•°å’Œè®¿é—®é‡çš„增加ã€?br />
     ˜q™ä¸€‹Æ¡çš„æ•°æ®åº“架构按照垂直分割模式设计,不同的数据库服务于站点的不同功能åQŒå¦‚ç™Õd½•、用戯‚µ„料和博客。垂直分割策略利于多个数据库分担讉K—®åŽ‹åŠ›åQŒå½“用户 要求增加新功能时åQŒMySpace只需要投入新的数据库加以支持。在账户到达二百万后åQŒMySpace˜q˜ä»Žå­˜å‚¨è®‘Ö¤‡ä¸Žæ•°æ®åº“服务器直接交互的方式切换åˆ? SANåQˆå­˜å‚¨åŒºåŸŸç½‘¾lœï¼‰—用高带宽、专门设计的¾|‘络ž®†å¤§é‡ç£ç›˜å­˜å‚¨è®¾å¤‡è¿žæŽ¥åœ¨ä¸€èµøP¼Œè€Œæ•°æ®åº“˜qžæŽ¥åˆ°SAN。这™åÒŽŽªæ–½æžå¤§æå‡äº†¾pȝ»Ÿæ€§èƒ½ã€æ­£å¸¸è¿è¡Œæ—¶é—´å’Œå?靠性。然而,当用æˆïL‘ô¾l­å¢žåŠ åˆ°ä¸‰ç™¾ä¸‡åŽåQŒåž‚直分割策略也变得难以¾l´æŒä¸‹åŽ»ã€?br />
½W¬ä¸‰ä»£æž¶æž?#8212;转到分布式计½Ž—æž¶æž?
     几经折腾åQŒæœ€¾lˆï¼ŒMySpacež®†ç›®å…‰ç§»åˆ°åˆ†å¸ƒå¼è®¡ç®—æž¶æž„——它在物理上分布的众多服务器,整体必须逻辑上等同于单台机器。拿数据库来è¯ß_¼Œž®×ƒ¸èƒ½å†åƒè¿‡åŽ?那样ž®†åº”用拆分,再以不同数据库分别支持,而必™åÕd°†æ•´ä¸ªç«™ç‚¹çœ‹ä½œä¸€ä¸ªåº”用。现在,数据库模型里只有一个用戯‚¡¨åQŒæ”¯æŒåšå®¢ã€ä¸ªäºø™µ„料和其他核心功能的数据都 存储在相同数据库ã€?br />
     既然所有的核心数据逻辑上都¾l„织åˆîC¸€ä¸ªæ•°æ®åº“åQŒé‚£ä¹ˆMySpace必须扑ֈ°æ–°çš„办法以分担负è?#8212;—昄¡„¶åQŒè¿è¡Œåœ¨æ™®é€šç¡¬ä»¶ä¸Šçš„单个数据库服务器是无能为力 的。这‹Æ¡ï¼Œä¸å†æŒ‰ç«™ç‚¹åŠŸèƒ½å’Œåº”ç”¨åˆ†å‰²æ•°æ®åº“ï¼ŒMySpace开始将它的用户按每百万一¾l„分å‰ÔŒ¼Œç„¶åŽž®†å„¾l„的全部数据分别存入独立的SQL Server实例。目前,MySpace的每台数据库服务器实际运行两个SQL Server实例åQŒä¹Ÿž®±æ˜¯è¯´æ¯å°æœåŠ¡å™¨æœåŠ¡å¤§çº¦äºŒç™¾ä¸‡ç”¨æˆ—÷€‚据MySpace的技术äh员说åQŒä»¥åŽè¿˜å¯ä»¥æŒ‰ç…§˜q™ç§æ¨¡å¼ä»¥æ›´ž®ç²’度划分架构,从而优化负荷分 æ‹…ã€?

½W¬å››ä»£æž¶æž?#8212;求助于微软方æ¡?
     2005òq´æ—©æœŸï¼Œè´¦æˆ·è¾‘Öˆ°ä¹ç™¾ä¸‡ï¼ŒMySpace开始用微èÊYçš„C#¾~–写ASP.NET½E‹åºã€‚在收到一定成效后åQŒMySpace开始大规模˜qç§»åˆ°ASP.NETã€?
     账户辑ֈ°ä¸€åƒä¸‡æ—Óž¼ŒMySpace再次遭遇存储瓉™¢ˆé—®é¢˜ã€‚SAN的引入解决了早期一些性能问题åQŒä½†ç«™ç‚¹ç›®å‰çš„要求已¾lå¼€å§‹å‘¨æœŸæ€§è¶…­‘ŠSANçš„I/O定w‡——卛_®ƒä»Žç£ç›˜å­˜å‚¨ç³»¾lŸè¯»å†™æ•°æ®çš„æžé™é€Ÿåº¦ã€?

½W¬äº”代架æž?#8212;增加数据¾~“å­˜å±‚åÆˆè½¬åˆ°æ”¯æŒ64位处理器的SQL Server 2005
     2005òq´æ˜¥å¤©ï¼ŒMySpace账户辑ֈ°ä¸€åƒä¸ƒç™¾ä¸‡åQŒMySpace又启用了新的½{–略以减è½Õd­˜å‚¨ç³»¾lŸåŽ‹åŠ›ï¼Œå›_¢žåŠ æ•°æ®ç¼“å­˜å±‚——位于Web服务器和数据åº?服务器之é—ß_¼Œå…¶å”¯ä¸€èŒèƒ½æ˜¯åœ¨å†…存中徏立被频繁è¯äh±‚数据对象的副本,如此一来,不访问数据库也可以向Web应用供给数据ã€?br />
     2005òq´ä¸­æœŸï¼ŒæœåŠ¡è´¦æˆ·æ•°è¾¾åˆîC¸¤åƒå…­ç™¾ä¸‡æ—Óž¼ŒMySpaceå› äØ“æˆ‘ä»¬å¯¹å†…å­˜çš„æ¸´æ±‚è€Œåˆ‡æ¢åˆ°äº†è¿˜å¤„äºŽbeta‹¹‹è¯•的支æŒ?4位处理器的SQL Server 2005。升¾U§åˆ°SQL Server 2005å’?4位Windows Server 2003后,MySpace每台服务器配备了32G内存åQŒåŽäº?006òq´å†‹Æ¡å°†é…ç½®æ ‡å‡†æå‡åˆ?4Gã€?br />
     事实上,MySpaceçš„Web服务器和数据库仍然经常发生超负荷åQŒå…¶ç”¨æˆ·é¢‘繁遭遇“意外错误”å’?#8220;站点¼›Èº¿¾l´æŠ¤”½{‰å‘нCºï¼Œä»–们不得不在论坛抱怨不å?#8230;…
     MySpace正是在这样不断重构站点èÊY件、数据库和存储系¾lŸä¸­åQŒæ‰ä¸€æ­¥æ­¥èµ°åˆ°ä»Šå¤©ã€‚事实上åQŒMySpace已经成功解决了很多系¾lŸæ‰©å±•性问题,其中存在 相当的经验值得我们借鉴。MySpace¾pȝ»Ÿæž¶æž„åˆ°ç›®å‰äØ“æ­¢ä¿æŒäº†ç›¸å¯¹½E›_®šåQŒä½†å…¶æŠ€æœ¯äh员仍然在为SQL Server支持的同时连接数½{‰æ–¹é¢ç‘ô¾l­æ”»åšï¼Œž®½å¯èƒ½æŠŠäº‹æƒ…做到最好ã€?

(� Amazon
     亚马逊书店无疑是电子商务发展的里½E‹ç¢‘ã€?000òq´åˆ°çŽ°åœ¨åQŒä¸–界网¾lœä¸šè…¥é£Žè¡€é›¨ã€‚Amazon曄¡»æˆäØ“¾|‘络泡沫的头号代表。如今,当这ä¸?#8220;最大的泡沫”用几¾læ˜“改的数字把自己变成了坚实的ITå·¨ähã€?
     历览Amazon发展˜q‡ç¨‹åQŒå…¶æˆåŠŸ¾léªŒåœ¨äºŽåQŒå®ƒåˆ›é€ æ€§åœ°˜q›è¡Œäº†ç”µå­å•†åŠ¡ä¸­æ¯ä¸€çŽ¯èŠ‚çš„æŽ¢ç´¢ï¼ŒåŒ…æ‹¬¾pȝ»Ÿòq›_°çš„徏设,½E‹åº¾~–写、网站设立、配送系¾lŸç­‰½{‰æ–¹é¢ã€‚用 Amazonå½“å®¶äºø™´ç´¢æ–¯çš„话说就是,“在现实世界的商店最有力的武器就是地ŒDµï¼Œåœ°æ®µåQŒåœ°ŒDµï¼Œè€Œå¯¹äºŽæˆ‘们来说最重要的三件事ž®±æ˜¯æŠ€æœ¯ï¼ŒæŠ€æœ¯ï¼ŒæŠ€æœ¯ã€?#8221;

(� eBay
     eBay是世界闻名的拍卖¾|‘ç«™åQŒeBay公司通信部主½Ž¡å‡¯æ–?帕斯格拉夫认为,“eBay成功的最重要原因在于公司½Ž¡ç†å’ŒæœåŠ¡ã€?#8221;
     其成功的奥秘可以列ä‹Dä¸ÞZ»¥ä¸‹å‡ ç‚¹ï¼š
     ①æ•¢äØ“å¤©ä¸‹å…?#8212;在网¾lœå°šä¸æ™®åŠçš„æ—¶ä»£åQŒeBay率先˜q›å…¥¾|‘络拍卖领域åQ?
     ②依托虚拟商场所产生的特有的“零库å­?#8221;是eBay公司取得成功的另一个重要原因。该公司的核心业务没有ä“Q何库存风险,所有的商品都是由客æˆähä¾›ï¼Œå®ƒåªéœ€ 要负责提供虚拟的拍卖òq›_°—¾|‘络和èÊY件。所以,eBay公司的胦务报表上不会出现“库存费用”å’?#8220;保管费用”½{‰ã€?
③自eBay公司成立开始,它就一直遵循两æ?#8220;黄金原则”åQšå¾è®¾è™šæ‹Ÿç¤¾åŒºï¼Œ¾l™ç½‘民以家的感觉åQ›ä¿è¯ç½‘站稳定安全地˜qè¡Œã€?br />二ã€? 国内大型¾|‘站开发时的几点徏è®?/strong>
     从本节开始,我们ž®†ç»“合国内外大型IT¾|‘站在技术扩展方面的沉痛教训和成功经验,探讨在如今刚刚开始的Web 2.0时代如何应对国内¾|‘站卛_°†é¢äÍ的数据访问量增加åQˆç”šè‡Ïx˜¯æ€¥å‰§è†¨èƒ€åQ‰çš„问题åQŒåƈ提出一些供参考的½{–略和徏议ã€?

(å›? 搭徏¿U‘学的系¾lŸæž¶æž?
     构徏大型的商业网站绝对不可能像构建普通的ž®åž‹¾|‘站一样一íy´è€Œå°±åQŒéœ€è¦ä»Žä¸¥æ ¼çš„èÊYä»¶å·¥½E‹ç®¡ç†çš„角度˜q›è¡Œè®¤çœŸè§„划åQŒæœ‰æ­¥éª¤æœ‰é€»è¾‘地进行开发。对于大型网站来 è¯ß_¼Œæ‰€é‡‡ç”¨çš„æŠ€æœ¯æ¶‰åŠé¢æžå…¶òq¿æ³›åQŒä»Ž¼‹¬äšg到èÊY件、编½E‹è¯­­a€ã€æ•°æ®åº“、Web服务器、防火墙½{‰å„个领域都有了很高的要求,已经不是原来½Ž€å•çš„html静态网 站所能比拟的。以著名的Yahoo!ä¸ÞZ¾‹åQŒä»–们的每一个大型网站工½E‹éƒ½éœ€è¦å¤§é‡ç›¸åº”专业äh员的参与ã€?

(äº? ™åµé¢é™æ€åŒ–
     可不要小看纯静态化的HTML™åµé¢åQå…¶å®žåœ¨å¾ˆå¤šæƒ…况下,HTML往往意味着“效率最高、消耗最ž®?#8221;åQŒæ‰€ä»¥æˆ‘们尽可能使我们的¾|‘站上的™åµé¢é‡‡ç”¨é™æ€é¡µé¢æ¥å®?现。但是,对于大量内容òq¶ä¸”频繁更新的网站,我们无法全部手动实现åQŒå› æ­¤å¯ä»¥å¼€å‘ç›¸åº”çš„è‡ªåŠ¨åŒ–æ›´æ–°å·¥å…øP¼Œä¾‹å¦‚我们常见的信息发布系¾lŸCMS。像我们¾lå¸¸è®?问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布¾pȝ»Ÿæ¥ç®¡ç†å’Œå®žçŽ°çš„ã€‚ä¿¡æ¯å‘å¸ƒç³»¾lŸå¯ä»¥å®žçŽ°æœ€½Ž€å•的信息录入自动生成静态页面,˜q˜èƒ½å…?备频道管理、权限管理、自动抓取等功能åQŒå¯¹äºŽä¸€ä¸ªå¤§åž‹ç½‘站来è¯ß_¼Œæ‹¥æœ‰ä¸€å¥—高效、可½Ž¡ç†çš„CMS是必不可ž®‘çš„ã€?

(� 存储问题
     存储也是一个大问题åQŒä¸€¿Uæ˜¯ž®æ–‡ä»¶çš„存储åQŒæ¯”如图片这¾c»ï¼›å¦ä¸€¿Uæ˜¯å¤§æ–‡ä»¶çš„存储åQŒæ¯”如搜索引擎的索引ã€?
å¤?家知道,对于Web服务器来è¯ß_¼Œä¸ç®¡æ˜¯Apache、IIS˜q˜æ˜¯å…¶ä»–容器åQŒå›¾ç‰‡æ˜¯æœ€æ¶ˆè€—资源的åQŒäºŽæ˜¯æˆ‘们有必要ž®†å›¾ç‰‡ä¸Ž™åµé¢˜q›è¡Œåˆ†ç¦»åQŒè¿™æ˜¯åŸºæœ¬ä¸Šå¤§åž‹¾|‘ç«™ 都会采用的策略,他们都有独立的图片服务器åQŒç”šè‡›_¾ˆå¤šå°å›„¡‰‡æœåŠ¡å™¨ã€‚è¿™æ ïLš„æž¶æž„可以降低提供™åµé¢è®‰K—®è¯äh±‚的服务器¾pȝ»ŸåŽ‹åŠ›åQŒåƈ且可以保证系¾lŸä¸ä¼šå› ä¸ºå›¾ç‰?问题而崩溃,在应用服务器和图片服务器上,可以˜q›è¡Œä¸åŒçš„配¾|®ä¼˜åŒ–以保证更高的系¾lŸæ¶ˆè€—和执行效率ã€?br />
(� 数据库技�#8212;集群和库表散�
     对于大型¾|‘站而言åQŒä‹É用大型的数据库服务器是必™åȝš„事情。但是,在面对大量访问的时候,数据库的瓉™¢ˆä»ç„¶ä¼šæ˜¾çŽ°å‡ºæ¥ï¼Œ˜q™æ—¶ä¸€å°æ•°æ®åº“ž®†å¾ˆå¿«æ— æ³•满­‘›_º”用,于是我们需要借助于数据库集群或者库表散列技术ã€?br />
     在数据库集群斚w¢åQŒå¾ˆå¤šæ•°æ®åº“厂商都有自己的解å†Ïx–¹æ¡ˆï¼ŒOracle、Sybase、SQL Server½{‰éƒ½æœ‰å¾ˆå¥½çš„æ–ÒŽ¡ˆåQŒå¸¸ç”¨çš„MySQL提供的Master/Slave也是¾cÖM¼¼çš„æ–¹æ¡ˆã€‚因此,你ä‹É用了什么样的数据库åQŒå°±å‚考相应的解决æ–ÒŽ¡ˆæ?实施卛_¯ã€?

     上面提到的数据库集群ç”׃ºŽåœ¨æž¶æž„、成本、扩张性方面都会受到所采用数据库类型的限制åQŒäºŽæ˜¯æˆ‘们需要从应用½E‹åºçš„角度来考虑改善¾pȝ»Ÿæž¶æž„åQŒå…¶ä¸­ï¼Œåº“表散列æ˜?常用òq¶ä¸”最有效的解å†Ïx–¹æ¡ˆã€‚我们在应用½E‹åºä¸­å®‰è£…业务和应用或者功能模块将数据库进行分¼›»ï¼Œä¸åŒçš„æ¨¡å—对应不同的数据库或者表åQŒå†æŒ‰ç…§ä¸€å®šçš„½{–ç•¥å¯ÒŽŸä¸ªé¡µ 面或者功能进行更ž®çš„æ•°æ®åº“散列,比如用户表,按照用户ID˜q›è¡Œè¡¨æ•£åˆ—,˜q™æ ·ž®Þpƒ½å¤Ÿä½Žæˆæœ¬çš„æå‡ç³»¾lŸçš„æ€§èƒ½òq¶ä¸”有很好的扩展性。在˜q™ä¸€æ–šw¢ä¸€ä¸ªçŽ°æˆçš„ä¾‹å­ ž®±æ˜¯æœç‹ã€‚它的论坛就是采用了˜q™æ ·çš„æž¶æž„,ž®†è®ºå›çš„用户、设¾|®ã€å¸–子等信息˜q›è¡Œæ•°æ®åº“分¼›»ï¼Œç„¶åŽå¯¹å¸–子、用æˆähŒ‰ç…§æ¿å—å’ŒID˜q›è¡Œæ•£åˆ—数据库和表,最¾lˆå¯ä»?在配¾|®æ–‡ä»¶ä¸­˜q›è¡Œ½Ž€å•的配置便能让系¾lŸéšæ—¶å¢žåР䏀åîC½Žæˆæœ¬çš„æ•°æ®åº“˜q›æ¥è¡¥å……¾pȝ»Ÿæ€§èƒ½ã€?

(å…? ¾~“å­˜½{–ç•¥
     ˜q™ç»å¯¹ä¸å•指低çñ”的缓存技术相关的¾~–程åQŒåº”从整个架构角度着çœû|¼Œæ·±å…¥ç ”ç©¶Web服务器、数据库服务器的各层¾U§çš„¾~“冲½{–ç•¥åQŒæœ€åŽæ‰æ˜¯ä½Ž¾U§çš„¾~“冲技术的¾~–程ã€?不同的Web服务器、数据库服务器及Web¾~–程语言都有自己不同的缓冲策略。例如数据库存储斚w¢åQŒSQL Serve 2005中的ä¸ÕdŠ¨å¼ç¼“å­˜æœºåˆÓž¼ŒOracle数据的cache group技术,Hibernate的缓存包括Session的缓存和SessionFactory的缓存;Web服务器方面,Apache提供了自å·Þqš„ ¾~“存模块åQŒä¹Ÿå¯ä»¥ä½¿ç”¨å¤–加的Squid模块˜q›è¡Œ¾~“å­˜åQŒè¿™ä¸¤ç§æ–¹å¼å‡å¯ä»¥æœ‰æ•ˆçš„æé«˜Apache的访问响应能力,IIS¾~“冲器技术;至于web开发语­a€åQŒæ‰€ 用缓存技术更存在很大不同åQŒä¾‹å¦‚ASP.NET 2.0中提å‡ÞZº†ä¸¤ç§¾~“存应用½E‹åºæ•°æ®å’Œç¼“存服务页输出的策略,˜q™ä¸¤¿Uç¼“存技术相互独立但不相互排斥,PHP有Pearçš„Cache模块åQŒç­‰½{‰ã€?

(� 镜像
     镜像是大型网站常采用的提高性能和数据安全性的方式åQŒé•œåƒçš„æŠ€æœ¯å¯ä»¥è§£å†³ä¸åŒç½‘¾lœæŽ¥å…¥å•†å’Œåœ°åŸŸå¸¦æ¥çš„用户讉K—®é€Ÿåº¦å·®å¼‚。在镜像的细节技术方面,˜q™é‡Œä¸é˜˜q?太深åQŒæœ‰å¾ˆå¤šä¸“业的现成的解决架构和äñ”品可选。也有廉ä»ïLš„通过软äšg实现的思èµ\åQŒæ¯”如Linux上的rsync½{‰å·¥å…—÷€?

(� 负蝲均衡
     负蝲均衡ž®†æ˜¯å¤§åž‹¾|‘站解决高负药‚®¿é—®å’Œå¤§é‡òq¶å‘è¯äh±‚采用的终极解军_Šžæ³•ã€?
负蝲均衡技术发展了多年åQŒæœ‰å¾ˆå¤šä¸“业的服务提供商和äñ”品可以选择åQŒåŸºäºŽLAMP解决æ–ÒŽ¡ˆçš„Lighttped+Squid是相当不错的解决负蝲均衡和加速系¾lŸçš„æœ‰æ•ˆæ–¹å¼ã€?br />
(十一) ¼‹¬äšg四层交换
     ½W¬å››å±‚交换ä‹É用第三层和第四层信息包的报头信息åQŒæ ¹æ®åº”用区间识别业务流åQŒå°†æ•´ä¸ªåŒºé—´ŒD늚„业务‹¹åˆ†é…åˆ°åˆé€‚的应用服务器进行处理。第四层交换功能ž®Þp±¡æ˜¯è™š IPåQŒæŒ‡å‘物理服务器。它传输的业务服从的协议多种多样åQŒæœ‰HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基¼‹€ä¸Šï¼Œéœ€è¦å¤æ‚çš„ 载量òqŒ™¡¡½Ž—法。在IP世界åQŒä¸šåŠ¡ç±»åž‹ç”±¾lˆç«¯TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCPå’ŒUDP端口共同å†?定ã€?br />
     在硬件四层交换äñ”品领域,有一些知名的产品可以选择åQŒæ¯”如Alteon、F5½{‰ï¼Œ˜q™äº›äº§å“å¾ˆæ˜‚贵,但是物有所å€û|¼Œèƒ½å¤Ÿæä¾›éžå¸¸ä¼˜ç§€çš„æ€§èƒ½å’Œå¾ˆç‰|´»çš„管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteonž®±æžå®šäº†ã€?br />(十二) 软äšg四层交换
     大家知道了硬件四层交换机的原理后åQŒåŸºäºŽOSI模型来实现的软äšg四层交换也就应运而生åQŒè¿™æ ïLš„解决æ–ÒŽ¡ˆå®žçŽ°çš„åŽŸç†ä¸€è‡ß_¼Œä¸è¿‡æ€§èƒ½½Eå·®ã€‚但是满­‘³ä¸€å®šé‡çš„压力还是游刃有余的ã€?br />     一个典型的使用负蝲均衡的策略就是,在èÊY件或者硬件四层交换的基础上搭建squid集群åQŒè¿™¿Uæ€èµ\在很多大型网站包括搜索引擎上被采用,˜q™æ ·çš„æž¶æž„低成本、高性能˜q˜æœ‰å¾ˆå¼ºçš„æ‰©å¼ æ€§ï¼Œéšæ—¶å¾€æž¶æž„里面增减节点都非常容易ã€?

(十三) 软äšg投资问题
     据报å¯û|¼Œç›®å‰å›½å†…除了一些上市企业和特别大知名大公司以外åQŒå¾ˆž®‘有企业在成本中考虑正版软äšg的购¾|®è´¹ç”¨ã€‚è¿™¿Uæ€ç»´æžæœ‰å¯èƒ½¾l™ä¸­å›½äº’联网带来噩梦。如果一äº?公司真正面äÍ软äšg资金斚w¢çš„困难,完全可以考虑使用开源世界的LAMP解决æ–ÒŽ¡ˆåQˆLinuxåQ‹ApacheåQ‹MySQLåQ‹Perl、PHP或è€? Python Web¾~–程语言åQ‰ï¼›å¦åˆ™åQŒéšç€æˆ‘国加入WTO范围的不断扩大,盗版打击必然­‘Šæ¥­‘Šä¸¥ã€‚因此,“苟且åïL”Ÿ”必将自食其果ã€?

     另外åQŒéšç€¾|‘络带宽日渐提升åQŒWEB 2.0技术必ž®†åª„响到¾|‘络世界的几乎每一个角落。因此,如何¿U¯èšæŠ€æœ¯äh员进行技术攻兛_ƈ˜q›ä¸€æ­¥åŠ å¼ºå®‰å…¨é˜²èŒƒä¹ŸæˆäØ“ä¸€ä¸ªæ—¥ç›Šä¸¥å³Èš„问题åQŒå®œž®½æ—©¾U›_…¥åˆ°å…¬å¸çš„议事日程ã€?
  
å››ã€?æ€È»“
     中国电子商务真正理性发展的一个标志,是大量的传统企业实实在在地开始用互联¾|‘来处理商务、做生意åQŒè€ŒçŽ°åœ¨è¿™æ ïLš„‹¹ªæ½®å·²ç»å¼€å§‹ã€‚北京发行集团,联合SINAã€?688.com½{‰å•位共同推出的¾|‘上虚拟书店—新新书店ž®±æ˜¯˜q™æ ·çš„一个标志ã€?
     随着¾|‘络带宽日渐提升åQŒéšç€¾|‘络理念和WEB 2.0技术的断深入äh心,各种B2B、B2C、C2C½{‰ç”µå­å•†åŠ¡æ¨¡å¼å¾ˆå¯èƒ½ä»¥ç«‹ä½“äº¤å‰æ–¹å¼æ•´åˆåˆ°å„ç§å¤§åž‹å•†åŠ¡¾|‘ç«™ä¸­æ¥ã€‚å› æ­¤ï¼Œä½œäØ“å…¬å¸çš„æŠ€æœ¯ähå‘˜ï¼Œä½œäØ“ä¸?危救驄¡š„“白衣骑士”åQŒå¦‚何应å¯ÒŽ“v量存储、æ“v量访问问题,‹¹·é‡ä¿¡æ¯‹‚€ç´¢çš„问题åQŒæ—¥ç›Šä¸¥å³Èš„安全问题åQŒç­‰½{‰ï¼Œå·²ç»åˆÖM¸å®¹ç¼“ã€?img src="http://cnc.imgcache.qq.com/ac/b.gif" alt="" />

]]>
大型¾|‘站架构技术方案集é”?/title><link>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381716.html</link><dc:creator>常言½W?/dc:creator><author>常言½W?/author><pubDate>Thu, 28 Jun 2012 06:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381716.html</guid><wfw:comment>http://www.aygfsteel.com/wealupa/comments/381716.html</wfw:comment><comments>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wealupa/comments/commentRss/381716.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wealupa/services/trackbacks/381716.html</trackback:ping><description><![CDATA[<div><div class="wmqeeuq" id="cnblogs_post_body"><p>1. PlentyOfFish ¾|‘站架构学习</p> <p><a >http://www.dbanotes.net/arch/plentyoffish_arch.html</a></p> <p>采取 Windows 技术èµ\¾U¿çš„ Web 2.0 站点òq¶ä¸å¤šï¼Œé™¤äº† MySpace åQŒå¦å¤–就是这ä¸?PlentyOfFish。这个站ç‚ÒŽä¾? “Online Dating” 服务。一个ä×o人æÓ|‹z¥ä¹é“的、惊人的数据是这个只有一个äh(创徏人Markus FrindåQ‰çš„站点价å€?10 亿,估计要让很多人眼热,更何å†?Markus Frind 每天只用两个ž®æ—¶æ‰“理¾|‘ç«™–可操作性很强嘛ã€?/p> <p>2. 从LiveJournal后台发展çœ?大型¾|‘ç«™¾pȝ»Ÿæž¶æž„以及性能优化æ–ÒŽ³•</p> <p><a >http://www.example.net.cn/archives/2006/03/olivejournaloio.html</a></p> <p>LiveJournalæ˜?9òq´å§‹äºŽæ ¡å›­ä¸­çš„项目,几个人出于爱好做了这样一个应用,以实çŽîC»¥ä¸‹åŠŸèƒ½ï¼š</p> <p>* 博客åQŒè®ºå?/p> <p>* ½C¾ä¼šæ€§ç½‘¾lœï¼Œæ‰‘Öˆ°æœ‹å‹</p> <p>* 聚合åQŒæŠŠæœ‹å‹çš„æ–‡ç« èšåˆåœ¨ä¸€èµ?/p> <p>LiveJournal采用了大量的开源èÊYä»Óž¼Œç”šè‡³å®ƒæœ¬íw«ä¹Ÿæ˜¯ä¸€ä¸ªå¼€æºèÊYä»¶ã€?/p> <p>在上¾U¿åŽåQŒLiveJournal实现了非常快速的增长åQ?/p> <p>* 2004òq?月䆾åQ?80万注册用戗÷€?/p> <p>* 2005òq?月䆾åQ?80万注册用戗÷€?/p> <p>* 2005òq?月䆾åQ?90万注册用戗÷€?/p> <p>* 辑ֈ°äº†æ¯¿U’钟上千‹Æ¡çš„™åµé¢è¯äh±‚及处理ã€?/p> <p>* 使用了大量MySQL服务器ã€?/p> <p>* 使用了大量通用¾l„äšgã€?/p> <p>3. YouTube 的架构扩å±?/p> <p><a >http://www.dbanotes.net/opensource/youtube_web_arch.html</a></p> <p>在西雅图扩展性的技术研讨会上,YouTube çš?Cuong Do 做了关于 YouTube Scalability 的报告。视频内容在 Google Video 上有(地址)åQŒå¯æƒœå›½å†…用æˆïLœ‹ä¸åˆ°ã€?/p> <p>Kyle Cordes 对这个视频中的内容做了介¾lã€‚里面有不少技术性的内容。值得分äín一下ã€?Kyle Cordes 的介¾læ˜¯æœ¬æ–‡çš„主要来æº?</p> <p>4. WikiPedia 技术架构学习分äº?/p> <p><a >http://www.dbanotes.net/opensource/wikipedia_arch.html</a></p> <p>¾l´åŸºç™„¡§‘(WikiPedia.org)位列世界十大¾|‘ç«™åQŒç›®å‰æŽ’名第八位。这是开攄¡š„力量ã€?/p> <p>来点直接的数据:</p> <p>* 峰值每¿U’é’Ÿ3万个 HTTP è¯äh±‚</p> <p>* 每秒é’?3Gbit ‹¹é‡, ˜q‘乎375MB</p> <p>* 350 å?PC 服务å™?/p> <p>5. Tailrank ¾|‘站架构</p> <p><a >http://www.dbanotes.net/review/tailrank_arch.html</a></p> <p>每天æ•îC»¥åƒä¸‡è®¡çš„ Blog 内容中,实时的热ç‚ÒŽ˜¯ä»€ä¹? Tailrank ˜q™ä¸ª Web 2.0 Startup 致力于回½{”这个问题ã€?/p> <p>专门爆料¾|‘站架构çš?Todd Hoff å¯?Kevin Burton ˜q›è¡Œäº†é‡‡è®Ñ€‚于是我们能了解一ä¸?Tailrank 架构的一些信息。每ž®æ—¶ç´¢å¼• 2400 万的 Blog ä¸?FeedåQŒå†…å®¹å¤„ç†èƒ½åŠ›äØ“ 160-200MbpsåQŒIO 写入大约åœ?0-15MBps。每个月要处ç?52T 之多的原始数据。Tailrank æ‰€ç”¨çš„çˆ¬è™«çŽ°åœ¨å·²ç»æˆäØ“ä¸€ä¸ªç‹¬ç«‹äñ”品:spinn3rã€?/p> <p>6. LinkedIn æž¶æž„½W”è®°</p> <p><a >http://www.dbanotes.net/arch/linkedin.html</a></p> <p>LinkedIn 雇员æœ?180 个,åœ?Web 2.0 公司中算是比较多的,不过人家自从 2006 òq´å°±ç›ˆåˆ©äº†ï¼Œ˜q™åœ¨ Web 2.0 站点中可½Ž—少的。用戯‚¶…˜q?1600 万,现在每月新增 100 万,50åQ?会员来自‹¹·å¤–(中国用户不少åQŒä¹ŸåŒ…括æˆ?.</p> <p>7. YahooåQç¤¾åŒºæž¶æž?/p> <p><a >http://www.dbanotes.net/arch/yahoo_arch.html</a></p> <p>旧金å±×ƒ‹D行的 QCon 会议带给我们很多新鲜的信息。虽然没æœÞZ¼šå‚加åQŒä½†æ˜¯çœ‹çœ‹å„个网ç«?#8221;æ™’æž¶æž?#8221;也是个比较过瘄¡š„事情。请参观òq¶æ”¶è—è¿™ä¸ªé¡µé¢ï¼šArchitectures you’ve always wondered aboutã€?/p> <p>8. Craigslist 的数据库架构</p> <p><a >http://www.dbanotes.net/database/craigslist_database_arch.html</a></p> <p>Craigslist ¾lå¯¹æ˜¯äº’联网的一个传奇公司。根据以前的一则报道:</p> <p>每月­‘…过 1000 万äh使用该站服务åQŒæœˆ‹¹è§ˆé‡è¶…˜q?30 亿次åQ?Craigslist每月新增的帖子近 10 亿条??)¾|‘站的网™å‰|•°é‡åœ¨ä»¥æ¯òq´è¿‘癑րçš„速度增长。Craigslist 至今却只æœ?18 名员å·?现在可能会多一些了)ã€?/p> <p>9. Fotolog.com 的技术信息拾é›?/p> <p><a >http://www.dbanotes.net/review/fotolog_arch.html</a></p> <p>ž®½ç®¡æ˜¯ä¸–界上最大的囄¡‰‡æœåŠ¡¾|‘ç«™, Fotolog.com 在国内的名气òq¶ä¸æ˜¯å¾ˆå“äº®, 每当提到囄¡‰‡æœåŠ¡, 很多人第一个会惌™“v Flickr. 但实际上 Fotolog 也的¼‹®æ˜¯å¾ˆçŒ›çš? Alexa 上的排名一直在 Flickr 前面, 目前注册用户­‘…过 1100 ä¸? 而前不久也卖了一个好价钱, 9000 万美é‡? ½Ž—下来的è¯? 1 个注册用户大¾U?9 ¾ŸŽé‡‘. Yupoo 的刘òq³é˜³å¯ä»¥åïL€½Ž—算自己的网站如果卖¾l™è€å¤–是怎样一个ä­hæ égº†.</p> <p>10. Digg ¾|‘站架构</p> <p><a >http://www.dbanotes.net/arch/digg_arch_cache_and_shard.html</a></p> <p>Digg 工程师采ç”?LAMP (Linux, Apache, MySQL and PHP) 模式。这ä¸?Alexa 排名åœ?100 左右的、自我估ä»?1.5 亿美金的站点目前有超˜q?100 台的 PC 服务å™?­‘›_¤Ÿž®‘了)åQŒå¯ä»¥ç²—略分成三个部分:数据库服务器åQŒWeb 服务器,搜烦服务器ã€?/p> <p>11. Amazon çš?Dynamo æž¶æž„</p> <p><a >http://www.dbanotes.net/techmemo/amazon_dynamo.html</a></p> <p>我在 DBAnotes.net 上记录过不少比较大的¾|‘站架构分析(eg: eBay [1], eBay [2]) åQŒAmazon 一直找不到太多的资料。国庆期间读åˆîCº†ä¸€½‹‡å…³äº?Amazon Dynamo 的论文,非常¾_‘Ö½©ã€‚Amazon Dynamo ˜q™ä¸ªé«˜å¯ç”¨ã€å¯æ‰©å±•存储体系支撑了Amazon 不少核心服务.</p> <p>12. 财帮子(caibangzi.comåQ‰ç½‘站架æž?/p> <p><a >http://www.dbanotes.net/arch/caibangzi_web_arch.html</a></p> <p>财帮å­?caibangzi.com) 定位åœ?#8221;基金理胦½C‘ÖŒº”。是国内讉K—®é‡æœ€å¤§çš„åŸÞZºŽ Ruby on rails çš?startup ™å¹ç›®ã€?#8220;理胦”˜q™ä¸ªè¯æ®è¯´æ˜¯å…‰å¤§é“¶è¡Œå‘明的,且不åŽÈ®¡åQŒä¸å¯å¦è®¤çš„æ˜¯ï¼Œç›®å‰å›½å†…”理胦”是个很有潜力的切入点。胦帮子¾|‘站潜在用户¾Ÿ¤è¿˜æ˜¯å¾ˆå¤§çš„ã€?/p> <p>13. 了解一ä¸?Technorati 的后台数据库架构</p> <p><a >http://www.dbanotes.net/web/technorati_db_arch.html</a></p> <p>目前处理着大约 10Tb 核心数据, 分布在大¾U?20 台机器上.通过复制, 多增加了 100Tb 数据, 分布åœ?200 台机器上. 每天增长的数æ?1TB. 通过 SOA 的运ç”? 物理与逻辑的访问相隔离,ä¼ég¹Žæ¶ˆé™¤äº†æ•°æ®åº“的瓶é¢? 值得一提的æ˜? 该扩展过½E‹å§‹¾lˆæ˜¯åˆ©ç”¨æ™®é€šçš„¼‹¬äšg与开源èÊY件来完成çš? 毕竟 , Web 2.0 站点都不是烧é’Þqš„ä¸? 从数据量来看åQŒè¿™¾lå¯¹æ˜¯ä¸€ä¸ªç›¸å¯Òޝ”较大çš? Web 2.0 应用.</p> <p>14. è¯´è¯´å¤§åž‹é«˜åÆˆå‘é«˜è´Ÿè²¾|‘站的系¾lŸæž¶æž?/p> <p><a >http://www.toplee.com/blog/?p=71</a></p> <p>我在CERNET做过拨号接入òq›_°çš„æ­å»ºï¼Œè€ŒåŽåœ¨Yahoo&3721从事˜q‡æœç´¢å¼•擎前端开发,又在MOP处理˜q‡å¤§åž‹ç¤¾åŒºçŒ«æ‰‘大杂烩的架æž?升çñ”½{‰å·¥ä½œï¼ŒåŒæ—¶è‡ªå·±æŽ¥è§¦å’Œå¼€å‘过不少大中型网站的模块åQŒå› æ­¤åœ¨å¤§åž‹¾|‘站应对高负载和òq¶å‘的解å†Ïx–¹æ¡ˆä¸Šæœ‰ä¸€äº›ç§¯ç´¯å’Œ¾léªŒåQŒå¯ä»¥å’Œå¤§å®¶ä¸€èµähŽ¢è®¨ä¸€ä¸‹ã€?/p> <p>15. 大型高负载网站架æž?的感æƒ?/p> <p><a >http://atman.memoab.com/articles/194</a></p> <p>昨日认识了位健谈的IT人,原在verycd作系¾lŸç®¡ç†çš„叶宁(˜q™å“¥ä»¬çŽ°é£˜æ³ŠåŽ»è§é¦–éƒ½äººæ°‘äº?.</p> <p>以前sweater¾l™æˆ‘介绍的他写的《大型高负蝲¾|‘站架构和应用初探ã€? ä»–æ€È»“了很多信息和数据åQŒæ„Ÿè°¢å¶å®çš„辛劳成果. ˜q™é‡Œæˆ‘也惛_°±æ­¤PPT写些自己的感æƒ? </p></div></div><img src ="http://www.aygfsteel.com/wealupa/aggbug/381716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wealupa/" target="_blank">常言½W?/a> 2012-06-28 14:35 <a href="http://www.aygfsteel.com/wealupa/archive/2012/06/28/381716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型¾|‘站架构设计http://www.aygfsteel.com/wealupa/archive/2012/06/28/381707.html常言½W?/dc:creator>常言½W?/author>Thu, 28 Jun 2012 05:34:00 GMThttp://www.aygfsteel.com/wealupa/archive/2012/06/28/381707.htmlhttp://www.aygfsteel.com/wealupa/comments/381707.htmlhttp://www.aygfsteel.com/wealupa/archive/2012/06/28/381707.html#Feedback0http://www.aygfsteel.com/wealupa/comments/commentRss/381707.htmlhttp://www.aygfsteel.com/wealupa/services/trackbacks/381707.html

按需提供大型¾|‘站的架构设计,具体包括åQ?/p>

大型¾|‘站架构设计 - adyhpq - adyhpq的个äºÞZ¸»™å? style=

 

A. 提供后台数据库设计:æ ÒŽ®ä¸šåŠ¡éœ€æ±‚çš„ç†è§£åQŒé’ˆå¯ÒŽŒ‡å®šçš„æ•°æ®åº“(æ¶ëŠ›–Oracle,MySql,SqlServer,DB2åQ‰æä¾›ç½‘站项目的后台数据库设计ã€?/p>

后台数据库的设计是整个网站最重要的环节,其结构定义通常¼‹®å®šäº†åŽåîC¸šåŠ¡æ•°æ®çš„å­˜å‚¨æ–¹å¼ä»¥åŠ ¾lå¤§éƒ¨åˆ†åŽå°æ•°æ®è®‰K—®æ¨¡åž‹ã€‚对大型¾|‘站而言åQŒç”±äºŽå…¶éœ€è¦æ”¯æ’‘的负荷很大åQŒæ•°æ®åº“设计ž®†å…³¾pÕdˆ°æ•°æ®å‚¨å­˜é‡ï¼Œæ•°æ®è®‰K—®æ•ˆçއåQŒç¼“存效率,数据安全½{‰å¤šä¸ªæ–¹é¢ï¼Œå¤?型网站的数据库设计原则与普通企业应用的设计原则有许多区别,需要经验丰富的架构师才能胜仅R€?/p>

提供后台持久层设计:持久层设计是在后台数据库设计的基¼‹€ä¸Šï¼Œæ ÒŽ®å…·ä½“¾~–程语言åQŒæ ¹æ®ç½‘站访问特征具体设计的¾~–程框架。设计目标将兼顾处理效率和代码的可维护性、可理解性(如面向对象)ã€?/p>

B. 提供¾~“存设计åQšæ ¹æ®ä¸šåŠ¡éœ€æ±‚ï¼Œ¾l“合后台数据库设计和后台持久层设计,提供¾|‘站的缓存设计方案。具体包括前端缓存,å…׃ín数据¾~“å­˜åQŒåˆ†å¸ƒå¼¾~“å­˜ã€?/p>

所谓前端缓存,指把¾|‘页上短期内不太变化的内宏V€æ ¹æ®è®¿é—®æ•ˆçŽ‡è¯„ä¼ŽÍ¼Œé€šè¿‡ç‰‡æ®µå½¢å¼ä»¥ä¸€å®šç­–略缓存è“v来,从而减ž®‘后台内容生成的旉™—´åQŒæå‡ç½‘站的响应效率和节省服务器的处理资源占用ã€?/p>

所谓共享数据缓存,指把后台中公å…Þqš„æ•°æ®æ ÒŽ®è®‰K—®é¢‘度和更新频度以一定策略在服务器缓存è“v来,避免每次使用都需要从数据库或¼‚ç›˜æå–ã€?/p>

所谓分布式¾~“å­˜åQŒæŒ‡å¤§åž‹¾|‘站需要利用分布式的缓存来在多台集¾Ÿ¤æœºå™¨ä¹‹é—´å…±äº«æŸäº›å¤„理结果内宏V€?/p>

C. 提供MVCåQˆModel-View-ControlleråQ‰æ¡†æž¶è®¾è®¡ï¼šæ ÒŽ®ä¸šåŠ¡éœ€æ±‚å’Œ¾|‘站特点提供合适的、高效的MVC处理框架ã€?/p>

MVC是Web应用前端的重要架构组成,¾|‘站交互的绝大部分内容将集中在这个部分,一套高效而易于扩展和使用的MVC框架是整个网站中重要¾l„成ã€?/p>

D. 提供安全框架åQšæ ¹æ®ä¸šåŠ¡éœ€è¦å’Œæ•°æ®å®‰å…¨ä¿æŠ¤çš„éœ€è¦ï¼Œæä¾›¾|‘站安全框架ã€?/p>

E. 提供SEOåQˆSearch Engine Optimize)æ–ÒŽ¡ˆåQšé¢å‘搜索引擎提供网站搜索优化方案ã€?/p>

F. 提供备䆾æ–ÒŽ¡ˆåQšæ ¹æ®ä¸šåŠ¡éœ€è¦æä¾›é’ˆå¯¹ä¸åŒåã^台的数据åQˆä»£ç ã€æ•°æ®ã€ç”¨æˆ¯‚µ„料)½{‰å¤‡ä»½æ–¹æ¡ˆã€?/p>



]]>
大型¾|‘站架构不得不考虑çš?0个问é¢?/title><link>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381705.html</link><dc:creator>常言½W?/dc:creator><author>常言½W?/author><pubDate>Thu, 28 Jun 2012 05:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381705.html</guid><wfw:comment>http://www.aygfsteel.com/wealupa/comments/381705.html</wfw:comment><comments>http://www.aygfsteel.com/wealupa/archive/2012/06/28/381705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wealupa/comments/commentRss/381705.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wealupa/services/trackbacks/381705.html</trackback:ping><description><![CDATA[<div><p>˜q™é‡Œçš„大型网站架构只包括高互动性高交互性的数据型大型网站,åŸÞZºŽå¤§å®¶ä¼—所周知的原因,我们ž®×ƒ¸è°ˆæ–°é—ȝ±»å’Œä¸€äº›ä¾é HTML静态化ž®±å¯ä»¥å®žçŽ°çš„æž¶æž„ 了,我们以高负蝲高数据交换高数据‹¹åŠ¨æ€§çš„¾|‘ç«™ä¸ÞZ¾‹åQŒæ¯”如æ“v内,开心网½{‰ç±»ä¼¼çš„web2.0¾pÕdˆ—架构。我们这里不讨论是PHP˜q˜æ˜¯JSP或è€?NETçŽ?境,我们从架构的斚w¢åŽÈœ‹é—®é¢˜åQŒå®žçŽ°è¯­­a€æ–šw¢òq¶ä¸æ˜¯é—®é¢˜ï¼Œè¯­è¨€çš„优势在于实现而不是好坏,不论你选择ä»ÖM½•语言åQŒæž¶æž„都是必™å»è¦é¢å¯¹çš„ã€?/p> <p>˜q™é‡Œè®¨è®ºä¸€ä¸‹å¤§åž‹ç½‘站需要注意和考虑的问é¢?/p> <p><strong>1、æ“v量数据的处理</strong> </p> <p>众所周知åQŒå¯¹äºŽä¸€äº›ç›¸å¯¹å°çš„ç«™ç‚ÒŽ¥è¯ß_¼Œæ•°æ®é‡åƈ不是很大åQŒselectå’Œupdatež®±å¯ä»¥è§£å†Ïxˆ‘们面对的问题åQŒæœ¬íw«è´Ÿè½½é‡ä¸æ˜¯å¾ˆå¤§åQŒæœ€å¤šå†åР几ä¸?索引ž®±å¯ä»¥æžå®šã€‚对于大型网站,每天的数据量可能ž®×ƒ¸Šç™¾ä¸‡åQŒå¦‚果一个设计不好的多对多关¾p»ï¼Œåœ¨å‰æœŸæ˜¯æ²¡æœ‰ä»ÖM½•问题的,但是随着用户的增长,数据量会是几ä½?¾U§çš„增长的。在˜q™ä¸ªæ—¶å€™æˆ‘们对于一个表的selectå’Œupdate的时å€?˜q˜ä¸è¯´å¤šè¡¨è”合查è¯?的成本的非常高的ã€?/p> <p><strong>2ã€æ•°æ®åÆˆå‘çš„å¤„ç†</strong> </p> <p>在一些时候,2.0çš„CTO都有个尚方宝剑,ž®±æ˜¯¾~“存。对于缓存,在高òq¶å‘高处理的时候也是个大问题。在整个应用½E‹åºä¸‹ï¼Œ¾~“存是全局å…׃ín的,然而在 我们˜q›è¡Œä¿®æ”¹çš„æ—¶å€™å°±åQŒå¦‚果两个或者多个请求同时对¾~“存有更新的要求的情况下åQŒåº”用程序会直接的死掉。这个时候,ž®±éœ€è¦ä¸€ä¸ªå¥½çš„æ•°æ®åƈ发处理策略以及缓å­?½{–ç•¥ã€?/p> <p>另外åQŒå°±æ˜¯æ•°æ®åº“的死锁问题,也许òqÏx—¶æˆ‘们感觉不到åQŒæ­»é”åœ¨é«˜åƈ发的情况下的出现的概率是非常高的åQŒç£ç›˜ç¼“存就是一个大问题ã€?/p> <p><strong>3、文件存贮的问题</strong> </p> <p>对于一些支持文件上传的2.0的站点,在庆òq¸ç¡¬ç›˜å®¹é‡è¶Šæ¥è¶Šå¤§çš„æ—¶å€™æˆ‘们更多的应该考虑的是文äšgåº”è¯¥å¦‚ä½•è¢«å­˜å‚¨åÆˆä¸”è¢«æœ‰æ•ˆçš„çƒ¦å¼•ã€‚å¸¸è§çš„æ–ÒŽ¡ˆæ˜¯å¯¹æ–?件按照日期和¾cÕdž‹˜q›è¡Œå­˜è´®ã€‚但是当文äšg量是‹¹·é‡çš„æ•°æ®çš„æƒ…况下,如果一块硬盘存贮了500个G的琐¼„Žæ–‡ä»Óž¼Œé‚£ä¹ˆ¾l´æŠ¤çš„æ—¶å€™å’Œä½¿ç”¨çš„æ—¶å€™ç£ç›˜çš„Iož®±æ˜¯ä¸€ä¸?巨大的问题,哪怕你的带宽èƒö够,但是你的¼‚ç›˜ä¹Ÿæœªå¿…响应过来。如果这个时候还涉及上传åQŒç£ç›˜å¾ˆå®ÒŽ˜“ž®±over了ã€?/p> <p>也许用raid和专用存贮服务器能解决眼下的问题åQŒä½†æ˜¯è¿˜æœ‰ä¸ªé—®é¢˜ž®±æ˜¯å„地的访问问题,也许我们的服务器在北京,可能在云南或者新疆的讉K—®é€Ÿåº¦å¦‚何解决?如果做分布式åQŒé‚£ä¹ˆæˆ‘们的文äšg索引以及架构该如何规划ã€?/p> <p>所以我们不得不承认åQŒæ–‡ä»¶å­˜è´®æ˜¯ä¸ªå¾ˆä¸å®¹æ˜“的问题</p> <p><strong>4、数据关¾pȝš„处理</strong> </p> <p>我们可以很容易的规划å‡ÞZ¸€ä¸ªç¬¦åˆç¬¬ä¸‰èŒƒå¼çš„æ•°æ®åº“,里面布满了多对多关系åQŒè¿˜èƒ½ç”¨GUID来替换INDENTIFY COLUMN 但是åQŒå¤šå¯¹å¤šå…³ç³»å……æ–¥çš?.0时代åQŒç¬¬ä¸‰èŒƒå¼æ˜¯½W¬ä¸€ä¸ªåº”该被抛弃的。必™åÀLœ‰æ•ˆçš„æŠŠå¤šè¡¨è”合查询降到最低ã€?/p> <p><strong>5、数据烦引的问题</strong> </p> <p>众所周知åQŒçƒ¦å¼•是提高数据库效率查询的最斚w¢æœ€å»‰ä­h最å®ÒŽ˜“实现的方案。但是,在高UPDATE的情况下åQŒupdateå’Œdelete付出的成本会高的无法æƒÏxƒ³åQŒç¬”者遇到过一个情况,在更æ–îC¸€ä¸ªèšç„¦çƒ¦å¼•的时候需è¦?0分钟来完成,那么对于站点来说åQŒè¿™äº›åŸºæœ¬ä¸Šæ˜¯ä¸å¯å¿å—çš„ã€?/p> <p>索引和更新是一对天生的冤家åQŒé—®é¢˜AåQŒDåQŒE˜q™äº›æ˜¯æˆ‘们在做架构的时候不得不考虑的问题,òq¶ä¸”也可能是èŠÞp´¹æ—‰™—´æœ€å¤šçš„问题åQ?/p> <p><strong>6、分布式处理</strong> </p> <p>对于2.0¾|‘ç«™ç”׃ºŽå…‰™«˜äº’动性,CDN实现的效果基本上ä¸?åQŒå†…å®ÒŽ˜¯å®žæ—¶æ›´æ–°çš„ï¼Œæˆ‘ä»¬å¸¸è§„çš„å¤„ç†ã€‚äØ“äº†ä¿è¯å„åœ°çš„è®‰K—®é€Ÿåº¦åQŒæˆ‘们就需要面对一个绝大的问题åQŒå°±æ˜¯å¦‚何有效的实现数据同步和更斎ͼŒå®žçŽ°å„åœ°æœåŠ¡å™¨çš„å®žæ—¶é€šè®¯æœ‰æ˜¯ä¸€ä¸ªä¸å¾—ä¸éœ€è¦è€ƒè™‘çš„é—®é¢˜ã€?/p> <p><strong>7、Ajax的利弊分æž?/strong> </p> <p>成也AJAXåQŒèÓ|也AJAXåQŒAJAXæˆäØ“äº†ä¸»‹¹è¶‹åŠ¿ï¼Œ½Hç„¶å‘现åŸÞZºŽXMLHTTPçš„postå’Œget是如此的å®ÒŽ˜“。客æˆïL«¯get或者post 到服务器数据åQŒæœåŠ¡å™¨æŽ¥åˆ°æ•°æ®è¯äh±‚之后˜q”回来,˜q™æ˜¯ä¸€ä¸ªå¾ˆæ­£å¸¸çš„AJAXè¯äh±‚。但是在AJAX处理的时候,如果我们使用一个抓包工å…ïLš„话,å¯ÒŽ•°æ®è¿”回和å¤?理是一目了然。对于一些计½Ž—量大的AJAXè¯äh±‚的话åQŒæˆ‘们可以构造一个发包机åQŒå¾ˆå®ÒŽ˜“ž®±å¯ä»¥æŠŠä¸€ä¸ªwebserveròq²æŽ‰ã€?/p> <p><strong>8、数据安全性的分析</strong> </p> <p>对于HTTP协议来说åQŒæ•°æ®åŒ…都是明文传输的,也许我们可以说我们可以用加密啊,但是对于G问题来说的话åQŒåŠ å¯†çš„˜q‡ç¨‹ž®±å¯èƒ½æ˜¯æ˜Žæ–‡äº?比如我们知道 çš„QQåQŒå¯ä»¥å¾ˆå®ÒŽ˜“的判断他的加密,òq¶æœ‰æ•ˆçš„写一个跟他一æ ïLš„加密和解密方法出来的)。当你站ç‚ÒŽµé‡ä¸æ˜¯å¾ˆå¤§çš„æ—¶å€™æ²¡æœ‰äh会在乎你åQŒä½†æ˜¯å½“你流量上来之 后,那么所谓的外挂åQŒæ‰€è°“çš„¾Ÿ¤å‘ž®×ƒ¼šæŽ¥è¸µè€Œæ¥(从qq一开始的¾Ÿ¤å‘可见端å€?。也许我们可以很的意的说åQŒæˆ‘们可以采用更高çñ”别的判断甚至HTTPS来实 玎ͼŒæ³¨æ„åQŒå½“你做˜q™äº›å¤„理的时候付出的ž®†æ˜¯‹¹·é‡çš„databaseåQŒio以及CPU的成本。对于一些群发,基本上是不可能的。笔者已¾lå¯ä»¥å®žçŽ°å¯¹äºŽç™¾åº¦ç©º é—´å’Œqq½Iºé—´çš„ç¾¤å‘äº†ã€‚å¤§å®¶æ„¿æ„è¯•è¯•ï¼Œå®žé™…ä¸ŠåÆˆä¸æ˜¯å¾ˆéš¾ã€?/p> <p><strong>9、数据同步和集群的处理的问题</strong> </p> <p>当我们的一台databaseserver不堪重负的时候,˜q™ä¸ªæ—¶å€™æˆ‘们就需要做åŸÞZºŽæ•°æ®åº“的负蝲和集¾Ÿ¤äº†ã€‚而这个时候可能是最让äh困扰的的问题 了,数据åŸÞZºŽ¾|‘络传输æ ÒŽ®æ•°æ®åº“的设计的不同,数据延迟是很可怕的问题åQŒä¹Ÿæ˜¯ä¸å¯é¿å…çš„问题åQŒè¿™æ ïLš„话,我们ž®±éœ€è¦é€šè¿‡å¦å¤–的手ŒD‰|¥ä¿è¯åœ¨è¿™å»¶è¿Ÿçš„几¿U’或 者更长的几分钟时间内åQŒå®žçŽ°æœ‰æ•ˆçš„äº¤äº’ã€‚æ¯”å¦‚æ•°æ®æ•£åˆ—ï¼Œåˆ†å‰²åQŒå†…容处理等½{‰é—®é¢?/p> <p><strong>10、数据共享的渠道以及OPENAPI­‘‹åŠ¿</strong> </p> <p>Openapiå·²ç»æˆäØ“ä¸€ä¸ªä¸å¯é¿å…çš„­‘‹åŠ¿åQŒä»ŽgoogleåQŒfacebookåQŒmyspace到æ“v内校内,都在考虑˜q™ä¸ªé—®é¢˜åQŒå®ƒå¯ä»¥æ›´æœ‰æ•ˆçš„留住 用户òq¶æ¿€å‘用æˆïLš„æ›´å¤šçš„å…´­‘£ä»¥åŠè®©æ›´å¤šçš„äh帮助你做最有效的开发。这个时候一个有效的数据å…׃ínòq›_°åQŒæ•°æ®å¼€æ”‘Öã^å°å°±æˆäØ“å¿…ä¸å¯å°‘çš„é€”å¾„äº†ï¼Œè€Œåœ¨å¼€æ”„¡š„接口 的情况保证数据的安全性和性能åQŒåˆæ˜¯ä¸€ä¸ªæˆ‘们必™å»è¦è®¤çœŸæ€è€ƒçš„问题了ã€?/p></div><img src ="http://www.aygfsteel.com/wealupa/aggbug/381705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wealupa/" target="_blank">常言½W?/a> 2012-06-28 13:26 <a href="http://www.aygfsteel.com/wealupa/archive/2012/06/28/381705.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>