2010-07-21 3 views
5

조직별로 사용자를 분할하는 시스템에서 작업하고 있습니다. 각 사용자는 조직에 속합니다. 각 조직은 데이터베이스 서버 시스템에 상주하는 자체 데이터베이스에 데이터를 저장합니다. db 서버는 하나 이상의 조직에 대한 데이터베이스를 관리 할 수 ​​있습니다.레거시 C++ 응용 프로그램을 '웹에서 활성화하는 방법'

기존 (기존 시스템)은 하나의 조직 만 있다고 가정하고 있지만 (하나의 조직에 묶여있는) '인스턴스'를 실행하여 응용 프로그램의 크기를 조정하고 서버 컴퓨터에서 여러 인스턴스를 실행하려고합니다. 즉 '단일 조직'응용 프로그램의 여러 인스턴스 실행 - 각 조직에 대한 하나의 인스턴스).

서버에서 실행중인 인스턴스가 제공하는 서비스에 액세스하기 위해 씬 클라이언트를 사용할 수 있도록 서버에서 실행되는 각 인스턴스에 대해 RESTful API를 제공합니다. 여기

은 관계를 보여줍니다 간단한 개략도이다 :

서버 1 -> N 데이터베이스 (각 조직이 하나의 데이터베이스)

조직 1 -> N 사용자

내 질문은 클라이언트에서 RESTful 요청을 해당 조직의 사용자 요청을 처리하는 적절한 인스턴스로 '보내는'방법에 관한 것입니다.

구체적으로, RESTful 요청을 수신하면 사용자 (조직에 속한 사용자)가 해당 응용 프로그램 인스턴스로 요청을 '라우트'시키는 방법 (또는 실제로 가장 좋은 방법)이 될 것입니다. 서버에서 실행 중입니까?

답변

1

내가 수집 할 수있는 것으로부터, 이것은 본질적으로 샤딩 문제입니다. VM, 다수의 서버, 하나의 강력한 서버에서 모든 인스턴스를 사용하여 하드웨어 수준에서 인스턴스를 분할하는 방법에 관계없이 주어진 사용자를 요청 당 올바른 대상 인스턴스로 매핑하는 중앙 아키텍처 및 중개 계층이 필요합니다. .

물론 이것을 구현하는 방법은 여러 가지가 있으므로, 모든 요청이이를 통해 이루어지기 때문에 빠르고 쉽게 알고 확장 할 수있는 방법을 선택하십시오. 나는 메모리/캐시에로드 할 적절한 클라이언트 식별자 -> 인스턴스 매핑을 수행하는 간단한 읽기 전용 데이터베이스를 기반으로하는 경량의 상태 비 저장 웹 응용 프로그램을 제안합니다. 하드웨어 및 인스턴스 위치에 유연성을 추가하려면 (Java 가정) JNDI를 사용하여 각 인스턴스에 대한 하드웨어/포트/etc 정보를 저장하고 식별자 매핑에서 클라이언트 식별자를 적절한 JNDI 조회 키에 매핑하십시오.

+0

가장 실용적인 대답, 나는 생각한다 : – morpheous

0

실제로 이것은 매우 어려운 질문입니다. 단순히 가능한 대답이 많고 어떤 것이 가장 적합한지는 당신과 당신의 환경에 의해서만 결정될 수 있습니다.

나는 그것을하기 위해 C++로 아파치 모듈을 작성할 것이다. this book을 사용하여 매우 효율적인 모듈을 작성하기 시작했습니다.

더 많은 솔루션을 제공하려면 (어쩌면 Squid 프록시를 설정해야할까요?) 클라이언트를 리디렉션해야 할 서버를 결정하는 방법을 지정해야합니다. POST XML 매개 변수 (예 : SOAP)를 사용하면 GET 매개 변수를 사용하여 IP로 처리 할 수 ​​있습니다. 기타

+0

나는 아파치 모듈을 쓰는 아이디어에 유혹 받았다.하지만 아메드가 만들었던 점은 현실로 나를 데려왔다. :) – morpheous

+0

@morpheous 나는 이미 그것을했고, 그렇게 나쁘지 않았다. 내 애플 리케이션을위한 기초로 튜토리얼을 사용하여, 나는 반나절에 운영되었다. 그때 이후로, 나는 결코 돌아가서 아파치 특정 물건을 만질 필요가 없었다. – Gianni

0

다른 답변은이 문제에 접근하는 방법이 여러 가지라고 말합니다. 레거시 소프트웨어 소스 코드에 대한 액세스 권한이 없다고 가정하면 다른 인스턴스의 다른 포트에서 수신 대기하도록 수정할 수 없습니다.

쓰기 아파치 모듈은이 문제를 해결하기 위해 매우 극단적 인 것처럼 보입니다. (그리고 실제로 프로덕션 아파치 모듈 작성을 마친 사람으로, 심각한 돈을 벌지 않는 한 피하는 것이 좋습니다.)

접근 방법은 원하는만큼 비방 할 수 있습니다. 예를 들어 레거시 소프트웨어가 일반 인텔 아키텍처에서 실행되고 하드웨어 용량이있는 경우 가상 시스템을 만들 수있는 VM 솔루션, 소프트웨어의 단일 인스턴스를 실행하는 VM 솔루션, 멀티플렉서를 연결하는 VM 솔루션이 있습니다.

다른 한편으로 HPUX 같은 것을 잘 실행하고 있다면 :-) 다른 접근법이 있습니다. 좀 더 자세히 설명해 주시겠습니까?

아메드.

1

공용 API 만 사용자에게 지정하면 내게 약간 깨지기 쉽습니다. 요청이 조직과 사용자를 지정하도록 공개 API를 변경 한 다음 조직을 인스턴스에 매핑하는 사소한 서버 측 (예 : 조직 foo -> 인스턴스가 포트 7331에서 수신 대기 중임)을 변경합니다.

+0

사실,하지만 API를 바꾸는 것은 간단히 해결할 수있는 간단한 문제이다. – morpheous

관련 문제