elasticsearch - 使用GCP/GAE搜索和缓存API

标签 elasticsearch google-cloud-platform google-compute-engine bitnami google-app-engine-python

如果我使用ElasticSearch image from Bitnami in GCE,我需要一个单独的Memcached VM还是用Memcached缓存,最好通过其他方式(在客户端本地或通过Web缓存)或什至内置在ElasticSearch中来实现?我是否应该在类似于this sample的appengine灵活环境中的docker容器中使用Elasticsearch和Memcached扩展运行时?

backgrund是我要升级最初是python2.7 google appengine webapp的项目,但是python的google appengine的python3版本已经弃用了memcached API和ndb search API,因此我正在考虑是否使用实例在GCE中使用ElasticSearch和/或Memcached,这样我就可以在python3.8 appengine webapp和某些运行ElasticSearch的实例之间划分服务。我尝试过,这是一个很好的经验。

我还准备考虑使用除ElasticSearch之外的其他替代方法(通过和自定义JS创建Web UI)。从的用户模型迁移之后,我们将使用进行用户身份验证,并暂时保留python ,但是由于我们存储的主要数据是用户个人资料(现在可以是存储在Firebase中)和短期数据(保存在appengine数据存储中)。如果这个项目是今天从头开始创建的,那么我可能会使用Firebase进行所有操作,并直接通过API从前端层连接到它,但是我明白如果我使用Firebase

最佳答案

我建议您在添加额外的缓存层之前先优化您的Elasticsearch。添加额外的缓存层将增加维护需求,从而增加成本,因此最好是花费成本和精力来优化Elasticsearch。

优化Elasticsearch时,您需要考虑查询的复杂程度以及所需的页面大小。 Elasticsearch功能强大,可以处理大量请求,并且通过Google Marketplace通过托管的Elasticsearch集群,您可以轻松添加 flex 和可扩展性。我建议您检查一下价格是否符合您的要求。现在,您可以根据需要通过GCP帐单合并帐单。另请:https://console.cloud.google.com/marketplace/details/google/elasticsearch

我建议您将数据加载到您的Elasticsearch中,然后对您的Elasticsearch实例进行负载测试,并查看所获得的吞吐量和响应时间。您可以使用开发工具中的Kibana分析查询性能

Query Performance Analysis Using Kibana

Elasticsearch查询缓存

默认情况下启用缓存,但是您可以通过querystring对其进行管理。如果设置,它将覆盖索引级别的设置:

GET /my_index/_search?request_cache=true
{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "colors"
      }
    }
  }
}

请参阅:https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html

请求压缩的响应
特别有用,特别是在响应大小较大时,应请求压缩的响应,这将有助于提高吞吐量。默认情况下未压缩。您可以通过将以下 header 添加到elasticsearch查询请求 header 来实现。
Accept-Encoding: deflate, gzip
有效管理碎片和副本:

根据您在Elasticsearch中存储的数据类型以及如何查询数据,您可能需要进一步优化。如果查询性能不足,则可以进行分析和优化。这是一个不错的起点:https://www.elastic.co/blog/advanced-tuning-finding-and-fixing-slow-elasticsearch-queries

添加副本非常简单,但是更改分片将需要重建集群。因此,最好在上线之前(在创建索引时)将其正确设置,即
PUT /twitter
{
    "settings" : {
        "index" : {
            "number_of_shards" : 3, 
            "number_of_replicas" : 2 
        }
    }
}

这是更改索引副本的方法
PUT /twitter/_settings
    {
        "index" : {
            "number_of_replicas" : 2
        }
    }

关于elasticsearch - 使用GCP/GAE搜索和缓存API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59333447/

相关文章:

docker - 如何通过更新容器镜像将容器部署到 gce?

python - 您可以获得 Google Cloud Composer/Airflow 的静态外部 IP 地址吗?

elasticsearch - 更改索引名称后出现以下异常

kubernetes - Google Kubernetes Engine - 节点升级程序

elasticsearch - 应该在 Elasticsearch 中使用 "AND"运算符进行查询吗?

java - 如何在 Java 中导入 Google Cloud 客户端库

google-cloud-platform - GCP 数据流与云函数

linux - 如何在 Google Compute Engine 中创建 VM 实例?

java - Liferay 7.3.5GA6自定义索引搜索和ddmFieldArray

node.js - NodeJs和ElasticSearch:大容量插入错误:无法派生xcontent