15分钟内分析使用自动配置扩展OpenSearch

15分钟分析自动配置扩展OpenSearch GenAI

关键字: [yt, OpenSearch Serverless, Open Search Serverless, Automatic Scaling, Search Analytics, Data Ingestion, Query Response]

本文字数: 500, 阅读完需: 2 分钟

导读

在一场亚马逊云科技活动上,演讲者介绍了”15分钟分析自动配置扩展OpenSearch GenAI”。演讲者阐释了Amazon OpenSearch Serverless如何实现OpenSearch集群的自动扩缩容和资源调配。具体而言,OpenSearch Serverless将索引和搜索组件分离,根据工作负载需求自动扩缩计算资源,并提供无需管理基础设施即可运行OpenSearch的无服务器选项。该演讲重点介绍了Amazon OpenSearch Serverless如何为高强度工作负载实现快速数据引入和查询响应、无需手动配置即可自动扩缩容,以及按使用量付费而无需过度配置资源。

演讲精华

以下是小编为您整理的本次演讲的精华,共200字,阅读时间大约是1分钟。

这场演讲主要介绍了如何使用亚马逊云科技自动扩展OpenSearch。OpenSearch是一个社区驱动的开源搜索和分析引擎,源自Apache 2.0许可的Elasticsearch 7.10.2和Kibana 7.10.2。它是一个分布式搜索引擎,由Apache Lucene提供支持,并配备了OpenSearch Dashboards这一数据可视化工具,用于构建仪表板和可视化效果。OpenSearch还提供了一些工具和插件,以提供异常检测、警报、可观察性等额外功能,主要应用于日志分析和搜索领域。

亚马逊云科技支持OpenSearch,所有组件都在GitHub上以Apache License Version 2.0的形式开源,项目路线图是公开的,欢迎社区贡献。客户可以使用Amazon OpenSearch Service,这是一项完全托管的服务,可帮助客户大规模运行开源OpenSearch软件。在该服务中,客户需要为搜索或日志分析等不同类型的工作负载创建专用域,配置该工作负载并使其适用于每种用例。在Amazon OpenSearch Service中创建域时,客户可以从广泛的Amazon EC2实例类型中选择特定的节点(数据节点和主节点),以匹配工作负载的计算需求,包括数据ingestion和搜索。客户还需要根据存储需求来调整每个域的大小,并可利用不同的存储层(热、暖或冷)来降低成本并管理索引生命周期。

但是,使用预配置选项存在一些挑战:需要为高峰使用情况进行预先部署、需要对Amazon OpenSearch Service有专门的了解,包括分片机制、索引生命周期等,以确保域的性能和优化适合您的工作负载、需要持续监控并根据工作负载需求的变化来更新大小和配置。

因此,亚马逊云科技最近推出了Amazon OpenSearch Serverless,这是Amazon OpenSearch Service的一个新的无服务器选项,可自动配置和扩展底层资源,为高强度和不可预测的工作负载提供快速的数据ingestion和查询响应。Serverless消除了为OpenSearch集群进行配置、调优和调配的操作复杂性。使用OpenSearch Serverless,您可以轻松快速地开始使用该服务来搜索和分析PB级数据,而无需担心底层基础设施和数据管理。

OpenSearch Serverless与亚马逊云科技生态系统中的不同服务(如Amazon Kinesis Data Firehose和Amazon Kinesis Data Streams)集成,其API也可通过Amazon Web Services SDK、CLI或控制台访问。使用serverless,您只需为所使用的计算和存储付费。OpenSearch Serverless现已在全球8个亚马逊云科技区域普遍可用。目前,serverless集合运行OpenSearch 2.0版本。随着新版本的发布,OpenSearch Serverless将自动升级您的集合以使用新功能。

