??xml version="1.0" encoding="utf-8" standalone="yes"?>在线观看免费亚洲,亚洲熟女综合色一区二区三区 ,色在线亚洲视频wwwhttp://www.tkk7.com/wealupa/archive/2016/08/07/431487.html常言W?/dc:creator>常言W?/author>Sun, 07 Aug 2016 09:50:00 GMThttp://www.tkk7.com/wealupa/archive/2016/08/07/431487.htmlhttp://www.tkk7.com/wealupa/comments/431487.htmlhttp://www.tkk7.com/wealupa/archive/2016/08/07/431487.html#Feedback0http://www.tkk7.com/wealupa/comments/commentRss/431487.htmlhttp://www.tkk7.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 配置文gp|", 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
 <!-- redisq接配置 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>
    
    <!-- redisq接配置 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.tkk7.com/wealupa/archive/2016/08/07/431486.html常言W?/dc:creator>常言W?/author>Sun, 07 Aug 2016 09:32:00 GMThttp://www.tkk7.com/wealupa/archive/2016/08/07/431486.htmlhttp://www.tkk7.com/wealupa/comments/431486.htmlhttp://www.tkk7.com/wealupa/archive/2016/08/07/431486.html#Feedback0http://www.tkk7.com/wealupa/comments/commentRss/431486.htmlhttp://www.tkk7.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.tkk7.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.tkk7.com/wealupa/archive/2012/06/28/381724.html</guid><wfw:comment>http://www.tkk7.com/wealupa/comments/381724.html</wfw:comment><comments>http://www.tkk7.com/wealupa/archive/2012/06/28/381724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wealupa/comments/commentRss/381724.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wealupa/services/trackbacks/381724.html</trackback:ping><description><![CDATA[<div>提问<br /><br />◆ Perl、Python、Ruby和PHP各自有何特点?<br /><br />◆ Z么动态语a多作量的解x?<br /><br />◆ LAMPZ么受Ƣ迎?<br /><br />◆ Ruby on RailsZ么会行?<br /><br />◆ ~程语言的发展趋势是什?<br /><br />讲解<br /><br />“剩下四种动态语aQ我们将之归为后台脚本语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;—与用户交互的是前台语aQ与机器交互的是pȝ语言Q?介于其中的ؓ前台提供服务同时又需要底层系l服务的是后台语a?#8221;<br /><br />逗号询问Q?#8220;后台语言又细分成q_语言与后台脚本语a?”<br /><br />“q?是基于程?program)与脚?script)、静态与动态而分的?#8221;冒号q行说明Q?#8220;其实PerlQPHPQPython和Ruby都有自己的虚 拟机(virtual machine)Q从q种意义上说它们也可作ؓq_语言。但在实际应用中Q它们没有Javaq_?NETq_那种整合凝聚力和核心作用Q通常作ؓ轻量U?的解x案?#8221;<br /><br />问号x个究竟:“q是׃它们都是动态语a的缘故吗?”<br /><br />冒号回答Q?#8220;理论上动态语a同样能承担大型应 用,但实践上它们多作为粘合语a或用于中型应用。用句时髦的话来形容Q暂时还是主的配角或非L的主角。毕竟在q行效率、类型安全、可用资源、开发工 兗技术支持等斚wQ它们与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?NETZ表的q_与动态语a的交壤地带也在逐步扩大。比如JRuby允许Ruby与Java之间互相调用Q类似的q有 Jython、IronRuby、IronPython{等。此外值得一提的是,动态语a最z跃的舞台当数LAMPQL-A-M-P?#8221;<br /><br />引号接茬Q?#8220;L是LinuxQA是ApacheQM是MySQLQP是PHP。这四大lg形成了一个完整的开源网l开发^台?#8221;<br /><br />冒号补充道:“P也可指Perl、PythonQ甚至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_QLAMP以其开攄zR开发迅速、部|方ѝ高可配|、安全可靠、成本低廉等特色而与Javaq_?NETq_鼎三分Q尤其受中小企业的欢 q。LAMP中Linux是操作系l,Apache是Web服务器,MySQL是数据库pȝQ而我们当下最兛_的是‘P族语a’QPHP、Perl?Pythonq有Ruby?#8221;<br /><br />问号Q?#8220;作ؓ动态语aQ它们的共性上节课已经谈了不少Q能说说它们的个性吗?”<br /><br />“它们 的个性极为鲜明:Perl凝练晦ӆQPython优雅明晰QRuby_y灵动QPHP明单U。先看老大哥PerlQ它博采众家之长Q综合了C语言的结 构、sed的正则表辑ּ、AWK的关联数l?associative array)、Lisp的表(list)和Unix Shell的命令,此外q有借鉴了一U语aQ你们知道是哪种?”冒号忽然卖了个关子?br /><br />逗号猜想Q?#8220;应该是某UOOP语言吧?#8221;<br /><br />“Perl 中确有不C++的媄子,但它的对象模型在5.0以后才引入,典型的半路出Ӟq不如前面的特征那么自然。与其说是一U自然而然的发展,不如说是在OOP 潮流Ҏ下的一Un不由qq合。真正深入骨髓的借鉴是自然语a?#8221;冒号l出了答案,“我们提过QPerl的发明者Larry Wall是一名语a学家Q他认ؓE序语言应该与自然语a一Pz自然、易L写、表辑֤栗不拘一根{Perlq有不少的格a或哲学,使得~程语言一?严}L的面孔,散发出浓郁的人文气息?#8221;<br /><br />叹号q了一默:“我见qPerl的代码,人文气息没闻出来Q但我怀疑有乙醚气息——看一会就觉得晕晕乎乎的?#8221;<br /><br />众h大笑?br /><br />“?Z用一行Perl代码实CRSA法Q你看了那还不得当场晕倒啊?”冒号打趣道,“Perl的各U魔W好g把把锋利的剪刀Q做h本裁剪之cȝ?作来游刃有余。这是它最大的长处Q当初Perl是Wall用来做Unixpȝ理的,以后在CGI上的q泛应用也得益于此。这也赋予Perl极强的粘?力,因而有‘internet上的胶带(duct tape)[2]’的说法。它又号U瑞士军刀Q精l而复杂,实用而强大。但Perlq于灉|自由Q缺乏规范,影响了程序的可读性、一致性、整z性和可维?性。不熟悉该语a的固然如d书,熟悉语言而不熟悉问题的也颇费思量。相比之下Python被认为是Perl有力的挑战者,不仅在于它天然的OO设计和丰 富的cdQ更重要的是它对E序员友好度大大过Perl。Python也有一pd的被UCؓ?Zen)的哲学,不少与Perl是针锋相对的。比 如:Perl认ؓ做一件事可以有多U方法,而Python认ؓ一件事应该最好只有一U方?Perlq求语言的表现力QPythonq求单优 ?Perl喜欢隐性暗C,Python显性明C?Perl紧凑QPython松散; Perl的语法和语义丰富QPython的语法和语义单而类库丰富。或许Python最让h不习惯的是它对空白符敏感性?#8221;<br /><br />引号感到惊奇Q?#8220;对空白符敏感?q个倒真怪异?#8221;<br /><br />?可惯不怪:“虽然有点q反习惯Q但非常W合Python一贯的规范z的风格——一斚w从语法上保证了良好的~码风格;另一斚wQ每个代码块不再需要v 始的大括hbegin/end之类的,减少了的代码行数。顺便插一句,另外一U优雅的语言Haskell同样对空白符敏感Q或怼雅正是来自对l节和规 范的重视吧。此外许多h抱怨Python中的自引用self太多Q殊不知q也是它倡导昑ּ表达的一U体现。ȝ看来QPython主要的问题还是在性能?率上不尽如h意?#8221;<br /><br />叹号好奇地问Q?#8220;Ruby怎么?据说它将取代Java?#8221;<br /><br />“不要轻言‘取代’二字?#8221;冒号规诫 道,“Java没有取代C++Q也不会被Ruby取代Q至多只是一U再分配。不qRuby的确是门很可q语言Q兼具Perl的表现力和Python的可 L。Ruby背后最L色的理念是:xE序员用语a时的感受过语言本n的功能。通俗地说Q兵器的U手比锋利更重要;文雅地说Q应l予E序员更多的 人文x。就拿代码块(block)和P代器(iterator)来说Q虽然均非Ruby首创Q但其语法最心悦目。类似的例子比比皆是。Ruby的元 ~程能力特别强,也是它高度灵zȝ一U体玎ͼ但ƈ不是所有h都喜Ƣ这U风根{Ruby的主要弱Ҏ两个Q一个与PythoncMQ在性能上还有待提高;?一个是它的U程qL?user space)而不是内核空?kernel space)来管理[3]Q不能充分利用多核或多CPU。真正让Ruby变得炙手可热的是web应用框架 Ruby on Rails(RoR)的成功,它们q催生了Javaq_上的Groovy语言和Groovy on Grails框架。RoR奉行的CoC(Convention over Configuration)和DRY(Don’t repeat yourself )原则以及MVC架构看似了无新意Q但与Rubyl合之后Q便如一只猱w而上늌Q立刻衬托出Java?NET大象般的w媄?#8221;<br /><br />逗号有些怀疑:“框架竟然捧红了语aQ框架真有这么重要吗?”<br /><br />“?果web应用中动态页面较或业务逻辑不复杂,框架的h值ƈ不大。以前CGI~程是往Perl之类的代码中嵌入HTML代码Q如同Java中的 Servlet;PHP则单U地在HTML代码中插入PHP代码Q如同早期的JSP。没有MVCQ也不管什么三层架构,更没有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)的概忉|行之际,RoRAJAX与Rubyl合在一h为绝佳的回应。以前各Uweb应用框架是不,但在RoR之前轻量U套 式解决Ҏq不多。Perl中的Catalyst、Python中的Pylonq有PHP中的CakePHP{应是效仿之作。因此RoR出现的时机可?是不早不晚,正当其时。此外,Perl和PHP׃q于行Q反而有不少的历史包袱,Z习惯了将表示逻辑和业务逻辑~织在一赗至于Java企业解决?案,框架太多Q搭配组合更多,增加了选择的难度。即佉K用最常见的轻量SSH(Struts+Spring+Hibernate)l合Q维护v来也?RoRJ杂得多?#8221;<br /><br />叹号愈发担忧Q?#8220;听这意思,Javaq是危险?”<br /><br />“a之过早?#8221;冒号不以为然Q?#8220;首先RoRq有待进一步检验,目前无论是应用广度还是深度上无法与Java相提q论;其次Java在性能、安全等斚wq是有不优势,而这些对于大型和关键性的应用来说ؓ重要。即使在中小型web应用中,RoR较之PHPq远Z及?#8221;<br /><br />问号接下话题Q?#8220;PHPZ如此行?”<br /><br />“?为它单、专一?#8221;冒号{得很干脆,“与Python和Ruby一开始就定位通用语言不同QPHP是专为网l而生的。同早期的Perl怼QPHP起初?要v文本qo器的作用Q只不过Perl多处理文件流(file stream)Q而PHP多处理套接字?socket stream)。PHP的语法简单,且ؓ|络应用度n定造,受到|络开发h员的q捧当在情理之中。它虽很实用很流行,但ƈ不完。比如:变量名大写敏感 而函数名大小写不敏感;函数命名规则不一?不支持namespace和unicode[4];与Perl一P它的对象模型不是先天的,直到PHP 5才真正完?对线E支持不?相比Perl、Python和RubyQ它的功能稍昑֍薄等{?#8221;<br /><br />引号H然惌vQ?#8220;我记得您在第一堂课提到PHPq能用于桌面应用?#8221;<br /><br />“?仅PHPQPerl、Pythonq有RubyQ都能作为前台语a来开发命令行或图形界面的应用。同样地QVB、Delphi和JavaScript也能 作ؓ后台语言。现代的E序语言既有自己的专长,又向通用化和全能化发展,以争取更多的生存I间。试想一下,C的程序员又何不是如此呢?”a及于此,?h住话题,“语言评告一D落Q还有不既有趣又有用的语言Q在此就不一一评说了。我们看刎ͼ每种~程语言都有其独特的惯例用法和哲学理念,它们与编E?范式一道Ş成了语言的编E风根{体悟愈p编E语感愈强,思维与语a愈交融无,渐从必然王国走向自由王国?#8221;<br /><br />逗号满怀憧憬Q?#8220;那是不是一Uh剑合一的境?”<br /><br />“或许人器合一更准吧Q程序员可不能只会一U兵器哟?#8221;冒号故意抠他的字|“现在请大家每人写一句对本节评感言?#8221;<br /><br />众h沉思片刻,齐齐挥笔而就——<br /><br />叹号——没有最好的语言Q只有最合适的语言?br /><br />逗号——没有p糕的语aQ只有糟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 architectureQ一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也UCU程。据URuby2.0支持原生线E?native thread)?br /><br />[4] PHP在5.3.0支持namespaceQ将?.0支持unicode?br /><br />ȝ<br /><br />◆ 比vJavaq_?NETq_Q动态语aM灉|、开发效率高Q但整合凝聚力还不够Q在q行效率、类型安全、可用资源、开发工兗技术支持以及媄响力{方面也有一定差距,故通常作ؓ轻量U的解决Ҏ?br /><br />◆ LAMP是由Linux、Apache、MySQL和包括PHP、Perl、Python或Ruby在内的脚本语al成的网l开发^収ͼh开攄zR开发迅速、部|方ѝ高可配|、安全可靠、成本低廉等优点?br /><br />◆ Perl_、复杂、强大、灵zR自由、隐晦、表现力强,但规范性、可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.tkk7.com/wealupa/aggbug/381724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wealupa/" target="_blank">常言W?/a> 2012-06-28 15:41 <a href="http://www.tkk7.com/wealupa/archive/2012/06/28/381724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LAMP|站架构Ҏ分析http://www.tkk7.com/wealupa/archive/2012/06/28/381722.html常言W?/dc:creator>常言W?/author>Thu, 28 Jun 2012 07:00:00 GMThttp://www.tkk7.com/wealupa/archive/2012/06/28/381722.htmlhttp://www.tkk7.com/wealupa/comments/381722.htmlhttp://www.tkk7.com/wealupa/archive/2012/06/28/381722.html#Feedback0http://www.tkk7.com/wealupa/comments/commentRss/381722.htmlhttp://www.tkk7.com/wealupa/services/trackbacks/381722.htmlLAMPQLinux-Apache-MySQL-PHPQ网站架构是目前国际行的Web框架Q该框架包括QLinux操作pȝQApache|?l服务器QMySQL数据库,Perl、PHP或者Python~程语言Q所有组成品均是开源YӞ是国际上成熟的架构框Ӟ很多行的商业应用都是采 取这个架构,和Java/J2EE架构相比QLAMPhWeb资源丰富、轻量、快速开发等特点Q微软的.NET架构相比QLAMPh通用、跨q_、高 性能、低h的优势,因此LAMP无论是性能、质量还是h格都是企业搭建网站的首选^台?p>  对于大流量、大q发量的|站pȝ架构来说Q除 了硬件上使用高性能的服务器、负载均衡、CDN{之外,在Y件架构上需要重点关注下面几个环节:使用高性能的操作系l(OSQ、高性能的网|务器 QWeb ServerQ、高性能的数据库QDatabseQ、高效率的编E语a{。下面我从q几点对其一一讨论?/p>

  操作pȝ

   Linux操作pȝ有很多个不同的发行版Q如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS{,每一个发行版都有自己的特Ԍ比如RHEL的稳定,Ubuntu的易用,ZE_?和性能的考虑Q操作系l选择CentOSQCommunity ENTerprise Operating SystemQ是一个理想的Ҏ?/p>

   CentOSQCommunity ENTerprise Operating SystemQ是Linux发行版之一Q是RHEL/Red Hat Enterprise Linux的精免费版,和RHEL为同L源代码,不过QRHEL和SUSE LE{企业版Q提供的升服务均是收费升Q无法免费在U升U,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用?/p>

LAMP|站架构Ҏ分析

LAMP|站架构?/p>

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

   Apache是LAMP架构最核心的Web ServerQ开源、稳定、模块丰富是Apache的优ѝ但Apache的缺Ҏ有些臃肿Q内存和CPU开销大,性能上有损耗,不如一些轻量的Web 服务器(例如nginxQ高效,轻量U的Web服务器对于静态文件的响应能力来说q高于Apache服务器?/p>

  Apache做ؓWeb Server是负载PHP的最佳选择Q如果流量很大的话,可以采用nginx来负载非PHP的Webh。nginx是一个高性能的HTTP和反向代理服 务器QNginx以它的稳定性、丰富的功能集、示例配|文件和低系l资源的消耗而闻名。Nginx不支持PHP和CGI{动态语aQ但支持负蝲均衡和容 错,可和Apache配合使用Q是轻量U的HTTP服务器的首选?/p>

  Web服务器的~存也有多种ҎQApache提供了自q~存?块,也可以用外加的Squid模块q行~存Q这两种方式均可以有效的提高Apache的访问响应能力。Squid Cache是一个Web~存服务器,支持高效的缓存,可以作ؓ|页服务器的前置cache服务器缓存相兌求来提高Web服务器的速度Q把Squid攑֜ Apache的前端来~存Web服务器生成的动态内容,而Web应用E序只需要适当地设|页面实效时间即可。如讉K量巨大则可考虑使用memcache?为分布式~存?/p>

  PHP的加速用eAccelerator加速器QeAccelerator是一个自由开放源码PHP加速器Q优化和?态内容缓存,提高了性能PHP脚本的缓存性能Q得PHP脚本在编译的状态下Q对服务器的开销几乎完全消除。它q有对脚本v优化作用Q以加快其执行效率?使PHPE序代码执效率能提高1-10倍?/p>

  具体的解x案有以下几种Q?/p>

  1、squid + Apache + PHP + eAccelerator

  使用Apache负蝲PHPQ用squidq行~存Qhtml或图片的h可以直接由squidq回l用戗很多大型网站都采用q种架构?/p>

  2、nginx/Apache + PHPQfastcgiQ?+ eAccelerator

  使用nginx或Apache负蝲PHPQPHP使用fastcgi方式q行Q效率较高?/p>

  3、nginx + Apache + PHP + eAccelerator

  此方案综合了nginx和Apache的优点,使用Apache负蝲PHPQnginx负责解析其他WebhQ用nginx的rewrite模块QApache端口不对外开放?/p>

  数据?/strong>

   开源的数据库中QMySQL在性能、稳定性和功能上是首选,可以辑ֈ百万U别的数据存储,|站初期可以MySQL和Web服务器放在一P但是当访?量达C定规模后Q应该将MySQL数据库从Web Server上独立出来,在单独的服务器上q行Q同时保持Web Server和MySQL服务器的E_q接?/p>

  当数据库讉K量达到更大的U别Q可以考虑使用MySQL Cluster{数据库集群或者库表散列等解决Ҏ?/p>

  ȝ来说QLAMP架构的网站性能会远q优于Windows IIS + ASP + AccessQ例如月光博客)q样的网站,可以负蝲的访问量也非常大Q国内的大量个h|站如果惌支撑大访问量Q采用LAMP架构是一个不错的Ҏ?/p>

  lg所qͼZLAMP架构设计h成本低廉、部|灵zR快速开发、安全稳定等特点Q是Web|络应用和环境的优秀l合?/p>

]]>
大型|站架构设计及技术分?/title><link>http://www.tkk7.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.tkk7.com/wealupa/archive/2012/06/28/381720.html</guid><wfw:comment>http://www.tkk7.com/wealupa/comments/381720.html</wfw:comment><comments>http://www.tkk7.com/wealupa/archive/2012/06/28/381720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wealupa/comments/commentRss/381720.html</wfw:commentRss><trackback:ping>http://www.tkk7.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斚wQ基本的解决Ҏ集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编E语a、还有高性能的Web容器。但是除了这几个斚wQ还没法Ҏ解决大型|站面的高负蝲和高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我们常见的信息发布系lCMS 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֌cd|站来说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;">    同时Qhtml静态化也是某些~存{略使用的手D,对于pȝ中频J用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实玎ͼ比如论坛?论坛的公用设|信息,q些信息目前的主论坛都可以q行后台理q且存储在数据库中,q些信息其实大量被前台程序调用,但是更新频率很小Q可以考虑这?分内容进行后台更新的时候进行静态化Q这样避免了大量的数据库讉Kh?/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、IISq是其他容器Q图片是最消耗资源的Q于是我们有必要图片与面q行分离Q这是基本上大型|?站都会采用的{略Q他们都有独立的囄服务器,甚至很多台图片服务器。这L架构可以降低提供面讉Kh的服务器pȝ压力Qƈ且可以保证系l不会因为图 片问题而崩溃,在应用服务器和图片服务器上,可以q行不同的配|优化,比如apache在配|ContentType的时候可以尽量少支持Q尽可能的 LoadModuleQ保证更高的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也是cM的方案,您用了什么样的DBQ就参考相应的解决 Ҏ来实施即可?/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;">    上面提到的数据库集群׃在架构、成本、扩张性方面都会受到所采用DBcd的限Ӟ于是我们需要从应用E序的角度来考虑改善pȝ架构Q库表散列是常用q且 最有效的解x案。我们在应用E序中安装业务和应用或者功能模块将数据库进行分,不同的模块对应不同的数据库或者表Q再按照一定的{略Ҏ个页面或者功 能进行更的数据库散列,比如用户表,按照用户IDq行表散列,q样p够低成本的提升系l的性能q且有很好的扩展性。sohu的论坛就是采用了q样的架 构,论坛的用户、设|、帖子等信息q行数据库分,然后对帖子、用h照板块和IDq行散列数据库和表,最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序开发方面的~存QLinux上提供的Memory Cache是常用的~存接口Q可以在web开发中? 用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯׃nQ一些大型社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是虚 IPQ指向物理服务器。它传输的业务服从的协议多种多样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来解冻ILVS是Linux Virtual ServerQ他提供了基于心跳线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. 囄服务器分(cM的,在视频网站中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. 数据库集和库表散列QOracle、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;">    作者将负蝲均衡UCؓ“是大型网站解决高负荷讉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 EEZQ在OO的设计思想中,我们pȝ的抽象、重用、可l护性,下层的更改不会扩散到上层逻辑Q强调系l移植的便捷性, 因而往往存在一U过分抽象的问题Q比如在Hibernate的基上再加入一层DAO的设计。另外一斚wQ却会忽视利用DBMS本n的优UҎ(存储q?E、触发器Q来完成高效的数据处理。诚Ӟ如果客户要求数据从OracleUL到MySQLQ那么DBMSҎ的东西少Q移植便容易。但事实上,?实践中,提出cMUL要求的情况非常少见,因此在做架构设计Ӟ不一定ؓ了这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算法逻辑本nq不复杂Q在q种情况下,E序设计本n的好坏不会对pȝ的性能造成致命的媄响。重要的影响因素反而变Y件系l架构本w。在?l的CORBA、J2EE、DCOM{对象模 型中Q我们看C家们对分布式对象计算的理论偏好,但实践证明,对象的分布带来的恶劣影响q远胜过其积极意义。这? 是现在轻量的开发框架受推崇的一个重要原因。如果能用简单的Q就不要用复杂的Q例如能够用Python、RoR完成的Q务,是否一定要用Java来做Q?我看未必。对于用h_他们兛_的不是采用什么先q的技术,而是我们提供的品能否满他的需求。而且QPython、RoRq些开发工具已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静态化斚wQ如果是对于更新相对较少的页面,可以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)QCDN的概念可以由媒体数据扩展到囄、视频文件等静态资源的传输。不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。虚拟代理ipQ代理服务器收发包还负蝲太高Q那增加多C理服务器Q都来管包的转发。这些代理服务器可以用统一的虚拟ipQ也可以单独的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。p2pQ一些广播的数据可以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。数据库本nl构的设计优化(分表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.tkk7.com/wealupa/aggbug/381720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wealupa/" target="_blank">常言W?/a> 2012-06-28 14:53 <a href="http://www.tkk7.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.tkk7.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.tkk7.com/wealupa/archive/2012/06/28/381719.html</guid><wfw:comment>http://www.tkk7.com/wealupa/comments/381719.html</wfw:comment><comments>http://www.tkk7.com/wealupa/archive/2012/06/28/381719.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/wealupa/comments/commentRss/381719.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wealupa/services/trackbacks/381719.html</trackback:ping><description><![CDATA[<div> <p>我们知道Q对于一个大型网站来_可׾~性是非常重要的,怎么样在U向和横向有良好的可伸羃性,需要在做架构设计的时候考虑C个分的原则,我想在多个方面说一下怎么分:</p><p>    首先是横向的分:</p><p>    1. 大的|站化解为多个小|站Q当我们一个网站有多个功能的时候,可以考虑把这个网站拆分成几个模块,每一个模块可以是一个网站,q样的话我们到时候就可以很灵zdLq些|站部vC同的服务器上?/p><p>    2. 静态动态分:静态文件和动态文件最好分d?个网站,我们知道静态网站和动态网站对服务器来说压力的侧重不同Q前者可能重IO后者重CPUQ那么我?在选择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自己做的不一定比得过别hQ服务器带宽都省了?/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同L10台机器肯定比不分10台机器可以承受更多的讉K量,而且对硬件的需求可能不 会很高,因ؓ知道需要哪个硬件特别好。争取让每一个服务期都不I闲Q又都不是太忙,合理q行l合调整和扩充,q样的系l׾~性就高了Q能Ҏ讉K量来调整 的前提就是之前有考虑到分Q分的好处是灉|性、׾~性、隔L以及安全性?/p><p>    Ҏ务器来说Q我们有几点是要长期观察的,M一炚w可能是瓶颈:</p><p>    1. CPUQ动态文件的解析需要比较多的CPUQCPU出现瓉p看是不是哪个功能q长旉占用U程Q如果是分出去。或者就是每一个请求处理时间不长,但是讉K量很高,那么加服务器。CPU是好东西Q不能让他干{,不做事情?/p><p>    2. 内存Q缓存从IISq程独立出去Q一般对WEB服务器来说内存不够的情况不是很多。内存比盘快,要合理利用?/p><p>   3. 盘IOQ用性能监视器找到哪些文件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来实现数据库的负载均衡。当Ӟ对于BIQ我们可能还会有数据仓库?/p><p>      架构上考虑Cq些之后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服务器配好点的CPUQ静态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. 合ƈ用户hQ最基本的就是合qCSS/囄/脚本Q还可以合ƈ面。不q合q就可能产生量的浪费,需要有一个^衡点?/p><p>    2. 合ƈ接口的粒度,如果做分布式应用的话Q我们可能不会直接访问数据库而是调用应用层提供的接口Q由于是|络调用Q代h较大Q因此在设计的时候尽量提供粒度比较粗的接口,一ơ调用返回比较多的数据,而不是细化到d删除修改的层ơ?/p><p>    3. 合ƈ接口的部|Ԍ对于频繁的跨机器调用可以考虑有一些数据冗余,把跨|络的服务编E进E间通讯Q甚臌{到客L来做。比如论坛发贴时候脏词的qoQ直接调用应用层提供的接口(跨机器)是可以的Q但是可能代h较大Q可以把q个接口使用IPC方式部v在本机?/p><p> ?/p><p>     旉换空_I间换时间是常见的做法,具体一点说Q?/p><p>     1. ~存。缓存的重要性早计算机的g中就有重要的体现。对于网站,有很多种~存Q可以是客户端资源的~存Q可以是面输出~存Q也可以是应用层的数据缓存, 目的都是一LQ或是减了服务器请求次敎ͼ或是减少了请求的处理q程Q或是减了数据库的讉Kơ数。当Ӟ生成静态文件也可以是一U缓存。不讉K盘 固然不可能,但是我们要极大限度降低磁盘访问的Z?/p><p>    2. 有的时候ؓ了获取极快的响应Q我们还会不惜代价采用重复计。比如,我们的某个操作很可能会由于网l问题等原因响应比较慢,在设计的时候可以有一个统一?处理接口Q由q个接口分发C同的服务器去异步实现q个操作Q哪个服务器先返回了l果我们qq个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在IOQ磁盘,带宽Q传输能力)和CPU之间有一个^衡的考虑?/p><p>    3. 理想的可伸羃性架构是可以自由增加或替换服务器Q无需d机维护或做很大的调整。在使用一个统一的调度中心来调度q些服务器,分配h的时候,我们要考虑一下调度服务器能承受多流量?/p><p>   4. 使用大量的廉h务器q是量的高配服务器Q如何根据需求来l合服务器发挥最大作用?/p><p>    5. 对于分布式构Ӟ我们量让每一个节点保持简单的逻辑Q尽量减同一层次节点之间的依赖,另外。需要有l一的地Ҏ理所有的节点?/p><p>    6. 功能分解、用异步进行整合、故障{UR失效保护?/p><p>   7. 软g的架构升U和计算机硬件的架构升很像Q可能有一D|期,我们是在慢慢提高整体能力Q?q也才提高了几倍,之后发现只有通过某种d的架构改变才能提高数十倍的能力Q升U之后,我们或许又会遇到其他问题。就像CPUQ是单提高主频还是彻底更换架构?/p><p>    8. 数据斚wQ读写分R数据库分隔、功能划分、缓存、镜像?/p><p>   9. g|络上的架构很重要,但Y件开发中的一些细节不可忽略,好的架构不意味着不需要代码审阅?/p></div><img src ="http://www.tkk7.com/wealupa/aggbug/381719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wealupa/" target="_blank">常言W?/a> 2012-06-28 14:48 <a href="http://www.tkk7.com/wealupa/archive/2012/06/28/381719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型|站架构设计及技术ȝhttp://www.tkk7.com/wealupa/archive/2012/06/28/381717.html常言W?/dc:creator>常言W?/author>Thu, 28 Jun 2012 06:37:00 GMThttp://www.tkk7.com/wealupa/archive/2012/06/28/381717.htmlhttp://www.tkk7.com/wealupa/comments/381717.htmlhttp://www.tkk7.com/wealupa/archive/2012/06/28/381717.html#Feedback0http://www.tkk7.com/wealupa/comments/commentRss/381717.htmlhttp://www.tkk7.com/wealupa/services/trackbacks/381717.html随着中国大型IT企业信息化速度的加快,大部分应用的数据量和讉K量都急剧增加Q大型企业网站正面性能和高数据讉K量的压力Q而且对存储、安全以及信息检索等{方面都提出了更高的要求……
     本文中,我想通过几个国外大型IT企业及网站的成功案例Q从Web技术h员角度探讨如何积极地应对国内大型|站卛_面的扩展(主要是技术方面,而较涉及管理及营销{方面)矛盾?

一?国外大型IT|站的成功之?/strong>
(一) MySpace
     今天QMySpace已经成ؓ全球众口皆碑的社区网站之王。尽一和营销和管理经验自然是每个IT企业取得成功的首要因素,但是本节中我们却抛弃q一点,而主要着g探讨在数ơ面临系l扩张的紧急关头MySpace是如何从技术方面采取应对策略的?
W一代架?#8212;ȝ更多的Web服务?
     MySpace最初的pȝ很小Q只有两台Web服务器(分担处理用户h的工作量Q和一个数据库服务器(所有数据都存储在这一个地方)。那时用的? Dell双CPU?G内存的系l。在早期阶段QMySpace基本是通过ȝ更多Web服务器来对付用户暴增问题的。但到在2004q早期,? MySpace用户数增长到五十万后Q其数据库服务器已经开始疲于奔命了?

W二代架?#8212;增加数据库服务器
     与增加Web服务器不同,增加数据库ƈ没那么简单。如果一个站点由多个数据库支持,设计者必考虑的是Q如何在保证数据一致性的前提下让多个数据库分担压力?br />
     MySpaceq行在三个SQL Server数据库服务器?#8212;一个ؓ主,所有的新数据都向它提交Q然后由它复制到其它两个Q另两个数据库服务器全力向用户供l数据,用以在博客和个h资料 栏显C。这U方式在一D|间内效果很好——只要增加数据库服务器Q加大硬盘,可以应对用h和访问量的增加?br />
     q一ơ的数据库架构按照垂直分割模式设计,不同的数据库服务于站点的不同功能Q如d、用戯料和博客。垂直分割策略利于多个数据库分担讉K压力Q当用户 要求增加新功能时QMySpace只需要投入新的数据库加以支持。在账户到达二百万后QMySpaceq从存储讑֤与数据库服务器直接交互的方式切换? SANQ存储区域网l)—用高带宽、专门设计的|络大量磁盘存储设备连接在一P而数据库q接到SAN。这Ҏ施极大提升了pȝ性能、正常运行时间和?靠性。然而,当用Ll增加到三百万后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;求助于微软方?
     2005q早期,账户辑ֈ九百万,MySpace开始用微Y的C#~写ASP.NETE序。在收到一定成效后QMySpace开始大规模q移到ASP.NET?
     账户辑ֈ一千万ӞMySpace再次遭遇存储瓉问题。SAN的引入解决了早期一些性能问题Q但站点目前的要求已l开始周期性超SAN的I/O定w——卛_从磁盘存储系l读写数据的极限速度?

W五代架?#8212;增加数据~存层ƈ转到支持64位处理器的SQL Server 2005
     2005q春天,MySpace账户辑ֈ一千七百万QMySpace又启用了新的{略以减d储系l压力,卛_加数据缓存层——位于Web服务器和数据?服务器之_其唯一职能是在内存中徏立被频繁h数据对象的副本,如此一来,不访问数据库也可以向Web应用供给数据?br />
     2005q中期,服务账户数达C千六百万ӞMySpace因ؓ我们对内存的渴求而切换到了还处于beta试的支?4位处理器的SQL Server 2005。升U到SQL Server 2005?4位Windows Server 2003后,MySpace每台服务器配备了32G内存Q后?006q再ơ将配置标准提升?4G?br />
     事实上,MySpace的Web服务器和数据库仍然经常发生超负荷Q其用户频繁遭遇“意外错误”?#8220;站点ȝl护”{告C,他们不得不在论坛抱怨不?#8230;…
     MySpace正是在这样不断重构站点Y件、数据库和存储系l中Q才一步步走到今天。事实上QMySpace已经成功解决了很多系l扩展性问题,其中存在 相当的经验值得我们借鉴。MySpacepȝ架构到目前ؓ止保持了相对E_Q但其技术h员仍然在为SQL Server支持的同时连接数{方面l攻坚,可能把事情做到最好?

(? Amazon
     亚马逊书店无疑是电子商务发展的里E碑?000q到现在Q世界网l业腥风血雨。Amazon曄成ؓ|络泡沫的头号代表。如今,当这?#8220;最大的泡沫”用几l易改的数字把自己变成了坚实的IT巨h?
     历览Amazon发展q程Q其成功l验在于Q它创造性地q行了电子商务中每一环节的探索,包括pȝq_的徏设,E序~写、网站设立、配送系l等{方面。用 Amazon当家索斯的话说就是,“在现实世界的商店最有力的武器就是地D,地段Q地D,而对于我们来说最重要的三件事是技术,技术,技术?#8221;

(? eBay
     eBay是世界闻名的拍卖|站QeBay公司通信部主凯?帕斯格拉夫认为,“eBay成功的最重要原因在于公司理和服务?#8221;
     其成功的奥秘可以列DZ下几点:
     ①敢ؓ天下?#8212;在网l尚不普及的时代QeBay率先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!ZQ他们的每一个大型网站工E都需要大量相应专业h员的参与?

(? 面静态化
     可不要小看纯静态化的HTML面Q其实在很多情况下,HTML往往意味着“效率最高、消耗最?#8221;Q所以我们尽可能使我们的|站上的面采用静态页面来?现。但是,对于大量内容q且频繁更新的网站,我们无法全部手动实现Q因此可以开发相应的自动化更新工P例如我们常见的信息发布系lCMS。像我们l常?问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布pȝ来管理和实现的。信息发布系l可以实现最单的信息录入自动生成静态页面,q能?备频道管理、权限管理、自动抓取等功能Q对于一个大型网站来_拥有一套高效、可理的CMS是必不可的?

(? 存储问题
     存储也是一个大问题Q一U是文件的存储Q比如图片这c;另一U是大文件的存储Q比如搜索引擎的索引?
?家知道,对于Web服务器来_不管是Apache、IISq是其他容器Q图片是最消耗资源的Q于是我们有必要图片与面q行分离Q这是基本上大型|站 都会采用的策略,他们都有独立的图片服务器Q甚臛_多台囄服务器。这L架构可以降低提供面讉Kh的服务器pȝ压力Qƈ且可以保证系l不会因为图?问题而崩溃,在应用服务器和图片服务器上,可以q行不同的配|优化以保证更高的系l消耗和执行效率?br />
(? 数据库技?#8212;集群和库表散?
     对于大型|站而言Q用大型的数据库服务器是必ȝ事情。但是,在面对大量访问的时候,数据库的瓉仍然会显现出来,q时一台数据库很快无法满_用,于是我们需要借助于数据库集群或者库表散列技术?br />
     在数据库集群斚wQ很多数据库厂商都有自己的解x案,Oracle、Sybase、SQL Server{都有很好的ҎQ常用的MySQL提供的Master/Slave也是cM的方案。因此,你用了什么样的数据库Q就参考相应的解决Ҏ?实施卛_?

     上面提到的数据库集群׃在架构、成本、扩张性方面都会受到所采用数据库类型的限制Q于是我们需要从应用E序的角度来考虑改善pȝ架构Q其中,库表散列?常用q且最有效的解x案。我们在应用E序中安装业务和应用或者功能模块将数据库进行分,不同的模块对应不同的数据库或者表Q再按照一定的{略Ҏ个页 面或者功能进行更的数据库散列,比如用户表,按照用户IDq行表散列,q样p够低成本的提升系l的性能q且有很好的扩展性。在q一斚w一个现成的例子 是搜狐。它的论坛就是采用了q样的架构,论坛的用户、设|、帖子等信息q行数据库分,然后对帖子、用h照板块和IDq行散列数据库和表,最l可?在配|文件中q行单的配置便能让系l随时增加一C成本的数据库q来补充pȝ性能?

(? ~存{略
     q绝对不单指低的缓存技术相关的~程Q应从整个架构角度着|深入研究Web服务器、数据库服务器的各层U的~冲{略Q最后才是低U的~冲技术的~程?不同的Web服务器、数据库服务器及Web~程语言都有自己不同的缓冲策略。例如数据库存储斚wQSQL Serve 2005中的d式缓存机ӞOracle数据的cache group技术,Hibernate的缓存包括Session的缓存和SessionFactory的缓存;Web服务器方面,Apache提供了自q ~存模块Q也可以使用外加的Squid模块q行~存Q这两种方式均可以有效的提高Apache的访问响应能力,IIS~冲器技术;至于web开发语aQ所 用缓存技术更存在很大不同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是虚 IPQ指向物理服务器。它传输的业务服从的协议多种多样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解决ҎQLinuxQApacheQMySQLQPerl、PHP或? Python Web~程语言Q;否则Q随着我国加入WTO范围的不断扩大,盗版打击必然来严。因此,“苟且L”必将自食其果?

     另外Q随着|络带宽日渐提升QWEB 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.tkk7.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.tkk7.com/wealupa/archive/2012/06/28/381716.html</guid><wfw:comment>http://www.tkk7.com/wealupa/comments/381716.html</wfw:comment><comments>http://www.tkk7.com/wealupa/archive/2012/06/28/381716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wealupa/comments/commentRss/381716.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wealupa/services/trackbacks/381716.html</trackback:ping><description><![CDATA[<div><div class="um628ka" 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 FrindQ的站点价?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?9q始于校园中的项目,几个人出于爱好做了这样一个应用,以实C下功能:</p> <p>* 博客Q论?/p> <p>* C会性网l,扑ֈ朋友</p> <p>* 聚合Q把朋友的文章聚合在一?/p> <p>LiveJournal采用了大量的开源YӞ甚至它本w也是一个开源Y件?/p> <p>在上U后QLiveJournal实现了非常快速的增长Q?/p> <p>* 2004q?月䆾Q?80万注册用戗?/p> <p>* 2005q?月䆾Q?80万注册用戗?/p> <p>* 2005q?月䆾Q?90万注册用戗?/p> <p>* 辑ֈ了每U钟上千ơ的面h及处理?/p> <p>* 使用了大量MySQL服务器?/p> <p>* 使用了大量通用lg?/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 ?FeedQ内容处理能力ؓ 160-200MbpsQIO 写入大约?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 万,50Q?会员来自外(中国用户不少Q也包括?.</p> <p>7. YahooQ社区架?/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老外是怎样一个hg.</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可以粗略分成三个部分:数据库服务器QWeb 服务器,搜烦服务器?/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]) QAmazon 一直找不到太多的资料。国庆期间读C一关?Amazon Dynamo 的论文,非常_ֽ。Amazon Dynamo q个高可用、可扩展存储体系支撑了Amazon 不少核心服务.</p> <p>12. 财帮子(caibangzi.comQ网站架?/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>以前sweaterl我介绍的他写的《大型高负蝲|站架构和应用初探? 他ȝ了很多信息和数据Q感谢叶宁的辛劳成果. q里我也惛_此PPT写些自己的感? </p></div></div><img src ="http://www.tkk7.com/wealupa/aggbug/381716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wealupa/" target="_blank">常言W?/a> 2012-06-28 14:35 <a href="http://www.tkk7.com/wealupa/archive/2012/06/28/381716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型|站架构设计http://www.tkk7.com/wealupa/archive/2012/06/28/381707.html常言W?/dc:creator>常言W?/author>Thu, 28 Jun 2012 05:34:00 GMThttp://www.tkk7.com/wealupa/archive/2012/06/28/381707.htmlhttp://www.tkk7.com/wealupa/comments/381707.htmlhttp://www.tkk7.com/wealupa/archive/2012/06/28/381707.html#Feedback0http://www.tkk7.com/wealupa/comments/commentRss/381707.htmlhttp://www.tkk7.com/wealupa/services/trackbacks/381707.html

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

大型|站架构设计 - adyhpq - adyhpq的个Z? style=

 

A. 提供后台数据库设计:Ҏ业务需求的理解Q针Ҏ定的数据库(늛Oracle,MySql,SqlServer,DB2Q提供网站项目的后台数据库设计?/p>

后台数据库的设计是整个网站最重要的环节,其结构定义通常定了后C务数据的存储方式以及 l大部分后台数据讉K模型。对大型|站而言Q由于其需要支撑的负荷很大Q数据库设计关pd数据储存量,数据讉K效率Q缓存效率,数据安全{多个方面,?型网站的数据库设计原则与普通企业应用的设计原则有许多区别,需要经验丰富的架构师才能胜仅R?/p>

提供后台持久层设计:持久层设计是在后台数据库设计的基上,Ҏ具体~程语言Q根据网站访问特征具体设计的~程框架。设计目标将兼顾处理效率和代码的可维护性、可理解性(如面向对象)?/p>

B. 提供~存设计Q根据业务需求,l合后台数据库设计和后台持久层设计,提供|站的缓存设计方案。具体包括前端缓存,׃n数据~存Q分布式~存?/p>

所谓前端缓存,指把|页上短期内不太变化的内宏V根据访问效率评伎ͼ通过片段形式以一定策略缓存v来,从而减后台内容生成的旉Q提升网站的响应效率和节省服务器的处理资源占用?/p>

所谓共享数据缓存,指把后台中公q数据Ҏ讉K频度和更新频度以一定策略在服务器缓存v来,避免每次使用都需要从数据库或盘提取?/p>

所谓分布式~存Q指大型|站需要利用分布式的缓存来在多台集机器之间共享某些处理结果内宏V?/p>

C. 提供MVCQModel-View-ControllerQ框架设计:Ҏ业务需求和|站特点提供合适的、高效的MVC处理框架?/p>

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

D. 提供安全框架Q根据业务需要和数据安全保护的需要,提供|站安全框架?/p>

E. 提供SEOQSearch Engine Optimize)ҎQ面向搜索引擎提供网站搜索优化方案?/p>

F. 提供备䆾ҎQ根据业务需要提供针对不同^台的数据Q代码、数据、用戯料){备份方案?/p>



]]>
大型|站架构不得不考虑?0个问?/title><link>http://www.tkk7.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.tkk7.com/wealupa/archive/2012/06/28/381705.html</guid><wfw:comment>http://www.tkk7.com/wealupa/comments/381705.html</wfw:comment><comments>http://www.tkk7.com/wealupa/archive/2012/06/28/381705.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wealupa/comments/commentRss/381705.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wealupa/services/trackbacks/381705.html</trackback:ping><description><![CDATA[<div><p>q里的大型网站架构只包括高互动性高交互性的数据型大型网站,Z大家众所周知的原因,我们׃谈新ȝ和一些依靠HTML静态化可以实现的架构 了,我们以高负蝲高数据交换高数据动性的|站ZQ比如v内,开心网{类似的web2.0pd架构。我们这里不讨论是PHPq是JSP或?NET?境,我们从架构的斚wȝ问题Q实现语a斚wq不是问题,语言的优势在于实现而不是好坏,不论你选择M语言Q架构都是必要面对的?/p> <p>q里讨论一下大型网站需要注意和考虑的问?/p> <p><strong>1、v量数据的处理</strong> </p> <p>众所周知Q对于一些相对小的站Ҏ_数据量ƈ不是很大Qselect和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就是数据库的死锁问题,也许qx我们感觉不到Q死锁在高ƈ发的情况下的出现的概率是非常高的Q磁盘缓存就是一个大问题?/p> <p><strong>3、文件存贮的问题</strong> </p> <p>对于一些支持文件上传的2.0的站点,在庆q硬盘容量越来越大的时候我们更多的应该考虑的是文g应该如何被存储ƈ且被有效的烦引。常见的Ҏ是对?件按照日期和cdq行存贮。但是当文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的情况下Qupdate和delete付出的成本会高的无法xQ笔者遇到过一个情况,在更C个聚焦烦引的时候需?0分钟来完成,那么对于站点来说Q这些基本上是不可忍受的?/p> <p>索引和更新是一对天生的冤家Q问题AQDQEq些是我们在做架构的时候不得不考虑的问题,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>成也AJAXQ|也AJAXQAJAX成ؓ了主趋势,H然发现ZXMLHTTP的post和get是如此的Ҏ。客Lget或者post 到服务器数据Q服务器接到数据h之后q回来,q是一个很正常的AJAXh。但是在AJAX处理的时候,如果我们使用一个抓包工L话,Ҏ据返回和?理是一目了然。对于一些计量大的AJAXh的话Q我们可以构造一个发包机Q很Ҏ可以把一个webserverq掉?/p> <p><strong>8、数据安全性的分析</strong> </p> <p>对于HTTP协议来说Q数据包都是明文传输的,也许我们可以说我们可以用加密啊,但是对于G问题来说的话Q加密的q程可能是明文?比如我们知道 的QQQ可以很Ҏ的判断他的加密,q有效的写一个跟他一L加密和解密方法出来的)。当你站Ҏ量不是很大的时候没有h会在乎你Q但是当你流量上来之 后,那么所谓的外挂Q所谓的发׃接踵而来(从qq一开始的发可见端?。也许我们可以很的意的说Q我们可以采用更高别的判断甚至HTTPS来实 玎ͼ注意Q当你做q些处理的时候付出的是量的databaseQio以及CPU的成本。对于一些群发,基本上是不可能的。笔者已l可以实现对于百度空 间和qqI间的群发了。大家愿意试试,实际上ƈ不是很难?/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从googleQfacebookQmyspace到v内校内,都在考虑q个问题Q它可以更有效的留住 用户q激发用L更多的兴以及让更多的h帮助你做最有效的开发。这个时候一个有效的数据׃nq_Q数据开攑^台就成ؓ必不可少的途径了,而在开攄接口 的情况保证数据的安全性和性能Q又是一个我们必要认真思考的问题了?/p></div><img src ="http://www.tkk7.com/wealupa/aggbug/381705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wealupa/" target="_blank">常言W?/a> 2012-06-28 13:26 <a href="http://www.tkk7.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"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://chinacmk.com" target="_blank">պƷרվ </a>| <a href="http://bohaolg.com" target="_blank">ѹۿaƵ</a>| <a href="http://qmoread.com" target="_blank">aëƬƵ</a>| <a href="http://www-554949.com" target="_blank">avרߵӰ</a>| <a href="http://56v6.com" target="_blank">Ƶ߲</a>| <a href="http://aa2176.com" target="_blank">޺Ʒһ</a>| <a href="http://adcaes.com" target="_blank">ȫɫƴɫƬѾþ</a>| <a href="http://023439.com" target="_blank">91ƷѹƬ</a>| <a href="http://zzyqr.com" target="_blank">ձĻѸƵ</a>| <a href="http://xass1.com" target="_blank">ëƬؿ</a>| <a href="http://5gg1.com" target="_blank">ɫ˿ѿ</a>| <a href="http://5656ys.com" target="_blank">ۺС˵ </a>| <a href="http://jdvgo.com" target="_blank">߹ۿĶ </a>| <a href="http://23usxx.com" target="_blank">Ƶһ</a>| <a href="http://kingleadsw.com" target="_blank">޾ƷۺҰ</a>| <a href="http://mabaolu.com" target="_blank">޾Ʒ㶮վ</a>| <a href="http://wdjiuye.com" target="_blank">һ</a>| <a href="http://bobostrong31.com" target="_blank">ҹƵѹۿƵ</a>| <a href="http://haiwaizhuyun.com" target="_blank">޾ƷƵ</a>| <a href="http://zjj100.com" target="_blank">ƷAVר</a>| <a href="http://51comcomcom.com" target="_blank">AVƬ߹ۿ</a>| <a href="http://by33321.com" target="_blank">þó18վ</a>| <a href="http://nn227.com" target="_blank">aëƬȫ</a>| <a href="http://xmjcjc.com" target="_blank">߳þѹۿ</a>| <a href="http://an930.com" target="_blank">ްv2017 </a>| <a href="http://jinlaifubuxiugang.com" target="_blank">þAV</a>| <a href="http://0769wwt.com" target="_blank">޹Ʒ˿߹ۿ</a>| <a href="http://321fafa.com" target="_blank">ѹۿƷ</a>| <a href="http://456jjj.com" target="_blank">ҹ99Ƶ</a>| <a href="http://664403.com" target="_blank">պ޾Ʒ</a>| <a href="http://kingleadsw.com" target="_blank">һƵ߹ۿ</a>| <a href="http://bjbf99.com" target="_blank">˾þۺij</a>| <a href="http://s4lm0x.com" target="_blank">˺ݺۺϾþ޸</a>| <a href="http://sao350.com" target="_blank">޲avĻ</a>| <a href="http://sztsa.com" target="_blank">޾ƷƷþ99</a>| <a href="http://7uj3.com" target="_blank">Ļ˾þ</a>| <a href="http://773311h.com" target="_blank">Ʒmnbavվ</a>| <a href="http://qzapp88.com" target="_blank">޹¶</a>| <a href="http://nfrxfarm.com" target="_blank">AVר߲</a>| <a href="http://xyhfloor.com" target="_blank">þAV뾫Ʒɫҹ</a>| <a href="http://wyj4.com" 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>