新搜索架构是基于SolrCloud和indexing建索引框架技术的⼀一个分布式垂直搜索。
主要开源工具:zookeeper、ganglia、tcpcopy、nginx、haproxy、rsync
旧架构弊端
配置多,以前是全人工,麻烦
- 建索引配置提交目标,一般是本地提交给本地服务。
- 一般是提交给master,然后再由master同步给slave
- 主从同步配置
- 需要配置主从关系,并写好同步脚本,读取配置的从机ip对应的信息
- nginx代理配置
- 一般是提交从机的搜索服务,所有修改upstream配置从机目标
主从机器有改的时候,需要修改建索引配置,同步配置,nginx配置。
大数据切分:
简单切分视频索引:大索引+小索引
大索引太大,放到普通机器上时,搜索性能太慢,所以现在是放到共享内存提高性能,但这样的机器就两台,当并发高的时候,需要更好的cpu,由于搜索计算比较多,并发高的时候,即使现在有16线程cpu也顶不住,容易并发瓶颈,此时应急启用普通机器,由于没有大内存,并不能达到解救的问题,而且放共存内存还有个安全隐患:
- 索引同步时需要双倍大小的空间,共享内存有限,机器重启后索引会丢失。
- 数据集中一台机器,计算消耗大,单机cpu不能线性补足,所以需要分布式计算来补足,特别是搜索命中比较多结果的时候,现架构响应很慢。
搜索业务扩展:
需要知道哪些搜索业务布置在哪些机器,需要记录文档,但是服务的变更太多,文档更新也频繁。
升级
solr扩展包布署,需要逐个更替,停止nginx代理--》停止服务--》更换升级包——》重启服务--》启动nginx的代理
新架构解决了什么问题?
新架构引入zookeeper 开源项目
Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统
Zookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,
一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式
cloud做到了管理多个jvm 索引 ,配置方便:
- 配置集中化管理 ,全部提交到zookeeper上,在某一个node启动,所有solrcore会从zookeeper上下载相应的配置
- 没有主从关系的配置,只有leader 与follower关系 ,两者可自动切换,配置一样。
- 建索引只需要知道集群的位置,zk的根目录 ,提交的collection,其它不需要知道,中间是透明的。
- 建索引程序可以随意布置,不需要因为服务在集群里的迁移而改动
- nginx的代理也不需要改动,因为在这个集群里所有的请求都可以转发到目标solrcore处理
大数据切分多片解决性能问题:
- 纵向扩展,将大数据切分小数据:
- 视频collection 切分为8 shards:按照视频主键hash计算均匀分配到8个分片上,每个片大概是4百万的数据 。索引优化只有900m每个分片,可以不放在内存,放在磁盘上。
- 每一次的搜索可以并行分发到8 个分片计算再合并结果,即使单字搜索命中几百万也可以在几百毫秒内响应。
- 横向扩展:每个分片一个leader多个follower作replicate, 每一个分片再做拷贝replicate负载,横向扩展。
- follower与leader可自动切换。
- 并行建索引:提升建索引效率。建索引程序将数据提交到多个shards上并行建索引,提高重建索引效率,
视频索引重建只需要1小时(以前3小时左右,不稳定),客户搜索使用的视频完全重建也只需要1个半钟完成(以前5个小时左右,不稳定 )。
方便之处,建索引程序可以方便布置在集群里机器,当某机器资源紧张时迁移到其它比较闲的机器上,暂时放在内存比较充足的机器上。
同数据源提交给多server,
视频同源过滤提交到另一个collection,过滤掉的视频大概有几百万左右数据,但依然不影响建索引时间。而且还可以提供完整的视频数据搜索,例如在空间,或者开放平台上的视频搜索。
任意结点做更新与搜索:
数据可以提交到该集群里的任意结点,自动转发到目标solrcore更新
任意结点的搜索,结点上发现没有solrcore处理该请求时会抛给远程solrcore来处理,所以nginx上配置的代理 一般不用作变化
持久化更新:
每个更新都会先写入tlog日志,保证更新的持久化。以前写到内存的索引会因为机器挂掉的原因而导致数据丢失,现在有了持久化更新可以考虑做增量的更新,比如删除更新
准实时搜索
删除的更新可以及时可见,将已删除的视频从索引搜索去掉。暂时还没在新架构使用,这个需要测试与调优再上线。
业务变更与升级
扩展包集中管理 :
与war包分离,升级不重新打包war。暂时由rsync同步第三方包到集群里每一台机器的统一位置,每一个搜索服务可能的扩展包都不一样,所以需要在solrconfig.xml配置取对应的扩展包位置。
这个与以前的作法不同,以前是将扩展的包跟原生的solr打包在一起,这样升级需要停止原来的服务再切换。
热布署:
现在是将实现的扩展包通过rysnc同步到各个机器 ,然后reload 一下solrcore,这个过程是原子操作,可以无缝切换,一般不需要达到重启服务级别。
solr新版本升级
新起结点替换旧结点,不资源允许的情况下,可以保留两套,主要做升级切换 使用。
建索引框架变更,IndexBridge---->indexing
以前大部分搜索的建索引都是使用IndexBridge,那么为什么 要更换另一个框架呢:
以前所有搜索业务的预处理过滤器都写到IndexBridge框架上,经过这么多年的沉淀,这个框架已经变得很臃肿,特别是因为多人经手后,不同人的代码写法不同,它的维护性变更得更麻烦。
特别是版本的维护变得更难,因为引用的第三方包使用的是ivy管理 ,但如果版本号没更改就提交,所有人看到的都不一样,有时发布的时候发现比最新的版本号还最新,好像大家都没有提交版本的习惯了。
为了解决这个问题,重新启用indexing框架 ,将不同的建索引业务分离,每一个搜索业务都独立一个项目,继承indexing框架实现自己的业务需求,除了代码干净多了,即使写得再烂的代码也不会影响其它已有的项目的升级变更。
即使indexing框架的升级,也不会影响旧的建索引程序,因为它们都是引用可用的版本,只要做好indexing框架的版本控制与发布就可以了。
我们使用的是ant+ivy做第三方包版本管理与发布, 每一个项目都可以独立打包布置。实现统一的脚本 ,布置的时候看到的很清晰的规则。
#####################################build index#####indexing
#album builder index
0 * * * * (cd /diskb/solrSearch/indexing/indexing-album && sh indexing.sh )
#solr-town builder index
7 * * * * (cd /diskb/solrSearch/indexing/indexing-town && sh indexing.sh )
#solr_ad builder index
14 * * * * (cd /diskb/solrSearch/indexing/indexing-ad && sh indexing.sh )
启用了新的框架多读多写并行提交索引,现在建索引的时间都比以前提高 了几倍:
视频(千万级别) 一小时 ---------- 以前 3小时左右
专辑搜索 建索引 15分钟 --------以前一个多小时
--------------------------------------------------
后续的高级集群管理
数据自动化迁移,可以动态增加分片。
solrcore使用LRU策略管理,资源的利用由集群自动化管理 ,不需要手工去处理数据自动化迁移,可以动态增加分片。
solrcore使用LRU策略管理,资源的利用由集群自动化管理 ,不需要手工去处理
来自互联网
相关推荐
华为PaaS平台架构师李林峰在本次演讲中呈现的分享主题是《基于微服务架构改造单体架构的实践总结》。
高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击。服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的...
【架构师总结】 软考高级证书的软件架构设计师考试涵盖了从2009年至2018年的真题知识点,这份文档对考生来说是宝贵的复习资料。文档详细总结了选择题、案例分析和论文题目的关键知识点,对于通过考试至关重要。作者...
综合上述内容,InfiniBand架构和技术实战总结的电子书为读者提供了一套深入理解和应用InfiniBand技术的完整资料,它覆盖了从基本概念到技术原理,再到实际架构和应用场景的各个方面。这本书对于那些希望建立高性能...
总结,整合Tomcat+SolrCloud6.2的Web项目是一个涉及多方面技术的复杂过程,需要理解SolrCloud的分布式原理,熟练掌握Spring的配置和SolrJ的使用。同时,还需要注意系统的高可用性和性能优化,例如合理的索引设计、...
这个“架构学习资料总结”涵盖了基础和中级理论基础,旨在帮助学习者全面理解和掌握架构设计的核心概念。 首先,我们从基础理论开始。架构设计的基础包括对计算机系统的基本理解,如操作系统原理、数据结构与算法、...
C# 三层架构个人总结 C# 三层架构是一种常见的软件架构模式,旨在将应用程序分层処理,以提高代码的可维护性、可拓展性和可重用性。该架构模式将应用程序分为三层:UI 界面层、BLL 业务逻辑层和 DAL 数据访问层。 ...
- **可扩展性**:SolrCloud架构易于横向扩展,可根据业务需求动态添加节点。 ### SolrCloud的关键概念 #### 1. Collection - **定义**:Collection是在SolrCloud中逻辑意义上完整的索引结构,通常由一个或多个...
本资料包"软件架构风格整理及总结"包含了丰富的资源,旨在帮助读者深入理解各种经典架构风格,这对于架构师的成长和相关考试的准备至关重要。 首先,我们要讨论的是层次型架构风格。这种风格将系统分解为多个独立的...
《系统架构师软考真题以及考点总结》 在信息技术领域,系统架构师是一个至关重要的角色,他们负责设计和规划复杂的信息系统,确保其高效、稳定且可扩展。为了成为这样一位专业人士,许多人选择参加“软考”(全国...
【标题】"基于微服务架构改造单体架构的实践总结" 在现代软件开发领域,微服务架构已经成为一种主流的设计模式,特别是在大型企业级应用中。本文将深入探讨华为讲师李林峰在2016年中国软件峰会上分享的关于如何从...
ASP.NET三层架构是一种常见的软件设计...总结,ASP.NET三层架构为开发高质量、可维护的Web应用程序提供了一个强大而灵活的框架。通过学习PetShop这个示例,开发者可以更好地理解如何在实际项目中应用和实践三层架构。
SolrCloud通过引入诸如Shard、Collection等概念实现了高性能、高可用性和可扩展性的搜索解决方案。此外,Solr5.x在独立模式和云模式下的应用方式也为不同规模的应用场景提供了更多的选择。最后,部署过程中可能会...
以上是对“软件架构师应该知道的97件事总结”的详尽解析,涵盖了软件架构设计中的多个方面,旨在帮助架构师更好地理解他们的角色,做出明智的决策,并创建出能够满足业务需求、具有良好性能和可维护性的软件系统。
在不同的架构设计方法中出现的软件架构视图种类很多,本文介绍最常用的两种架构视图——逻辑架构视图和物理架构视图,并通过具体案例的分析说明如何运用它们进行架构设计。当观察和描述事物大局的时候,逻辑架构和...
"MySQL数据库建库架构建设总结" MySQL数据库建库架构建设总结是指由于业务需求创建的新的数据库而不是重导或重建数据库。该总结涵盖了背景、软件版本选择、架构选型规则、Service Name、操作系统用户名与域名命名...
2G的典型制式为GSM和CDMA,3G时的主流制式为WCDMA,CDMA2000以及TD-SCDMA,当前4G的制式统一为LTE(TDD-LTE和FDD-...本文简要回顾2/3/4G移动通信网络架构,重点关注其核心网部分以及4G核心网中互联网业务的技术架构。
分布式架构设计概要总结 分布式架构是现代互联网业务的核心,其设计主要由业务架构的演进驱动,以应对不断增长的并发请求处理能力和系统高可用性的需求。在分布式系统中,数据分布在不同的节点上,因此设计时需要...