论道WP(三):应用程序栏
作者通过具体翔实的例子介绍了Winodws Phone 7中应用程序栏的使用方式。
该内容已经被标记书签!
标记书签错误,请重试!

作者 百分点科技推荐引擎研发部 发布于 2011年11月30日
百分点推荐引擎是国内领先的推荐技术平台,专注于为电子商务和资讯网站提供SaaS模式的个性化推荐服务,提高网站的整站转化率和用户黏度。本文将从电子商务网站的实际需求出发,介绍百分点推荐引擎架构设计和搭建。
当下,个性化时代的潮流势不可挡,业界普遍意识到了推荐是网站的一项基本服务。但是,人们对推荐该如何来做,也就是推荐技术本身,还不甚了解。我们经常会遇到这样的疑问:“购买过该商品的用户还购买过哪些商品这种推荐,不是一个SQL语句就搞定了吗?”其实不然,推荐技术远远不是这么简单。广义上讲,推荐技术属于数据挖掘和机器学习范畴,这也意味着好的推荐服务依赖于科学的推荐算法和大量的学习数据。对于电子商务和资讯网站来讲,想在推荐技术领域精耕细作,研发高端的推荐算法并应用到海量数据上是非常困难的。正是在这样的背景下,百分点推荐引擎应运而生。在百分点推荐引擎产品的开发过程中,我们与麦包包、红孩子、走秀网、耀点100等知名电子商务网站,以及天极网、亿邦动力等知名媒体资讯类网站的技术部门进行了深入探讨,从他们那里得到了很多帮助与启发。在与这些行业先锋的交流中我们发现,有一些需求是行业共有的,比如推荐的实时性、高可用性。另外一些需求是行业性的,比如婴幼儿用品的单品重复购买率比较高,但相同的包包的重复购买率就不算高。对于一位正在育儿的母亲,我们可以给她重复推荐符合她们偏好的、相同的奶粉和尿片,但对于一位时尚的女孩,我们向她重复推荐相同的包包可能就不合适了。
经过广泛的市场需求和交流,我们要求百分点推荐引擎能够从方方面面支持客户的市场营销策略,概括的讲主要包括:
百分点推荐引擎面对的是全网的商品资讯信息以及用户行为,如何科学有效的利用这些数据为电子商务和资讯网站提供丰富的推荐服务,满足其推广营销目标,成为了我们最大的技术挑战。为此我们对百分点推荐引擎提出了以下技术要求:

