如果我使用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之外的其他替代方法(通过semantic-ui和自定义JS创建Web UI)。从webapp2的用户模型迁移之后,我们将使用firebase进行用户身份验证,并暂时保留python app-engine-ndb,但是由于我们存储的主要数据是用户个人资料(现在可以是存储在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分析查询性能
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/