Сервер Gremlin перестает отвечать на стресс-тест запросом gremlin

Я что-то не так делаю с этим запросом гремлина? Разве это не эффективный запрос? Мои 2 экземпляра nodejs на AWS используют клиент gremlin, который общается через веб-сокеты через AWS ELB с 2 экземплярами сервера Titan 1.0 / gremlin. Серверная часть - это DynamoDB. Теперь у нас настроена правильная пропускная способность чтения / записи для DynamoDB.

Бревно:

WARN org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor - Исключение при обработке скрипта по запросу [RequestMessage {, requestId = r1, op = 'eval', processor = '', args = {gremlin =

def user = gV (). has ("userId", userId1) .has ("tenantId", tenantId) .hasLabel (userLabel) .next (); gV (пользователь) .outE (eIsOwnedByLabel) .inV (). as ( 'path'). inE (eHasAccessToLabel) .or (.has ('shareToType', allType) .outV (). has ('tenantId', tenantId) .outE (eHasAccessToLabel), .has ( 'shareToType', groupType) .outV (). hasLabel (groupLabel) .inE (eIsMemberOfLabel, eIsAdminOfLabel) .outV (). has ('userId', userId) .outE (eIsMemberOfLabel (eIsAmin). ), __. has ('shareToType', userType) .outV (). hasLabel (userLabel) .has ('userId', userId) .outE (eHasAccessToLabel)). as ('role'). inV (). select ( 'role', 'path'). by ('role'). by ('path') ;,

bindings = {tenantId = 1, userLabel = User, userId1 = 2, eIsOwnedByLabel = is_owned_by, eHasAccessToLabel = has_access_to, eIsMemberOfLabel = is_member_of, eIsAdminOfLabel = is_member_of, eIsAdminOfLabel = groupLabel = groupIdmin = groupIdmin = groupIdmin = groupIdmin = группа_admin_admin = группа_admin_admin = группа }, accept = application / json, language = gremlin-groovy}}]. org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException

Когда мы проводим стресс-тест, серверы gremlin просто перестают отвечать и выдают такие ошибки:

{"name": "logger", "hostname": "a", "pid": 27881, "level": "ERROR", "err": {"message": "null (Error 597)", "name ":" Ошибка "," стек ":" Ошибка: null (Ошибка 597) \ n в GremlinClient.handleProtocolMessage (/opt/application/sharing-app/node_modules/gremlin/lib/GremlinClient.js:204:39)\n в WebSocketGremlinConnection. (/opt/application/sharing-app/node_modules/gremlin/lib/GremlinClient.js:120:23)\n в emitOne (events.js: 96: 13) \ n в WebSocketGremlinConnection.emit (events.js) : 188: 7) \ n в WebSocketGremlinConnection.handleMessage (/opt/application/sharing-app/node_modules/gremlin/lib/WebSocketGremlinConnection.js:69:12)\n в WebSocketGremlinConnection._this.ws.onmessage (/ opt / application /sharing-app/node_modules/gremlin/lib/WebSocketGremlinConnection.js:46:20)\n

Я попытался запустить profile () локально с помощью gV (). Has ("userId", '1'). Has ("tenantId", '2'). HasLabel ('User'). OutE ('is_owned_by'). ...: ==> Показатели обхода

Step                                                               Count  Traversers       Time (ms)    % Dur
=============================================================================================================
TitanGraphStep([userId.eq(51ce1780-1998-47eb-a1...                     0           0         190.524    24.91
  optimization                                                                               176.456
  backend-query                                                        0                       6.074
  backend-query                                                        0                       5.067
TitanVertexStep(OUT,[is_owned_by],vertex)@[path]                       0           0           0.005     0.00
TitanVertexStep(IN,[has_access_to],edge)                               0           0         190.539    24.91
OrStep([[HasStep([shareToType.eq(all)]), Profil...                     0           0           0.012     0.00
  HasStep([shareToType.eq(all)])                                       0           0           0.000
  EdgeVertexStep(OUT)                                                  0           0           0.000
  HasStep([tenantId.eq(ndgThunderDome)])                               0           0           0.000
  TitanVertexStep(OUT,[has_access_to],edge)                            0           0           0.000
  HasStep([shareToType.eq(group)])                                     0           0           0.000
  EdgeVertexStep(OUT)                                                  0           0           0.000
  HasStep([~label.eq(Group)])                                          0           0           0.000
  TitanVertexStep(IN,[is_member_of, is_admin_of...                     0           0           0.000
  HasStep([userId.eq(a257c260-261f-45df-a1e7-92...                     0           0           0.000
  TitanVertexStep(OUT,[is_member_of, is_admin_o...                     0           0           0.000
  TitanVertexStep(OUT,[has_access_to],edge)                            0           0           0.000
  HasStep([shareToType.eq(user)])                                      0           0           0.000
  EdgeVertexStep(OUT)                                                  0           0           0.000
  HasStep([~label.eq(User)])                                           0           0           0.000
  HasStep([userId.eq(a257c260-261f-45df-a1e7-92...                     0           0           0.000
  TitanVertexStep(OUT,[has_access_to],edge)                            0           0           0.000
EdgeVertexStep(IN)                                                     0           0         190.550    24.91
SelectStep([role, path],[value(role), value(pat...                     0           0           0.021     0.00
SideEffectCapStep([~metrics])                                          1           1         193.286    25.27
                                            >TOTAL                     -           -         764.940        -

TIA


person Vijay    schedule 24.04.2017    source источник
comment
Ваш вопрос об остановке сервера Gremlin или самой ошибке? Сама ошибка из журнала сервера - это ошибка, которую вы получаете, когда обход не возвращает данных. Это должно происходить где-то в вашем сценарии. Основываясь на вашем описании, трудно сказать, связана ли эта ошибка с тем, что сервер не обрабатывает дальнейшие запросы. Моя интуиция подсказывает, что они, скорее всего, не связаны. Я думаю, вам следует попробовать немного отладить свой Gremlin, чтобы избавиться от этой ошибки, тем самым удалив ее как проблему, связанную с зависанием сервера.   -  person stephen mallette    schedule 24.04.2017


Ответы (1)


Сценарий не был проблемой. Titan Db был перегружен запросами, и производительность снизилась из-за тайм-аута скриптов. Изменение Dynamodb.properties для добавления

cache.db-cache=true
cache.db-cache-time=...
cache.db-cache-size=0.3
cache.db-cache-clean-wait=50

Добавление кеша помогло снизить нагрузку на базу данных и увеличить количество запросов в секунду.

Также изменился gremlin-server.yaml: threadPoolWorker = 2 Не знаю, как изменить threadPoolWorker на основе ядер ЦП, хотя на нашем экземпляре m4.large AWS с 2 ядрами ЦП. Также изменилось, поиграв со значениями: maxAccumulationBufferComponents: 8192 resultIterationBatchSize: 2048

person Vijay    schedule 01.05.2017