根据上节提出的需求,我们将百分点推荐引擎设计为一组云服务的有机组合,如上图,百分点推荐引擎可以分为存储层,业务层,算法层和管理层四大功能组件。每个组件内部又可以细分为更小的单元,或者服务模块,提供基本的存储或运算服务。单元与单元之间尽量解耦和,仅通过API协议进行协作,这样一个单元的升级变动带来的影响是可控的。每个单元都要做到可靠可用。下面,我们全面介绍百分点推荐引擎四大功能组件。
存储层提供基本的数据存取服务,并做好备份和灾难恢复工作,以保证数据的安全可靠。根据不同的应用需求,存储层细分为Redis集群,Membase集群,MySQL集群和Hadoop/HDFS四类。
这是百分点推荐引擎最核心也是最具挑战性的部分,我们将这一层设计为一系列抽象算法的集合。我们深入研究了学术界在基于用户行为的推荐算法,基于内容的推荐算法和关联规则等多方面的理论知识,在此之上自主研发了十多种适用于大数据处理的在线和离线推荐算法。目前,我们的在线算法包括协同过滤(UserBased/ItemBased CF),基于内容的推荐(Content Based),热扩散(Heat Diffusion),用户行为模式分析(Behavior PatterAnalysis)等等。离线算法包括KNN聚类,基于FP Tree的关联规则挖掘,基于上下文统计的关联规则挖掘,序列模式算法,文档建模算法等等。
算法层并不关心具体的业务逻辑,而只负责数据处理和结果返回。以热扩散算法为例,一方面它接受(用户,资源,偏好指数)的三元组作为计算输入,实时计算用户与用户/资源之间的关系;另外,我们也可以向它请求某个用户对哪些资源最感兴趣,或者某个资源与哪些资源最相关。
将业务逻辑和推荐算法本身剥离这样的设计方式使得推荐算法具有了最大的通用性,也保证了前端的推荐功能模块可以根据逻辑需求综合多个算法。以百分点推荐引擎的“基于浏览历史的个性化推荐”为例,它就使用到了热扩散和基于内容的推荐两种算法。
得益于存储和算法的分离,算法层并不需要考虑数据的备份容灾等问题。这样,如果某个算法模块由于服务器故障出现异常,我们可以很快在另外的服务器上启动同一个它的一个备份来替换它,而不涉及任何数据迁移问题,最大限度满足了可用性。
这是百分点推荐引擎中直接面对客户的部分,也就是我们的HTTP Web Service,它主要负责两件事:收集客户提交的数据,并将其转换为各个推荐算法需要的输入数据,交由推荐算法计算;根据客户提交的推荐请求,向一个或几个推荐算法请求数据,并转换为客户需要的数据格式。可以看出,业务层起到了连接具体需求与推荐算法,真实世界与计算机世界之间的作用。
以“购买过该商品的用户还购买过哪些商品”为例,我们来简介这个推荐功能模块是如何沟通客户需求和推荐算法。目前我们主要采用热扩散算法来实现这个推荐功能模块。首先,客户提交购买数据时,百分点推荐引擎会根据一定的业务逻辑将这个事件处理为算法可以接受的三元组。例如用户U购买了商品K,我们可能会向算法发送一个输入数据(U, K, 1.0)。其次,当客户请求买过K的用户还买过哪些商品时,我们一方面以K作为参数向算法请求与K最相近的资源;另一方面如果客户提交了用户ID,我们还会向算法请求该用户可能感兴趣的商品;最后我们将两个结果加权整合,挑选其中权重最大同时满足客户额外需求(例如过滤用户的购买历史,按照商品类别/价格过滤等)的几个商品作为最终推荐结果。
可见,业务层完全将推荐算法作为黑盒子来使用,这样业务层就可以集中注意力满足客户多种多样的需求。另外,同算法层一样,业务层也无须关心数据的存储备份和容灾。
在百分点推荐引擎中,管理层负责内部DNS,配置管理,服务部署,服务监控和自动应急处理。
本文较为细致的介绍了百分点推荐引擎的总体架构和功能划分,不难看出,在整个架构设计中,我们一直坚持模块化,低耦合,消除单点等原则,力求将百分点推荐引擎打造成扩展性和可靠性极佳的推荐技术平台。经过近两年的多个大中型电子商务合作网站的实践检验,这套架构完全满足了我们一开始提出的各项需求,而且在可见的未来内,它也足以胜任百分点推荐引擎的战略规划。这套架构在稳定性和灵活性等多方面体现了出了百分点推荐引擎团队在推荐技术和服务上积极的努力耕耘和领先的技术。
百分点科技推荐引擎研发部由40余名技术精英组成,绝大多数具有国内外知名院校硕士及以上学位,拥有丰富的国内外互联网企业的研发经验,是国内领先的推荐引擎架构设计研发团队。该团队在推荐引擎算法,大数据平台和推荐技术应用等领域所做出的一系列创新成果,已成功服务于国内多家著名电子商务企业,显著提升了电商企业的运营绩效,也奠定了百分点科技在推荐引擎技术领域的领先地位。
感谢晁晓娟对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
精益软件开发方法因其对市场和交付的重视和在各种场景下体现出的适应能力正在获得广泛的关注。特别是在精益创业(Lean Startup)渐渐兴起和技术日新月异的今天,其"极端"的思想也变得越来越必要和可行。 InfoQ就此主题对他做了深入的采访。
3 条回复
关注此讨论 回复