在serverless中,您将创建集合。每个集合代表一组具有相同用途的索引(就用例而言)。如屏幕截图所示,您必须选择集合的主要用例——时间序列或搜索。时间序列侧重于分析大量半结构化时间序列数据,以获得运营和用户行为见解。搜索用例则侧重于全文搜索。

另一方面,serverless中的计算由OpenSearch计算单元(OCU)提供支持。与预配置的OpenSearch选项中的EC2实例不同,每个OCU拥有6GB RAM和一个vCPU,并包含120GB的索引数据。在您在账户中创建集合时,将实例化总共4个OCU——用于ingestion的主OCU和备用OCU各1个,用于搜索的OCU和高可用性副本各1个。所有后续使用相同Amazon Web Services KMS密钥的集合都将共享这些OCU。另一方面,使用唯一Amazon Web Services KMS密钥的集合则无法与其他集合共享这些OCU。

OpenSearch Serverless采用了云原生架构,将索引组件与搜索组件分离开来,使用Amazon S3作为索引的主要数据存储。这种解耦架构允许您独立于S3中的索引数据来独立扩展搜索和索引功能,这与预配置产品形成对比。

进入Amazon OpenSearch Serverless的第一个入口点是服务网关。网关将允许请求进入搜索或数据写入计算。在数据写入方面,采用主备模型,其中一个主OCU(OpenSearch Compute Unit)处于活动状态,另一个备用资源位于另一个可用区以实现更高的可用性。在搜索方面,OpenSearch Serverless以活动模式运行两个搜索副本。对于搜索类型的集合,大部分数据都存储在OCU的热缓存中,以确保快速的查询响应时间(最高6TB)。对于时间序列集合,我们将最新数据保留在OCU的热缓存中,以优化对于频繁访问数据的查询响应时间。您可以在账户和区域级别配置最大索引和搜索容量,每种计算需求(搜索或索引)最多可达50个OCU。您还可以使用CloudWatch指标在账户级别监控搜索OCU和索引OCU,以了解集合的扩展情况。

现在让我们以数据写入请求为例。当您向集合写入数据时,OpenSearch Serverless会将其分发到索引计算单元。所有发往索引的请求都源自服务网关,该网关将客户的集合端点转换为各自的索引端点。协调器根据路由将请求中的文档发送到相应的索引工作节点,每个OCU将持有一部分分片,然后每个段刷新都会被推送到Amazon S3。

当您对集合数据执行搜索时,网关会在OpenSearch Serverless中检查权限。在这里,协调器将请求路由到持有被查询数据的搜索计算单元,并发回响应。如前所述,所有数据都存储在S3中,但在搜索流量中,如果索引尚未本地缓存,则会直接从S3下载索引数据到搜索计算单元。它将运行搜索操作、执行聚合,并返回响应。

我之前提到过,Amazon OpenSearch Serverless会根据您的需求自动扩展。当数据写入端出现高峰时,服务将自动触发扩展以在需要时提供更多的数据写入计算单元。如您所见,将根据触发自动扩展的阈值违规情况添加更多OCU。从最终用户的角度来看,无需任何配置或显式操作,serverless将自动分析数据写入级别的利用率指标,以定期触发自动扩展。

在搜索计算端也是如此。该服务将根据工作负载计算需求自动扩展和缩减。请注意,搜索计算端的自动扩展触发独立于数据写入计算端。因此,搜索工作负载不会干扰索引工作负载。

转到serverless的安全方面,您需要设置策略并将集合分配给策略以使其生效。您有加密策略,用于定义集合使用的密钥。请注意,serverless中的数据在静态和传输过程中都是默认加密的。第二种策略类型是网络策略,您可在其中定义一系列规则来定义访问类型(公共访问或VPC内部)、资源类型(集合端点是否在VPC内还是公开可用)以及OpenSearch Dashboards端点。第三种策略类型是数据访问策略,您将在其中定义主体、权限以及索引集合级别的资源,并定义用户对集合内数据的访问权限。您还可以使用SAML 2.0身份识别(如Okta、Keycloak等)来管理仪表板。

