热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Solrinaction学习笔记第十三章SolrCloud

13.1GettingstartedwithSolrCloud13.1.1StartingSolrincloudmode单机建立一个集群应用,一个端口模拟一个solrcd$SOLR

13.1 Getting started with SolrCloud

13.1.1Starting Solr in cloud mode

单机建立一个集群应用,一个端口模拟一个solr

cd $SOLR_INSTALL/
cp -r example/ shard1/

13.1.2 Motivation behind the SolrCloud architecture

■ Scalability
■ High availability
■ Consistency
■ Simplicity
■ Elasticity

----------------------------------------

■ Scalability

*replication可以提高容错性,并且提供query的并行性

我们的目标是linearly scalable,但实际上增加资源要增加额外的管理开销,所以只能接近这个目标

一个Solr的index至多21亿的文档(int64的ID),解决方法是索引分片shard

大文档和多field需要更多的内存和更快的磁盘IO,解决:Add RAM and faster disks

Index吞吐量:需要每秒索引数千文档,解决:分布式索引

query量:使用“复制”并行query

query复杂性(facet,sort等):使用shard和replication

-----------------------------------------------------------------

■ High availability(高可靠性)

从商业的角度考虑问题:How much you can spend

failover失败备缓

数据冗余:失败时不用复制数据到正常机器

1 Unexpected outages that affect a subset of the nodes in your cluster due to issues
such as hardware faults and loss of network connectivity
2 Planned outages due to upgrades and system maintenance tasks
3 Degraded service due to heavy system load
4 Disasters that take your entire cluster/data center offline

Solr提供单数据中心的高可靠性,多数据中心还未提供支持

服务的两种架构:1.所有的node都提供index和query2.master nodes提供index,slave nodes提供query

minimize downtime during upgrades:rolling restart

另一种outage:过载,query返回过慢,在用户端是不能容许的!

  解决:可靠的管理系统,快速添加node的能力

高级话题:硬件层优化,如RAID等

--------------------------------------------

■ Consistency

根据CAP原则,可用性与一致性不可兼得?

更新操作必须在所有replicas上成功,否则整个操作失败。solr不允许replicas上的query返回不同版本的文档。

Solr目前对不一致性是0容忍的。

-----------------------------------------------

■ SIMPLICITY

*一但集群启动,操作不比单机复杂

*fail node恢复简单:自动同步

Zookeeper可以看成黑盒技术,处理初始化就不用太管了。

ELASTICITY

扩展系统的能力:shard继续分成更小的shard,增加replica

---------------------------------------------------------------

13.2 Core concepts

13.2.1 Collections vs. cores

Collections提供一个schema的整个服务,可有多个cores组成,每个core是一个shard或replica?。

shard是互不相交的索引分片,replica是shard的复制,一个shard有多个replica,其中一个是leader

13.2.2 ZooKeeper

■ Centralized configuration storage and distribution
■ Detection and notification when the cluster state changes
■ Shard-leader election

成熟稳定广泛应用

 ZOOKEEPER DATA MODEL

组织数据为类似于文件系统的分层结构,每层称为znode,包含基本的元数据,每个znode最多存1mb数据。ZooKeeper不是用来做数据存储系统的,只存小的元数据。

一个中心概念:ephemeral znode,短暂的znode?由客户端连接使其保持actvie。如果客户端失去连接,短暂zndoe被自动删除。

一个Solr的node加入集群,Zookeeper会为其创建znode,如果该node失联,Zookeeper还会通知其他node

ZNODE WATCHER

任何客户端应用都可以注册为watcher,znode改变,Zookeeper就会通知watcher

PRODUCTION CONFIGURATION

对于产品来讲,配置一个独立的Zookeeper全体,有3个node组成

zkHost参数将Zookeeper的服务器和端口传给Solr

ZOOKEEPER CLIENT TIMEOUT

Zookeeper检视solr状态的超时参数,默认15秒

CENTRALIZED CONFIGURATION STORAGE AND DISTRIBUTION

solrconfig和schema都被提交到Zookeeper上!

13.2.3 Choosing the number of shards and replicas

有文档数,文档大小,index,query吞吐量,query复杂性,index增长等因素决定。12章Solr产品化有讲

13.2.4 Cluster-state management

active,inactive等

13.2.5 Shard-leader election

shard leader接受更新请求,并发布到replicas上使其同步,Specifically,

■ Accepts update requests for the shard
■ Increments the value of the _version_ field on the updated document and enforces optimistic locking
■ Writes the document to its update log
■ Sends the update (in parallel) to all replicas and blocks until a response is received

shard leader在query时没有额外的责任

13.2.6 Important SolrCloud configuration settings

solr.xml有标签

HOST:向Zookeeper提供ip和端口,产品化时最好使用host name,更可视化,并且易于更新(更新dns

具体425-426

***********************************************************

13.3 Distributed indexing

客户单的角度,index没有改变。服务器端index改变巨大,

13.3.1 Document shard assignment

document router:文档路由,决定文档分配到哪个shard

两个solr提供的策略:compositeId (default) and implicit(不讨论,路由需要客户端编程完成,定制化路由)

每个shard分配32位的hash range,范围平均分配到每个shard

该算法使用unique document ID计算hash,分配到该范围的shard中

计算需要快速且对shard公平。

使用MurmurHash算法

13.3.2 Adding documents

SolrJ提供新的SolrServer实现:CloudSolrServer,是index更鲁棒

CloudSolrServer读取zookeeper的cluster-state,直到shard leader,因为update request要先路由到leader,CloudSolrServer可以直接发给leader节省时间

 具体步骤略读P430-431

一批文档CloudSolrServer自动分组,高吞吐量index到正确的shard上

13.3.3 NRT

实际上是soft commit,略

13.3.4 Node recovery

■ Peer sync—If the outage was short-lived and the recovering node missed only a few updates, it will recover by pulling updates from the shard leader’s update log. The upper limit on missed updates is currently hardcoded to 100. If the number of missed updates exceeds this limit, the recovering node pulls a full index snapshot from the shard leader.

■ Snapshot replication—If a node is offline for an extended period of time such that it becomes too far out of sync with the shard leader, it uses Solr’s HTTPbased replication, based on the snapshot of the index. 

-----------------------------------------------------------------------------

13.4 Distributed search

Solr in action学习笔记 第十三章 SolrCloud


推荐阅读
  • 深入解析 OpenCV 2 中 Mat 对象的类型、深度与步长属性
    在OpenCV 2中,`Mat`类作为核心组件,对于图像处理至关重要。本文将深入探讨`Mat`对象的类型、深度与步长属性,这些属性是理解和优化图像操作的基础。通过具体示例,我们将展示如何利用这些属性实现高效的图像缩小功能。此外,还将讨论这些属性在实际应用中的重要性和常见误区,帮助读者更好地掌握`Mat`类的使用方法。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
  • 在处理大文件上传时,服务端为何无法直接接收?这主要与 PHP 配置文件 `php.ini` 中的几个关键参数有关,如 `upload_max_filesize` 和 `post_max_size`。这些参数分别限制了单个文件的最大上传大小和整个 POST 请求的数据量。为了实现大文件的高效上传,可以通过文件分割与分片上传的方法来解决。本文将详细介绍这一实现方法,并提供相应的代码示例,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
author-avatar
mobiledu2502920277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有