developer tip

wechat, whatsapp 및 기타 메신저 앱의 기술은 무엇입니까?

copycodes 2020. 11. 20. 09:05
반응형

wechat, whatsapp 및 기타 메신저 앱의 기술은 무엇입니까?


다양한 실시간 메신저 앱의 아키텍처에 대해 알고 싶습니다. 일반적인 프로토콜 / 아키텍처를 사용하고 있습니까?


Facebook에서 190 억 달러에 구매 한 WhatsApp 아키텍처 는 whatsapp 디자인에 관련된 아키텍처를 설명합니다.

다음은 링크의 일반적인 설명입니다.

  • WhatsApp 서버는 Erlang에서 거의 완벽하게 구현됩니다.

  • 백엔드 메시지 라우팅을 수행하는 서버 시스템은 Erlang에서 수행됩니다.

  • 매우 작은 서버 풋 프린트로 활성 사용자 수를 관리 할 수 ​​있다는 것이 큰 성과입니다. 팀의 합의는 주로 Erlang 때문이라는 것입니다.

  • 흥미롭게도 Facebook Chat은 2009 년 Erlang으로 작성되었지만 자격을 갖춘 프로그래머를 찾기가 어려웠 기 때문에 사용하지 않았습니다.

  • WhatsApp 서버가 ejabberd에서 시작되었습니다.

  • Ejabberd는 Erlang으로 작성된 유명한 오픈 소스 Jabber 서버입니다.

  • 처음에는 개방적이기 때문에 선택되었고, 개발자들의 좋은 평가를 받았으며, 시작하기 쉬웠으며, 대규모 통신 시스템에 대한 Erlang의 장기적 적합성에 대한 약속이있었습니다.

  • 그 후 몇 년 동안 XMPP에서 내부 개발 프로토콜로의 전환, 코드 기반 재구성 및 일부 핵심 구성 요소 재 설계, 서버 성능 최적화를 위해 Erlang VM에 대한 많은 중요한 수정 작업을 포함하여 ejabberd의 상당 부분을 다시 작성하고 수정하는 데 소요되었습니다. .

  • 하루에 500 억 개의 메시지를 처리하기 위해 작동하는 안정적인 시스템을 만드는 데 중점을 둡니다. 수익 창출은 나중에 살펴볼 사항이며 훨씬 먼 길에 있습니다.

  • 시스템 상태의 기본 게이지는 메시지 큐 길이입니다. 노드에있는 모든 프로세스의 메시지 큐 길이는 지속적으로 모니터링되며 사전 설정된 임계 값을 초과하여 백 로그가 누적되면 경고가 전송됩니다. 경고를받은 하나 이상의 프로세스가 뒤쳐지면 공격에 대한 다음 병목 지점에 대한 포인터를 제공합니다.

  • 멀티미디어 메시지는 HTTP 서버로 보낼 이미지, 오디오 또는 비디오를 업로드 한 다음 Base64 인코딩 썸네일 (해당되는 경우)과 함께 콘텐츠에 대한 링크를 전송하여 전송됩니다.

  • 일부 코드는 일반적으로 매일 푸시됩니다. 일반적으로 트래픽이 가장 많은 시간은 피하지만 하루에 여러 번 발생하는 경우가 많습니다. Erlang은 수정 및 기능을 프로덕션에 적극적으로 적용하는 데 도움이됩니다. 핫 로딩은 재시작이나 트래픽 이동없이 업데이트를 푸시 할 수 있음을 의미합니다. 실수는 일반적으로 핫 로딩을 통해 매우 빠르게 취소 할 수 있습니다. 시스템은 훨씬 느슨하게 결합되어 변경 사항을 점진적으로 롤아웃하기가 매우 쉽습니다.

  • Whatsapp 앱에서 사용되는 프로토콜은 무엇입니까? WhatsApp 서버 풀에 대한 SSL 소켓. 모든 메시지는 클라이언트가 메시지를 검색하기 위해 다시 연결할 때까지 서버에 대기합니다. 성공적인 메시지 검색은 whatsapp 서버로 다시 전송되어이 상태를 원래 보낸 사람에게 다시 전달합니다 (메시지 옆에 "확인 표시"아이콘으로 표시됨). 클라이언트가 메시지를 수락하는 즉시 서버 메모리에서 메시지가 지워집니다.

  • Whatsapp에서 등록 프로세스는 내부적으로 어떻게 작동합니까? WhatsApp은 전화 IMEI 번호를 기반으로 사용자 이름 / 비밀번호를 생성하는 데 사용되었습니다. 이것은 최근에 변경되었습니다. WhatsApp은 이제 앱의 일반 요청을 사용하여 고유 한 5 자리 PIN을 보냅니다. 그러면 WhatsApp이 지정된 전화 번호로 SMS를 보냅니다 (이는 WhatsApp 클라이언트가 더 이상 동일한 전화에서 실행될 필요가 없음을 의미합니다). 핀 번호에 따라 앱은 WhatsApp에서 고유 키를 요청합니다. 이 키는 향후 모든 호출에 대해 "비밀번호"로 사용됩니다. (이 "영구"키는 장치에 저장됩니다). 이는 또한 새 장치를 등록하면 이전 장치의 키가 무효화됨을 의미합니다.


