百亿级全网舆情分析系统存储设计

摘要: 前言 在时下互联网信息的浪潮下,信息的传播速度远超我们的想象。微博里一条大V的帖子,朋友圈的一个状态更新,热门论坛的一条新闻,购物平台的购物评价,可能会产生数以万计的转发,关注,点赞。如果是一些非理性负面的评论会激发人们的负面感,甚至影响到消费者对企业品牌的认同,如果不能及时的采取正确的应对措施,会造成难以估计的损失。

前言

在时下互联网信息的浪潮下,信息的传播速度远超我们的想象。微博里一条大V的帖子,朋友圈的一个状态更新,热门论坛的一条新闻,购物平台的购物评价,可能会产生数以万计的转发,关注,点赞。如果是一些非理性负面的评论会激发人们的负面感,甚至影响到消费者对企业品牌的认同,如果不能及时的采取正确的应对措施,会造成难以估计的损失。所以我们需要一个高效的全网舆情分析系统,帮助我们实时的观测舆情。

这个全网舆情分析系统,可以实现百亿条网页数据的存储、实时新增网页的抓取和存储并能对新增网页做实时的元数据提取。有了提取结果,我们还需要进行进一步的挖掘分析,这些分析包括但不限于

舆情的影响力诊断,从传播量级和扩散趋势来做预测,确定是否最终形成舆情。
传播路径分析,分析舆情传播的关键路径。
用户画像,对舆情的参与者提供共性特征勾勒,如性别,年龄,地域和感兴趣话题。
情感分析,分析新闻或者评价是正面还是负面。情感分类后进行统计聚合。
预警设置,我们支持舆情讨论量阈值设置,达到阈值后通知推送业务方,避免错过舆情的黄金参与时间。
这些挖掘后的舆情结果会被推送至需求方,同时也提供接口给各业务方搜索,查询使用。下面我们就展开讨论系统设计中可能会遇到的问题,我们会重点关注系统设计中存储相关的话题,针对这些问题找到一个最优化的方案。

系统设计

对于一个舆情系统,首先需要一个爬虫引擎,去采集各大主流门户,购物网站,社区论坛原始页面内容,微博,朋友圈的各类消息信息。采集到的海量网页,消息数据(百亿级别)需要实时存储下来。再根据网站url获取网页之前还需要判断一下是否是之前爬过的页面,避免不必要的重复爬取。采集网页后我们需要对网页进行萃取,去除不必要的标签,提取标题,摘要,正文内容,评论等。萃取后的内容进入存储系统方便后续查询,同时还需要把新增的抽取结果推送至计算平台进行统计分析,出报表,或者后续提供舆情检索等功能。计算的内容根据算法不同可能需要新增数据,也可能需要全量数据。而舆情本身的时效敏感性决定了我们系统一定要能高效处理这些新增内容,最好是秒级别延时后就可以检索到新热搜。

我们可以总结下整个数据流如下:

图片描述

根据上图我们不难发现,设计一个全网舆情的存储分析平台,我们需要处理好抓取,存储,分析,搜索和展示。具体我们需要解决如下问题:

如何高效存储百亿级别的网页原始信息,为了提高舆情分析的全面性,准确性,我们往往希望可以尽可能多的爬取网页信息,再根据我们设置的权重聚合。所以网页的历史全库会比较大,积累数百亿的网页信息,数据量可以达到百TB甚至数PB。在数据量如此之大的情况下,我们还需要做到读写毫秒级别的低延时,这使得传统数据库难以满足需求。
如何在爬虫爬取网页之前判断是否之前已经爬取过,针对普通网页,舆情在意他们的时效性,可能我们对同一个网页只希望爬取一次,那我们就可以利用网页地址做爬取前去重,减少不必要的网页资源浪费。所以我们需要分布式存储提供基于网页的高效随机查询。
如何新增原始网页存储完成后进行实时的结构化提取,并存储提取结果。这里我们原始的网页可能是包括各种html的标签,我们需要去除这些html的标签,提取出文章的标题,作者,发布时间等。这些内容为后续舆情情感分析提供必要的结构化数据。
如何高效的对接计算平台,流式新增提取后的结构化数据进行实时的计算。这里我们需要根据网页,消息描述的内容做分类,进行情感识别,识别后的结果统计分析。由于全量分析时效性差,加上舆情往往关注最新的新闻,评论,所以我们必须做增量分析。
如何提供高效的舆情搜索,用户除了订阅固定关键词的舆情以外,做一些关键词搜索。例如希望了解竞争公司新产品的一些舆情分析。
如何实现新增舆情的实时推送,为了保证舆情的时效性,我们不仅需要持久化舆情分析结果,同时也要支持推送舆情结果。推送的内容通常是我们实时分析出来的新增舆情。
系统架构

