2014-04-23 4 views
1

데이터를 처리하기 위해 여러 서버 중 하나에서 HTTP 스크립트를 호출하는 Java 라이브러리를 개발 중입니다. 핵심 기능이 잘 돌아가고 이제 구성 문제가 있습니다.Java에서 구성을 저장하는 모범 사례

라이브러리에 서버의 정보 (URL, 사용자 이름, 암호 등)가 필요하며 연결이 실패하면 응답을받을 때까지 다른 정보를 가져와야합니다 (단순 고 가용성). 그리고 여러 개의 다른 서버 집합이있을 수 있습니다 (예 : 표준 대 우선 순위가 높은 요청). 부하 분산을 위해 서버의 순서를 무작위로 지정할 수도 있습니다. 그리고 앞으로이 메커니즘에 일종의 서버 상태 모니터링을 구현할 수 있습니다.

나는 자바에 익숙하지 않아서 내 아이디어가 다른 언어의 솔루션에 편향 될 수있다. 내 첫 번째 아이디어는 단일 서버 구성 저장을위한 클래스를 작성한 다음 반복자가 될 일종의 구성 관리자 (서버 설정을 반복하는 iterator를 리턴)와 직렬화 가능한 일종의 구성 관리자를 작성하는 것이었다. 그렇게하면 라이브러리는 반복자를 가져 와서 유효한 응답을 얻을 때까지 (또는 서버가 부족할 때까지) 서버를 반복 할 수 있습니다. 그리고 우리 클래스의 사용자는 필요한 구성을 저장하기위한 메커니즘을 사용할 수 있습니다.

나는이를 구현하기 위해 노력하고 나는 몇 가지 질문에 달렸다 :

  • 접근 반복자 방법을 구성 관리자의 데이터 - 서버 구성 자신과 반복 관련 될 수있는 다른 데이터? 구성 관리자는 반복자를 만들 때 일종의 간단한 목록을 "렌더링"해야합니까? 또는 반복자 액세스 구성 관리자의 내부 필드를 사용해야합니까? 또는 configurationManager를 반복자로 사용해야합니까?

  • 는 직렬화 가능하지 않은 필드를 사용할 필요가있는 경우 클래스의 직렬화를 확장하는 방법을 어떤 방법이 있나요 (아마 비 일어날 것입니다하지만 난 그게 않는 경우 준비 할)

이것이 가능한 접근법입니까, 아니면 오히려 라이브러리 (Commons 구성 또는 Java 등록 정보)를 사용해야합니까?

답변

1

단일 응용 프로그램의 경우 HashMap은 직렬화 가능하며 파일에 저장 한 다음 나중에 읽을 수 있습니다. 전체 클래스, HashMap 만 저장할 필요는 없습니다. 클래스는 여전히 HashMap을 관리 할 수 ​​있습니다.

HashMap은 키 - 값 쌍에서 작동합니다. (예 : key = "password"및 value = "secret")

당신이 말하고자하는 바에 따르면, 저장하려는 알려진 매개 변수 집합이 있으므로 HashMap을로드 할 때 키를 사용하여 값을 조회 할 수 있습니다. 그것은 빠르다. 반복 할 필요가 없습니다. 그러나 필요한 경우 HashMap을 반복 할 수 있습니다.

여러 시스템에 대한 구성을 저장하려면 HashMaps 컬렉션 (예 : ArrayList)을 가질 수 있습니다. ArrayList는 또한 직렬화 가능하므로 전체 목록을 파일에 쓰고 검색 할 수 있으며 반복하기가 매우 쉽습니다.

선택 항목을 사용자 지정하는 방법을 사용하려면 사용자 지정 비교기가있는 우선 순위 큐가 있습니다. 선택 방법을 무작위로 원한다면 동일한 내용을 참조하는 병렬 우선 순위 대기열을 만들어야하지만 다른 각기 다른 비교기 방법을 사용하여 임의로 대기열을 선택할 수 있어야한다고 생각합니다. 여러 인덱스를 사용하여 데이터베이스 테이블의 라인을 따라 생각하고 있습니다. 같은 행 집합을 가지고 있지만 어떤 색인을 선택 하느냐에 따라 여러 가지 방법으로 탐색 할 수 있습니다.

여러 시스템이 구성을 공유하는 것을 생각하고 있다면 데이터베이스에 구성을 저장하고 싶지만 그렇지 않은 것 같습니다.

+0

나는 그것을 분명히 말하지 않았을 것이다. 반복은 더 많은 구성에서 이루어집니다. 서비스를 제공 할 수있는 서버가 3 대 있고 각각에 대해 URL + 사용자 이름 + 암호를 저장해야한다고 가정 해 봅시다. 따라서 3 가지 구성 클래스 인스턴스를 갖게되며 "작동"클래스는 연결이 실패 할 경우 이러한 구성을 반복해야합니다. –

+0

ArrayList에 저장된 여러 구성에 대한 단락을 추가했습니다. – Don

+0

그리고 ArrayList 대신에 "inteligent"iterator를 추가하고 싶다면 어떻게해야할까요? 즉, cca 3-5 구성이 있지만 초당 약 50 건의 요청이있을 것이며 각 요청마다 "다른"반복자를 사용할 수 있습니다 (예 : 구성 순서를 임의로 지정하거나 연결할 수없는 서버를 건너 뜁니다.))? –

1

아마도 구성 서비스가 있습니다.

public interface ConfigurationService { 
    Iterable<Configuration> getAllConfigurations(); 
    Configuration getConfiguration(String id); 
    void saveConfiguration(Configuration config); 
} 

그런 다음 미래에 원하는대로 (속성 파일, 데이터베이스, 스프링 구성, 클러스터 된, 테스트 등) 할 수 있습니다.

+0

앞으로 업그레이드 할 수있는 방법을 생각해 보았지만 제안 된 ConfigurationService 구현 방법에 대한 질문에는 대답하지 않습니다. –

관련 문제