51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦!
Poseidon 体系是由 360 开源的日记搜刮平台,今朝已经用到了临盆环节中,可以在数百万亿条、数百 PB 大年夜小的日记数据中快速分析和检索特定字符串。因为 Golang 得天独厚的支撑场发编程,Poseidon 的核心搜刮引擎、发报器、萌芽代劳是用 Golang 开辟的,在核心引擎萌芽、多天萌芽、多天数据异步下载中大年夜量应用了 goroutine+channel 。
之前我的工作一向面向海量用户,客岁年中我接触大年夜数据以及海量数据如许的场景,在今天的演讲中,重要会涉及以下几方面内容:
- 设计目标
- Go 应用处景与遭受的挑衅
- 如何应对?
- 开源的改变
- 总结
起首说一下为什么要做这个体系。这是一个安然公司,APT ( 高危威逼持续性事宜)。在追查APT事宜的时刻,我们平日会找一个样本在某一样时光之内到底做了什么工作。在海量日记中找这些信息的话,命运运限好不堵塞的时刻,大年夜约两、三小时可以跑出来,如不雅命运运限不好,跑的义务太多堵塞的话就要修复,可能一天两天才能出来数据,显然如许的效力是不高的。
我们的设计目标,我们总的数据量保存三年的汗青数据,一共有一百万亿条,大年夜小有 100 PB。秒级交互式搜刮响应,早年端提议请求到某一天数据,我们会在几秒钟之内给你返回。我们之前设定秒级60秒返回就可以,实际上做完之后测试的结不雅都在3秒到5秒之内,90%请求在10秒之内。天天要支撑两千亿数据量灌入,原始数据仅存一份,对现有 MR 义务无侵犯。ES 原始数据不止存一份,会再存一份,我们这么大年夜数据量来说,再存副本的话,保护成本以及价值是异常大年夜的。ES 支撑不了百万亿级数据量,如今业界做到一千亿,我们只做到300多G。然后自定义的分词策略,我们每一个营业的日记格局都不一样,分词策略须要特别灵活;然后故障转移节点负载均衡,主动恢复,支撑原始日记的批量下载。

图1
图1是我们总体流程,这个图比较复杂,我们之前有同事分享过这个架构。如不雅今天再分享架构可能时光会不敷,图2是它的一个异常简单的粗略图。

图2
Go 应用处景与遭受的挑衅
起首原始日记。 在转化的时刻我们把每 128 行原始日记采掏出来作为一个文档,多个文档联络在一路形成一个文件。这里会有人问为什么选择 128 行,我们天天日记量是700亿,按照每一行一个文档我们有700 亿文档。一行日记一个文档,700 亿文得魅占用空间太大年夜;700 亿数据会膨胀。选择 128 行是因为:第一,700 亿除 128 ,大年夜约是 5.46 亿阁下,在必定范围内可以遭受;第二,因为我们的ID都是数字情势,以发号器情势发出来的,我们紧缩数字的时刻,肯定要采取各类各样的紧缩办法,我们在这个处所用的插分,对于128 数字的紧缩是比较好的。紧缩 128 行日记比较紧缩1行日记高很多。我们天天原始日记,我说的营业天天原始日记有 60 ,紧缩之后我们能打成 10 阁下,这是天天的数据。我们在输出的时刻,这个是原始的日记,最后就要到原始日记琅绫擎找,最后就要构建数据。因为我们要存入进去的时刻,方才我说的一句话,很多人不明白,多个连接起来形成一个文件。有一个异常大年夜的优势,琅绫擎的数据我放到别的一个文件琅绫擎,我一向叠加,最后这个文件可以被解压。换一种方法来说,把文件都输出到一个文件琅绫擎,作为章一?文件,我大年夜这个文件琅绫擎掏出某一段来,我就可以解压出来,这是一个异常大年夜的特点。因为我须要读一段日记,我肯定要知道这个我大年夜哪个处所读到哪个处所,我要知道我读的紧缩文件,解压出来就是128行日记。我们把全部原数据放到这琅绫擎,去建索引以及原数据,大年夜体就是如许一个流程。起首看一下离线引擎,客户端请求日记,包含 PC 卫士、收集以及浏览器等等,这块相当于传统搜刮引擎的爬虫。下面会具体讲到,离线生成 DocGz 、DocGzmeta ,然后构建原数据。在线引擎,web 我们做简单的页面开辟,到 proxy 集群,再发到 searcher 集群,然后走到 readHDFS ,readHDFS这个办事是用 Java开辟,用 Java 开辟有很多坑,然则又不得不消,因为java仍然是操作hadoop最合适的说话。
来说一下数据构造。 我们用 ProtrBuffer 描述核心数据构造。每一个 ID 下面分为两段,那个 docID 就是我这个文档的编号;第二是 rowIndex,每个琅绫擎都邑对应多行日记,我这琅绫擎对应 128 行琅绫擎哪一行日记,就是这个做的定位。我们用 map 的情势描述出来,这个是由 DocID 形成的列表,每一个琅绫擎会对应多个DocIDList。map 和 string 琅绫擎,我要先找到 map ,然后再把数据拿出来。如图3所示。

图3
我们推敲开源。 在客岁11月份的时刻,我们开源了体系,体系有66%代码是用Golang写的。我们有两个问题须要解决,第一个问题第三方依附的问题,我们开源主体筹划没有效到我们本身的内部依附包,这些第三方的组件,我们应当若何保护它,我当时和很多人交换过,这种方法也比较多,然则他们各有各的长处和缺点,几乎没有一个异常完美的筹划,能解决到依附琅绫擎再套依附,以及独裁依附关系,至少我没有找到,既然没有的话,就选择最大年夜众化,最简单的筹划,用这个方法来解决。
推荐阅读
l 前端7*24小时客服中间;【51CTO.com原创稿件】“我认为,IDC行业所供给的资本可以被比方成‘水’,形象一点儿懂得的话,云公司的感化就是将IDC行业供给的水加工成矿泉水或者纯清水,但>>>详细阅读
本文标题:Go在百万亿级搜索引擎中的应用
地址:http://www.17bianji.com/lsqh/37418.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示