云上许多数据存储和分析应用正在向 Serverless 模式进行转变。Serverless 是对专有的、需要自管理的集群模式的一种极大补充,特别是对于需要灵活应对需求和负载的变化又不希望预付服务器租赁费用,同时,又期望能够减少运维和管理成本的企业来说,Serverless 不仅便宜,而且更适合快速的构建业务和将产品推向市场,并提供更大的容错性和更低的试错成本。
但是选择使用 Serverless 和选择一个正确的 Serverless 服务则是两个不同的事情,前者是方向,后者是执行。在执行层面,我们有更多的东西需要去评估。对于 Elasticsearch 的 Serverless 服务来说,我们在选择时需要考虑可扩展性、可用性、灵活性、效率和安全性等基本因素,并且应该评估 Elasticsearch Serverless 是否具备缩放到零、按需计费、对现有集群模式进行抽象、屏蔽与隔离、保留核心API、明确主流使用场景、提供场景化方案和提供完整的Elastic Stack的Serverless等特性。
市场上给我们的选择不多,虽然大多数云厂商上也提供了号称兼容 Elasticsearch 的云搜索服务,但大多数都是7.10之前的版本,或者是直接使用 Opensearch,两者之间的性能差别可参阅Elasticsearch 与 OpenSearch:详细对比性能差距,而能够提供 Serverless 服务的厂商就更少。
而腾讯云在2023年8月1号发布了 Elasticsearch Service Serverless 服务,本文我们将在选择其中一些重要角度对其进行评估,以帮助用户对其有更深入的了解,以在技术选型时进行更全面的决策。
Serverless 应用的核心优势在于用户只需在使用时付费,而不是预付服务器租赁费用。对于没有占用的资源,Serverless应该能够将其“释放”,并且不对用户收取费用。
为了更清楚的对比,我们选择自建ES集群与 Serverless 进行对比。对比中,Serverless 创建了多个索引,其中一个索引写入180GB数据,其余两个索引则是0数据。
从导出的费用清单上看,ES Serverless 是按量计费小时结,截止本文的时间8月15日12:00,有数据的Serverless 索引的存储费用在23.6元之内
按照腾讯云 Elasticsearch Serverless 的计费项计算,即便算上流量费用,整个Serverless的花费在半个月间也仅在50元上下,而整月的费用则在75元左右。
而对于与没有数据的索引,则是完全将费用缩放到0元,同时,索引仍然处于随时可以访问和使用的状态!
而如果我们要自建一个承载对应数据的ES集群,即便是选择无高可用,无副本的单节点集群,参考Elastic官方的推荐配置,选择一个2C4GB的机器
而考虑到磁盘80%的水位控制,要存储180GB的数据,我们至少要220GB的磁盘,因此,自建集群在CVM上的费用大概为150元(在40%折扣下)
因此,即便 Serverless 不打折(实际上会有和CVM类似的折扣),费用也仅仅是自建集群的50%。而一旦我们的业务有发生变化,无论是增加还是减少,Serverless 都能提供快速的灵活性,并且能够在一个小时内,体现在你的账单上。相对的,自建集群无论是扩容和缩容,都无法做到灵活和按需。
因此,对于大多数场景,Serverless 服务会表现出比自建集群更灵活和更低的成本。
接下来,我们再看场景化的解决方案,Elasticsearch 作为一个通用搜索引擎和数据分析工具,广泛应用于搜索、企业搜索、日志分析、用户行为分析、全观测和安全分析等各种场景。但在不同场景下,Elasticsearch和整个Elastic Stack在部署拓扑结构、容量和资源大小配置、应用低级配置、数据类型与管理等方面都有所不同,需要有针对性的调整才能获得最高效的回报。因此,Elasticsearch Serverless 应该为用户提供对应的场景选择,并根据最佳实践配置场景对应所需的底层配置和管理。
而在腾讯云的 Elasticsearch Service Serverless 模式中,为用户提供了两个定制化的场景:
目前,我们可以使用的是日志分析。而在日志分析场景中,我们从采集日志,到存储和分析日志,存在以下几个主要的工作:
而在这几方面,腾讯云的 Elasticsearch Service Serverless 为用户提供的即插即用的能力包括:
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/*.log
# ============================== Filebeat modules ==============================
filebeat.config.modules:
# Glob pattern for configuration loading
path: \${path.config}/modules.d/*.yml
# Set to true to enable config reloading
reload.enabled: false
# Period on which files under path should be checked for changes
#reload.period: 10s
# ======================= Elasticsearch template setting =======================
setup.template.enabled: false
setup.ilm.enabled: false
#template setting's value is set to false by default. If you set it to true, an error will be reported when the configuration is submitted
# ================================== General ===================================
# The name of the shipper that publishes the network data. It can be used to group
# all the transactions sent by a single shipper in the web interface.
#name:
# The tags of the shipper are included in their own field with each
# transaction published.
#tags: ["service-X", "web-tier"]
# Optional fields that you can specify to add additional information to the
# output.
#fields:
# env: staging
# ================================= Processors =================================
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
# ================================== Logging ===================================
# Sets log level. The default log level is info.
# Available log levels are: error, warning, info, debug
#logging.level: debug
# At debug level, you can selectively enable logging only for some components.
# To enable all selectors use ["*"]. Examples of other selectors are "beat",
# "publisher", "service".
#logging.selectors: ["*"]
############################# output ######################################
output.elasticsearch:
# Array of hosts to connect to.
allow_older_versions: true
protocol: "http"
hosts: ["索引内网访问地址"]
# Authentication credentials - either API key or username/password.
username: "your index username"
password: "your index password"
indices:
- index: The_index_name
when.equals:
fields.type: log
复制
相对于需要自己管理的ES集群,越来越多的用户期望的是一个完全托管的体验,希望能从管理软件和操作系统版本、管理部署拓扑结构、管理容量和资源大小、应用低级配置(如某个线程池的大小)、管理高可用性、备份和持续的集群操作以及监测健康状况的负担中解放出来。
而在腾讯云 Elasticsearch Service Serverless 服务,则是从资源创建到运维,都在尽量减轻用户的负担,为全托管的方向进化。
在Serverless 模式下,只需要填写基础的名称、项目和网络信息即可快速创建一个可以用于写入和查询的索引:
而在后期的使用和管理中,随着数据的增加,在自管理的环境中,我们即需要了解当前的资源是否能够应对数据与负载,还需要根据索引与分片的活动配置各种规则,
而 Serverless 索引只需要知道索引的访问地址,背后的索引管理活动已经由 Serverless 服务代替我们执行,在整个控制台和Kibana界面都非常的简洁,后期需要人工介入和运维的地方几乎没有:
腾讯云 Elasticsearch Service Serverless是一款自动弹性、完全免运维、灵活易用、极致成本、开放集成以及稳定可靠的云端搜索引擎服务。它提供了一站式产品能力,可在分钟级实现业务落地,使得用户可以更加专注于业务开发,而无需关注基础设施的运维和管理。
除此之外,腾讯云 Elasticsearch Service Serverless还兼容Elastic Stack生态,保留用户原有使用习惯,实现无缝迁移,助力业务快速上云。这意味着,用户可以将现有的Elasticsearch应用程序和工具集轻松地迁移到腾讯云上,而无需更改任何代码或配置。