WhatsApp은 오류를 견디도록 설계된 확장 가능한 응용 프로그램을 작성하기 위해 만들어진 언어 인 Erlang을 선택했습니다. Erlang은 동시성을 위해 Actor 모델이라는 추상화를 사용합니다-http: //en.wikipedia.org/wiki/Actor_(programming_language)보다 전통적인 공유 메모리 접근 방식 대신 액터는 서로 메시지를 보내 통신합니다. 스레드와 다른 액터는 경량으로 설계되었습니다. 액터는 동일한 머신 또는 다른 머신에있을 수 있으며 메시지 전달 추상화는 둘 다에 대해 작동합니다. WhatsApp의 간단한 구현은 다음과 같습니다. 각 사용자 / 장치는 행위자로 표시됩니다. 이 행위자는 사용자의받은 편지함, 디스크에 직렬화되는 방법, 사용자가 보내는 메시지 및 사용자가받는 메시지를 처리합니다. Alice와 Bob이 WhatsApp의 친구라고 가정 해 보겠습니다. 그래서 앨리스 배우와 밥 배우가 있습니다.

앞뒤로 흐르는 일련의 메시지를 추적 해 보겠습니다.

Alice는 Bob에게 메시지를 보내기로 결정합니다. Alice의 전화는 WhatsApp 서버에 대한 연결을 설정하고이 연결은 확실히 Alice의 전화에서 온 것으로 설정됩니다. Alice는 이제 TCP를 통해 다음 메시지를 보냅니다. "For Bob : 거대한 괴물이 금문교를 공격하고 있습니다." WhatsApp 프런트 엔드 서버 중 하나가이 메시지를 역 직렬화하고이 메시지를 Alice라는 행위자에게 전달합니다.

배우 앨리스는 이것을 직렬화하여 "Alice 's Sent Messages"라는 파일에 저장하기로 결정합니다.이 파일은 예측할 수없는 괴물 난동으로 인한 데이터 손실을 방지하기 위해 복제 된 파일 시스템에 저장됩니다. 배우 앨리스는 "Alice from Alice : A giant monster is attacking the Golden Gate Bridge"메시지를 전달하여이 메시지를 배우 밥에게 전달하기로 결정합니다. 배우가 메시지 수신을 승인 할 때까지 배우 앨리스는 지수 백오 프로 재 시도 할 수 있습니다.

배우 인 Bob은 결국 (2)로부터 메시지를 받고 "Bob 's Inbox"라는 파일에이 메시지를 저장하기로 결정합니다. Bob이이 메시지를 영구적으로 저장하면 액터는 "I received Msg1"이라는 메시지를 액터에게 Alice에게 보냄으로써 메시지 수신을 확인합니다. 배우 앨리스는 이제 재 시도를 멈출 수 있습니다. 그런 다음 배우 Bob은 Bob의 전화가 서버에 활성 연결되어 있는지 확인합니다. 그렇게해서 행위자 Bob은 TCP를 통해이 메시지를 장치로 스트리밍합니다.

Bob은이 메시지를보고 "For Alice : 그들과 싸울 거대한 로봇을 만들자"라고 답합니다. 이것은 이제 1 단계에 설명 된대로 배우 인 Bob에 의해 수신됩니다. 배우 인 Bob은 2 단계와 3 단계를 반복하여 Alice가 결국 인류를 구할 아이디어를 받도록합니다.

WhatsApp은 실제로 위에서 설명한 매우 우수한 프로토콜 대신 XMPP 프로토콜을 사용하지만 요점을 알 수 있습니다.


내가 아는 한 Ejabberd ( http://www.ejabberd.im/ )는 부모이며 이것은 오픈 소스의 상당히 좋은 기능을 제공하는 XMPP 서버이며 Whatsapp은 일부 수정 된 버전을 사용하며 페이스 북 메시징은 이. 삼성의 ChatOn, Nimbuzz 메신저와 같은 더 많은 채팅 응용 프로그램은 모두 ejabberd 기반의 메신저를 사용하며 Erlang 솔루션은 확장 성이 뛰어나고 성능 향상으로 잘 테스트되고 MongooseIM으로 이름이 변경된이 ejabberd의 수정 된 버전도 있습니다.

Ejabberd는 다른 서버와 비교할 때 대부분의 기능이 구현 된 서버입니다. Erlang으로 빌드 되었기 때문에 수평 적으로 확장 성이 뛰어납니다.

참고URL : https://stackoverflow.com/questions/19640703/what-is-the-technology-behind-wechat-whatsapp-and-other-messenger-apps

반응형