Monthly Archives: June 2011

漫谈:关于电子商务的胡思乱想

这周的博客又要悲剧了,就瞎写点吧。 去年(2010年)被称为电商年,电子商务热从美国到中国红红火火地烧了起来。中国的京东、当当等B2C巨头纷纷上市,大肆圈地。中间还发生了京东和当当的战。从目前的电子商务发展趋势来看B2C价格取代C2C成为主流将是大势所趋(类似大卖场、大百货、大超市取代地摊、市场、小卖部)。为了顺应这一形势,淘宝积极谋局拆分,力推淘宝商场,想利用在C2C上积攒出来的人气和优势来争取于后发的B2C市场上分得一块足够大的蛋糕。传统的大卖场——国美、苏宁等也是迅速转型,赶上B2C乱世的末班车,利用自己在渠道和货源上的先天优势直接切入混战,来势汹汹。 从电子商务发展的基础设施来看,电子商务这个行业确实已经站在了一个可以全面铺开的拐点上。首先,是物流的发展,目前的物流(主力应该是各快递公司和电商公司自建的物流团队)虽然还远远不能达到传统邮政的覆盖率,但是在一线城市、二线城市和部分三线、四线城市,电商公司所使用的物流系统已经能够很好地覆盖,并且从发货速度和运输质量来看有相当不错的用户体验(虽然目前快递公司的服务还远远没到达完美的程度)。另外各大电商还在一二线城市大力自建仓库,这些努力让人可以看到电商物流的未来一定可以做得更好,(覆盖率方面,快递公司应该可以做到邮政曾经做到的程度,甚至可以复用某些已有的邮政渠道,而且商品仓库的建立可以进一步提高物流的效率)。其次,是网上支付技术的成熟,随着第三方支付的逐步正规化,网民网上支付习惯的形成,支付已经不再是问题。最后是网络的进一步普及,一方面是网民数量的持续增长,另一方面是基于网络的应用技术越发进使得电商的网站的可用性越来越好了,各种更高级的推荐算法和搜索算法,使得电子商务比较传统购物模式有了更多更大的优势。 电子商务取代传统购物模式是大势,而且现在这一趋势已经在已越来越快的速度变成了现实。比较电子商务和传统购物模式,我们可以发现相比传统购物,电子商务基本已经拥有或者可以在不远的将来拥有它的所有优势,而同时电子商务又有许多传统购物模式所没有的优点:1、送货上门的便利,不用再驱车穿过拥挤的高架,不用再挤地铁挤到怀孕,只需坐在家中,轻点鼠标,不到1天时间,想要的货品就能送到您的面前,这在十几年前曾经只是停留在很多人梦想中的场景,如今正在越来越多的地方变为了现实。2、方便快捷的比价系统,打破了信息上的鸿沟,使得同种同质商品之间的价格更加趋同,便捷的物流系统则大大缩小了跨地区跨时间套利的空间。这一优势将不仅仅颠覆传统的商业思维,也将极大地改变产品的生产和创新模式,在将来产生的影响,我觉得绝非现在所能想象。3、  结合机器学习、数据挖掘技术的商品发现模式使得用户更容易找到商品,使得商家可以更好得挖掘用户的需求(包括那些用户自己都没有意识到的需求),极大得激发用户的购买潜力,反过来又可以促进商品本身品质的提升。4、支付手段的多样化,比传统的当面支付更加灵活和方便。同时大量的网上支付也会悄然地改变已有的金融体系结构,整个金融行业内部的组织将在这种外界刺激下变得更加平滑和扁平。5、大量的商业步行街变成宽敞的行车道,大卖场变成地下物流仓库,这应该能大大增加城市的人口负载能力,在改变现有城市格局的同时,在一定程度上可以缓解人口增长的压力。 当然,目前电子商务要取代传统购物模式,还有许多需要改进的地方,当务之急有以下几点:第一,进一步提升物流的质量,降低投诉率,提高覆盖率。第二,弥补一些目前还存在的与传统商务模式的缺陷,比如:对于衣物、鞋帽之类需要试穿的产品可以通过一些虚拟现实技术(目前已有一些成熟的应用)加上退换货的服务保证来弥补网上购物见不到实物的缺点。第三,就是加速发挥自己的固有优势,吸引更多的用户转入新的模式来。  

Posted in essay | 2 Comments

一致性hash算法简介

一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。 2、单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。 3、分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。 4、负载(Load):负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。 普通的哈希算法(也称硬哈希)采用简单取模的方式,将机器进行散列,这在cache环境不变的情况下能取得让人满意的结果,但是当cache环境动态变化时,这种静态取模的方式显然就不满足单调性的要求(当增加或减少一台机子时,几乎所有的存储内容都要被重新散列到别的缓冲区中)。 一致性哈希算法有多种具体的实现,包括Chord算法,KAD算法等实现,以上的算法的实现都比较复杂,这里介绍一种网上广为流传的一致性哈希算法的基本实现原理,感兴趣的同学可以根据上面的链接或者去网上查询更详细的资料。 一致性哈希算法的基本实现原理是将机器节点和key值都按照一样的hash算法映射到一个0~2^32的圆环上。当有一个写入缓存的请求到来时,计算Key值k对应的哈希值Hash(k),如果该值正好对应之前某个机器节点的Hash值,则直接写入该机器节点,如果没有对应的机器节点,则顺时针查找下一个节点,进行写入,如果超过2^32还没找到对应节点,则从0开始查找(因为是环状结构)。如图1所示  图 1 图1中Key K的哈希值在A与B之间,于是K就由节点B来处理。 另外具体机器映射时,还可以根据处理能力不同,将一个实体节点映射到多个虚拟节点。 经过一致性哈希算法散列之后,当有新的机器加入时,将只影响一台机器的存储情况,例如新加入的节点H的散列在B与C之间,则原先由C处理的一些数据可能将移至H处理,而其他所有节点的处理情况都将保持不变,因此表现出很好的单调性。而如果删除一台机器,例如删除C节点,此时原来由C处理的数据将移至D节点,而其它节点的处理情况仍然不变。而由于在机器节点散列和缓冲内容散列时都采用了同一种散列算法,因此也很好得降低了分散性和负载。而通过引入虚拟节点的方式,也大大提高了平衡性。 最后附一个c语言一致性hash的代码实现。  

Posted in Uncategorized | 14 Comments