2012-02-23 7 views
0

여러 소스/컴퓨터의 이벤트를 처리하는 웹 서버가 있습니다. 각 이벤트에 대해 타임 스탬프를 지정하고 DB에 저장합니다. 이렇게하면 원본 컴퓨터의 모든 시계에 정확한 시간이있는 것은 아니지만 상관 없습니다. 서버가 타임 스탬프를 담당하기 때문에 이벤트 순서가 보존됩니다.서버 간 동기화 시간

이제 이러한 이벤트를 처리 할 수있는 서버를 하나 더 추가하고 동일한 DB에 저장하려고합니다. 서버간에 시계를 동기화하는 가장 좋은 방법은 무엇입니까? 서버는 costumer 사이트에 배포되며, 시계가 동기화되어야한다는 것을 알려줄 수는 있지만.

서버 간 통신없이 문제를 해결할 방법이 있습니까? SQL 문에서 DB 시스템 시계를 사용할 방법이 있습니까? (나는 mysql, sqlserver 및 oracle을 지원해야하며, O/R 매핑은 최대 절전 모드이다.)

+0

는 소리 , 또는 SQL 함수를 사용하여 데이터를 삽입 할 때 시간 소인을 삽입하십시오. 그러나 여러 데이터베이스 유형에 대해 Hibernate를 사용할 수 있는지 확신 할 수 없다면 – DNA

+3

클럭을 동기화해도 두 위치에서 이벤트가 발생하면 명확하게 정의 된 이벤트 순서가 더 이상 존재하지 않으므로 이벤트 순서가 유지되지는 않습니다 . 이벤트를 주문해야한다면 뭔가 주문해야합니다. 어떻게 그리고 왜 * 이벤트가 주문되어야하는지에 달려 있습니다. - 실제 요구 사항은 무엇입니까? –

+0

@DavidSchwartz 각 시스템마다 진행 상황을 알 수 있습니다 (예 : init, running, finish). 완료 후 실행을 시작하면 진행률 표시 줄이 "실행 중"으로 표시되지만 완료되었습니다. 문제는 때로는 일어날 수 있다는 것입니다 (일부 프로세스가 루프에서 실행중인 경우). 그래서 여기서는 어떤 논리도 할 수 없으며 서버 전체에서 이벤트의 순서가 정확한지 알아야합니다. – Jonathan

답변

0

이벤트를 처리 할 수있는 두 대의 서버를 가질 수 있도록 프로세스의로드 균형을 조정하려고하는 것처럼 들립니다. 의견에서 언급했듯이 서버에서 NTP를 사용하는 것이 가장 좋은 방법입니다.

그래도 보장 할 수없는 경우 코드를 NTP server (으)로 보내주십시오. 적용 가능한 모든 서버가 동일한 NTP 서버를 호출하면 시간이 일정하다는 것을 확신 할 수 있습니다. NTP 서버로부터의 시간은 DB에 저장 될 수 있습니다.

2
  1. 응용 프로그램 서버 시간 동기화 (NTP 등)에서는 이벤트를 완벽하게 순서 지정하지 않습니다. 두 서버의 타임 라인이 다르므로 둘 다 발생하는 이벤트의 순서를 독립적으로 결정할 수있는 방법은 없습니다. 이것은 꽤 잘 알려져 있습니다 : http://en.wikipedia.org/wiki/Lamport_timestamps

  2. 당신은 'same'DB => 이것은 '이벤트의 순서'를 결정하기에 좋은 장소입니다. 그러나 '이벤트'는 'DB에 INSERT 요청 도착'입니다. 이게 너에게 받아 들여질 수 있니?

  3. # 1 허용하고, occurance 문제의 '순서'경우, 당신은 자동 증가 필드를 사용하는 것이 더 낫다 : 그냥 수행 http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

당신은 여전히 ​​타임 스탬프를 유지할 수 있습니다 그것을 사용하여 '주문'을 결정하십시오.

+0

두 번째 옵션이 필요하다고 생각합니다. 어떻게 구현할 수 있습니까? – Jonathan

+0

@Jonathan : 옵션으로 사용하지는 않았지만 관련 글 머리 기호로 사용했습니다. 즉 Argument # 0 => NTP로 전체 주문을 '보장'할 수는 없습니다. 따라서 인수 # 1 => 전체 주문을 '보장'하는 더 좋은 장소는 DB입니다. 그러므로 인수 # 2 => 'autoincrement'필드를 사용하십시오. MySQL에는 MySQL이 있고 다른 DB에도 MySQL이 있습니다. 자동 증가 필드는 DB에 삽입하는 각 항목에 대해 고유하고 증가하는 값을 자동으로 가져옵니다. – ArjunShankar

0

NTP 유틸리티에는 두 가지 유형의 시간 동기화가 있습니다.

  1. 지금 시간 및 스탬프 찍기. (ntpdate)
  2. 시간을 가져 와서 시간 공급자와 소비자 사이의 시간을 점차적으로 동기화하십시오. (xntpd)

ntpdate에는 시간 서버의 IP 주소 인 매개 변수가 필요합니다. xntpd는 ntp.conf에 (동일한 IP 주소)를 구성해야합니다. xntpd는 데몬으로 실행되어야합니다. 시간 공급자와 통신하고 시간을 점진적으로 수정하고 시간 소비자를 서버와 항상 동기화하여 나노초만큼 좋은 상태로 유지합니다.

xntpd를 구성하고 사용하는 것이 좋습니다. xntpd는 ntpdate가 처음으로 서버에 가까이 갈 때 ntpdate를 호출합니다.

요구 사항에 따라 ntpdate를 정기적으로 호출 할 수 있습니다 (cron을 사용하거나 하루에 1 회있을 수도 있고 시간이 몇 밀리 초 이상 드리프트되지 않을 수도 있습니다). 또는 xntpd를 구성하여 완료하십시오. .

xntpd를 선택하면 동기화되었는지 확인하는 방법이 필요할 수 있습니다. 이를 위해서는 ntpq라고하는 명령 행 대화식 도구를 실행해야합니다. 이렇게하면 동기화 상태를 얻는 데 도움이됩니다.

http://www.novell.com/coolsolutions/trench/5730.html 참조 더 자세히으로, ntpq 이해하기 (RVI 명령은 넷웨어에 고유 한이 기술에서, 주, 유닉스 만 RV 명령을 가지고) 서버의 시계를 동기화하는 NTP를 사용할 필요가 같은