2017-11-26 15 views
0

몇 달 동안 Azure에서 neo4j 고 가용성 클러스터를 사용해 왔으며 .net 클라이언트에 문제가 있습니다.neo4j .net 클라이언트와 웹 클라이언트 간의 결과가 다릅니다.

웹 클라이언트를 사용하여 클러스터에 연결할 때 문제가 없으면 노드를 쿼리하면 결과가 나타납니다. 그러나 우리가 같은 쿼리를 사용하여 .net 클라이언트를 사용하면 일부 노드를 찾을 수 없습니다.

우리는 웹 클라이언트에서 노드를 계산 노력 및 .NET 클라이언트 내가 클러스터에있는 3 개 개의 VM을 중 하나를 다시 시작 (620)

를 반환하고 문제가 해결 동안 결과는 850입니다. 무엇이 잘못되었는지를 파악할 수 없으며 서비스가 신뢰할 수 없다는 것을 정말로 원하지 않습니다!

어디에서 문제가 발생한다고 생각하십니까?

match (t) 
return count(t) 

우리가 사용하는 C#을 동등한은 다음과 같습니다

/// 업데이트 1

우리는 다른 쿼리의 다양한하지만 노드의 수를 반환하는 간단한 하나 문제를 직면하고있는 것은 :

client.Cypher 
    .Match("(t)") 
    .Return<int>("count (t)") 

Cypher 쿼리는 850을 반환하고 C# 코드는 620 노드를 반환했습니다. 컴퓨터 중 하나를 다시 시작한 후에는 결과가 비슷해졌지만 잠시 후 일부 노드를 추가하면 웹 클라이언트에서 반환 한 노드 수 (Cypher 쿼리)는 857이고 C# 클라이언트 코드는 856을 반환합니다. 그 동안 우리는 직면했습니다 웹 클라이언트가 잘 작동하는 동안 C# 클라이언트로 새 노드를 추가 할 때 문제가 발생합니다. VM을 다시 시작하면 문제가 다시 해결되었습니다!

닷넷 클라이언트는 우리는 노드 수를 얻기 위해 볼트를 사용하여 테스트 Neo4jDotNetDriver을 시도 neo4jclient

/// 업데이트 2

하고 그것을 잘 작동합니다. 우리는 모든 노드를 삭제하고 노드 수를 모두 계산하려고 시도했지만 Neo4jClient는 여전히 볼트를 통해 연결된 Neo4jDotNetDriver가 0으로 돌아가는 동안 857을 반환합니다.

또한 neo4jclient로 일부 노드를 만들려고했지만 그 중 많은 노드가 생성되지 않았습니다. 일부는있는 동안 전혀 만들지 않았습니다!

+0

실행중인 Cypher 쿼리와 C# 코드를 공유하십시오. 감사! –

+0

또한 어떤 클라이언트! –

+0

질문에 대한 답변으로 질문을 업데이트했습니다. @BrunoPeres –

답변

0

OK 많은 테스트를 거친 끝에 우리는 문제가 있음을 알게되었습니다. 클라이언트에 문제가 없습니다. 앞서 언급했듯이 Azure에서 3 개의 VM을 사용하는 Neo4j 고 가용성 클러스터를 사용하고 있습니다. 우리는 3 개의 다른 PC에서 직접 REST API를 호출 해 보았습니다. 우리는 하나의 잘못된 응답과 다른 두 개의 올바른 응답을 얻고있었습니다. 이것은 우리의 요청이 클러스터의 다른 시스템에서 응답되는 것을 의심하기 시작한 곳입니다. 그래서 우리는 Neo4j Cypher Shell을 사용하여 각 머신을 개별적으로 쿼리 해 보았습니다. 우리는 하나의 머신이 다른 두 머신과 동기화되지 않고 잘못된 결과로 반응하는 것을 발견했습니다. 이 문제에 대해 조사한 결과, neo4j 구성의 버그로 인해 ha.pull_interval이 잠시 후 동기화되지 않게된다는 것을 알 수 있습니다. 이 간격을 10으로 설정하고 컴퓨터를 다시 시작하면 모든 것이 정상입니다!

당신은이 문제 here에 대한 자세한 내용을 찾을 수 here

API 호출이 하나의 클라이언트에서 항상 동기화 시스템의 외부로 연결되는 이유를 난 그냥 모르는 누군가가 알고 있다면 그것은 좋은 것입니다 왜.