WhatsApp의 아키텍처 및 시스템 설계 이해
요약
WhatsApp의 엔드 투 엔드 암호화는 이론적 보안에도 불구하고 원하는만큼 개인 정보 보호가되지 않을 수 있습니다. 이 기사는 WhatsApp의 아키텍처 및 시스템 설계를 탐구하여 내부 작업에 빛을 발합니다.
키 포인트
1. Roxdavirox/Socket-Whatsapp : 이 커밋은이 저장소의 어떤 지점에도 속하지 않으며 저장소 외부의 포크에서 나올 수 있습니다.
2. 이미 사용중인 이름 : 이미 태그로 존재하는 이름을 가진 브랜치를 만들면 예상치 못한 행동으로 이어질 수 있습니다. 사용자는 지점의 생성을 확인하라는 메시지가 표시됩니다.
삼. Github 데스크탑 출시 : 아무 일이 발생하지 않으면 사용자는 Github 데스크탑을 다운로드하고 다시 시도하는 것이 좋습니다.
4. Xcode 시작 : 아무 일이 발생하지 않으면 사용자는 Xcode를 다운로드하고 다시 시도하는 것이 좋습니다.
5. Visual Studio 코드 시작 : 사용자는 Codespace가 준비되면 열린다는 정보를받습니다. Codespace를 준비하는 데 문제가있는 경우 다시 시도하는 것이 좋습니다.
6. 최신 커밋 : 저장소에 대한 최신 커밋의 세부 사항이 표시됩니다.
7. GIT 통계 : 저장소에 대한 GIT 통계에 대한 개요가 제공됩니다.
8. 파일 : 최신 커밋 정보로드 실패를 포함하여 저장소의 파일에 대한 정보가 표시됩니다.
9. readme.MD : 순수한 노드 인 Baileys 라이브러리에 대한 간단한 설명.셀레늄 또는 기타 브라우저없이 WhatsApp 웹 API 구현 JS. WebSocket을 직접 사용하여 WhatsApp 웹과 인터페이스합니다.
10. Baileys 사용 : NPM에서 Bailey를 설치하고 코드로 가져 오는 방법에 대한 지침이 제공됩니다.
질문과 답변:
1. Roxdavirox/Socket-Whatsapp Commit의 목적은 무엇입니까??
이 커밋의 목적은 저장소의 지점에 속하지 않으며 저장소 외부의 포크에서 나올 수 있으므로 불분명합니다.
2. 이미 태그로 존재하는 이름을 가진 브랜치를 만들 때 어떤 잠재적 문제가 발생할 수 있는지?
이미 태그로 존재하는 이름을 가진 브랜치를 만들면 예기치 않은 동작이 발생할 수 있습니다. 그러한 지점을 만들기 전에 확인하는 것이 좋습니다.
삼. GitHub 데스크탑을 시작할 때 아무 일도 일어나지 않으면해야 할 일?
GitHub 데스크탑을 시작할 때 아무런 일이 발생하지 않으면 다운로드하고 다시 시도하는 것이 좋습니다.
4. Xcode를 시작할 때 아무 일도 일어나지 않으면해야 할 일?
Xcode를 시작할 때 아무 일도 일어나지 않으면 다운로드하고 다시 시도하는 것이 제안됩니다.
5. Visual Studio Code를 시작할 때 Codespace를 준비하는 데 문제가있는 경우 어떤 조치를 취해야합니까??
Visual Studio Code를 시작할 때 Codespace를 준비하는 문제가있는 경우 다시 시도하는 것이 가장 좋습니다.
6. “최신 커밋”섹션에서 제공하는 정보는 무엇입니까??
“최신 커밋”섹션은 저장소에 대한 최신 커밋의 세부 정보를 표시합니다.
7. “git 통계”섹션은 무엇을 보여줍니다?
“GIT 통계”섹션은 저장소의 GIT 통계에 대한 개요를 제공합니다.
8. “파일”섹션에 표시되는 정보?
“파일”섹션에는 최신 커밋 정보를로드하지 못하는 실패를 포함하여 저장소의 파일에 대한 정보가 표시됩니다.
9. Baileys는 무엇입니까??
베일리는 순수한 노드입니다.WhatsApp 웹 API의 JS 구현. Selenium과 같은 브라우저없이 WebSocket을 사용하여 WhatsApp 웹과 직접 통신 할 수 있습니다.
10. 베일리를 설치하고 가져올 수있는 방법?
“npm install github : adiwajshing/baileys”.””const whatsappweb = require ( ‘baileys’)를 사용하여 코드로 가져올 수 있습니다.”
개인적인 경험 및 권장 사항 :
내 개인적인 경험에서 WhatsApp의 아키텍처 및 시스템 설계를 이해하는 것은 플랫폼과 통합되는 응용 프로그램 개발에 중요했습니다. 베일리, 순수한 노드입니다.JS 구현은 Selenium과 같은 브라우저 자동화 도구없이 WhatsApp 웹과 훨씬 쉽게 상호 작용할 수 있도록했습니다. WhatsApp 인프라 위에 응용 프로그램을 구축하려는 사람을 위해 이러한 라이브러리를 활용하는 것이 좋습니다.
WhatsApp S Architecture & System Design 이해
엔드 투 엔드 암호화는 이론적으로 안전하다고 느낄 수 있습니다. 실제로 엔드 투 엔드 암호화는 ISN입니다’T가 희망하는 개인 정보 보호 보호.
Roxdavirox/Socket-Whatsapp
이 커밋은이 저장소의 어떤 지점에도 속하지 않으며, 저장소 외부의 포크에 속할 수 있습니다.
스위치 브랜치/태그
지점 태그
분기를로드 할 수 없었습니다
보여줄 것이 없습니다
태그를로드 할 수 없습니다
보여줄 것이 없습니다
이미 사용중인 이름입니다
제공된 지점 이름이 이미 존재합니다. 많은 git 명령은 태그와 분기 이름을 모두 받아들이 므로이 분기를 만드는 것이 예기치 않은 동작을 유발할 수 있습니다. 이 지점을 만들고 싶습니까??
취소 생성
- 현지의
- Codespaces
https github cli
웹 URL을 사용하여 SVN과 함께 git 또는 체크 아웃 사용.
공식 CLI와 함께 빨리 일하십시오. CLI에 대해 자세히 알아보십시오.
필요한 로그인
Codespace를 사용하려면 로그인하십시오.
Github 데스크탑을 시작합니다
아무 일이 발생하지 않으면 Github 데스크탑을 다운로드하고 다시 시도하십시오.
Github 데스크탑을 시작합니다
아무 일이 발생하지 않으면 Github 데스크탑을 다운로드하고 다시 시도하십시오.
Xcode를 시작합니다
아무 일이 발생하지 않으면 Xcode를 다운로드하고 다시 시도하십시오.
Visual Studio 코드 시작
Codespace가 준비된 후에 열립니다.
Codespace를 준비하는 데 문제가있었습니다. 다시 시도하십시오.
최신 커밋
git 통계
파일
최신 커밋 정보를로드하지 못했습니다.
최신 커밋 메시지
시간을 투입하십시오
readme.MD
순수한 노드에서 리버스 엔지니어링 WhatsApp 웹 API.JS. Baileys는 Selenium 또는 기타 브라우저가 WhatsApp 웹과 인터페이스를 요구하지 않으므로 WebSocket을 사용하여 직접 사용합니다.
WhatsApp 웹을 리버스 엔지니어링하기위한 가이드를 작성해 주신 Sigalor에게 감사합니다 가다 상환.
Baileys는 사용하기 쉽습니다
- NPM을 사용하여 NPM에서 설치 설치 GitHub : Adiwajshing/Baileys
- 그런 다음 코드를 사용하여 가져옵니다
Const whatsappweb = 필요하다('베일리'))
허락하다 고객 = 새로운 whatsappweb()) 고객.연결하다())
고객.핸들러.연결된 = ()) => / * WhatsApp 웹 서버를 성공적으로 인증하면 */ >
고객.핸들러.OnUnReadMessage = (메시지)) => / * 보류 중이없는 메시지가 있거나 새 메시지를받을 때 호출 */ >
고객.핸들러.오류 = (오류)) => / * 오류가 발생했을 때 호출 */ >
고객.핸들러.존재 = (ID, 있음)) => / * 누군가의 존재에 대한 업데이트를받을 때 호출 */ >
고객.핸들러.ondisconnect = ()) => / * 인터넷이 연결이 끊어 질 때 호출 */ >
고객.핸들러.OnUnReadMessage = (중)) => Const Messagetype = 고객.getMessageType(중.메시지)) // 어떤 유형의 메시지를 얻습니다 - 텍스트, 이미지, 비디오 >
고객.핸들러.OnUnReadMessage = (중)) => Const Messagetype = 고객.getMessageType(중.메시지)) // 어떤 유형의 메시지를 얻습니다 - 텍스트, 이미지, 비디오 // 메시지가 문자 메시지가 아닌 경우 만약에 (Messagetype !== whatsappweb.Messagetype.텍스트 && Messagetype !== whatsappweb.Messagetype.확장 텍스트)) 고객.decodemediamessage(중.메시지, "파일 이름")) // 확장자가 자동으로 적용됩니다 .그 다음에 (메타 => 콘솔.통나무(중.열쇠.RemoteJid + "보낸 미디어, 저장 :" + 메타.파일 이름)))) .잡다 (오류 => 콘솔.통나무("디코딩 메시지의 오류 :" + 오류)))) > >
고객.SendTextMessage(ID, txtmessage))
또는 다른 메시지를 인용하려면 다음과 같습니다
고객.SendTextMessage(ID, txtmessage, 인용문))
고객.sendmediamessage(ID, MediaBuffer, 매체 유형, 정보))
- 이미지 및 스티커에 대해 썸네일을 자동으로 생성 할 수 있습니다.
- MediaBuffer는 보내려는 미디어의 내용을 포함하는 버퍼입니다
- MediaType는 보내는 메시지 유형을 나타냅니다. 이것은 다음 중 하나 일 수 있습니다
[의 뜻 whatsappweb.Messagetype.영상, // 이미지 메시지 whatsappweb.Messagetype.동영상, // 비디오 메시지 whatsappweb.Messagetype.오디오, // 오디오 메시지 whatsappweb.Messagetype.상표 // 스티커 메시지 ]]
정보 = 표제: "안녕!", // 미디어와 함께 보낼 캡션 (스티커로 전송할 수 없습니다) 썸네일: 없는, /* 사용자 정의 엄지를 보내려면베이스 64 인코딩 된 JPEG 여야합니다, 또는 썸네일을 보내고 싶지 않은 경우 NULL로 설정. 자동으로 엄지 손가락을 생성하려면이 필드에 들어 가지 마십시오 */ Mimetype: "응용 프로그램/PDF", /* 미디어 유형을 지정합니다 (문서를 제외한 모든 미디어 유형에 대한 선택 사항), pdf files => "application/pdf"로 설정, txt files => "application/txt"로 설정 등. */ gif: 진실 // 비디오를 GIF로 취급 해야하는 경우 비디오 메시지에만 적용됩니다 >
고객.SendReadReceipt(ID, MessageId))
고객.업데이트 프리즈(ID, 있음))
이를 통해 신분증 환자에게 귀하의 상태를 알 수 있습니다. 존재가 다음 중 하나가 될 수있는 곳 :
공전 있음 = 사용 가능: "사용 가능", // "온라인" 없는: "없는", // 오프라인 식자: "식자", // "타이핑. " 녹음: "녹음", // "녹음. " 일시 중지: "일시 정지" // 나는 단서가 없다 >
Const Authjson = 고객.Base64encodedauthinfo())
Const Authjson = JSON.구문 분석( FS.readfilesync("Auth_info.JSON ")) )) 고객.로그인(Authjson))
고객.ISONWHATSAPP ("[CountryCode] [some10digitNumber] @S.whatsapp.그물")) .그 다음에 ((존재합니다, ID)) => 만약에 (존재합니다)) 콘솔.통나무(ID + "whatsapp에 있습니다")) > 또 다른 콘솔.통나무(ID + "WhatsApp에 있지 않습니다 :(")) > >))
체크 아웃 및 실행 예제를 실행하십시오.JS이 모든 기능의 예제 사용을 볼 수 있습니다. 예제 스크립트를 실행하려면 Repo를 다운로드하거나 복제 한 다음 터미널에 다음을 입력하십시오
- CD PATH/TO/BAILEYS/예제
- 노드 예제.JS
나는 WhatsApp과 제휴하지 않습니다. 이것은 교육 목적으로 작성되었습니다. 자신의 재량에 따라 사용하십시오.
WhatsApp의 아키텍처 및 시스템 설계 이해
WhatsApp이 어떻게 작동하는지 궁금한 적이 있습니까?? 우리’VE는 WhatsApp의 고급 시스템 설계 및 아키텍처를 연구했습니다’S 기술. 우리가 배운 것을보기 위해 다이빙하십시오.
컨텐츠 유형 태그
목차
어느 앱에 2가 넘는 앱.50 억 활성 사용자, 50 억 개가 넘는 다운로드, 100 개국 이상에서 가장 인기있는 앱입니다?
힌트 : 기사 제목을 확인하십시오.
응 그거’맞아. WhatsApp은 세계에서 가장 인기있는 메시징 서비스입니다. Mark Zuckerberg에 따르면 매일 WhatsApp을 통해 1,000 억 이상의 메시지가 전송됩니다.
이러한 거의 비방적인 트래픽을 사용하면 할 수 있습니다’t 시스템 설계, 서버 아키텍처, 기술의 작동 방식을 궁금해합니다 . 많은 동시 사용자와 메시지를 어떻게 처리합니까?? 어떤 종류의 프레임 워크와 프로그래밍 언어가 그런 종류의 규모를 가능하게합니다? 그들은 모든 데이터를 어떻게 안전하게 유지합니까?? 너무 많은 질문!
이 기사에서는 WhatsApp에 대한 깊은 다이빙을 할 것입니다’S 아키텍처 및 시스템 설계. 우리’위에서 언급 한 모든 질문에 대한 답변.
만약 너라면’채팅 앱 세계의 최고 개에 대해 궁금해 한 적이 있습니다. 계속 읽으십시오.
부인 성명: 우리는 WhatsApp 아키텍처 설계에 대한 모든 리소스를 수집하기 위해 인터넷을 검색했으며 여기에서 편집하고 요약했습니다. 우리가 아는 한,이 정보는 정확합니다. 그러나 회사가 기술 스택을 자주 업데이트함에 따라이 정보는 변경 될 수 있습니다.
WhatsApp 프론트 엔드 기술 스택
허락하다’s 프론트 엔드부터 시작하여 백엔드의 하드웨어로가는 길.
사용자가 상호 작용하는 WhatsApp 시스템 설계의 첫 번째 부분은 모바일 또는 웹 앱입니다. WhatsApp은 거의 모든 플랫폼을 지원합니다. iOS 앱, Android 앱, 데스크탑 앱, 웹 앱 및 Windows Phone 앱이 있습니다. 2017 년까지 BlackBerry에서 WhatsApp을 사용할 수도 있습니다.
지원되는 플랫폼이 너무 많으면 WhatsApp이 하이브리드 앱이 될 것이라고 추측했을 것입니다. 그러나 실제로는입니다’S가 아닙니다. 그들은 실제로 각 플랫폼마다 기본 앱을 구축했습니다. 다음은 각각을 구축하는 데 사용 된 프론트 엔드 언어를 갖춘 모든 지원되는 플랫폼 목록입니다
WhatsApp이 현지에서 채팅하는 방법
프로그래밍 언어 자체 외에도 WhatsApp이 프론트 엔드에서 사용하는 또 다른 중요한 기술은 SQLite 데이터베이스입니다. SQLITE는 응용 프로그램에 내장되어야하는 독립형 자체 포함 인 관계형 데이터베이스입니다. 이는 장치에 남아 있습니다. WhatsApp 은이를 사용하여 대화를 저장합니다. 앱을 열 때마다 클라우드에서 모든 메시지를 다운로드하는 것은 리소스 낭비이므로 WhatsApp은 메시지를 로컬로 저장하기로 선택합니다. 실제로 WhatsApp은 메시지를받을 때까지 메시지 만 저장합니다.
WhatsApp에서 사용하는 메시징 프로토콜?
WhatsApp은 Ejabberd 서버에서 고도로 수정 된 XMPP 버전을 사용하여 클라이언트와 통신합니다.
클라이언트의 XMPP는 WhatsApp 서버에 SSL 소켓을 엽니 다. 메시지를 검색하기 위해 클라이언트가 열리 거나이 소켓에 다시 연결될 때까지 모든 메시지가 서버에서 대기됩니다. 클라이언트가 메시지를 성공적으로 검색하면 성공 상태가 WhatsApp 서버로 다시 전송됩니다. 그런 다음 서버는이 상태를 원래 발신자에게 전달합니다. 그들에게 메시지가 “체크 표시” 성공적으로 보낸 메시지 옆에 아이콘이 있습니다.
XMPP는 채팅 앱에 가장 인기있는 메시징 프로토콜 중 하나이지만 메시징 프로토콜을 선택하는 유일한 옵션은 아닙니다.
WhatsApp 암호화 기술
WhatsApp은 엔드 투 엔드 암호화를 사용합니다. 이상적으로 이것은 원래 발신자와 메시지의 진정한 수신자만이 일반 텍스트로 메시지를 읽을 수 있음을 의미합니다.
메시지를 보낼 때 특정 암호화 프로토콜을 사용하여 암호화됩니다 (다음에 자세히 설명). 그런 다음 WhatsApp은이 암호화 된 메시지를 서버에 할 때까지 저장합니다’수신자에게 전달됩니다. 배달되면 수신자의 장치가 고유 한 암호화 키를 사용하여 메시지를 읽을 수있는 일반 텍스트 메시지로 다시 해독합니다. 이 전체 프로세스에서 WhatsApp은 메시지의 내용을 전혀 모릅니다.
whatsapp’S 암호화 기술은 신호 암호화 프로토콜이라고하며, Open System Whispers는 비동기 메시징 시스템을위한 현대적이고 오픈 소스의 강력한 암호화 프로토콜로 개발되었습니다.
엔드 투 엔드 암호화는 이론적으로 안전하다고 느낄 수 있습니다. 실제로 엔드 투 엔드 암호화는 ISN입니다’T가 희망하는 개인 정보 보호 보호.
WhatsApp 백엔드 기술 스택
허락하다’s 백엔드로 이동합니다.
우리가 아는 한, 현재 WhatsApp 백엔드 시스템 설계는 다음과 같습니다
- Erlang 주요 프로그래밍 언어입니다
- freebsd 운영 체제입니다
- Ejabberd XMPP 응용 프로그램 서버입니다
- 빔 Erlang 기반 가상 머신입니다
- 미네 시아 Erlang 기반 데이터베이스입니다
- Yaws는 멀티미디어 웹 서버입니다
허락하다’s whatsapp의 더 흥미로운 측면 중 일부를 탐구합니다’s 백엔드 아키텍처 :
Erlang
WhatsApp의 프로그래밍 언어 선택은 대부분 엄청난 규모로 작동 할 수있는 것입니다.
Erlang은 동시, 확장 가능하며 신뢰할 수있는 시스템을 구축하기위한 기능적 프로그래밍 언어입니다. The라는 프로세스 기반 모델을 사용합니다 “배우 모델” 소규모 고립 된 프로세스가 메시지를 통해 서로 통신하는 경우. 이러한 프로세스는 새 프로세스를 생성하고 메시지를 보내고 메시지 수신에 응답하여 상태를 수정할 수 있습니다.
프로세스 기반 속성은 Erlang에게 매우 높은 동시성, 확장 성 및 신뢰성을 제공합니다.
이러한 프로세스는 또한 실행되는 핵심 외부의 프로세스와 통신 할 수 있습니다. 따라서 시스템을 가로로 쉽게 확장 할 수 있습니다 (더 많은 기계를 추가하여) 또는 수직 (코어를 더 추가하여). 마지막으로, 프로세스는 서로 통신 할 수 있고 더 중요한 것은 서로를 다시 시작할 수 있으므로’자가 치유 시스템을 구축하기가 쉽습니다. 버그가 프로세스에 충돌하면 다른 프로세스를 다시 시작할 수 있습니다.
freebsd
WhatsApp 창립자들의 흥미로운 기술적 선택은 FreeBSD를보다 널리 사용되는 시스템 (Linux) 대신 운영 체제로 선택하는 것이 었습니다.
WhatsApp의 공동 창립자 중 한 명인 Brian Acton 은이 결정에 대해 Wired와의 인터뷰에서 다음과 같이 말했습니다
“Linux는 복잡성의 짐승입니다. Freebsd는 매우 좋은 포트 컬렉션으로 단일 배포의 이점이 있습니다.”
또한, 특히 패킷 당 시스템 부하와 관련하여 원시 성능과 관련하여 다른 운영 체제는 FreeBSD를 이길 수 없습니다.
그러나 그것이 달라지면 그들이 freebsd를 사용하기로 결정한 진짜 이유는 아마도 두 공동 창립자가 Yahoo에서 그것과 함께 일한 오랜 역사를 가지고 있었기 때문일 것입니다!.
Ejabberd
Ejabberd는 Erlang에서 작성된 오픈 소스 XMPP 서버입니다. WhatsApp은 XMPP의 수정 된 버전을 메시지 전달을 처리하기위한 프로토콜로 사용합니다. WhatsApp이 사용하는 Ejabberd 서버조차도 서버 성능을 최적화하기 위해 크게 사용자 정의됩니다.
무엇’Ejabberd의 목적?
글쎄, 그것은 앱의 메시지 라우팅, 배달 가능성 및 일반적인 인스턴트 메시징 측면을 처리합니다. Ejabberd의 특징은 다음과 같습니다
- 일대일 메시징
- 그룹 채팅
- 오프라인 메시지 저장 및 전달
- 연락처 목록 및 존재
미네 시아
데이터 및 임시 메시지를 저장하려면 WhatsApp은 Mnesia라는 Erlang 기반의 분산 DBM (데이터베이스 관리 시스템)을 사용합니다. 이 DBMS는 많은 전통적인 데이터베이스가하지 않는 이점을 제공합니다’t와 같은 :
- 실시간 키/값 조회
- 높은 결함 허용 오류
- 동적 재구성
- 복잡한 대상
MNENSIA는 또한 유일한 DBM입니다’Erlang에서 작성되었습니다. 응용 프로그램의 Erlang과 DBMS의 Erlang 사이에 데이터 구조 차이가 없기 때문에 이것은 그 자체로 이점입니다. 따라서 코딩은 더 빠르고 명백합니다.
빔
빔, 짧은 “Bogdan’S Erlang Abstract Machine”, Erlang 소스 코드를 컴파일하고 실행하는 가상 머신입니다. 빔은 동시 응용 프로그램을 위해 특별히 설계되었습니다’s 유스 케이스. 빔’S 비밀 소스는 가벼운 과정입니다’t 메모리를 공유하고 스케줄러가 관리합니다. 이 스케줄러는 여러 코어에서 수백만 개의 프로세스를 관리 할 수 있습니다. 이것은 트래픽 부하, 시스템 업데이트 및 네트워크 정전으로 인한 것과 같은 빔이 고도로 확장 가능하고 실패에 저항합니다.
Beam은 WhatsApp 시스템 설계에 매우 중요하여 WhatsApp 팀이 핵심 소스 코드에 많은 패치와 수정을 게시했습니다.
요
Yaws (또 다른 웹 서버)는 동적 콘텐츠에 이상적인 Erlang 기반 웹 서버입니다. WhatsApp은 멀티미디어 데이터를 저장하기 위해 YAW를 사용합니다. Yaws 자체는 서버와 앱간에 신뢰할 수 있고 빠른 연결을 설정하여 양방향 통신을 단순화하는 HTML5 WebSockets를 사용합니다. 이 기술을 사용하여 Whatsapp은 수십억 개의 장치에서 멀티미디어 데이터를 보내고받을 수 있습니다.
WhatsApp 하드웨어 구성 요소
Facebook에서 인수 한 지 4 년이 지난 2017 년 WhatsApp은 IBM Softlayer에서 이륙했습니다’S 클라우드와 페이스 북으로 가져 왔습니다’독점 데이터 센터.
우리가 아는 것은 2014 년에 WhatsApp은 약 550 개의 서버와 Erlang을 실행 한 11,000 개 이상의 코어가 필요하다는 것입니다. 우리는 또한 WhatsApp을 알고 있습니다’S 사용자 기반은 2020 년에 20 억 명이 넘는 사용자에 비해 2014 년에 “약 50 억에 불과했습니다. 따라서 해당 데이터를 염두에두고, 현재 얼마나 많은 서버와 코어 WhatsApp이 필요한지 상상할 수 있습니다. 우리는 그것이 많이 상상합니다.
WhatsApp 아키텍처 다이어그램
WhatsApp을 완전히 이해하는 가장 쉬운 방법’S 아키텍처 디자인은 물론 WhatsApp 아키텍처 다이어그램을 통해.
왼쪽에서 시작하여 여러 다른 클라이언트 (모바일 및 웹 앱)가 있으며 각 고객은 대화 저장을위한 로컬 SQLITE 데이터베이스를 호스팅합니다.
클라이언트는 HTTP Websockets를 사용하여 Yaws 웹 서버에서 이미지 및 비디오와 같은 멀티미디어 데이터를 보내고 검색합니다. 그러나 보시다시피 XMPP는 실제로 해당 파일과 다른 메시지를 다른 사용자에게 보내는 데 사용됩니다.
XMPP 메시지가 전송되면 위에 묘사 된 일련의 단계를 거칩니다. 먼저 WhatsApp로 보내집니다’빔 및 freebsd에서 실행되는 S 사용자 정의 ejabberd 서버. Ejabberd 서버는 메시지를 대기열에 넣는 MNENSIA 데이터베이스 테이블에 저장합니다. 수신 사용자가 앱을 열면 소켓에 다시 연결되면 큐의 메시지가 Ejabberd 서버를 통해 라우팅되어 수신자에게 전달됩니다. 성공적인 전달이 확인되면 MNENSIA 데이터베이스에서 메시지가 삭제됩니다.
결론
우리가하지 않는 동안’whatsapp의 정확한 사양을 알고 있습니다’기술 아키텍처 및 시스템 설계, WhatsApp가 사용하는 기술을 기반으로 좋은 아이디어를 얻을 수 있습니다. WhatsApp Architecture Design을 탐구하는이 기사가 당신의 불타는 질문에 대답하기를 바랍니다. 이제 WhatsApp 서버의 작동 방식에 대한 이해를 얻었으므로 WhatsApp Tech Stack의 모습을 배우고 WhatsApp 아키텍처 다이어그램을 스캔했습니다. 어쩌면 당신은 자신의 채팅 앱 프로젝트를 수행 할 수있는 힘을 느끼고 있습니다.
만약 너라면’WhatsApp에게 돈을주기 위해 RE를 제공하고 개발자 대시 보드에 가입하고 무료로 채팅 앱을 구축하기 시작하십시오.
그러나 WhatsApp Technology Stack의 많은 기술은 매우 높은 동시성을 확장하고 처리 할 수있는 능력을 위해 특별히 선택되었습니다.
만약 너라면’데이트 앱이나 원격 의료를 구축하려고 시도하는 것 (또는’t 거의 전 세계가 동시에 온라인 상태가 필요합니다.) WhatsApp의 규모가 필요하지 않을 수 있습니다.
다시 말해, WhatsApp Tech 스택은 WhatsApp에 완벽하지만 최상의 솔루션은 아닙니다. 채팅 앱을위한 이상적인 아키텍처 및 기술 스택에 대해 알아 보려면이 기사로 이동하십시오.
여전히 자신에게 적합한 것이 무엇인지에 대해 궁금한 점이 있다면, 전문가들과 자유롭게 대화하고 자신의 채팅 앱을 만들기 전에.
더 많은 것을 위해 배고프다? 다음은 다음과 같이 다룰 수있는 더 좋은 리소스입니다
- 메시징 앱에서 엔드 투 엔드 암호화의 신화
- 채팅 응용 프로그램의 아키텍처 및 시스템 설계 이해
- 11 바보 같은 실수 개발자가 채팅 애플리케이션을 구축 할 때
저자에 대해
Cosette Cressler는 SaaS, 기술, 경력, 생산성, 기업가 정신 및 자체 개발을 전문으로하는 열정적 인 콘텐츠 마케팅 담당자입니다. 그녀는주의를 사로 잡고 행동을 주도하는 일관되고 소화 가능한 콘텐츠를 만들어 모든 규모의 비즈니스를 성장시키는 데 도움이됩니다.
WhatsApp은 소켓을 사용합니다
об йтоэ странице
м е р р регистрировали подо 착취 ay rzа ф징퍼, исход 넘추 타 ay сети. с пом거나 ю это인지 страницы м주는 сможем определить, что з просы отправляете именно, а не робот. почему это могло произойти?
эта страница отобр은 Âется в тех Â сл 나아가 · 추, ∈огда автомати인지 скими системи Google регтрирр곽막우 ся 테 추 법구추 추 님. котор ое нарушают условия использования. странира перестанет отобр은 жаться после того, как эти запросы прекратся. до отого момента для использования слу 갑기 Google необ 영향.
источником запросов может служить вредоносное по, подключаемые модули браузера или скрипт, насое 밑 밑 밑보관 сзлку ыапросов. если вл используете общий доступ в интернет, проблема 갑새 갑새 딘 악 с сомпером с с с с с саким 테 IP-адесом → Â 궤. обратитесь к своему системному администратору. подроб 변태.
проверка по слову может татак뿐 아니라 자기 появляться, если вы В 갑 갑격적 В Â водите слож ные запросы, об협 ораспронон혁 ™ rапротототототототото술도 있습니다. емами, или вводите запросы очень часто.
XMPP vs WebSocket- 응용 프로그램에 사용해야합니다?
반응이 좋고 고도로 기능이 풍부한 인스턴트 메시징 (IM) 앱을 처음부터 구축하는 동안 목표는 가장 중요합니다. 가장 중요한 부분은 다음과 같습니다. 제공된 선택 (둘 다)은 몇 분 안에 설명됩니다.
명확하게 말하면, 우리는이 게시물을 통해 XMPP 프로토콜 대 WebSocket에 대한 상당한 지식을 가져 오려고 노력했습니다. 독특한 기능과 시설로 알려진이 두 IM 프로토콜은 우리가 제 시간에 앞으로 나아갈 때 즉각적인 의사 소통을위한 경로를 닦을 수 있습니다. 그러나, 그것은’쉬운 하나는 뚜렷한 장점과 한계가 있기 때문에 선택하기 쉽지 않습니다.
학습 목표
최신 뉴스를 구독하십시오
Mukhaddin Beshkov
검증 된 전문가
20 년 이상 시스템 엔지니어링, 보안 분석, 솔루션 아키텍처의 전문 지식. OS (Windows, Linux, UNIX), 프로그래밍 (C ++, Python, HTML/CSS/JS, Bash), DB (MySQL, Oracle, MongoDB, PostgreSQL)에 능숙합니다. 스크립팅 (PowerShell, Python), DevOps (마이크로 서비스, 컨테이너, CI/CD), 웹 개발 (노드.JS, 반응, 각도). IT 시스템 관리에서 성공적인 실적.
정의
XMPP- 프로토콜에 관한 모든 것
XML Fragment Exchange B/W에 사용되는 서버-클리어 듀오 인 XMPP는 통신에 관한 초기 개방형 표준 프로토콜 중 하나입니다. 20 년이 넘는 오랜 역사를 가지고 있습니다. 효과적인 구현은 적절한 전송 결합의 필수 사용을 요구합니다.
OSI 모델에서 XMPP는 주로 구조 패턴 XML (해당 부품 또는 구문)을 자세히 설명하는 응용 프로그램 계층에서 기능합니다. 변속기/릴레이의 경우 전송 레이어가 필요합니다’ 프로토콜’ (HTTP 또는 TCP) 도움.
이자형엑스긴장된 중에세팅 및 피재현 피주로 Rotocol은 채팅 애플리케이션, 음성/화상 통화와 같은 시설을 사용한 응용 프로그램, 텍스트/리치 미디어의 즉시 전송 및 다중 부위 화상 통화와 관련된 개발에 사용됩니다.
프로
XMPP를 사용하면 IM 앱을 개발하는 동안 즐길 수있는 여러 가지 이점이 있습니다. 예를 들어:
- 사이버 보안 기능은 디지털 세계의 주요 위험을 유지하기에 충분히 발전되어 있습니다.
- 분산 아키텍처는 모든 사람이 접근 할 수 있도록합니다.
- 제공되는 기술 지원은 신뢰할 수 있고 효과적입니다.
- 유연하고 최종 사용자가 프로젝트의 필요에 따라 데이터 전송 프로세스를 변경할 수 있습니다.
- 영구적 인 (지속적인) 연결을 설정하는 데 도움이됩니다.
- 다양한 아키텍처가 데이터를 전송할 수 있도록하여 통신 B/W 서버를 단순화합니다.
- 그것은 최종 사용자의 존재를 향해 즉시 반응합니다. 따라서, 당신’최종 사용자가 온라인 또는 오프라인 상태인지 확인할 수 있습니다.
단점
XMPP가 여러 가지 이점을 렌더링하더라도 완벽한 것은 아닙니다. 이 프로토콜의 확실한 단점 또는 단점이 있습니다.
- QOS 메커니즘이 부족합니다
- 텍스트 기반 XML 스트리밍 또는 통신은 운영 오버 헤드를 증가시킵니다
- 컨텐츠 전송은 종종 동기화없이 발생합니다
- 때로는 존재 및/또는 즉각적인 메시지가 서버 과부하를 유발할 수 있습니다
WebSocket- 프로토콜에 관한 모든 것
그것’S 현대 시대의 IM 프로토콜, 이진 및 텍스트 데이터를 허용합니다’모든 영구 채널에서 서버-클라이언트에 대한 s-and-fro flow.
그것’S 비록, 전이중 및 상태에서. 그것’지속적인 연결이 필요한 모바일 앱에 주로 사용됩니다. 트랜스트중인 데이터의 본질과 유형을 정의하는 것과는 아무런 관련이 없습니다. 채팅 앱에서 IM 기능을 완전히 구현하려면 다른 프로토콜의 지원이 필요합니다.
프로
WebSocket은 데이터 전송에서 생성 된 HTTP 기반 기술의 격차를 메우도록 설계되었습니다. 시간이 지남에 따라, 그것은 이것보다 더 많은 것으로 관찰되었습니다. Websockets로 즐길 수있는 주요 이점을 살펴보십시오.
- 서버 나 클라이언트가 중지하지 않으면 통신을 계속합니다
- 속도와 관련하여 WebSocket과 일치하는 것은 거의 없습니다. Ajax 및 HTTP보다 데이터를 더 빨리 전송할 수 있습니다
- 원점 서버간에 데이터 전송을 가능하게 할 수 있습니다
- 모바일, 웹 및 데스크탑과 같은 여러 종류의 플랫폼과 호환됩니다
- Websockets를 사용하면 2 바이트 비용만으로는 비용 효율적입니다
- 긴 폴링 문제를 효과적으로 수정합니다
단점
이점에도 불구하고 WebSocket은 주목할만한 잠재적 인 단점이 있습니다. 예를 들어:
- 완전히 HTML 5 호환 브라우저를 받았을 때만 작동합니다
- Ajax와 같은 성공 메커니즘이 부족합니다
- 중개자 나 가장자리는 캐싱 할 수 없습니다
- WebSocket이 작동 할 때 개발자는 가장 간단한 HTTP 상태조차 구현하는 데 어려움을 겪게됩니다
프로토콜 비교
이 두 프로토콜의 기본 의미를 더 깊이 이해 한 후’세부 XMPP V/S WebSocket 비교로 이동할 시간. 우리는 측면에 관한 몇 가지를 손으로 뽑은 다음이 두 가지의 제품을 비교했습니다.
이 두 프로토콜에 대한 간단한 보안 평가는 무담보 프로토콜을 사용하면 모든 것이 위험에 처하게되므로. XMPP. 보안 요구 사항이 변경됨에 따라 프로토콜은 보안 프론트를 향상시킵니다. 다양한 보안 계층과 기능이 제공됩니다.
XMPP가 활성화되면 개인 정체성은 강제적입니다. 스푸핑 위험을 피하기 위해 의사 소통의 일부가되기 전에 메시지와 호스트를 인증해야합니다. 스팸 위협을 통제하기에 충분했지만,
XMPP는 심지어 최종 사용자가 시간의 필요에 따라 보안 계층을 추가 할 수 있습니다.
암호화와 관련하여 XMPP는 두 가지 유형을 제공합니다. 첫 번째 암호화는 연결이 설정되고 인증이 시작될 때 발생합니다. 이 암호화는 SASL로 완료됩니다. 연결이 성공적으로 구축되면 클라이언트-서버 통신은 TLS 암호화로 지원됩니다.
WebSocket 인 경우’S 보안 오퍼링은 신중하게 검사되며 약간의 개선이 필요하다는 것을 알 수 있습니다. 그것’매우 젊은 프로토콜이며 XMPP가 제공하는 것과 일치하도록 더 많은 개선 및 업그레이드가 필요합니다. 그러나 그것은 그렇습니다’t는 보안이 부족하다는 것을 의미합니다. 그것은 악의적 인 침입을 막을만큼 강한 암호화를 제공합니다.
XMPP의 핵심 운영 아키텍처는 분산되어 있으며 Websockets는 중앙 집중식 아키텍처를 따릅니다. XMPP는 클라이언트 서버 모델을 기반으로하며 클라이언트 간의 직접적인 상호 작용을 방지합니다. WebSockets는 API의 도움을 받아 클라이언트와 서버가 지속적으로 통신하고 있는지 확인합니다.
- 다른 프로토콜과의 호환성
XMPP는 원시 프로토콜이며 API 호환성이 부족합니다. 반면에 WebSocket은 API 최적화되어 있으며 이는 다른 프로토콜과 더 나은 호환성의 핵심입니다.
- 이진 데이터 보내기 및 수신
WebSockets에서 커뮤니케이션에는 코드 및 메시지 사용이 포함되어 있으며, 사용자가 구문 분석 및 버퍼링 문제의 문제로부터 사용자를 자유롭게 설정하는 것과 관련이 있습니다. 이렇게하면 데이터 전송이 빠르게됩니다. XMPP는 이진 데이터 전송을위한 매우 얇은 경로를 따릅니다.
WebSocket은 전송 계층을 처리합니다’s Extensibility, XMPP는 애플리케이션 계층과 관련이 있습니다’s 확장 성. 그것’s websockets를 통해 40 개 이상의 프로토콜을 추가 할 수 있습니다. 그러나 XMPP는 ISN입니다’그 유연성.
둘 다 타오르는 속도로 실시간으로 데이터를 전송하는 데 유용하지만 WebSocket은 중앙 집중화 된 특성과 지속적인 커뮤니케이션으로 인해이 전선에서 XMPP를 능가합니다. XMPP Force 인증 및 서버와 클라이언트의 승인 및 승인은 성능을 약간 느리게합니다.
XMPP 및 WebSocket을 사용하는 예
XMPP는 WhatsApp, Gtalk 및 Grindr 응용 프로그램에 사용되며 채팅 기능에 내장. 구체적으로, 프로토콜은 주로 일대일 보안 또는 그룹 기반 커뮤니케이션이 앱의 주요 기능인 경우에 주로 선호됩니다.
Trello, Slack 및 Discord. 아시다시피, 이러한 응용 프로그램은 팀과 원격 근로자를위한 것입니다. 결론적으로, 프로토콜은 지속적인 연결을 사용하므로 제한된 가상 작업 공간에 더 유용합니다.
결론 – 사용 할 프로토콜?
WebSocket 및 XMPP- 둘 다 인스턴트 메시징을 위해 설계되었습니다. 그러나 선택해야 할 것은 프로젝트 요구 사항을 맥락으로 가져간 후에 답변해야 할 질문입니다. 우리의 이해가 진행되는 한, 많은 데이터를 전송해야 할 때 Websockets를 사용하는 것이 좋습니다. 커뮤니케이션은 계속 열려 있어야합니다.
XMPP는 개발이 필요할 때 가장 적합한 선택입니다. 수많은 플러그인이 필요하며 보안은 최고 수준이어야합니다. 따라서이 둘 중에서 선택하기 전에 개발 목표가 정확히 무엇인지 알아야합니다. 미리 해결 한 다음 그에 따라 프로토콜을 선택하십시오. 그러나 한 가지는 올바르게 사용하면 두 가지 모두 PAR 성능을 제공 할 것입니다.
자주하는 질문
XMPP는 무엇에 사용됩니까??
XMPP (Extensible Messaging and Presence Protocol)는 인스턴트 메시징, 음성 및 화상 채팅 및 존재 정보와 같은 실시간 커뮤니케이션에 사용됩니다.
WebSocket은 무엇에 좋은가?
WebSocket은 온라인 게임, 채팅 애플리케이션 및 금융 거래 플랫폼과 같은 실시간 웹 응용 프로그램에 적합합니다.
XMPP를 WebSocket과 함께 사용할 수 있습니다?
예, XMPP는 WebSocket과 함께 사용하여 실시간 통신 애플리케이션을 향상시킬 수 있습니다.
XMPP보다 WebSocket의 장점은 무엇입니까??
WebSocket은 대기 시간이 낮고 성능이 향상되며 XMPP보다 구현하기가 더 쉽습니다.
WebSocket을 파일 전송에 사용할 수 있습니다?
공식 사양에 따르면 WebSocket은 파일 전송을 위해 설계되지 않았습니다. 그러나 일부 개발자는 파일 전송에 WebSocket을 사용하는 방법을 찾았습니다. Github 저장소