CORBA가 인기를 잃은 이유는 무엇입니까?
나는 아무도 CORBA에 대해 10 년 이상 전에 벌의 무릎 이었다는 점을 고려할 때 이상하게 조롱하는 용어로 말하는 것을 들어 본 적이 없습니다. CORBA는 왜 은혜에서 떨어 졌습니까? 순전히 구현이 나쁘거나 더 근본적인 것이 있었습니까?
CORBA뿐만 아니라 일반적으로 RPC입니다. 여기에는 DCOM, Java-RMI, .NET Remoting 및 기타 모든 항목이 포함됩니다.
문제는 기본적으로 분산 컴퓨팅이 로컬 컴퓨팅과 근본적으로 다르다는 것입니다. RPC는 이러한 차이가 존재하지 않는 척하려고 시도하고 원격 호출을 로컬 호출처럼 보이게 만듭니다. 그러나 좋은 분산 시스템을 구축하려면 이러한 차이점을 처리해야합니다.
Bill Joy, Tom Lyon, L. Peter Deutsch 및 James Gosling 은 분산 컴퓨팅의 8 가지 오류를 확인 했습니다. 비용과 노력이 증가합니다. RPC는 다음과 같은 잘못된 가정을 기반으로 구축 되었기 때문에 이러한 오류를 완벽하게 구현 한 것입니다.
- 네트워크는 신뢰할 수 있습니다.
- 지연 시간은 0입니다.
- 대역폭은 무한합니다.
- 네트워크는 안전합니다.
- 토폴로지는 변경되지 않습니다.
- 한 명의 관리자가 있습니다.
- 운송 비용은 0입니다.
- 네트워크는 동종입니다.
이 모든 것은 로컬 컴퓨팅에 해당됩니다.
예를 들어 안정성을 고려하십시오. 로컬에서 메서드를 호출하면 호출 자체가 항상 성공합니다. 물론, 호출 된 메서드 자체에 오류가있을 수 있지만 메서드 의 실제 호출 은 항상 성공합니다. 그리고 결과는 항상 반환되거나 메서드가 실패하면 오류가 표시됩니다.
분산 시스템에서는 이것이 사실이 아닙니다 . 메서드 자체 를 호출 하는 작업 이 실패 할 수 있습니다. 즉, 당신이 메서드를 호출 한 것처럼 보이지만 실제로 네트워크에서 호출이 손실되어 메서드에 도달하지 못했습니다. 또는 메서드가 성공적으로 호출을 수신하고 작업을 수행했지만 결과가 사용자에게 돌아가는 동안 손실되었습니다. 또는 방법이 실패했지만 오류가 손실되었습니다.
지연 시간과 유사 : 로컬에서 메서드를 호출하는 것은 본질적으로 무료입니다. 메서드 자체 는 응답 을 계산 하는 데 임의의 시간이 걸릴 수 있지만 호출 은 무료입니다. 네트워크를 통해 호출하는 데 수백 밀리 초가 걸릴 수 있습니다.
이것이 CORBA를 포함한 거의 모든 RPC 프로젝트가 실패한 이유입니다.
다른 방법은 잘 작동합니다. 모든 호출이 원격 호출 인 것처럼 가장하면 발생할 수있는 최악의 상황은 약간의 성능이 저하되고 앱에 사용되지 않는 오류 처리 코드가 포함되어 있다는 것입니다. . 예를 들어 이것이 Erlang이 작동하는 방식입니다.
Erlang에서 프로세스 는 동일한 주소 공간의 동일한 CPU에서 동일한 VM에서 실행 되더라도 다른 대륙의 다른 컴퓨터에서 실행되는 것처럼 항상 별도의 힙과 별도의 가비지 수집기를 갖습니다. 한 프로세스에서 다른 프로세스로 데이터를 전달 하면 프로세스가 다른 시스템에있는 경우와 마찬가지로 해당 데이터가 항상 복사됩니다. 호출은 항상 비동기 메시지 전송으로 이루어집니다.
따라서 로컬 및 원격 호출을 동일하게 보이게 하는 것은 문제가 아닙니다. 지역 전화 처럼 보이게하는 것 입니다.
CORBA에서 문제는 실제로 그것보다 조금 더 복잡합니다. 그들은 실제로 한 메이크업 지역 통화 서비스가 원격 호출처럼 보이지만, CORBA는위원회에 의해 설계 되었기 때문에, 원격 호출이었다 믿을 수 없을만큼 그들이 어떤 믿을 수 없을만큼 터무니없는 요구 사항을 처리 할 수 있도록했기 때문에, 복잡한. 그리고 그 복잡성은 심지어 시내 전화의 경우에도 모든 사람에게 강요되었습니다 .
다시 말하지만, Erlang에 비해 복잡성이 훨씬 낮습니다. Erlang에서 프로세스에 메시지를 보내는 것은 Java에서 메서드를 호출하는 것보다 복잡하지 않습니다. 인터페이스는 기본적으로 동일합니다. 단지 기대치 만 다릅니다. Java의 메서드 호출은 즉각적이고 동기적일 것으로 예상되며, Erlang에서는 메시지 전송이 비동기 적이며 눈에 띄는 대기 시간이있을 것으로 예상됩니다. 그러나 실제로 사용 하는 것은 단순한 로컬 프로 시저 호출보다 더 복잡하지 않습니다.
또 다른 차이점은 Erlang은 프로세스 내에서만 발생할 수 있으므로 항상 로컬 인 함수 호출과 프로세스간에 발생하며 그렇지 않은 경우에도 항상 원격 인 것으로 간주되는 메시지 전송을 구분한다는 것입니다. CORBA에서 모든 메서드 호출은 원격으로 간주됩니다.
CORBA 및 DCOM과 같은 분산 개체 기술은 세분화에 문제가있었습니다. 구현이 너무 '수다스러워'네트워크에서 잘 수행되지 않는 경향이 있으며 일반적으로 구현 세부 정보가 유출되어 솔루션을 취약하게 만들었습니다.
서비스 오리엔테이션은 이러한 우려에 대한 반응으로 두드러졌습니다.
참고 URL : https://stackoverflow.com/questions/3835785/why-has-corba-lost-popularity
'program story' 카테고리의 다른 글
| 메서드에서 익명 유형을 반환하는 방법이 있습니까? (0) | 2020.11.23 |
|---|---|
| Java의 WeakHashMap 및 캐싱 : 값이 아닌 키를 참조하는 이유는 무엇입니까? (0) | 2020.11.23 |
| ASP.NET MVC : Razor의 사용자 지정 Html 도우미 (0) | 2020.11.23 |
| “패키지 'android'의 'showAsAction'속성에 대한 리소스 식별자가 없습니다.” (0) | 2020.11.23 |
| 나뭇 가지 템플릿에서 돈 서식 지정 (0) | 2020.11.23 |