2011-03-07 2 views
0

이것은 공개적인 질문입니다.아키텍처 질문 : 프로그래밍 방식으로 서비스 지향 아키텍처에서 호출자 볼륨을 조절하는 방법?

나는 다음과 같은 이야기가 충분한 시간을 할애 한 것을 보았습니다. 물어볼 필요가 있습니다. 더 좋은 방법이 있습니까?

이 이야기는 한 팀이 SOA 맞춤형 서비스를 설정하는 이야기입니다. 다른 팀이 전화를 걸거나 실수로 망치를칩니다. 서비스가 넘어집니다. 그리고 발신자가 전화를 줄이거 나 통화량을 지원할 수있는 능력을 강화해야하는지에 대한 협상이 진행됩니다.

매우 수동적이고 단편적인 협상입니다.

다른 접근 방법에 대한 자료가 있습니까? 내 머리 꼭대기에서 한 가지 생각 : 서비스 소유자는 각 발신자 측에서 "발신자 크레딧"(통화 또는 사용권 설명)을 요구합니다. 이 크레딧은 서비스 자체 (또는 일부 ServieCallAdministrationService 부속 장치)에서 발급됩니다. 예, 끔찍한 이름입니다. 그런 식으로 서비스 소유자는 서비스 양을 제한함으로써 서비스 품질을 더 잘 보장 할 수 있습니까?

다른 방법으로 말하자면, 누가 전체 서비스 호출 볼륨을 관리하는이 문제를 "소유"해야합니까? 서비스 그 자체? 발신자? 다른 것?

+0

모든 ESB는 일반적으로 일종의 조절 메커니즘을 제공합니다. 예 : http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/operations/throttling.html – CMR

답변

2

(내 생각에)이 문제를 해결하는 가장 좋은 방법은 메시지 중심의 전송 레벨을 사용하는 것입니다 (JMS, 웹 스피어 MQ, MQMQ ...)이 경우

당신이 요청을 처리하는 완벽하게 제어 할 수 있습니다 - 그리고 처리 할 수없는 메시지는 대기열에 들어 있습니다. 당신은 쉽게 등, 스케일링 서버를 추가,

어떤 방법을 같은 우선 순위 등의 요소를 추가 할 수 있습니다 - 서비스 공급자가 합의 된 SLA

0

를 공급하는 책임이 도달하면 당신은 전화 사용을 모니터링 레디 스 및 한도를 초과하면 사용량에 대한 특정 오류 코드를 반환 할 수 있습니다.

Redis에는 만료 기한이 있으므로 x 분 후에 키를 만료시킬 수 있으며 서비스 호출은 평소와 같이 작동합니다.

"api-call-getUser:" + customerId 
0

다른 방법으로 제어 할 수 있습니다. 첫 번째 : 서비스 앞에 하나의 구성 요소를 사용하면 한 명의 호출자가이 서비스를 호출 할 수있는 빈도 (IBM Datapowerbox 또는 Oracle Web Service Manager에 이러한 기능이 내장되어 있음)를 정의 할 수 있습니다. 두 번째 : 고객 자체 (알려진 경우)는 클라이언트에서 발신 제한을 설정할 수 있습니다. 하나의 SLA에 고객과 함께 미리 정의 할 수 있습니다.

관련 문제