针对上面介绍这些问题,我们下面来介绍下如何基于阿里云上的各类云产品来打造全网百亿级别的舆情分析平台,我们会重点关注存储产品的选型和如何高效的对接各类计算,搜索平台。

图片描述

爬虫引擎我们选用ECS,可以根据爬取量决定使用ECS的机器资源数,在每天波峰的时候也可以临时扩容资源进行网页爬取。原始网页爬取下来后,原始网页地址,网页内容写入存储系统。同时如果想避免重复爬取,爬虫引擎抓取之前要根据url列表进行去重。存储引擎需要支持低延时的随机访问查询,确定当前url是否已经存在,如果存在则无需重复抓取。

为了实现网页原始内容的实时抽取,我们需要把新增页面推送至计算平台。之前的架构往往需要做应用层的双写,即原始网页数据入库同时,我们重复写入一份数据进入计算平台。这样的架构会需要我们维护两套写入逻辑。同样的在结构化增量进入舆情分析平台中,也有类似的问题,抽取后的结构化元数据也需要双写进入舆情分析平台。舆情的分析结果也需要一份写入分布式存储,一份推送至搜索平台。到这里我们可以发现,图中的三根红线会带来我们对三个数据源的双写要求。这会加大代码开发工作量,也会导致系统实现,维护变的复杂。每一个数据源的双写需要感知到下游的存在,或者使用消息服务,通过双写消息来做解耦。传统数据库例如mysql支持订阅增量日志binlog,如果分布式存储产品在可以支撑较大访问,存储量的同时也可以提供增量订阅就可以很好的简化我们的架构。

网页数据采集入库后,增量流入我们的计算平台做实时的元数据抽取,这里我们可以选用函数计算,当有新增页面需要提取时触发函数计算的托管函数进行网页元数据抽取。抽取后的结果进入存储系统持久化后,同时推送至MaxCompute进行舆情分析,例如情感分析,文本聚类等。这里可能会产生一些舆情报表数据,用户情感数据统计等结果。舆情结果会写入存储系统和搜索引擎,部分报表,阈值报警会被推送给订阅方。搜索引擎的数据提供给在线舆情检索系统使用。

在介绍完整体架构后,下面我们看下在阿里云上如何做存储选型。

存储选型

通过架构介绍我们再总结一下对存储选型的要求:

可以支撑海量数据存储(TB/PB级别),高并发访问(十万TPS~千万TPS),访问延时低。
业务随着采集订阅的网页源调整,采集量会动态调整。同时一天内,不同时间段爬虫爬下来的网页数也会有明显波峰波谷,所以数据库需要可以弹性扩展,缩容。
自由的表属性结构,普通网页和社交类平台页面的信息我们需要关注的属性可能会有较大区别。灵活的schema会方便我们做扩展。
对老数据可以选择自动过期或者分层存储。因为舆情数据往往关注近期热点,老的数据访问频率较低。
需要有较好的增量通道,可以定期把新增的数据导出至计算平台。上面的图中有三段红色虚线,这三部分都有个共同的特点需要可以实时的把增量导至对应的计算平台做计算,计算后的结果再写入对应的存储引擎。如果数据库引擎本身就支持增量,则可以很大程度简化架构,减少之前需要全量读区筛选增量,或者客户端双写来实现得到增量的逻辑。
需要可以有较好的搜索解决方案(本身支持或者可以数据无缝对接搜索引擎)。
有了这些需求后,我们需要使用一款分布式的NoSQL数据来解决海量数据的存储,访问。多个环节的增量数据访问的需求,业务的峰值访问波动进一步确定弹性计费的表格存储是我们在这套架构中的最佳选择。表格存储的架构介绍可以参考表格存储数据模型

TableStore(表格存储)相比同类数据库一个很大的功能优势就是TableStore(表格存储)有较完善的增量接口,即Stream增量API,Stream的介绍可以参考表格存储Stream概述。场景介绍可以参考Stream应用场景介绍,具体API使用可以参考JAVA SDK Stream。有了Stream接口,我们可以很方便的订阅TableStore(表格存储)的所有修改操作,也就是新增的各类数据。同时我们基于Stream打造了很多数据通道,对接各类下游计算产品,用户甚至不需要直接调用Stream API,使用我们的通道直接在下游订阅增量数据,自然的接入了整个阿里云的计算生态。针对上面架构中提到的函数计算,MaxCompute,ElasticSearch和DataV,TableStore(表格存储)都已经支持,具体使用可以参考:

