2013-02-16 4 views
9

웹 기반 IMAP 클라이언트를 구축 할 때 웹 서버를 IMAP 서버와 직접 대화하게해야합니까? 아니면 필요할 때 중간에 데이터베이스를 동기화해야합니까? 이 완전히 요구 사항에 따라 달라집니다웹 기반 IMAP 클라이언트에 자체 데이터베이스가 있어야합니까?

+0

적어도 메시지 헤더를 저장하는 데이터베이스가 있어야합니다. 필자의 경험에 따르면 IMAP 서버에서 헤더를 가져 오는 성능은 많이 필요합니다. 또한 IMAP 서버를 치지 않고 사용자가 데이터베이스의 헤더 만 저장하는 경우 메시지 본문 검색 이외의 검색을 수행 할 수 있습니다. –

답변

7

귀하가 질문하는 사실은 웹 메일 프론트 엔드가 IMAP 백엔드에서 효과적으로 작동하지 않을까하는의 미를 의미합니다. 나는 몇 가지 이유를 생각할 수, 내가 틀렸다면 수정하시기 바랍니다 :

  1. 웹 메일 클라이언트, 비 저장되고, IMAP 서버에 호출의 많은를 만들 것입니다, 그들 중 많은 것 기본적으로 반복됩니다 (예 : 사용자가 화면을 새로 고침 할 때). 당신이 호출 수 있다고 우려하고있다 대부분의 엄격 불필요한 특성은 다음 중 하나를 수행한다
    1. 는 IMAP 서버를 압도하거나
    2. 은 타사 IMAP 제공 업체와 대규모 네트워크/데이터/SLA 요금을 랙 또는
    3. 직접 DB 접속
  2. IMAP 서버가 외부 때로는 데이터 센터에 사용하지 못할 수 있습니다보다 훨씬 속도가 느려질 수, 당신은 웹 메일 클라이언트가 고객에게 서비스를 제공하기 위해 지속적으로 확인해야합니다.

중요한 결정 사항이 필요하지만, 연결해야하는 IMAP 서버가 조직의 내부 또는 외부에 있는지 여부에 따라 달라집니다.

  • 내부 :
    1. 네트워크 대역폭 또는 IMAP : 웹 메일 구성 요소의
      1. 성능은 IMAP 서버
    2. 외부에 대기 시간에 저하 될 수 있습니다 유 세이지는 금전적 비용이 많이 드는
    3. 성능입니다
    4. 이상과 같이 주요 IMAP 서버가 오프라인입니다 동안 메일 데이터를 미러링해야합니다.

      1. 비싼
      2. 프로젝트에 상당히 추가 : 데이터베이스없이 멀리 얻을 수 있다면이 레이어를 추가하는 것이 될 것이라고 알고 있기 때문에 이에

