对于网站优化来说,网站如果有多个域名同时指向的时候对于抓取是很不好的,是很不利的,特别是对谷歌,大家也看到了,谷歌的收录有相同的,也就是说谷歌会认为三个域名中有两个是复制性网站,便会对其做一个判断:网站质量有问题!带来的后果是:每个页面的权重可能会被降低,直接影响的便是排名,冲击最大的便是长尾关键词! 一直不太知道我们的主网站是有多个域名同时指向的,这里指的并不是做301重定向或者其它的一些转向 [...]
对于网站优化来说,网站如果有多个域名同时指向的时候对于抓取是很不好的,是很不利的,特别是对谷歌,大家也看到了,谷歌的收录有相同的,也就是说谷歌会认为三个域名中有两个是复制性网站,便会对其做一个判断:网站质量有问题!带来的后果是:每个页面的权重可能会被降低,直接影响的便是排名,冲击最大的便是长尾关键词! 一直不太知道我们的主网站是有多个域名同时指向的,这里指的并不是做301重定向或者其它的一些转向 [...]
这部动画短片,时长只有4分40秒,讲了一个夸张的故事:一只名叫二兔的兔子,中了500万大奖后信心满满地去“非诚勿扰”,结里,24盏灯全灭了。因为,500万只能买到3根胡萝卜!失败真是成功他娘,它得到一个秘密:月宫有“吃了永远不饿的胡萝卜”,二兔决定前往月宫。它先后试图用传真机、火车、火箭等工具前往月宫,均因搞笑的原因失败。最终,二兔用最原始的方式&m [...]
GZIP是很多站长为提高访问速度都开启的一个功能。能极大的压缩HTML源码,压缩比率经常高达80%。大大提高了网站的访问速度。但是很多站长可能还没有发现开启GZIP可能会对百度快照和收录造成影响。 本人一个站点,于8月份全站改版,一星期后快照、收录恢复正常。后因发现首页内容过多,HTML文件将近400K,准备开启GZIP之前先上网查了下相关的信息,各方面都说百度蜘蛛能正常支持GZIP。于是放 [...]
最近几个月中偶尔与两个朋友有过沟通,给我的直观感受就是他们生活不是很好,短短几个月人的性格说话甚至人身观价值观都有变化。我想知道一个真正的问题就是到底是生活的魔力还是上海的压力让他们变化?在北京的朋友、在广东的朋友包括我也在广东半年多,并没有发生极端的变化。究竟为什么呢? [...]
再说一个更加悲剧的——【我的淘宝】,我的淘宝是给会员管理自己的商品、交易、收货地址、评价、投诉的地方,这个地方由于登录之后才能看到,所以风格跟外面完全不一样,很长时间都没有优化过,样子丑,用户操作也不方便,如果一个人有很多商品,上下架需要一个一个的操作,非常麻烦(想想那些卖书的)。这时候一个重要人物登场了,承志(现在的蘑菇街CEO,他让我把他描写的帅一点),他给我们演示了最牛叉的前端交互技术,就是Gmail上那种Ajax的交互方式,可以拖动、可以用右键、可以组合键选择、操作完毕还不刷新页面,管理商品如有神助,帅呆了。我是这个项目的项目经理,一灯是产品经理,我们再拉上万剑和一伙工程师就开搞了。热火朝天的干了三个月,快要完成的时候,老马不知道怎么回事突然出现在我身后,看我操作了一遍新版我的淘宝之后,问我这是不是客户端软件,我说是网页,他抓狂了,说这跟客户端软件一样,链接底下连线都木有,上下架用文件夹表示,我都不知道怎么操作了,卖家肯定也不会玩。
老马果然是神一样的人物,他说的应验了,淘宝历史上第一个群体性事件爆发了,试用完新版本的我的淘宝之后,很多卖家愤怒了,说不会玩。一灯就和承志一起商量怎么把页面改得像个网页一点,改了半个月,愤怒依然没有平息。我很无奈地看着这两个人在那里坚持,然后跟老板们商量怎么办。后来我们用了一个很挫的方法给自己一个台阶,到论坛上让大家投票要不要使用新版我的淘宝,投票结果是一半以上的反对。于是这么十来个人做了3个月的系统被杀掉了。这让我非常沮丧,但最痛苦的还不是这个,我们下线之后,另外一拨卖家不满了,说这么好的功能怎么没有了?啊~~~你们怎么不早点站出来,亲?这个产品带给我们的是新技术(Ajax)的尝试,还有就是新技术对用户操作习惯的改变,一定要慎之又慎。另外还有一点没有总结好的教训,就是应对群体事件的时候,我们手足无措,在后来【招财进宝】和淘宝商城出现群体性事件的时候,我发现悲剧在重演。
说到【招财进宝】,这个是最悲剧的产品。到2006年五一的时候,一个划时代的项目启动了(我苦逼的连续失去了两个五一节,前面一个是2005年做支付宝系统)。财神说要用最好的项目阵容,我被选中了,这一下子让我觉得我能划分到最好的员工之类,在【我的淘宝】这个产品中严重受伤的心又痊愈了。这是一个商品P4P的系统,就是按成交付费。我们认为已经有很多卖家有钱了,但淘宝上这么多的商品,他们很难被找到,卖家愿意花钱让商品排在前面。我们允许卖家购买广告位,把他的商品按一定算法给个排名(类似于百度的竞价排名,但不仅仅看他出了多少钱,还有信用、成交量、被收藏数量等等,这个算法搞的巨复杂)。这是一个多么牛叉的盈利模式啊!
这个系统进行的很顺利,但发布的时候,更大的群体性事件出来了,买家们质疑:你们不是承诺3年不收费么?收广告费不是收费么?后来我们的竞争对手又推波助澜,公关公司和圈子里各路大侠上蹿下跳,甚至同行搞了个“一键搬家”的功能来收纳我们的会员。一时之间,舆论哗然,各种矛头都指了过来。为了收场,我们又一次在论坛里面让用户投票决定产品是否下线,同【我的淘宝】一样,以悲剧收场。也如同【我的淘宝】一样,下线后,一拨尝到甜头的卖家说,这么好的功能怎么没有了?(直到后来yahoo中国合并过来之后,开发了淘宝直通车,才以类似的产品形态满足了这部分需求)
虽然招财进宝失败了,但这个项目中对技术的探索更加深入,这里面用到了用户行为追踪、Ajax等。其中有一个技术的细节非常经典,淘宝商品详情页面每天的流量在10亿以上,里面的内容都是放在缓存里的,做招财进宝的时候,我们要给卖家显示他的商品被浏览的次数(见下图),这个数字必须实时更新,而用缓存的话一般都是异步更新的。于是商品表里面增加了这样一个字段,每增加一个PV这个字段就要更新一次。发布上去一个小时数据库就挂掉了,撑不住这么高的update。数据库撑不住怎么办?一般的缓存策略是不支持实时更新的,这时候多隆大神想了个办法,在apache上面写了一个模块,这个数字根本不经过下层的web容器(只经过apache)就写入一个集中式的缓存区了,这个缓存区的数据再异步更新到数据库。这就是我前面提到的,我们整个商品详情的页面都在缓存中了,把缓存用到了极致。
那么接下来,我们就说说缓存的技术吧。
淘宝在很早就开始使用缓存的技术了,在2004年的时候,我们使用一个叫做ESI(Edge Side Includes)的缓存。在决定采用ESI之前,多隆试用了很多java的cache,但都比较重,后来用了oracle web cache,也经常挂掉,oracle web cache也支持ESI,多隆由此发现了ESI这个好东东。ESI是一种数据缓冲/缓存服务器,它提供将Web网页的部分(这里指页面的片段)进行缓冲/缓存的技术及服务。由Oracle公司和Akamai Technologies公司制定规格,Akamai公司提供对应的信息传送的服务。以往的数据缓冲服务器和信息传送服务以“页”为单位制作,复制到数据缓冲服务器中,处理静态页面很有效。但在面对动态内容的时候,就很难得到高效率。在ESI中是部分的缓冲网页,使用基于XML的标记语言,指定想要缓冲的页面部分。由此,页面内分为动态地变更的部分和静态的不变更的部分,只将静态的部分有效地发送到服务器中。淘宝网的数据虽然大部分都是动态产生的,但页面中的静态片段也有很多,例如页面的头、尾,商品详情页面的卖家信息等(如下图右侧),这些最早都是从ESI缓存中读取的。
ESI解决了页面端静态片段的缓存,聪明的读者可能马上就想到了,在后端的那些数据能不能使用缓存?显然也是可以的,而且是必须的。例如一个大卖家的商品和店铺,一天的浏览量可能是几百万,一个小卖家的可能只有几个,那这个大卖家的用户信息要是每次都去数据库里面取,显然不划算,要是把这个信息放在内存里面,每次都从内存里取,性能要好很多。这种应用场景,就是memcached这种Key-Value缓存的用武之地。只可惜在淘宝急需要memcached的时候,它还没有崭露头角(它2003.6出现的,但近几年才火爆起来,当时没发现它)。我们的架构师多隆大神再一次出手了,他写了一个缓存系统,叫TBstore,这是一个分布式的基于Berkeley DB的cache系统,推出之后在Alibaba集团内部使用非常广泛,特别是对于淘宝,tbstore上应用了ESI(就是上面说过的那个ESI)、checkcode(验证码)、description(前文说过的商品详情)、story(心情故事,商品信息里面的一个大字段,长度仅次于商品详情)、用户信息等等内容。
TBstore的分布式算法实现:根据保存的key,对key进行hash算法,取得hash值,再对hash值与总Cache服务器数据取模。然后根据取模后的值,找到服务器列表中下标为此值Cache服务器。由java client api封装实现,应用无需关心;这点和memecached的实现方案完全一致。
TBstore有一个优点,这也是它的弱点,它的存储是基于Berkeley DB的,而Berkeley DB在数据量超过内存的时候,就要往磁盘上写数据了,所以说它是可以做持久化存储的。但是一旦往磁盘写数据,作为缓存的性能就大幅度下降。
这时又有一个项目,推动了淘宝在缓存方面的技术提升。在2007年,我们把淘宝的用户信息独立出来,形成一个中心系统UIC(user information center),因为淘宝所有的功能都要依赖于用户信息,所以这个模块必须单独拿出来,不然以后系统无法扩展了。把UIC拿出来以后,应用系统访问UIC,UIC访问数据库取得用户信息,粗粗算一下,每天要取几十亿的用户信息,直接查询数据库的话,显然数据库要崩溃的,这里必须要用缓存。于是多隆为UIC专门写了一个缓存系统,取名叫做tdbm。tdbm抛弃了Berkeley DB的持久功能,数据全部存放在内存中。到2009年,多隆又参考了memcached的内存结构,改进了tdbm的集群分布方式,在内存利用率和吞吐量方面又做了大幅提升,推出了tdbm2.0系统。
由于tdbm和TBstore的数据接口和用途都很相似,开发团队把二者合并,推出了淘宝自创的KV缓存系统——tair。tair包括缓存和持久化两种存储功能。tair 作为一个分布式系统,是由一个中心控制节点和一系列的服务节点组成。我们称中心控制节点为config server,服务节点是data server。config server 负责管理所有的data server,维护data server的状态信息。data server 对外提供各种数据服务,并以心跳的形式将自身状况汇报给config server。 config server是控制点,而且是单点,目前采用一主一备的形式来保证其可靠性。所有的 data server 地位都是等价的。tair的架构图如下所示:
再说一个更加悲剧的——【我的淘宝】,我的淘宝是给会员管理自己的商品、交易、收货地址、评价、投诉的地方,这个地方由于登录之后才能看到,所以风格跟外面完全不一样,很长时间都没有优化过,样子丑,用户操作也不方便,如果一个人有很多商品,上下架需要一个一个的操作,非常麻烦(想想那些卖书的)。这时候一个重要人物登场了,承志(现在的蘑菇街CEO,他让我把他描写的帅一点),他给我们演示了最牛叉的前端交互技术,就是Gmail上那种Ajax的交互方式,可以拖动、可以用右键、可以组合键选择、操作完毕还不刷新页面,管理商品如有神助,帅呆了。我是这个项目的项目经理,一灯是产品经理,我们再拉上万剑和一伙工程师就开搞了。热火朝天的干了三个月,快要完成的时候,老马不知道怎么回事突然出现在我身后,看我操作了一遍新版我的淘宝之后,问我这是不是客户端软件,我说是网页,他抓狂了,说这跟客户端软件一样,链接底下连线都木有,上下架用文件夹表示,我都不知道怎么操作了,卖家肯定也不会玩。
老马果然是神一样的人物,他说的应验了,淘宝历史上第一个群体性事件爆发了,试用完新版本的我的淘宝之后,很多卖家愤怒了,说不会玩。一灯就和承志一起商量怎么把页面改得像个网页一点,改了半个月,愤怒依然没有平息。我很无奈地看着这两个人在那里坚持,然后跟老板们商量怎么办。后来我们用了一个很挫的方法给自己一个台阶,到论坛上让大家投票要不要使用新版我的淘宝,投票结果是一半以上的反对。于是这么十来个人做了3个月的系统被杀掉了。这让我非常沮丧,但最痛苦的还不是这个,我们下线之后,另外一拨卖家不满了,说这么好的功能怎么没有了?啊~~~你们怎么不早点站出来,亲?这个产品带给我们的是新技术(Ajax)的尝试,还有就是新技术对用户操作习惯的改变,一定要慎之又慎。另外还有一点没有总结好的教训,就是应对群体事件的时候,我们手足无措,在后来【招财进宝】和淘宝商城出现群体性事件的时候,我发现悲剧在重演。
说到【招财进宝】,这个是最悲剧的产品。到2006年五一的时候,一个划时代的项目启动了(我苦逼的连续失去了两个五一节,前面一个是2005年做支付宝系统)。财神说要用最好的项目阵容,我被选中了,这一下子让我觉得我能划分到最好的员工之类,在【我的淘宝】这个产品中严重受伤的心又痊愈了。这是一个商品P4P的系统,就是按成交付费。我们认为已经有很多卖家有钱了,但淘宝上这么多的商品,他们很难被找到,卖家愿意花钱让商品排在前面。我们允许卖家购买广告位,把他的商品按一定算法给个排名(类似于百度的竞价排名,但不仅仅看他出了多少钱,还有信用、成交量、被收藏数量等等,这个算法搞的巨复杂)。这是一个多么牛叉的盈利模式啊!
这个系统进行的很顺利,但发布的时候,更大的群体性事件出来了,买家们质疑:你们不是承诺3年不收费么?收广告费不是收费么?后来我们的竞争对手又推波助澜,公关公司和圈子里各路大侠上蹿下跳,甚至同行搞了个“一键搬家”的功能来收纳我们的会员。一时之间,舆论哗然,各种矛头都指了过来。为了收场,我们又一次在论坛里面让用户投票决定产品是否下线,同【我的淘宝】一样,以悲剧收场。也如同【我的淘宝】一样,下线后,一拨尝到甜头的卖家说,这么好的功能怎么没有了?(直到后来yahoo中国合并过来之后,开发了淘宝直通车,才以类似的产品形态满足了这部分需求)
虽然招财进宝失败了,但这个项目中对技术的探索更加深入,这里面用到了用户行为追踪、Ajax等。其中有一个技术的细节非常经典,淘宝商品详情页面每天的流量在10亿以上,里面的内容都是放在缓存里的,做招财进宝的时候,我们要给卖家显示他的商品被浏览的次数(见下图),这个数字必须实时更新,而用缓存的话一般都是异步更新的。于是商品表里面增加了这样一个字段,每增加一个PV这个字段就要更新一次。发布上去一个小时数据库就挂掉了,撑不住这么高的update。数据库撑不住怎么办?一般的缓存策略是不支持实时更新的,这时候多隆大神想了个办法,在apache上面写了一个模块,这个数字根本不经过下层的web容器(只经过apache)就写入一个集中式的缓存区了,这个缓存区的数据再异步更新到数据库。这就是我前面提到的,我们整个商品详情的页面都在缓存中了,把缓存用到了极致。
那么接下来,我们就说说缓存的技术吧。
淘宝在很早就开始使用缓存的技术了,在2004年的时候,我们使用一个叫做ESI(Edge Side Includes)的缓存。在决定采用ESI之前,多隆试用了很多java的cache,但都比较重,后来用了oracle web cache,也经常挂掉,oracle web cache也支持ESI,多隆由此发现了ESI这个好东东。ESI是一种数据缓冲/缓存服务器,它提供将Web网页的部分(这里指页面的片段)进行缓冲/缓存的技术及服务。由Oracle公司和Akamai Technologies公司制定规格,Akamai公司提供对应的信息传送的服务。以往的数据缓冲服务器和信息传送服务以“页”为单位制作,复制到数据缓冲服务器中,处理静态页面很有效。但在面对动态内容的时候,就很难得到高效率。在ESI中是部分的缓冲网页,使用基于XML的标记语言,指定想要缓冲的页面部分。由此,页面内分为动态地变更的部分和静态的不变更的部分,只将静态的部分有效地发送到服务器中。淘宝网的数据虽然大部分都是动态产生的,但页面中的静态片段也有很多,例如页面的头、尾,商品详情页面的卖家信息等(如下图右侧),这些最早都是从ESI缓存中读取的。
ESI解决了页面端静态片段的缓存,聪明的读者可能马上就想到了,在后端的那些数据能不能使用缓存?显然也是可以的,而且是必须的。例如一个大卖家的商品和店铺,一天的浏览量可能是几百万,一个小卖家的可能只有几个,那这个大卖家的用户信息要是每次都去数据库里面取,显然不划算,要是把这个信息放在内存里面,每次都从内存里取,性能要好很多。这种应用场景,就是memcached这种Key-Value缓存的用武之地。只可惜在淘宝急需要memcached的时候,它还没有崭露头角(它2003.6出现的,但近几年才火爆起来,当时没发现它)。我们的架构师多隆大神再一次出手了,他写了一个缓存系统,叫TBstore,这是一个分布式的基于Berkeley DB的cache系统,推出之后在Alibaba集团内部使用非常广泛,特别是对于淘宝,tbstore上应用了ESI(就是上面说过的那个ESI)、checkcode(验证码)、description(前文说过的商品详情)、story(心情故事,商品信息里面的一个大字段,长度仅次于商品详情)、用户信息等等内容。
TBstore的分布式算法实现:根据保存的key,对key进行hash算法,取得hash值,再对hash值与总Cache服务器数据取模。然后根据取模后的值,找到服务器列表中下标为此值Cache服务器。由java client api封装实现,应用无需关心;这点和memecached的实现方案完全一致。
TBstore有一个优点,这也是它的弱点,它的存储是基于Berkeley DB的,而Berkeley DB在数据量超过内存的时候,就要往磁盘上写数据了,所以说它是可以做持久化存储的。但是一旦往磁盘写数据,作为缓存的性能就大幅度下降。
这时又有一个项目,推动了淘宝在缓存方面的技术提升。在2007年,我们把淘宝的用户信息独立出来,形成一个中心系统UIC(user information center),因为淘宝所有的功能都要依赖于用户信息,所以这个模块必须单独拿出来,不然以后系统无法扩展了。把UIC拿出来以后,应用系统访问UIC,UIC访问数据库取得用户信息,粗粗算一下,每天要取几十亿的用户信息,直接查询数据库的话,显然数据库要崩溃的,这里必须要用缓存。于是多隆为UIC专门写了一个缓存系统,取名叫做tdbm。tdbm抛弃了Berkeley DB的持久功能,数据全部存放在内存中。到2009年,多隆又参考了memcached的内存结构,改进了tdbm的集群分布方式,在内存利用率和吞吐量方面又做了大幅提升,推出了tdbm2.0系统。
由于tdbm和TBstore的数据接口和用途都很相似,开发团队把二者合并,推出了淘宝自创的KV缓存系统——tair。tair包括缓存和持久化两种存储功能。tair 作为一个分布式系统,是由一个中心控制节点和一系列的服务节点组成。我们称中心控制节点为config server,服务节点是data server。config server 负责管理所有的data server,维护data server的状态信息。data server 对外提供各种数据服务,并以心跳的形式将自身状况汇报给config server。 config server是控制点,而且是单点,目前采用一主一备的形式来保证其可靠性。所有的 data server 地位都是等价的。tair的架构图如下所示:
TairTFS的开发,让淘宝的图片功能得到了充分的发挥。同TFS一样,很多技术都是在产品的推动下得到发展的。在讲下面的技术之前,有必要说说那些年,我们一起做过的几个产品。先说个比较悲剧的——【团购】,这个团购可不是现在满大街挂的那种groupon类型的模式,在groupon出生之前,在2006年,淘宝的产品经理一灯就提出了“团购”这种产品。一灯最初的 [...]
转载:1,我自己琢磨网站有三四年了,真正赚钱是从今年开始。以下是我从开始做网站到现在的一些情况。2,现在我的主站IP日平均15万左右,网站上月收入在7万元,这个月到现在已经超过上个月,广告费只有6000多,主要靠收会员费。3,我现在的人员配置:我+2个MM客服+2个编辑+1个兼职PHP开发人员。办公地点:在我租的2房1厅。4,今年3月开始做的主站,第一个月投入了8000买了一个网站,买的时候这个 [...]