웹 기반 IMAP 클라이언트를 구축 할 때 웹 서버를 IMAP 서버와 직접 대화하게해야합니까? 아니면 필요할 때 중간에 데이터베이스를 동기화해야합니까? 이 완전히 요구 사항에 따라 달라집니다웹 기반 IMAP 클라이언트에 자체 데이터베이스가 있어야합니까?
답변
귀하가 질문하는 사실은 웹 메일 프론트 엔드가 IMAP 백엔드에서 효과적으로 작동하지 않을까하는의 미를 의미합니다. 나는 몇 가지 이유를 생각할 수, 내가 틀렸다면 수정하시기 바랍니다 :
- 웹 메일 클라이언트, 비 저장되고, IMAP 서버에 호출의 많은를 만들 것입니다, 그들 중 많은 것 기본적으로 반복됩니다 (예 : 사용자가 화면을 새로 고침 할 때). 당신이 호출 수 있다고 우려하고있다 대부분의 엄격 불필요한 특성은 다음 중 하나를 수행한다
- 는 IMAP 서버를 압도하거나
- 은 타사 IMAP 제공 업체와 대규모 네트워크/데이터/SLA 요금을 랙 또는
- 직접 DB 접속
- IMAP 서버가 외부 때로는 데이터 센터에 사용하지 못할 수 있습니다보다 훨씬 속도가 느려질 수, 당신은 웹 메일 클라이언트가 고객에게 서비스를 제공하기 위해 지속적으로 확인해야합니다.
중요한 결정 사항이 필요하지만, 연결해야하는 IMAP 서버가 조직의 내부 또는 외부에 있는지 여부에 따라 달라집니다.
- 내부 :
- 네트워크 대역폭 또는 IMAP : 웹 메일 구성 요소의
- 성능은 IMAP 서버
- 외부에 대기 시간에 저하 될 수 있습니다 유 세이지는 금전적 비용이 많이 드는
- 성능입니다
- 이상과 같이 주요 IMAP 서버가 오프라인입니다 동안 메일 데이터를 미러링해야합니다.
- 비싼
- 프로젝트에 상당히 추가 : 데이터베이스없이 멀리 얻을 수 있다면이 레이어를 추가하는 것이 될 것이라고 알고 있기 때문에 이에
- 네트워크 대역폭 또는 IMAP : 웹 메일 구성 요소의
, 당신은 고려 타임 라인 (설계, 개발 및 테스트 용)
내부 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 서버를 미러링하는 아키텍처 솔루션을 살펴 보는 것이 좋습니다.여기 장점은 다음과 같습니다
-
웹 메일 응용 프로그램으로
- , 로컬 IMAP 서버가 정확히
- 동기화 많은 에지의 경우와 어려운 문제가 웹 메일 클라이언트를 단순화 다른 IMAP 서버와 같은 모양; 이러한 모든 전체 지역 IMAP 서버를 가짐으로써
- 전에 해결되고, 당신은 어떤 개발 옵션을 지원하는 완전 관리 구성 요소 당신은 외부 IMAP 서버에 직접 연결하는 일부 사용자를 가지고 있고, 수
- 비용이 캐시 된 것들 몇 가지 이 아키텍처를 사용하여 - 그것은 단지 URL의
단점은 다음과 같습니다 잠재적
- 랙이 시간에 대한 중복 이메일의 저장에 큰 비용 사용자가 외부 IMAP 서버에서 먼저 감지 한 다음 다시 로컬에서 검색해야하므로 새 이메일을 볼 수 있습니다.
로컬로 많은 IMAP 서버 중 하나를 사용할 수 있으며, 동기화를 위해, 여기에 몇 가지 가능성이 있습니다 :
(면책 조항은 : 나는이 도구들을 사용하지 않았다. f)
는 서비스의 중요도 제공하는 것입니다 시간의 양, 당신은 ;-)
나는 메일이 RANDON 타이밍에서 다시 다운로드 된 야후, rediffmail의 IMAP과 사례를 본내 블랙 베리에. (귀하의 정보. 블랙 베리 메일 서비스는 먼저 모든 메일을 IMAP 서버의 서버를 다운로드 한 다음 장치에 배포합니다.)
중간 서버를 사용하면 서버를 줄일 수 있기 때문에 좋은 생각입니다. 메일 가져 오기 오류, 임의의 버그 또는 서버 충돌과 같은 관련 문제가 있습니다. 메일 관련 활동조차도 메일 읽기, 삭제, 다른 폴더로 이동하는 것과 같이 더 빠를 것입니다. 예정된 IMAP 서버가 다운 된 경우에도 더욱 편리하게 처리 할 수 있습니다.
문제는 그보다 조금 더 복잡합니다. UID를 사용하여 웹 사이트와 다른 클라이언트가 동기화되어 있는지 확인하기 때문에 실제 메시지를 동기화하는 것은 큰 문제가 아닙니다. 문제는 폴더에 UID가 없기 때문에 매번 다운로드해야하는 것처럼 보입니다. 시간이 오래 걸릴 수 있습니다. (Enter를 누르면 SO가 게시됩니다.이 메시지는 계속 바보입니다. imap 폴더와 데이터베이스에서 메시지를 복제하는 것은 나에게 잘못된 것으로 보입니다. 특히 저장 비용이 급증 할 것입니다. –
imap에서 데이터베이스로 모든 메시지를 복제하는 것은 좋은 생각이 아닙니다. 그러나 데이터베이스의 최근 메시지를 캐싱하는 것은 아무런 문제가되지 않습니다. 그리고 데이터베이스에 인덱스를 만들어 웹 imap 클라이언트가 훨씬 더 빠르고 더 빠르게 검색 할 수 있도록 할 수 있습니다. – howanghk
사용자는 데이터베이스 접근 방식으로 인해 많은 이점을 얻었을 것이며 스토리지 비용은 데이터베이스에 저장된 최근 메시지 수를 제한함으로써 줄일 수 있다고 생각합니다. 이것은 사용자에게 기분 좋은 초기로드를 제공하여 IMAP 서버 동기화를 기다리지 않고 들어 와서 최신 이메일을 읽고 빠져 나갈 수 있도록합니다. 마지막으로 연결할 때 다운로드 한 내용을 캐시하고 백그라운드에서 업데이트하여 사용자가 서버 동기화를 기다릴 수 없기 때문에 데이터베이스 접근 방식은 폴더 문제를 해결할 수 있습니다. 간단히 말해서 사용자는 데이터베이스 접근 방식으로 더 행복해지며 그게 중요합니다.
- 1. MySQL 데이터베이스가 Apache 서버와 분리되어 있어야합니까?
- 2. 클래스에 자체 컬렉션이 있어야합니까?
- 3. GUI에 자체 테스트가 있어야합니까?
- 4. n 계층 웹 응용 프로그램 테스트 - 테스트 프로젝트에 자체 데이터베이스가 있어야합니까?
- 5. DLL에 자체 구성 파일이 있어야합니까?
- 6. 인터페이스에 자체 콜백 클래스가 있어야합니까?
- 7. 모든 활동에는 자체 모델이 있어야합니까?
- 8. 사육사는 HAMR이있는 자체 서버가 있어야합니까?
- 9. 열거 형에 자체 프로젝트가 있어야합니까?
- 10. 각 사용자마다 별도의 Siled 데이터베이스가 있어야합니까?
- 11. 웹 GUI가있는 온라인 데이터베이스가 있습니까?
- 12. 레일즈 - 객체의 유형이 자체 모델에 있어야합니까?
- 13. 웹에서 mongodb를 실행하려면 내 자체 데스크톱이 있어야합니까?
- 14. TSQL에서 SET 명령이 자체 배치에 있어야합니까?
- 15. TFS 앱이 자체 전용 서버에 있어야합니까?
- 16. 각 CRM 애플리케이션에 자체 인스턴스가 있어야합니까?
- 17. Java/Ruby 기반 IMAP 프록시 라이브러리
- 18. 규칙 기반 IMAP 이메일 처리 엔진이 있습니까?
- 19. Kindle에 최적화 된 IMAP 웹 메일 클라이언트
- 20. NAG 수학 라이브러리로 애플리케이션을 재배포해야합니다. 클라이언트에 라이선스가 있어야합니까?
- 21. 웹 기반 시스템 아키텍처
- 22. 웹 서버에 ReportViewer가 설치되어 있어야합니까?
- 23. 배열 기반 데이터베이스가 올바르게 작동하지 않습니다.
- 24. Java 기반 웹 메일 솔루션
- 25. 트위터는 웹 클라이언트에 어떤 인증 프로세스를 사용합니까?
- 26. OAuth 2.0 구현 - 인증 서버와 리소스 서버에 별도의 데이터베이스가 있어야합니까?
- 27. 웹 사이트를 사용하지 않고 공유 데이터베이스가 있습니까?
- 28. 분산 된 캐시 또는 데이터베이스가 클라이언트에 데이터를 보내겠습니까?
- 29. 웹 서비스를 통해 클라이언트에 알리기
- 30. IMAP
적어도 메시지 헤더를 저장하는 데이터베이스가 있어야합니다. 필자의 경험에 따르면 IMAP 서버에서 헤더를 가져 오는 성능은 많이 필요합니다. 또한 IMAP 서버를 치지 않고 사용자가 데이터베이스의 헤더 만 저장하는 경우 메시지 본문 검색 이외의 검색을 수행 할 수 있습니다. –