2013-07-21 1 views
2

CXF 분산 OSGi를 사용하여 차이점 시스템에 두 개의 서비스 인스턴스를 배치합니다. 시스템에로드 균형 조정 기능을 제공하려고합니다. 우리가 알고있는 OSGi는 부하 분산 기능을 제공하지 않습니다. 아무도 그것을하는 방법을 알고 있습니까?분산 OSGi에서로드 균형 조정을 수행하는 방법은 무엇입니까?

+0

감사합니다, Christian and Neil, 귀하의 답변 및 의견은 저에게 매우 유용합니다. 그러나 크리스챤의 해결책은 내 문제를 해결할 수 있습니다. –

답변

0

ServiceTracker를 사용하여 전체 서비스 목록을 가져올 수 있어야합니다. 따라서로드 밸런서를 만드는 좋은 방법은로드 균형 조정을 수행하는 프록시 서비스를 직접 만들어서 로컬로 서비스를 제공하는 것입니다. 따라서 비즈니스 응용 프로그램은로드 균형 조정의 세부 사항에 대해 알지 못해도 서비스를 사용할 수 있습니다.

+0

네, 그게 제가 달성하고자하는 목표입니다. 프록시 번들을 만드는 방법은 무엇입니까? queryInLoadBalancing() : query() 서비스의 두 인스턴스를 가져오고로드 균형 조정 작업을 수행합니다. Round-Robin 등 –

+0

프록시 서비스의 원래 인터페이스를 사용합니다. 따라서 비즈니스 로직은 특별한 프록시와 대화한다는 것을 알 필요가 없습니다. 속성을 사용하여로드 균형 조정 서비스를 표시하면 비즈니스 논리가 특별 서비스를 필터링하여 비 승인 서비스를 필터링하지 못하게 할 수 있습니다. –

+0

ServiceTrackers는 로컬로 게시 된 서비스 만 볼 수 있으므로이 솔루션은 크게 두 가지 가정을합니다. 첫째, TM은 무차별 적이므로 모든 원격 서비스가 로컬에서 볼 수 있습니다. 둘째, TM은 로컬 서비스 프록시의 속성에 일종의로드 정보를 가져옵니다. 실제로 TM은 서비스 프록시에 반드시 반영되지 않는 엔드 포인트 속성의 가시성을 가지므로로드 밸런싱을 수행하기에 적합한 장소입니다. –

2

로드 균형 조정은 토폴로지 관리자 (TM)에서 구현하기위한 것입니다. 이러한 종류의 질문을 정확하게 다루는 Remote Services Admin 사양을 읽는 것이 유용 할 것입니다.

원격 서비스의 CXF 구현은 "무차별 (promiscuous)"인 단일 TM 만 구현합니다. 즉, 모든 수신 프레임 워크에서 모든 사용 가능한 서비스를 게시합니다. 그러나로드 균형 조정 및 장애 조치 (failover) 등을 수행하기 위해 자체 TM을 작성할 수 있습니다.

원격 서비스 사양은 특정 원격 서비스 구현과 완전히 독립적으로 TM 구현을 개발할 수 있도록 작성되었습니다.

+0

안녕 Neil, 이것은 CXF DOSGi의 기본 TopologyManager에 대해서조차도 훌륭하게 향상되었습니다. 어떻게 작동 할 지 확신 할 수 없습니다. TopologyManager가로드 밸런싱/페일 오버 로직을 구현하는 서비스 프록시를 생성합니까? –

+0

@ChristianSchneider 기본적으로 예 .... 모든 원격 서비스는 본질적으로 프록시임을 기억하십시오. 그러나 일반적으로로드 균형 조정을 수행하는 것은 어렵습니다. 부하를 어떻게 측정 할 것입니까? 하중을 측정하는 방법은 다양하며 다양한 방법이 있으며 물론 빠르게 변동될 수 있습니다. –

+0

안녕하세요, @NeilBartlett,로드 밸런싱을 수행하기 위해 자체 TM을 구현해야한다는 의미입니까? 그렇습니다. 지금은 Round-Robin 알고리즘을 사용하여 원격 서비스에 액세스하려고합니다. 그것을 구현하는 방법? 내 생각은 : 1. ServiceTracker.getServices()를 통해 사용 가능한 서비스를 얻습니다. 2. 서비스 반복에 액세스하십시오. 그 맞습니까? 로드 균형 조정에 대한 경험이 부족합니다. :) –

관련 문제