문제

누군가가 서비스 기반 아키텍처에 대해 이야기 할 때마다 종종 같은 호흡에서 확장 성을 언급합니다. 그러나 서비스를 사용하면 서비스를 줄이기보다는 더 많은 오버 헤드가 추가되는 것으로 보입니다. 이제 SOAP 또는 REST와 같은 프로토콜이 관련되어 있기 때문입니다. 따라서 웹 서비스 기반 아키텍처는 웹 애플리케이션의 사용자 수가 아마도 규모를 규모로 규모로 추가합니까? 아니면 확장 성 요구 사항이 핵심 애플리케이션이 아닌 단순히 서비스에 오프로드되어 있습니까?

도움이 되었습니까?

해결책

확장 성과 성능은 두 가지 별도의 것입니다. 예, 서비스 기반 접근 방식은 네트워크 프로토콜의 오버 헤드를 추가하지만 이는 도메인의 모든 응용 프로그램에서 잘 테스트 된 서비스를 신속하게 채택 할 수 있다는 이점을위한 최소한의 희생입니다.

네트워크의 오버 헤드가 구축하려는 시스템의 거래 차단기라면 분명히 SOA는 귀하에게 잘못된 선택입니다. HTTP를 통해 서비스에 액세스 할 수는 없습니다. 나는 당신이 어떤 프로토콜을 얼마나 빨리 얼마나 빨리 놀라게 할 것이라고 생각합니다 ( net.tcp) 할 수 있습니다.

다른 팁

클라이언트에 영향을 미치지 않고 여러 서버에서 실행할 웹 서비스를 확장 할 수 있습니다. 그것은 단단히 결합 된 시스템에서 잘 작동하지 않습니다.

적절하게 설계된 SOA는 시스템의 각 구성 요소가 다른 모든 것과 독립적으로 작동하고 비동기식으로 병렬로 실행할 수있게하므로 성능과 확장 성 (두 가지 다른 것들)은 시스템에서 가장 느리게/최소 확장 가능한 조각에 의해서만 제한됩니다. 모든 구성 요소가 직렬로 실행하는 데 걸리는 총 시간.

SOA는 모든 솔루션에 적합하지는 않으므로 특정 사례에 대한 명확한 혜택이 보이지 않으면 아무것도 없을 수 있습니다.

웹 서비스는 무료로 확장 성을 제공하지 않습니다. 사실 서비스를 구축하는 것은 매우 쉽습니다. 습관 규모.

그들이 당신에게주는 것은 확장 성을 구축 할 수있는 기회입니다. 또한 잘 정의 된 서비스 인터페이스를 사용하면 서비스가 필요할 때 더 나은 구현으로 빠르고 넓지 않은 서비스 구현을 교체 할 수 있습니다.

중요한 것은 'soa'의 'a'를 잊지 않는 것입니다. 많은 서비스를 만들고 싶어서 큰 혼란을 줄 수 있습니다. 아키텍처가 있는지 확인하십시오.

확장 성을 향한 큰 단계 중 하나는 기본, 동기, 쿼리/응답 유형 서비스 (예 : SOAP RPC)에서 비동기 서비스로 이동하는 것입니다. Hohpe 및 Woolf의 '엔터프라이즈 통합 패턴'을 참조하십시오.

Restafarians는 REST가 프로토톨이 아니라 건축 스타일입니다. REST는 SOAP가 사용하는 포장지없이 HTTP를 직접 사용하여 서비스 모델을 제공하는 방법입니다. 휴식은 그 비누와 철사에 훨씬 더 가깝습니다. 그것만으로도 하나는 다른 것보다 더 나아지지 않습니다. 둘 다 자리가 있습니다.

서비스 모델의 확장 성은 이러한 서비스의 무국적 특성보다 "서비스"(자본 W 및 자본 S가있는 웹 서비스에서와 같이)와 직접적으로 관련이 없습니다. 잘 만들어진 웹 앱은 확장 가능하며 서비스 중심의 아키텍처만큼 확장 가능하다고 주장 할 수 있습니다.

