评价系统设计篇

标签: 系统 设计 | 发表时间:2016-07-29 19:32 | 作者:weishiym
出处:http://www.iteye.com

评论系统大家都见得非常多了,大到京东、淘宝、亚马逊,小到个人网站、博客都有评论系统,小型网站采用传统PHP+Mysql方式就能很快将系统搭建起来,同时采用单库单表方式就能轻松解决数据存储、数据查询等问题,但是对于上述中大型网站而言,已经远远不能支撑系统正常运行了。接下来将从系统架构、数据存储、高性能服务等方面来揭示京东的评价系统在面对海量数据、海量请求的情况是如何处理的。

 

 系统架构

 
   评论系统整体架构如下:

 

 


 

 

      京东的商品评论目前已达到数十亿条,而且每年还在成倍增涨,面对如此庞大的文本数据,存储的选择十分重要。从sqlserver的单库单表到mysql+nosql的存储方式,评论系统的稳定、数据的读写性能有了巨大的提升,同时更易于扩展,为今后的高可用服务打下了扎实基础。

 

Mongo、Hbase

 

      文本存储我们选择了nosql,一是减轻了mysql存储压力,释放msyql,庞大的存储也有了可靠的保障;二是nosql的高性能读写大大提升了系统的吞吐,这让我们偿到了甜头。过程中我们尝试过cassandra、mongodb等分布式的nosql存储,cassandra适用于写多读少的情况,而mongodb也是基于分布式文件存储的数据库,介于关系型数据库与非关系型数据库之间,同时也是内存级数据库,mongo写性能不及cassandra,但读写分离情况下读性能相当不错,因此从应用场景上我们选择了mongodb,而且一用就是好几年。mongodb确实不错,也支持了我们系统稳定运行了好几年,但从今后的数据增长、业务扩增、应用扩展等多方面考虑,最终还是选择了Hbase,它的存储能力、可靠性、可扩展性都是毋庸置疑的。

 

       文本存储解决了,但评论系统还要面对前台用户列表、评分切面统计、列表筛选、后台全字段检索等业务应用,仅通过hbase/mongo是难以解决的,为此我们引入了关系型数据库mysql、全文检索框架solr/Elasticsearc、流式计算框架Storm.

 

MYSQL      

        Mysql作为基础数据库,主要存储评价基础信息、扩展信息、图片及标签等数据,因此拆分方案可参考如下:评价基础数据按用户ID进行拆分,扩展信息数据量及访问并不大无需进行拆分,图片及标签根据商品编号进行拆分。因人而异、因地制宜,根据不同的数据场景选择不同的拆分方案,便能有效解决数据存储与查询问题。

 

        京东的评论是以用户和商品两个维度进行划分的,对于用户而言,用户需要发表评论、上传晒图、查看自己的评论等,因此只要根据userId进行拆库拆表便能解决用户数据写入、查询的问题;对于商品而言,前台需要将统计商品的评论数并将所有评价展示出来,后台需根据评论的全字段进行检索,同时还带模糊查询,而评价数据是按userId进行库表拆分的,现在要按商品去获取评论,显然当前的拆分库是无法实现的。起初考虑过根据商品编号再进行拆库拆表,但经过多层分析后发现行不通,因为再按商品编号进行拆分,得再多加一倍机器,硬件成本非常高,同时要保持用户及商品两维度的分库数据高度一致,不仅增加了系统维护成本及业务复杂度,同时也无法解决评论的数据统计、列表筛选、模糊查询等问题,面对前台如此巨大的流量压力,我们只能选择其它解决方案,为此引入了全文检索框架solr/Elasticsearch、高性能缓存redis。

 

全文检索框架+Redis

 


 





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [系统 设计] 推荐:

评价系统设计篇

- - 互联网 - ITeye博客
评论系统大家都见得非常多了,大到京东、淘宝、亚马逊,小到个人网站、博客都有评论系统,小型网站采用传统PHP+Mysql方式就能很快将系统搭建起来,同时采用单库单表方式就能轻松解决数据存储、数据查询等问题,但是对于上述中大型网站而言,已经远远不能支撑系统正常运行了. 接下来将从系统架构、数据存储、高性能服务等方面来揭示京东的评价系统在面对海量数据、海量请求的情况是如何处理的.