, 당신은 고려 타임 라인 (설계, 개발 및 테스트 용)

  • 프로젝트에 기술 및 배달 위험이 추가되고
  • 주요 건축 com 당신이 그렇지 않으면 할 수있는 포넌트.
  • 내부 IMAP 서버 - 성능

    첫째는, 정말 성능 저하가 있는지 아마 벤치 마크에 대한 좋은 생각 시스템입니다. 내 직감에는 거기에 많은 반응이 빠른 웹 메일 시스템이 있기 때문에 하나 일 필요는 없다고합니다.

    먼저 IMAP 연결을 유지하면서 대기 시간을 현저히 줄이는 매우 유용한 IMAP 프록시 서버가 많이 있습니다. 예로는

    을 둘째, 당신이 시스템으로 IMAP 서버와 웹 메일 웹 응용 프로그램을 보면, 아마 의미가 당신 돈 IMAP 데이터를 또 다른 데이터베이스에 캐시하지 않습니다. IMAP 서버에서 데이터베이스로 데이터 대기 시간을 도입하고, 데이터 및 데이터베이스 관리 문제를 야기하며, 새로운 여러 장애 요소가있는 시스템 복잡성을 도입하게됩니다.

    대신 웹 메일 앱용 IMAP 서버를 최적화 할 수 있습니까? 이것은 추가 서버를 구입하거나 현재 서버를 업그레이드하는 것과 관련이 있습니다. 그러나 동시에 웹 메일 서버는 그만큼 작을 것이고 데이터베이스 서버를 구입할 필요가 없습니다.

    IMAP 서버는 성능면에서 내부 캐시를 가지고 있으며, 수년 동안 여러 손으로 데이터베이스를 조정하고 디버깅 한 거의 모든 데이터베이스를 사용합니다. 그 경험과 성숙을 사용할 수 있습니다.

    가상의 문제를 생각해 봅시다. 시스템이 커져서 성능 문제가 발생하기 시작합니다. 사용자 정의 DB 테이블을 사용하여 사용자 정의 응용 프로그램을 쉽게 조정하고 확장 할 수 있습니까? 아니면 상업적 지원과 유용한 테스트 문서를 통해 널리 사용되는 상용 또는 공개 소스 IMAP 서버를 쉽게 확장 할 수 있습니까?

    외부 IMAP 서버 - 트래픽을 최소화하고 극대화 이러한 문제로 성능

    는 목표는 그들이 시간 (네트워크 지연) 또는 돈을 비용 때문에 IMAP 프로토콜 호출을 최소화하는 것입니다.

    첫째, 위에서 설명한대로 당신은 연결이 살아있을 수 있도록하기 위해 IMAPProxy을 사용할 수 있으며 사용자는 로그인. 또한

    , 난 당신이 데이터베이스를 사용할 필요가 있다고 주장하지만, 캐시 모드에서 전체 데이터 모델보다는입니다. 예를 들어, 당신은없는 NoSQL DB를 사용할 수 (중 키 - 값 또는 오브젝트 dB) 오히려 SQL DB에 비해 :

    • 저장소 개체 (메시지, 폴더 메타 데이터, 첨부 파일 등)이 아닌 비정규 데이터
    • ACID 동작은 아마도 필요하지 않습니다 - 그것은 캐시의 객체 ID 또는 클래스에 의해
    • 대부분의 조회하지 복잡하여이 방법으로 구현 조항

    이 작업은 매우 사용의 경우 또는 사용자 스토리 특정 만들 것입니다 WHERE, 비용 및 위험을 줄이고 시스템을보다 테스트 가능하게 만듭니다. 구현에 심각한 문제가있는 경우 전체 캐시를 플러시하고 서비스를 복원 할 수 있습니다.

    데이터 및 데이터베이스 관리 또한 훨씬 쉬울 것이며 전체 사용자의 사서함은 저장되지 않습니다.

    외부 IMAP 서버 - 분리 모델이 외부 IMAP 서비스에 대한 웹 메일 클라이언트를 제공하고, 당신은 외부 IMAP 서비스가 오프라인 상태가 주기적으로한다는 것을 알고있다, 그러나 당신은 여전히 ​​이메일을 제공 할 필요가 전제

    사용자에게.

    여기에서 분명히 사용자의 이메일을 로컬 데이터베이스에서 미러링해야합니다. 로컬 IMAP 서버가 있고 많은 오픈 소스 IMAP 동기화 도구 중 하나를 사용하여 타사 IMAP 서버를 미러링하는 아키텍처 솔루션을 살펴 보는 것이 좋습니다.여기 장점은 다음과 같습니다

      웹 메일 응용 프로그램으로
    1. , 로컬 IMAP 서버가 정확히
    2. 동기화 많은 에지의 경우와 어려운 문제가 웹 메일 클라이언트를 단순화 다른 IMAP 서버와 같은 모양; 이러한 모든 전체 지역 IMAP 서버를 가짐으로써
    3. 전에 해결되고, 당신은 어떤 개발 옵션을 지원하는 완전 관리 구성 요소 당신은 외부 IMAP 서버에 직접 연결하는 일부 사용자를 가지고 있고, 수
    4. 비용이 캐시 된 것들 몇 가지 이 아키텍처를 사용하여 - 그것은 단지 URL의

    단점은 다음과 같습니다 잠재적

    • 랙이 시간에 대한 중복 이메일의 저장에 큰 비용 사용자가 외부 IMAP 서버에서 먼저 감지 한 다음 다시 로컬에서 검색해야하므로 새 이메일을 볼 수 있습니다.

    로컬로 많은 IMAP 서버 중 하나를 사용할 수 있으며, 동기화를 위해, 여기에 몇 가지 가능성이 있습니다 :

    (면책 조항은 : 나는이 도구들을 사용하지 않았다. f)

    2

    는 서비스의 중요도 제공하는 것입니다 시간의 양, 당신은 ;-)

    나는 메일이 RANDON 타이밍에서 다시 다운로드 된 야후, rediffmail의 IMAP과 사례를 본

    내 블랙 베리에. (귀하의 정보. 블랙 베리 메일 서비스는 먼저 모든 메일을 IMAP 서버의 서버를 다운로드 한 다음 장치에 배포합니다.)

    중간 서버를 사용하면 서버를 줄일 수 있기 때문에 좋은 생각입니다. 메일 가져 오기 오류, 임의의 버그 또는 서버 충돌과 같은 관련 문제가 있습니다. 메일 관련 활동조차도 메일 읽기, 삭제, 다른 폴더로 이동하는 것과 같이 더 빠를 것입니다. 예정된 IMAP 서버가 다운 된 경우에도 더욱 편리하게 처리 할 수 ​​있습니다.

    +0

    문제는 그보다 조금 더 복잡합니다. UID를 사용하여 웹 사이트와 다른 클라이언트가 동기화되어 있는지 확인하기 때문에 실제 메시지를 동기화하는 것은 큰 문제가 아닙니다. 문제는 폴더에 UID가 없기 때문에 매번 다운로드해야하는 것처럼 보입니다. 시간이 오래 걸릴 수 있습니다. (Enter를 누르면 SO가 게시됩니다.이 메시지는 계속 바보입니다. imap 폴더와 데이터베이스에서 메시지를 복제하는 것은 나에게 잘못된 것으로 보입니다. 특히 저장 비용이 급증 할 것입니다. –

    +0

    imap에서 데이터베이스로 모든 메시지를 복제하는 것은 좋은 생각이 아닙니다. 그러나 데이터베이스의 최근 메시지를 캐싱하는 것은 아무런 문제가되지 않습니다. 그리고 데이터베이스에 인덱스를 만들어 웹 imap 클라이언트가 훨씬 더 빠르고 더 빠르게 검색 할 수 있도록 할 수 있습니다. – howanghk

    1

    사용자는 데이터베이스 접근 방식으로 인해 많은 이점을 얻었을 것이며 스토리지 비용은 데이터베이스에 저장된 최근 메시지 수를 제한함으로써 줄일 수 있다고 생각합니다. 이것은 사용자에게 기분 좋은 초기로드를 제공하여 IMAP 서버 동기화를 기다리지 않고 들어 와서 최신 이메일을 읽고 빠져 나갈 수 있도록합니다. 마지막으로 연결할 때 다운로드 한 내용을 캐시하고 백그라운드에서 업데이트하여 사용자가 서버 동기화를 기다릴 수 없기 때문에 데이터베이스 접근 방식은 폴더 문제를 해결할 수 있습니다. 간단히 말해서 사용자는 데이터베이스 접근 방식으로 더 행복해지며 그게 중요합니다.

    관련 문제