2009-06-10 5 views

답변

4

누구나이 질문에 대답하는 데 매우 정중합니다. "의존합니다."... "테스트해야합니다."... 등등.

사실이 질문은 관련된 응용 프로그램 및 네트워크 토폴로지에 대해 자세히 설명하지는 않지만 질문하는 경우에도 다음과 같습니다. a) DB가 응용 프로그램과 동일한 서브넷에있는 "로컬" , 또는 같은 기계 또는 메모리), 그리고 b) 웹 서비스가 아닙니다. 어쨌든 OP는 "외부 서비스"및 "자신의 사이트에 표시"라는 문구를 사용합니다. "하루에 한 번 또는 여러 번 파싱"이라는 구절은 매초마다 정확히 바뀌지 않는 일련의 데이터를 제안합니다.

고전적인 SOA 신화는 네트워크가 항상 사용 가능하다는 것입니다. 더 나아가 네트워크가 항상 낮은 대기 시간과 함께 사용 가능하다는 전설이 있습니다. 내부 시스템이 허튼 소리가 아니라면 인터넷을 통해 HTTP 쿼리를 보내는 것은 로컬 DB 또는 DB 클러스터에 대한 쿼리보다 항상 느립니다. 여기에는 여러 가지 이유가 있습니다. 원격 서버에 대한 홉 수, 원격 종료시 제어 할 수없는 중단 또는 성능 저하 문제 및 원격 웹 서비스 응용 프로그램이 요청을 분석하기위한 내부 처리 시간입니다. 자체 퍼시스턴스 백엔드 (일명 DB)를 생성하고 결과를 반환합니다.

앱을 실행하십시오. DB에 대한 대기 시간 및 응답 시간을 단축하십시오. 이제 원격 웹 서비스에서도 동일한 작업을 수행하십시오. DB가 인터넷에 있지 않으면 큰 차이가 있음을 알 수 있습니다.

유능한 기술자가 DB를 확장하거나 memcached 및 다른 패러다임을 사용하여 캐싱에서 DB를 완전히 제거하는 것이 어렵지 않습니다. 데이터 센터에 서로 가까이있는 서버 사이의 대기 시간은 인터넷을 통해 (그리고 더 안전하고 부팅하기 위해) 기계들보다 기념비적으로 적습니다.이 스케일을 달성하더라도 약간의 생각이 필요하다하더라도 스케일링과 대기 시간이 완전히 불투명 한 원격 웹 서비스와 달리 제어가 가능합니다. 나는 내 사이트의 가용성과 반응성이 전적으로 다른 사람을 기반으로한다는 생각에 너무 만족하지 않을 것입니다.

마지막으로 원격 웹 서비스를 사용할 수없는 경우 어떻게됩니까? 사이트에 대한 모든 요청이 다른 사이트에 대한 인터넷을 통한 요청을 포함하는 세상을 상상해보십시오. 다른 사이트를 사용할 수없는 경우 어떻게됩니까? 사용자가 몇 시간 동안 죽음의 회전 커서를 보지 않습니까? 이 예기치 않은 외부 의존성 때문에 사이트가 손상되는 동안 오류 500가 발생합니까?

기본 기능이 모든 요청에 ​​대해 원격 인터넷 전화에 의존하는 아키텍처를 채택하는 경우, 결과와 함께 살 수 있는지 결정하기 전에 응용 프로그램에 대해 매우 신중하게 생각하십시오.

+0

질문을주의 깊게 읽었습니까? 기본 결과가 항상 외부 웹 서비스에서 오는 것처럼 들리므로 네트워크 중단은 이미 처리해야하는 항목입니다. 또한 문제의 웹 서비스가 클라이언트 호스트에 대한 것일 뿐이지 만 사물의 웅장한 구성표에서는 로컬 일 가능성이 높습니다. – StaxMan

3

캐싱 등을 통해 웹 서비스와 웹 서버를 확장 할 수있는 많은 것들이 있기 때문에 웹 서비스를 사용하는 것이 더 효율적입니다. 중간 레이어를 사용하면 반환 된 데이터 형식을 변경할 수 있습니다 (예 : XML이 아닌 JSON을 사용할 수 있음). 데이터베이스를 확장하는 것이 훨씬 어렵습니다 (복제 등 포함). 일반적으로 가능한 경우 DB에 적중을 줄입니다.

6

1 차 조치. 하나가 다른 하나보다 좋거나 나쁘다고 가정하지 마십시오.

둘째, 실제로 측정하고 싶지 않다면 데이터베이스가 조금 더 빠릅니다 (데이터베이스가 웹 서비스에 비해 상대적으로 로컬이라고 가정). 네트워크 대기 시간은 실제로 복잡한 데이터베이스 또는 실제로 복잡한 XML을 말하지 않는 한 일반적으로 구문 분석 시간 이상입니다.

1

일반적으로 말할 수있는 정보가 충분하지 않습니다. 왜 몇 가지 검사를하고 알아 내는게 어때? 파이썬을 사용하는 것처럼 들리므로, 아마도 timeit 모듈을 사용하고 싶을 것이다. 결과에 영향을 수