두 모델의 차이점 중 하나는 "서비스"가없는 웹 앱이 이진 수준에서 동일한 프로세스에 거주하는 참조 모듈과 상호 작용한다는 것입니다. 웹 서비스 (SOAP 또는 REST)는 오버 헤드를 추가하는 어느 정도의 직렬화를 도입합니다. 그러나이 오버 헤드는 종종 자신이 제공하는 유능 (예 : 앱을 내부적으로 유도하는 것과 동일한 웹 서비스도 비즈니스 파트너를 행복하게 만드는 데 사용될 수 있음)을 주어주는 가치가있는 것으로 간주됩니다.

좋은 아키텍처 중 하나는 서비스 클래스를 노출시키는 것입니다 (웹 서비스가 아니라 빠르게 혼란 스러울 수 있습니다!이 맥락에서 서비스는 로컬 앱에 직접 저수적 비즈니스 프로세스에 서비스를 제공하는 클래스를 의미합니다). 이 서비스에 바로. 그러나 비즈니스 파트너 및 기타 서비스 사용의 경우 이미 테스트 한 서비스 클래스에 얇은 웹 서비스 계층을 두어 웹 서비스와 동일한 서비스 계층을 제공합니다.

자, "스케일 성"을 먼저 정의해 봅시다. 대부분의 것 ~ 할 것이다 스케일 : 더 많은 용량이 필요한 경우 첫 번째 근사치에 더 많은 하드웨어를 버릴 수 있습니다. 그러나 일부 아키텍처는 "더 좁아지기 쉽다"고 - 그 의미는 무엇입니까? 추가 용량의 단위당 비용이 적은 경우 아키텍처는 "더욱 확장 가능"합니다.

스케일 성은 일반적으로 모든 아키텍처에서 세 가지 범위를 가지고 있습니다. 첫 번째 부분에 대한 고정 비용이 있으므로 간격으로 경사면이 0 인 선형입니다. 그 지점을 지나서 경사면이 증가하고, 어느 시점에서 일반적으로 용량을 추가하는 것은 매우 비쌉니다.

추가 용량의 단위당 비용을 설명하는 기능이 넓은 범위에서 대략 선형 인 경우 시스템이 "선형 스케일 가능성"이라고 말합니다. 분명히, 그 경사면이 적은 것이 바람직합니다.

그래서 이제 누군가가 SOA, 비누 또는 휴식의 "스케일 성"에 대해 물었을 때, 그것이 그들이 말하는 것입니다.

서비스 지향 아키텍처는 더 많은 용량을 추가하는 것이 상대적으로 저렴하기 때문에 "확장 가능"이라고합니다. 그러나 단일 사용자에게 서비스를 제공하기 위해 더 많은 용량이 필요한 오버 헤드가있을 수 있습니다. 큰 시스템 관리의 비용과 복잡성의 큰 부분은 세션 상태를 유지해야 할 필요성, 즉 통화간에 무슨 일이 일어나고 있는지 추적하기 때문입니다. 서비스 지향 아키텍처는 각 호출이 다음과 비교적 독립적으로 만들어서 편안한 아키텍처가 제한적인 경우입니다. 모든 세션 상태는 표현에 인코딩되어 있으므로 나머지 시스템은 이에 대해 알 필요가 없습니다. 용량을 추가하려면 다른 서버를 추가하기 만하면됩니다. 간단한로드 밸런싱은 메시지로 메시지를 전달하기에 충분합니다.

(이것은 또한 본질적으로 더 많은 결함이 있습니다. 서버가 죽으면 다른 나머지는 자동으로 요청을 받고 손실 할 세션이 없습니다.)

일부 J2EE 시스템과 같이 많은 세션 상태가 필요한 아키텍처는 세션 상태를 관리하기 위해 많은 추가 복잡성이 필요하기 때문에 덜 확장하는 경향이 있습니다.

기존 CGI 기반 아키텍처에서 본 종류의 제한 사례는 각 사용자 세션에 완전한 헤비급 프로세스가 필요한 것입니다. 포크/exec가 부하의 40-50 % 인 필드에서 시스템을 보았습니다. 여기서 복잡한 소프트웨어로드 밸런싱 리그가 있어야 요청이 항상 세션을 보유한 기계와 어디에 있는지 확인해야합니다. 프로세스 슬롯이 부족한 것은 중요한 문제였습니다. 그러한 시스템 중 하나는 용량을 추가하기 위해 완전히 새로운 고급 스타 파이어 서버를 구매해야했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top