Stream和函数计算对接
Stream和MaxCompute
Stream和Elasticsearch
通过DataV展示表格存储的数据
TableStore(表格存储)在属性列上,是自由的表结构。针对舆情分析这个场景,随着舆情分析算法的升级我们可能会新增属性字段,同时针对普通网页和微博这类社交页面的属性也可能不尽相同。所以自由表结构相比传统数据库可以很好的匹配我们这个需求。

在架构中,我们有三个存储库需求。分别是原始页面库,结构化元数据库和舆情结果库。前两者一般是一个离线存储分析库,最后一个是一个在线数据库。他们对访问性能,存储成本有着不同的需求。表格存储有两种类型的实例类型支持存储分层,即高性能和容量型。高性能适用于写多读多的场景也就是做为在线业务存储使用。容量型适合写多读少的场景,也就是离线业务存储用。他们的写入单行延时都可以控制在10毫秒内,读取高性能可以保持在毫秒级别。TableStore(表格存储)同时支持TTL,设置表级别数据过期时间。根据需求,舆情结果我们可以设置TTL,只提供近期数据的查询,较老的舆情自动过期删除。

有了TableStore(表格存储)的这些功能特性,系统对存储选型的六项要求就可以得到很好的满足,基于TableStore(表格存储)可以完美的设计和实现全网舆情存储分析系统。

后记

本文对实现海量数据舆情分析这一场景中会遇到的存储和分析问题进行了总结,介绍了如何通过使用阿里云自研的TableStore(表格存储)在满足业务基本数据量的前提下,通过Stream接口和计算平台的对接实现架构简化。TableStore(表格存储)是阿里云自主研发的专业级分布式NoSQL数据库,是基于共享存储的高性能、低成本、易扩展、全托管的半结构化数据存储平台,舆情数据存储分析是TableStore在大数据处理领域的重要应用之一。其他场景使用可以参考TableStore进阶之路。

作者:宇珩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试官:你简历中写用过docker,能说说容器和镜像的区别吗?

戳蓝字“CSDN云计算”关注我们哦!作者 | bethal来源 | http://sina.lt/gfmf这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中…

IPv6终于要取代IPv4了!阿里云将全面提供IPv6服务

摘要: 近日,中办国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》,加快推进基于IPv6的下一代互联网规模部署,计划指出到2018年末国内IPv6活跃用户数要达到2亿,2020年末达到5亿&#xff…

SDN精华问答 | 为什么会出现SDN?

SDN火热了好一阵子,无论运营商、政府企业、投资机构,一段时间,不知道SDN、不能甩几个SDN相关的名词术语,似乎都落后于时代了。今天,就来看看关于SDN的精华问答吧。1Q:SDN的本质属性? A&#xff…

一张图看懂2017双11中的网络产品和技术

摘要: 大家都知道,2017年双11又创造了新纪录,全天交易额1682亿,交易峰值32.5万笔/秒,支付峰值25.6W笔/秒,狂欢的背后是极其复杂庞大的技术系统,其中就有大量阿里云云计算相关的产品和技术&#…

开源Elasticsearch云托管服务,专享企业级服务

摘要: 日前,阿里云联合开源官方Elastic联合发布了Elasticsearch新产品。该产品基于开源Elasticsearch及商业版X-Pack插件的云托管服务,保证高性能、高可用,可弹性扩容,并提供企业级权限管控、安全监控告警等高级功能,适…

Ivanti罗琦:IT服务管理中“拧紧螺丝”要有门道儿!

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘晶晶Ivanti与科大讯飞的携手合作!初听这一消息,阿晶惊讶不已。毕竟科大讯飞擅长语音众所周知,Ivanti更专攻IT服务管理,看似“不相关”的两家企业,却有了某种隐含的…

CDN价格下调25% 阿里云再次冲击国内最低价

摘要: 在刚刚圆满落幕的云栖大会广东分会上,阿里云发布了很多重磅信息,其中不乏很多核心产品折扣幅度调整的信息。令人惊喜的是,阿里云CDN价格再次下调,降幅高达25%。降价完成后,带宽单价最低只需0.54元/Mb…

SpringBoot整合Spring Cloud Alibaba