어떤 것들은 :

당신이 서버간에
  • 거리 데이터의
  • 금액 인을 사용하면 웹 서비스의
  • 신뢰성을 사용하는 웹 서비스의
    • 성능 반환 된

    캐시 할 수있는 경우 캐시 된 버전의 데이터는 더 빠르지 만 로컬 RDBMS 사용을 의미하지는 않습니다. 응용 프로그램의 memcached 또는 메모리 캐시에있을 수 있습니다.

  • +0

    더 중요한 것은 원격 사이트에서 업데이트하는 빈도와 로컬 사이트에서 액세스하는 빈도입니다. –

    1

    - 누가 웹 서비스를 호출합니까? 사용자가 페이지를 조회 할 때마다 웹 서비스가 호출됩니까? 그렇다면 일종의 캐싱 레이어를 도입하는 것이 좋습니다. 많은 웹 서비스 API가 시간 당 만들 수있는 히트 양을 조절합니다.

    캐싱 된 XML을 파싱하거나 데이터베이스에서 데이터를 호출할지 여부는 상관 없습니다 (여기서 엔터프라이즈 스케일링에 대해 언급하지 않는 한). 개인적으로 DOM Parser를 작성하는 것보다 훨씬 간단한 SQL 호출을 작성하는 편이 낫습니다 (예외적 인 시나리오에 훨씬 더 취약합니다).

    0

    경우에 따라 다르므로 측정 (또는 적어도 교훈있는 추측을해야 함)해야합니다.

    몇 가지 사항을 고려해야합니다.

    웹 서비스

    • 는 데이터베이스 자체
    • 가 캐시 할 수 있습니다 히트 수
    • 는 네트워크 대기 시간을 소개하고
    • 신뢰할 수 있습니다하거나 접근보다 빠른 로컬 네트워크에하고 수
    • 심지어 로컬 디스크

    DB

    기술 자체가 속도면에서 큰 의미가 없습니다

  • 는 신뢰할 수 있어야 디스크에 액세스 할 필요가 (데이터베이스가 내부 캐시를 가지고 있지만, 그러나 그는 일반적으로 대상이되지 않음) 때문에 속도가 느릴 수 있습니다 - 하나의 경우 데이터베이스는 SQL을 파싱하고, 다른 XML 파서는 XML을 파싱하며, 데이터베이스는 일반적으로 소켓을 통해 액세스됩니다. 따라서 파싱과 네트워크를 모두 가질 수 있습니다.

    적용 가능한 경우 응용 프로그램의 데이터를 캐싱하는 것이 좋습니다.

  • 0

    몇 명의 사람들이 말했듯이, 의존하고 테스트해야합니다.

    종종 외부 서비스가 느리고 로컬 (메모리의 데이터베이스, 예를 들어 memcached)에 캐싱이 더 빠릅니다. 하지만 그렇지 않을 수도 있습니다.

    다행히도 저렴하고 테스트하기 쉽습니다.

    0

    테스트가 완료되었습니다. 일반적으로 XML은 앱 간 통신에 적합하지만 일단 앱 내부에 데이터가 있으면 모든 것이 데이터베이스 테이블에 저장되어야합니다. 이것은 모든 경우에 적용되는 것은 아니지만 그것이 나를위한 시간의 95 %를 차지합니다. 언제든지 데이터를 다른 방식으로 저장하려고 시도 할 때 (예 : 콘텐츠 관리 시스템의 XML) 나는 이전의 좋은 sprocs 및 SQL 서버를 사용하기를 바랬다.

    0

    기본적으로 캐시 결과를 원하고 그럴 가치가 있는지 궁금해 할 것 같습니다. 그러나 그렇다면 데이터베이스를 사용하지 않을 것입니다 (관계형 DB에 대해 생각하고 있다고 가정합니다). RDBMS는 캐싱에 적합하지 않습니다. 많은 사람들이 그들을 사용하더라도. 지속성이나 ACID가 필요하지 않습니다. Oracle/MySQL과 외부 웹 서비스 사이에서 선택한다면, 서비스를 사용하는 것부터 시작합니다.

    대신 실제 캐싱 시스템을 고려하십시오. 지역 여부 (memcache, 간단한 메모리 캐시 등). 또는 DB를 사용해야하는 경우 키/값 저장소를 사용하면 BDB가 잘 작동합니다. 응답 메시지를 직렬화 된 형식 (XML)으로 저장하고, 캐시에서 가져 오지 못하면 서비스에서 파싱을 시도하고 구문 분석합니다. 또는 편리하고 더 간단한 직렬화가있는 경우이를 저장하고 가져올 수 있습니다.

    +0

    왜 투표가 종료 되었습니까? 나는 그것이 좋은 대답이라고 생각했다 : – rick

    +0

    나는 똑같은 것을 생각하고 있었다. :) – StaxMan

    관련 문제