onApplicationStart를 통해 응용 프로그램을 재설정하고 클러스터의 모든 서버가 응용 프로그램을 다시 시작하도록 할 수 있습니까?ColdFusion 클러스터의 응용 프로그램 범위 재설정
예를 들어, 현재 코드에서 DSN은 요청시 설정됩니다. 응용 프로그램 범위로 밀어 넣으 려하지만 변경해야 할 경우 CF 서비스를 시작하고 중지하지 않고 클러스터의 모든 서버로 전파되도록하고 싶습니다.
onApplicationStart를 통해 응용 프로그램을 재설정하고 클러스터의 모든 서버가 응용 프로그램을 다시 시작하도록 할 수 있습니까?ColdFusion 클러스터의 응용 프로그램 범위 재설정
예를 들어, 현재 코드에서 DSN은 요청시 설정됩니다. 응용 프로그램 범위로 밀어 넣으 려하지만 변경해야 할 경우 CF 서비스를 시작하고 중지하지 않고 클러스터의 모든 서버로 전파되도록하고 싶습니다.
한 가지 제안은 각 서버가 읽을 수있는 프로젝트의 날짜 스탬프 파일을 가지고하는 것입니다.
CF를 시작시 응용 프로그램에 저장하고 각 onRequestStart()에서 해당 파일과 비교합니다.
날짜가 변경되면 CF는 해당 서버의 onApplicationStart()를 실행합니다.
우리는이 기술을 ANT 스크립트와 함께 사용하므로 각 서버에 ANT가 파일을 타임 스탬프하고 우리의 응용 프로그램을 친 사람이 응용 프로그램을 재설정하게 만듭니다.
건배, 제임스
URL 변수를 통해 범위를 재설정하도록 애플리케이션을 설정했습니다. 그럼 당신은 관리자의 페이지를 통해 HTTP를 통해 클러스터의 모든 서버에서 응용 프로그램을 다시 시작하기 위해 다음과 같은 코드를 사용할 수 있습니다
<cfset serverList = "Server1.domain.com,Server2.domain.com" />
<cfset threadList = "" />
<cfloop list="#serverList#" index="currentServer">
<cfset threadList = ListAppend(threadList, "thread#currentServer#") />
<cfthread
action="run"
name="thread#currentServer#"
url="http://#currentServer#?URLToResetScope"
key="#currentIndex#"
>
<cfhttp method="get" url="#Attributes.URL#" result="thread.cfhttp" />
</cfthread>
</cfloop>
<cfthread action="join" name="#threadList#" timeout="120000" />
<cfloop list="#threadList#" index="currentThread">
<cfset Results &= currenthThread & ": " & threadresult.cfhttp />
</cfloop>
우리가 그 목록을 통해 반복 한 후, 서버 목록을 복용하고있는 , cfthread를 사용하여 각 서버에 요청을 전달하여 자신의 범위를 재설정합니다. 그런 다음 모든 스레드를 함께 결합하고 루프를 통해 각 요청의 결과를 얻습니다. 그런 다음 결과를 관리자에게 표시하여 클러스터의 모든 서버가 올바르게 업데이트되었는지 확인할 수 있습니다. 이에 올바르게 업데이트되지 않은 서버가 있으면 해당 서버를 개별적으로 재설정 할 수 있습니다.
댄
멋진 접근 Dan. –
서버가 라운드 로빈 일 경우 반드시 작동하지 않습니다. 이 설정 세션은 사물을 관리하는 방법 (예 : 50 %/50 %)에 따라 특정 서버에 할당됩니다. –
...이 방법이 모든 클러스터 환경에서 작동하고 모든 서버가 요청할 것이라고 보장 할 수는 없습니다. HTTP에서 sessionID로 약간의 해킹을 할 수 있으며 각 서버는 고유 한 ID를 가지므로 특정 서버로 요청을 보낼 수 있지만 일반적으로이 방법은 관리하고 "규칙을 굽히거나" 어떻게 일을해야하는지. –
모든 요청에 대해 추가 cffile 읽기를 수행해야하는 데 따른 성능 문제가 있습니까? –
그래, 그게 접근 방식의 단점이긴하지만, 자바로 떨어 뜨리고 java.io.File을 사용하면 문제를 해결할 수 있습니다.주된 이점은 많은 번거 로움없이 단일/클러스터 환경에이를 적용 할 수 있다는 것입니다. 다시 초기화하기 위해 URL 재 초기화에 의존 할 필요가 없으며 서버 코드가 서버를 실행중인 서버에 격리되어 있습니다. Adobe는 자신의 손가락을 뽑아 내고 클러스터 코드 관리를 훨씬 쉽게 할 필요가 있습니다. 지난 3 버전에서 내가 요청한 부분은 클러스터 전반에 걸쳐 애플리케이션 범위 지원이었습니다. 그것을 곧 볼 수 없습니다 :-( –
그냥 실제로 - 당신은 onRequestEnd있어. 그래서 당신은 요청이 완료된 후 파일 검사를 할 수 있습니다. 적어도 사용자가 응용 프로그램을 다시로드하는 menas 최소한 프로세스가 시작되기 전에 결과를 얻습니다. 더 효율적 일 수 있습니다 :-) –