为了大规模管理集合,我们建议先配置加密、网络和数据访问策略,然后再创建集合。您可以继续使用当前用于将日志发布到OpenSearch Serverless集合的相同开源工具。

转到定价方面。在OpenSearch Serverless中,您将被收取以下费用:数据写入计算、搜索和查询计算以及保留在Amazon S3中的存储。鉴于serverless的性质,计费将遵循您随时间使用的计算资源。因此,您会在图表中看到绿线随时间的变化。您可以为账户配置OCU的最大数量。另一方面,对于OpenSearch预配置产品,无论您是否使用这些资源,都将一直为每个域专用的资源付费,如蓝线所示。

现在,开始使用Amazon OpenSearch Serverless非常快速和简单。正如我所解释的,第一个集合可能需要5分钟左右,后续集合则不到1分钟。设置安全策略等策略规则只需不到1分钟。您可以使用现有的客户端,如我之前提到的,只需更新配置文件以指向OpenSearch Serverless端点、为每个请求添加SigV4头,就可以开始使用了。

那么OpenSearch Serverless产品的下一步是什么呢?您现在可以选择OpenSearch托管产品或serverless产品。如果您对OpenSearch内部机制有专门的了解,并希望控制域配置,请选择Amazon OpenSearch预配置产品。如果您只想专注于业务见解,请选择Amazon OpenSearch Serverless,它将代您管理所有操作任务。

我今天想留给您的主要重点是:

首先,您可以继续使用熟悉的OpenSearch数据写入和管道,而无需更改应用程序,这使您可以轻松入门。

使用OpenSearch Serverless,您可以专注于业务见解,因为该服务会自动配置并持续调整以获得快速的数据写入速率和响应时间。

最后但同样重要的是,使用OpenSearch Serverless,您不再需要为高峰过度配置,只需为所使用的资源付费。

最后,我留给您一些开始使用OpenSearch Serverless的链接——公开文档、博客文章和开始使用Amazon OpenSearch Serverless的研讨会。

谢谢各位。

总结

无服务器 OpenSearch 的强大功能助力轻松扩展和获取洞见

在不断发展的数据分析领域中,亚马逊云科技推出了 Amazon OpenSearch Serverless,这是一种革命性的解决方案,使组织能够无缝扩展并获得宝贵的洞见,而无需处理基础设施管理的复杂性。这一创新产品解决了企业在应对不可预测的工作负载和配置及优化 OpenSearch 域所需专业知识方面所面临的挑战。

无服务器 OpenSearch 将索引和搜索组件解耦,利用 Amazon S3 作为索引的主要数据存储。这种云原生架构能够独立扩展搜索和索引功能,确保性能和资源利用率的最佳化。通过自动供应和扩展底层资源,组织可以轻松应对苛刻和波动的工作负载,确保快速的数据引入和查询响应时间。

无服务器 OpenSearch 的一个关键优势是与亚马逊云科技生态系统无缝集成,允许组织利用现有的引入管道和工具,而无需进行重大更改。这种简化的方法有助于平稳过渡到无服务器环境,使企业能够专注于从数据中提取有价值的洞见。

此外,无服务器 OpenSearch 引入了灵活的定价模式,组织只需为所消耗的计算资源付费,无需在高需求期间过度配置资源。这种经济高效的方法符合无服务器范式,确保了资源利用的效率和运营支出的优化。

随着组织拥抱无服务器 OpenSearch 的强大功能,它们可以告别域配置、性能调优和容量规划的复杂性。相反,它们可以专注于通过数据驱动的洞见来推动业务价值、支持决策,并开启增长和创新的新机遇。

亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者。提供200多类广泛而深入的云服务,服务全球245个国家和地区的数百万客户。亚马逊云科技致力于成为企业构建和应用生成式AI的首选,通过生成式AI技术栈,提供用于模型训练和推理的基础设施服务、构建生成式AI应用的大模型等工具、以及开箱即用的生成式AI应用。深耕本地、链接全球 – 在中国,亚马逊云科技通过安全、稳定、可信赖的云服务,助力中国企业加速数字化转型和创新,并深度参与全球化市场。

### C++线程间通信的方式 在 C++ 的多线程环境中,线程间通信可以通过多种方法实现。以下是几种主要的线程间通信方式及其特点: #### 1. **互斥锁 (Mutex)** `std::mutex` 是一种常用的同步工具,用于保护共享资源免受多个线程的同时访问。当一个线程锁定互斥锁时,其他试图获取该锁的线程会被阻塞直到锁被释放[^2]。 ```cpp #include <iostream> #include <thread> #include <mutex> std::mutex mtx; // 定义全局互斥锁 void print_block(int n, char c) { std::lock_guard<std::mutex> lock(mtx); // 自动管理锁的生命周期 for (int i = 0; i < n; ++i) { std::cout << c; } std::cout << '\n'; } int main() { std::thread t1(print_block, 50, '*'); std::thread t2(print_block, 50, '$'); t1.join(); t2.join(); return 0; } ``` 上述代码展示了如何通过 `std::mutex` 和 `std::lock_guard` 实现对共享资源的安全访问。 --- #### 2. **条件变量 (Condition Variable)** 条件变量允许线程等待某个特定条件的发生。它通常与互斥锁一起使用,以便在线程之间传递信号。 ```cpp #include <iostream> #include <thread> #include <queue> #include <mutex> #include <condition_variable> std::queue<int> data_queue; std::mutex queue_mutex; std::condition_variable cv; void producer(int id) { int value = 0; while (true) { { std::unique_lock<std::mutex> ul(queue_mutex); data_queue.push(value++); cv.notify_one(); // 唤醒消费者线程 } std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } void consumer(int id) { while (true) { std::unique_lock<std::mutex> ul(queue_mutex); cv.wait(ul, [] { return !data_queue.empty(); }); // 等待数据可用 int value = data_queue.front(); data_queue.pop(); std::cout << "Consumer " << id << ": " << value << "\n"; } } int main() { std::thread p(producer, 1); std::thread c(consumer, 1); p.detach(); c.join(); return 0; } ``` 这段代码演示了生产者-消费者的经典模式,其中条件变量负责协调两个线程的操作。 --- #### 3. **原子变量 (Atomic Variables)** 对于简单的计数器或其他不需要复杂逻辑的数据结构,可以使用 `std::atomic` 提供无锁操作。这有助于减少因加锁带来的开销。 ```cpp #include <iostream> #include <thread> #include <atomic> std::atomic<int> counter{0}; void increment_counter(int num_increments) { for (int i = 0; i < num_increments; ++i) { counter++; } } int main() { const int NUM_THREADS = 10; const int INCREMENTS_PER_THREAD = 100000; std::thread threads[NUM_THREADS]; for (int i = 0; i < NUM_THREADS; ++i) { threads[i] = std::thread(increment_counter, INCREMENTS_PER_THREAD); } for (auto& th : threads) { th.join(); } std::cout << "Final Counter Value: " << counter.load() << "\n"; return 0; } ``` 这里展示了一个基于原子变量的简单计数器示例。 --- #### 4. **共享内存 (Shared Memory)** 虽然严格意义上不属于 C++ 标准库的一部分,但在 POSIX 平台上,可以通过 `shm_open`, `mmap` 等函数创建跨进程或线程的共享内存区域[^3]。然而,在纯 C++线程环境下更推荐使用前三种方式进行通信。 --- ### 总结 C++ 中的线程间通信主要包括互斥锁、条件变量以及原子变量等方式。每种方式都有其适用场景:互斥锁适用于保护临界区;条件变量适合于复杂的事件通知机制;而原子变量则提供了轻量级的并发支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值