2009-07-14 3 views
0

나는 동일한 서비스를 거의 하나의 서비스 (웹 서비스가 아니라 필수적 또는 심지어는 가능성이있는)로하는 4 가지의 다른 소프트웨어 구성 요소를 리팩토링하는 과정에 있습니다. 3은 C++로 작성되었으며 가장 중요한 것은 Java로 작성되었습니다. 나머지 시스템은 Java로 작성되었으므로 C++ 코드를 리팩토링하지 않으며 특히 C++로 작성된 구성 요소가 의 Java 구성 요소로 대체 ​​될 예정이므로 특히 C++ 코드를 리팩터링하지 않으며 JNI를 사용하지 않을 것입니다.소프트웨어 서비스가 완전히 독립형이거나 더 큰 구성 요소의 일부 여야합니까?

현재 Java로 구현 된 구성 요소는 실제로 더 큰 구성 요소의 하위 구성 요소입니다. 따라서 큰/래핑 컴포넌트가 하위 컴포넌트 (서비스로 리팩토링되는)를 사용하고자 할 때 단순히 내부 프로세스 자바 메소드를 호출한다. 해당 하위 구성 요소를 별도의 서비스로 리팩토링하면 원래의 래핑 구성 요소는 현재 프로세스 메서드 호출에서 갖는 이점을 잃게됩니다.

서비스 게이트웨이로 작동하도록 원래/래핑 구성 요소에 스레드를 추가해야합니까? 아니면 코드를 독립 실행 형 서비스로 완전히 리팩터링해야합니까?

내가 충분히 명확했다 희망 ... 일반적으로

답변

0

는 "서비스"의 단일 인스턴스가있을 필요가 없습니다 및 인스턴스를 원격으로 호출 할 필요는 없다. 성능 또는 가용성을 고려한 공동 배포 전략은 상당히 합리적입니다. 논리를 한 번 구현하면 많은 이점을 얻을 수 있습니다.

그러나 이미 서비스 제공 업체가 특정 방식으로 관리되는 서비스 인프라가 이미있는 경우 일관성을 유지하는 것이 바람직 할 수 있습니다.

분리의 영향을 이해해야하므로이 경우 프로세스 내 호출의 이점이 중요합니까? 또한 다른 클라이언트에 대한 원격 호출 서비스로서 in-process 서비스를 수행할지 여부가 기존 시스템의 성능에 나쁜 영향을 미칠지 고려해야합니다.

필자는 간단한 스테이트리스 세션 EJB로 수행 할 수있는 로컬 및 원격 호출이 가능한 구성 요소로 코드를 가져 와서 두 번 배포합니다. 일단 원래 시스템과 함께 배치됩니다. 한 번 서비스로. 최소한의 섭동으로 절대 일관성을 희생합니다.

관련 문제