아키텍처 개요
모든 플랜 에서 사용 가능
self-hosted 배포판
이 페이지는 참조 아키텍처를 사용하여 Mattermost 아키텍처의 개요를 제공합니다. 더 자세한 배포 개요는 배포 위키를 확인하세요 .
기본 사항
핵심적으로, Mattermost는 싱글-컴파일된 Go 이진 파일로, Restful JSON 웹 서버로 노출되며 JavaScript 및 Go 클라이언트로 제공됩니다. Restful API 문서는 여기에서 확인할 수 있습니다.
config/config.json 을 사용하여 구성되며 다음을 제공합니다.
인증 클라이언트: Team Edition에서 이메일 주소와 비밀번호를 사용하여 Mattermost에 로그인하는 기능을 제공합니다. Mattermost Professional은 사용자가 Active Directory 또는 LDAP를 사용하여 인증하는 기능을 추가하며, Mattermost Enterprise는 ADFS, OneLogin 및 Okta와 같은 SAML SSO 제공 업체를 사용하여 인증하는 기능을 추가합니다.
인증 제공자: OAuth 2.0을 사용하여 GitLab 및 Zapier와 같은 다른 서비스에 대한 Mattermost 서버의 인증을 활성화합니다.
알림 서비스: 모바일 애플리케이션을 위해 SMTP 또는 푸시 알림 서비스를 통해 알림을 보냅니다.
데이터 관리 서비스: 지원되는 데이터베이스 및 파일 저장소 솔루션(로컬, 네트워크 연결 저장소, Amazon S3 등)에 연결되어 그들 간의 데이터 읽기 및 쓰기를 관리합니다.
이진 파일은 일반적으로 PostgreSQL과 파일 저장소에 연결됩니다.
![../_images/architecture_basics.png](../_images/architecture_basics.png)
푸시 알림 서비스
Mattermost 호스팅된 푸시 알림 서비스 는 모바일 클라이언트에 푸시 알림을 보내는 데 사용할 수 있습니다. Team Edition 사용자는 Mattermost 테스트 푸시 알림 서비스 를 사용하거나 자체 푸시 알림 서비스를 호스트 하고 자체 모바일 애플리케이션을 컴파일 하여 해당 서비스를 사용할 수 있습니다.
프록시
프록시 서버는 다른 서버에서 리소스를 요청하는 클라이언트의 중개자 역할을 하는 서버(컴퓨터 시스템 또는 응용 프로그램)입니다. Mattermost는 보안, 성능 및 Mattermost에 연결하는 트래픽을 모니터링하고 모양을 지정하기 위해 Mattermost 앞에 프록시를 사용하는 것을 권장합니다.
보안: 프록시 서버는 안전한 소켓 레이어(TLS/SSL) 암호화를 관리하고 네트워크 트래픽이 Mattermost 서버로 어떻게 경로 지정될 지에 대한 정책을 설정할 수 있습니다.
성능: 고가용성 구성에서 프록시 서버는 최적의 성능을 위해 여러 Mattermost 서버에 걸친 네트워크 부하를 균형잡아 줍니다. SSL 암호화 및 복호화를 처리하기 위해 전용 장치가 있는 하드웨어 프록시도 성능을 높일 수 있습니다.
모니터링 : 프록시 서버는 연결 트래픽을 모니터링하고 일반적인 모니터링 도구인 Kibana 및 Splunk가 소비하고 보고할 수 있는 표준 감사 로그에 대한 트래픽을 기록할 수 있습니다. 캡처할 수 있는 일부 이벤트에는 Mattermost 서버 로깅 프로세스가 추적하지 않는 파일 업로드 및 다운로드가 포함됩니다.
Mattermost는 NGINX 프록시 를 위한 문서와 지원을 제공합니다. 환경에 따라 NGINX를 설치하고 구성하는 방법에 대한 정보는 가이드를 참조하세요 . Mattermost는 Apache 2 를 비공식으로 지원합니다.
![../_images/architecture_with_proxy.png](../_images/architecture_with_proxy.png)
통신 프로토콜
또한 사용자가 Mattermost 서버와 만드는 연결 유형을 정의하는 통신 프로토콜(HTTPS 및 WS)이 있습니다.
HTTPS 연결 (보안 HTTP 전송 프로토콜)
HTTPS 연결을 통해 Mattermost 서버로 페이지를 렌더링하고 핵심 플랫폼 기능에 액세스할 수 있지만 실시간 상호 작용(이는 WSS 연결에 의해 가능)은 포함되지 않습니다.
HTTPS는 안전하고 암호화된 프로토콜이며 프로덕션에서 매우 권장됩니다. 암호화되지 않은 HTTP 연결은 초기 테스트 및 구성에 사용될 수 있지만 프로덕션 환경에서는 사용해서는 안 됩니다.
WSS 연결 (보안 WebSocket 프로토콜)
Mattermost 서버에 대한 안전한 WebSocket(WSS) 연결을 통해 실시간 업데이트와 클라이언트 간 알림 기능이 활성화됩니다.
만약 WSS 연결을 사용할 수 없고 HTTPS가 대체될 경우, 시스템은 동작하는 것처럼 보일 것이지만 실시간 업데이트와 알림이 전달되지 않을 것입니다. 이 모드에서는 업데이트가 페이지 새로 고침시에만 표시됩니다. WSS는 클라이언트가 연결된 경우 Mattermost 서버와의 지속적인 연결을 가지고 있으며, HTTPS는 간헐적인 연결을 유지하며 페이지 또는 파일을 요청할 때에만 서버에 연결합니다.
![../_images/architecture_with_protocol.png](../_images/architecture_with_protocol.png)
Mattermost 서비스 포트
다음 표는 Mattermost 서버, 푸시 프록시 및 모바일 앱 클라이언트의 Mattermost 서비스 포트를 나열합니다. 프록시 없이 Mattermost 서버와 통신해야 하는 클라이언트를 갖고 있는 시스템 관리자는 필요에 따라 특정 방화벽 포트를 열 수 있습니다.
Mattermost 서버
Service Name |
Config Setting |
Port (default) |
Protocol |
Direction |
Info |
---|---|---|---|---|---|
HTTP/Websocket |
ServiceSettings.ListenAddress |
8065/80/443 (TLS) |
TCP |
Inbound |
External (no proxy) / Internal (with proxy) Usually this requires port 80 and 443 when running HTTPS. |
Cluster (Gossip) |
ClusterSettings.GossipPort |
8074 |
TCP/UDP |
Inbound |
Internal |
Cluster (Streaming) |
ClusterSettings.StreamingPort |
8075 |
TCP/UDP |
Inbound |
Internal |
Metrics |
MetricsSettings.ListenAddress |
8067 |
TCP |
Inbound |
External (no proxy) / Internal (with proxy) |
Database |
SqlSettings.DataSource |
5432 (PostgreSQL) / 3306 (MySQL) |
TCP |
Outbound |
Usually internal (recommended) |
LDAP |
LdapSettings.LdapPort |
389 |
TCP/UDP |
Outbound |
|
S3 Storage |
FileSettings.AmazonS3Endpoint |
443 (TLS) |
TCP |
Outbound |
|
SMTP |
EmailSettings.SMTPPort |
10025 |
TCP/UDP |
Outbound |
|
Push Notifications |
EmailSettings.PushNotificationServer |
443 (TLS) |
TCP |
Outbound |
푸시 프록시
서 비스 이름 |
구성 설정 |
포트 ( 기본값) |
프 로 토 콜 |
방향 |
정보 |
---|---|---|---|---|---|
푸시 프 록시 |
Listen Address |
8066 |
TCP |
들어 오는 |
외부 (프록시 없음) / 내부 (프록시 사용) |
모바일 클라이언트
푸시 알림을 받으려면 네트워크에서 iOS 장치용 포트 5223 및 Android용 포트 5228-5230 로의 트래픽을 허용해야 합니다.
고가용성 및 확장성
Mattermost Enterprise는 다음을 지원합니다:
레이턴시를 최소화하는 클러스터화된 Mattermost 서버:
전역 CDN을 통해 정적 자산 저장.
최종 사용자 위치에 API 통신을 더 가깝게 호스팅하기 위해 여러 Mattermost 서버 배포.
또한 재해 복구 시 규모 및 장애 전달을 처리하는 데 사용될 수 있습니다.
데이터베이스 읽기 레플리카:
활성 데이터베이스 서버에 대비한 중복 백업으로 구성될 수 있습니다.
동시 사용자 수를 확장하기 위해 사용될 수 있습니다.
최종 사용자 위치에 가깝게 배포되어 레이턴시를 감소시킵니다.
또한 검색 레플리카도 지원되어 검색 쿼리를 처리할 수 있습니다.
![../_images/architecture_high_availability.png](../_images/architecture_high_availability.png)
참조 아키텍처
다음 다이어그램은 다양한 규모의 Mattermost 엔터프라이즈 배포를 위한 권장 아키텍처 구성을 보여줍니다. 이러한 다이어그램은 일반적인 Mattermost 배포를 위한 지침으로, 사용 및 정책에 따라 하드웨어 및 인프라 요구 사항이 상당히 다를 수 있습니다.
각 다이어그램에는 두 가지 버전이 있습니다. 하나는 일반적인 버전이며 다른 하나는 AWS에 초점을 맞춥니다.
일반적인 다이어그램은 프록시, 데이터베이스, 파일 저장소 및 Elasticsearch 레이어 모두에 걸쳐 전체 고가용성 배포를 나타냅니다. 푸시 프록시는 Mattermost의 HPNS 를 대체할 수 있습니다.
각 AWS 다이어그램은 Amazon Web Services에서 완전한 고가용성 배포를 나타내며 사용 가능한 서비스를 최대한 활용합니다. 선택적으로 푸시 프록시는 HPNS를 대신하여 수동으로 배포될 수 있습니다.
엔터프라이즈 - 일반용 5,000 사용자
![../_images/MattermostDeployment5kUsers.png](../_images/MattermostDeployment5kUsers.png)
엔터프라이즈 - AWS용 5,000 사용자
![../_images/MattermostDeployment5kaws.png](../_images/MattermostDeployment5kaws.png)
엔터프라이즈 - 일반용 10,000 사용자
![../_images/MattermostDeployment10kUsers.png](../_images/MattermostDeployment10kUsers.png)
엔터프라이즈 - AWS용 10,000 사용자
![../_images/MattermostDeployment10kaws.png](../_images/MattermostDeployment10kaws.png)
엔터프라이즈 - 일반용 25,000 사용자
![../_images/MattermostDeployment25kUsers.png](../_images/MattermostDeployment25kUsers.png)
엔터프라이즈 - AWS용 25,000 사용자
![../_images/MattermostDeployment25kaws.png](../_images/MattermostDeployment25kaws.png)
엔터프라이즈 - AWS용 50,000 사용자
![../_images/MattermostDeployment50kaws.png](../_images/MattermostDeployment50kaws.png)
VIP를 사용하는 데이터베이스
다음 다이어그램은 가상 IP를 통해 고가용성 데이터베이스를 위한 권장 구성을 보여줍니다.
![../_images/DatabasewithVIPs.png](../_images/DatabasewithVIPs.png)
부하 테스트
Mattermost Enterprise Edition은 활용량과 정책에 따라 하드웨어 및 인프라 요구 사항이 상당히 다를 수 있으므로 60,000명 동시 활성 사용자로 부하 테스트를 진행했습니다 :
여섯 개의 Mattermost 서버: m4.2xlarge (8 vCPU, 32 GB RAM)
다섯 개의 읽기 레플리카를 갖춘 MySQL 데이터베이스 서버: db.r4.2xlarge (8 vCPU, 61 GB RAM)
부하 테스트 실행을 위한 세 개의 부하 테스트 러너
세 개의 NGINX 프록시