spring-cloud官方中文文档https://www.springcloud.cc/spring-cloud-dalston.htmlspring-cloud官方文档https://cloud.spring.io/spring-cloud-static/Greenwich.SR1/single/spring-cloud.html#_quick_start_6Spring Cloud Alibaba官方文档https://github.com/alibaba/spring-c…

产品经理教你玩转阿里云负载均衡SLB系列(一):快速入门--什么是负载均衡

摘要: 负载均衡是一种技术,从字面意义上理解,就是让负载(变得)均衡,负载是什么呢?可以理解为工作量、工作强度。用日常生活中的例子来打比方,一群建筑工人,盖一幢楼房,有搬砖的&…

android touch事件坐标原点,Android onTouch事件与手势操作

触摸,手势操作已经很好的融入了我们的生活。那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习。先看效果图如上图所示&#xff0c…

2019年技术盘点容器篇(二):听腾讯云讲讲踏入成熟期的容器技术 | 程序员硬核评测...

戳蓝字“CSDN云计算”关注我们哦!作者:刘晶晶据相关调研机构出具的报告数据显示,目前应用容器市场规模将从2016年的 7.62亿美元增长到2020年的27亿美元。显而易见,引入容器所展现的巨大灵活性有效推动了其采用速率,使企…

阿里云容器服务新增支持Kubernetes编排系统,性能重大提升

摘要: 作为容器编排系统的两大流派, Kubernetes和Swarm的重要性不言而喻。融合了两大高性能集成的阿里云容器服务,不仅可以降低50%的基础架构成本,提高交付速度将产品迭代加快13倍,还可以实现秒级的海量容器启动、秒级…

实战_01_Spring SpringMVC 整合Mybaits

文章目录一、技术选型1.1. maven坐标说明1.2. 环境准备二、工程所属关系2.1. 项目结构总览2.2. 工程所属关系总览三、创建聚合工程3.1. 聚合工程_ly-parent3.2. 聚合工程_ly-manager四、创建子项目4.1 创建子工程服务ly-common4.2 创建子工程服务ly-entity4.3 创建子工程服务ly…

Android热修复升级探索——代码修复冷启动方案

摘要: 前面一篇文档, 我们提到热部署修复方案有诸多特点(有关热部署修复方案实现, Android热修复升级探索——追寻极致的代码热替换)。其根本原理是基于native层方法的替换, 所以当类结构变化时&#xff0c…

K8S精华问答 | 应用和运行时平台是怎样解耦的?

kubernetes,简称K8S,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应…

android放在上个元素的左边代码,控件悬浮在某个控件之上 Android五大布局方式——相对布局(RelativeLayout)属性详解...

如图所示,想要实现搜索框在轮播图上面,不管滑动与否,这个组合控件都在上面1.就要用到RelativeLayout,相对于父元素定位,而且这个搜索框的组合控件必须要放在所有控件下面,在使用android:layout_alignParentTop"true"这个属性,贴紧父元素的上边缘.代码实现RelativeLay…

新功能:在负载均衡SLB控制台上查看DDoS安全防护阈值

摘要: 负载均衡作为业务系统的公网入口,承载海量访问请求的分发,常常也是DDoS攻击的对象,因此阿里云提供了免费的DDoS防护(云盾),详情可以参考之前的博文《聊一聊负载均衡SLB的DDoS防护》。 由于…

实战_02_Spring SpringMVC 整合Mybaits

接上一篇:企业实战_01_Spring SpringMVC 整合Mybaits https://blog.csdn.net/weixin_40816738/article/details/101343414 文章目录一、数据库操作1.1. 创建数据库1.2. 表结构二、整合实战2.1. 整合思路2.1.1. Dao层2.1.2. service层2.1.3. Dao层表现层2.2. Dao整合…

自动化测试 之 “好用例、坏用例”

摘要: 自动化测试的重要性显而易见,但自动化测试又无法解决所有问题,所以说完全依赖自动化是不可能的,但完全没有自动化是万万不能。在软件开发项目中,重度依赖人力进行持续回归是一件非常枯燥的重复工作。企业需要花费…

重磅!Python又第一了!网友:为什么找不到好工作?真相让人脸红…

根据第 19 届 KDnuggets调查显示,Python 成数据分析、数据科学与机器学习的第一大语言。图片来源于第 19 届 KDnuggets软件大调查Python 在机器学习中的地位日益扩大,2017 年,机器学习中Python 的使用率超过 50%,今年则直接上升到…