思考系统API设计的问题

- edware_love - C++博客-首页原创精华区
最近正好在思考系统API设计中考量的一些问题,. 我现在的理解是这样的,假设有巨大的真实内存. windows首先将高2G的内存自己占了,用作各种内核对象. 这2G内存共享给每个进程,但进程不能直接访问,只能通过windows给定的函数访问. : 然后每个进程都给他2G内存,进程如果创建自己的对象就放到自己那2G内存里面,如果要建立内核对象就放到共享的那高2G里面去.

系统设计中的简单法则

- - 酷勤网-挖经验 [expanded by feedex.net]
最近,包云岗在自己的 博客中总结了系统设计中的基本法则——简单之美,列举了不少经典观点和案例. 他首先总结了麻省理工方法(MIT Approach)和新泽西方法(New Jersey Approach)的异同:. 简单性:两种方法都强调设计必须简单,这既是对实现的要求,也是对接口的要求. 但是,MIT方法认为接口的简单要比实现的简单更加重要,而NJ方法认为实现的简单要比接口的简单更加重要.

财务系统设计的思考

- - 行业应用 - ITeye博客
说到财务系统的设计,就不由得联想到了目前很流行的一个职业“互联网产品经理”,他们的设计着眼于用户体验,创造出新的功能,改善着上亿网民的生活,比如扫一扫,摇一摇等. 财务系统不同于互联网的产品,它的复杂性对于没有深入了解它的人来说,是不太能想象出来的. 互联网的功能开发,讲究的是时效,从一个点子,到产品发布可能只用一周的时间,然后如果市场冷淡,可能第三周就下线了.

12306订票系统设计关键点

- - 互联网旁观者
12306全国火车票网上售票网站的情况大家都见到了,如果让你来设计该订票网站,你会如何设计才能应对如此大规模以及高并发的情况呢. 以下是百度前技术总监邵辉给出的设计:. 列车在线订票系统的业务逻辑比较简单,不用多说. 可能的瓶颈有两个,一个是车次和剩余票量的查询,一个是下单. 在设计软件架构之前,需要先研究产品需求、软硬件条件、网络环境以及关联系统的接口,但这些资料无从获得,所以只能做几点分析和假设,做为设计的前提条件.

网购秒杀系统架构设计

- - 企业架构 - ITeye博客
秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必须会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪. 用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成极大的负载压力.

秒杀系统设计的知识点

- - 互联网 - ITeye博客
A, 高并发,cache,锁机制 . B, 基于缓存架构redis,Memcached的先进先出队列. C, 稍微大一点的秒杀,肯定是分布式的集群的,并发来自于多个节点的JVM,synchronized所有在JVM上加锁是不行了. F, 如何防止用户来刷, 黑名单. G, 利用memcached的带原子性特性的操作做并发控制. .

O2O供应链系统架构设计

- - 美团技术团队
本文是美团技术沙龙第一期, O2O技术架构与实践上的分享内容. 请在微信搜索“美团技术团队”关注我们的公众账号,了解更多活动信息. 英国知名供应链专家Martin Christopher曾经说过一句非常深刻的话:“21世纪的竞争不是企业和企业之间的竞争,而是供应链和供应链之间的竞争. 在风云变幻、寡头纷争的O2O战场,美团屡出重拳并步步为营,战绩不俗.

(转)面向鲁棒的系统设计

- - jackyrong
本来打算叫做面向异常的编程的,后来觉得可能多的是系统健壮性方面,于是改名面向鲁棒的系统设计,所谓鲁棒,鲁棒是Robust的音译,也就是健壮和强壮的意思. 它是在异常和危险情况下系统生存的关键. 平时在做业务系统的时候,尤其是最近一年多接触的超复杂系统,发现处理线上问题所占的时间越来越多,总结发现,其实这些问题大都是之前欠下的债,至于为啥欠债,大多数情况下迫于项目或者日常的时间压力,很多设计从简,业务流程考虑主流程和分支流程,异常流程关注的少,不管三七二十一,功能先上线再说,如此便导致了恶性循环.

秒杀系统设计详解

- - 企业架构 - ITeye博客
高并发系统的设计及秒杀实践 - (秒杀队列、分库存). 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到. 对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购.