2016-12-08 2 views
3

나는 인증, 위치 등등과 같은 MicroServices를 작성했습니다. 모든 마이크로 서비스에는 다른 데이터베이스가 있습니다. 예를 들어, 위치는이 서비스에 대한 모든 데이터베이스에 있습니다. 어떤 프로젝트에서든 사용자의 위치, 그것은 먼저 데이터베이스에서 캐시되지 않는 경우 캐시를 찾습니다. 지금까지는 너무 좋아. 다른 데이터베이스에서 위치가 변경되면 다른 데이터베이스에서 위치를 업데이트하고 캐시를 업데이트해야합니다.microservices 및 다중 데이터베이스

현재 url을 필드로 사용하여 모델을 만들었습니다. 데이터베이스에서 위치가 변경 될 때마다이 구독에 대한 개체가 만들어집니다. 구독 모델을 확인하는 정기 작업이 실행 중입니다.이 개체는 다른 개체의 API를 히트하고 위치를 업데이트하고 캐시를 업데이트합니다. 더 좋은 방법이 있는지 궁금합니다.

+1

정기적 인 작업이 실행되기를 기다리는 대신 위치를 업데이트하는 다른 서비스의 API에 적극적으로 대응하지 않는 이유는 무엇입니까? 대기 중일 때 불일치가 발생할 수 있습니다. – lucasnadalutti

답변

2

더 좋은 방법이 있는지 궁금합니다.

"better"는 전적으로 주관적입니다. 그것이 당신의 필요를 충족 시킨다면, 괜찮습니다.

하지만 고려해야 할 사항 : 동일한 정보를 두 곳 이상에 저장하지 마십시오.

주소가 필요한 경우 언제든지 주소를 제공하는 서비스에서 찾으십시오.

성능에 문제가있을 수 있지만 데이터를 복제하는 문제가 발생하지 않습니다.

의견에 제안 된대로 다른 옵션이보다 적극적인 방법이 될 수 있습니다.

변경 사항에 대한 작업 목록을 만드는 대신 변경 사항이 발생하면 즉시 rabbitmq에서 메시지를 보내십시오. 알 필요가있는 모든 서비스를 제공하고, 메시지 복사본을 가져 와서 정보의 자체 캐시를 업데이트하십시오.

다만 기억하십시오. 둘 이상의 정보 사본이있을 때마다 시스템의 "정확성"을 전체적으로 줄입니다. 공식 소스에서 업데이트를 얻지 못했기 때문에 앱 중 하나에서 발견 된 정보가 오래 되었더라도 항상 가능합니다.

관련 문제