Snapchat은 트윈과 십대 사이에서 잘 알려져 있습니다. 그것이 어떻게 작동하는지 이해할 수 없다면 아마도 25세 이상일 것입니다. 가장 인기 있는 소셜 미디어 응용 프로그램 중 하나인 Snapchat은 어린이와 청소년이 원하는 것을 정확하게 제공합니다. 일상적인 일을 공유하는 동시에 멋지게 보이도록 하는 쉬운 방법입니다.
당신이 하는 모든 것을 기록하고 게시하는 Facebook 및 Twitter와 달리 Snapchat은 사라질 것으로 예상되는 메시지를 사용합니다(그렇지 않은 방법 참조).
Snapchat에는 많은 것이 있으며 개발자라면 훨씬 더 많습니다. 따라서 이 게시물은 Snapchat에 대한 높은 수준의 관점을 제공합니다. 시스템 디자인 그리고 훨씬 더 많은 인사이트.
개요
Snapchat은 미국 기반 소셜 네트워킹 사용자가 즉시 연결하고 이미지를 공유하는 등의 작업을 수행할 수 있는 앱입니다.
- 메시지 및 이미지(또는 스냅)에는 24시간 제한이 있습니다. 사람들이 그룹에서 자신의 이야기를 공유하도록 권장합니다.
- Snap Map을 사용하면 친구가 있는 위치를 지도에서 볼 수 있습니다.
- 추억은 XNUMX년 후에 저장하거나 공유한 사진을 사용자에게 상기시킵니다.
- Snapchat은 젊은 세대, 특히 십대들에게 매우 인기가 있습니다. 앱에는 319억 5.4만 명의 활성 사용자가 있으며 매일 XNUMX억 개의 스냅이 전송됩니다.
중요한 설계 용어
모놀리식 아키텍처 – 다른 애플리케이션과 독립적으로 작동하는 단일 계층 애플리케이션을 모놀리식(모놀리식 아키텍처)이라고 합니다. 모놀리스는 작업을 완료하는 데 필요한 모든 활동을 수행하고 처리하도록 설계되었습니다. 응용 프로그램은 처음부터 끝까지 모든 기능을 수행합니다.
마이크로 서비스 - 모노리스와 정반대입니다. 마이크로 서비스 애플리케이션을 서비스 모음으로 구성하는 아키텍처 접근 방식입니다. 이러한 서비스는 응용 프로그램의 여러 측면을 제어하는 데 사용됩니다. 손님이 주문하면 웨이터가 가져다가 셰프가 준비한다. 이 예에서 각 구성 요소는 다른 구성 요소와 독립적으로 별도로 작동합니다. 아무도 다른 사람들이 무엇을 하는지 정확히 알지 못하며 아무도 동일한 정보에 액세스할 수 없습니다.
JSON: JavaScript 개체, 리터럴, 배열 및 데이터를 표시하는 데 사용할 수 있는 텍스트 기반 형식입니다. 이 텍스트 기반 형식은 읽고 쓰기가 간편할 뿐만 아니라 소프트웨어에서 소화할 수 있도록 만들어졌습니다. JSON은 일반적으로 서버와 온라인 애플리케이션 간에 데이터와 정보를 전송하는 데 사용됩니다.
오케스트레이션: 많은 작업을 자동화하는 기술을 오케스트레이션이라고 합니다. 이러한 작업에는 컴퓨터 시스템 및 소프트웨어 구성, 조정 및 관리가 포함됩니다.
대리: 프록시는 리소스를 찾는 클라이언트와 리소스를 제공하는 서버 사이에서 중개자 역할을 합니다.
망사: 서비스 메시는 프록시를 통해 서비스 간에 규제되고 관찰 가능하며 안전한 통신을 허용하기 위해 인프라 계층에 계층을 추가하는 소프트웨어 아키텍처 패턴입니다.
고급 디자인
모놀리식 문제
Snapchat은 Google App Engine을 기반으로 하는 클라우드 기반 모놀리식으로 시작되었습니다. 하지만 프로그램의 인기가 높아지고 사용자와 데이터가 늘어나면서 확장성이 문제가 되었습니다.
또한 모놀리스 내의 거대한 폭발 반경으로 인해 시스템 전체에 교란이 발생할 가능성이 더 커졌습니다. Snapchat의 문제 중 하나는 리소스에 대한 액세스를 위해 기능이 경쟁하는 "공유지의 비극"으로 정의되었습니다. 기능은 앱 시작 시 로드되어 특정 기능은 더 빨리 로드되지만 다른 기능은 더 느리게 로드되었습니다.
또한 엔지니어는 서비스가 유연하고 효율적일 수 있도록 개발 관점에서 구성 요소의 명확한 가시성, 분리 및 소유권을 추구했습니다.
변환
Snapchat이 확장됨에 따라 회사는 모놀리식 인프라를 더 작고 효율적인 조각으로 분해해야 한다는 것을 깨달았습니다. 대기 시간을 줄이기 위해 조직은 마이크로서비스 기반 디자인을 개발하기로 결정했습니다.
이러한 목표를 달성하기 위해 Snapchat은 확장 가능한 NoSQL 데이터베이스 서비스인 Amazon DynamoDB를 사용하여 소프트웨어를 업데이트하기로 결정했습니다. 이 회사는 이러한 노력의 결과 대기 시간 중앙값을 20%까지 줄일 수 있었습니다.
이 앱은 회사에서 수많은 작은 애플리케이션으로 재작성되었습니다. Snapchat은 카메라, 채팅, 메모리, 사진 편집, 콘텐츠 소비, 지도 등 수많은 애플리케이션으로 시작되었습니다. 이러한 프로그램을 단일 모놀리스로 통합하는 것은 소비자에게 편리하지만 좋은 성능을 유지하는 측면에서 심각한 기술적 문제를 제기했습니다.
재 작성을 위해 회사는 많은 기본 규칙을 설정했습니다. 미리 로드하지 마십시오. 각 기능은 자체 앱이어야 하며 속도가 빨라야 합니다. Snapchat은 재작성을 가능하게 하기 위해 여러 곳에서 수정을 중단하여 엄격히 기술적인 작업으로 만들었습니다.
추가 기능 통합
Snapchat의 카메라 앱에는 무엇보다도 렌즈, 필터, 비트모지 및 증강 현실 애니메이션을 추가하는 기능이 있습니다. Snapchat의 채팅 앱을 통해 사용자는 사진 저장, 대화 저장, 이모티콘 추가 등을 할 수 있습니다.
무엇보다도 Snapchat의 지도를 사용하면 원하는 경우 친구를 모니터링할 수 있습니다. 추억, 사진 편집 및 콘텐츠 소비는 모두 고유한 기능을 가진 별도의 Snapchat 앱입니다.
메모리를 사용하면 나중에 사용하기 위해 사진이나 비디오를 저장하거나 수정하고 업로드하거나 보낼 수 있습니다. 사용자는 사진 편집을 활용하여 필름 자르기, 텍스트 추가, 스티커 추가 등을 할 수도 있습니다.
Snapchat의 외부 콘텐츠 소비는 다양한 매개 변수를 기반으로 사용자에게 표시되는 내용을 나타냅니다.
마이크로 서비스
이 프로그램은 당시 네트워크 쿼리를 수행하기 위해 JSON에 광범위하게 의존했습니다. 그러나 JSON 구문 분석은 시간이 많이 걸리고 비효율적이었습니다. Snapchat은 중앙 집중식 네트워크 관리 API를 사용하여 이 문제를 해결하기 위한 구현 세부 사항으로 JSON 사용을 숨겼습니다.
마이크로서비스는 애플리케이션 상태 관리, 서비스 통신 및 장애 관리의 문제를 도입합니다. Snapchat은 Temporal과 같은 오픈 소스 기술을 사용하여 강력하고 신뢰할 수 있는 시스템을 구축하기 위해 오케스트레이션의 어려움을 극복했습니다.
결과적으로 조직은 서비스 메시 디자인 패턴을 사용하기로 결정했습니다. Snapchat은 프록시 역할을 하는 또 다른 오픈 소스 도구인 Envoy를 사용하여 이 패턴을 달성했습니다. Envoy는 인프라를 통한 서비스 트래픽 흐름을 관리하여 개발자에게 잠재적인 어려움에 대한 가시성을 제공합니다.
Snapchat은 서비스 메시 내에 Switchboard라는 내부 앱을 만들었습니다. Switchboard는 Snap의 서비스에 대한 제어판 역할을 하여 사용자가 트래픽을 전환하고 서비스 종속성을 관리하고(하나의 서비스가 다른 서비스의 상태에 따라 관리될 수 있도록 하는 기능) 영역을 비울 수 있도록 합니다.
서비스 내 잠재적 구성의 복잡성을 단순화하기 위해 전체 Envoy API를 노출하는 대신 Switchboard를 활용했습니다. Snap은 서비스 메시 덕분에 마이크로서비스를 위한 공통 내부 및 지역 네트워크를 보유하고 있습니다.
동일한 지역 내의 서비스는 공용 인터넷을 사용하지 않고 서로 연결할 수 있으며 외부 네트워크 트래픽은 내부 네트워크 부분과 통신할 수 없습니다.
게이트웨이만 보안상의 이유로 인터넷에 자신을 노출할 수 있는 권한이 있습니다. 예를 들어 API 게이트웨이는 클라이언트/사용자의 요청을 처리하고 네트워크와 함께 라우팅하는 정문 역할을 쉽게 할 수 있습니다.
네트워크 및 API 게이트웨이
Snapchat 클라이언트의 모든 쿼리는 API 게이트웨이를 통해 전달됩니다. 동일한 Envoy 이미지를 사용하고 내부 마이크로서비스와 동일한 컨트롤 플레인에 연결합니다. 컨트롤 플레인을 통해 맞춤형 Envoy 필터를 활성화할 수 있습니다.
Snapchat의 인증 시스템과 속도 제한 및 로드 차단 기술은 이러한 필터에 의해 처리됩니다. Envoy는 필터 체인이 완료된 후 Service Mesh를 사용하여 요청을 관련 마이크로서비스로 라우팅합니다.
결론
Snapchat의 API 게이트웨이는 외부 트래픽을 앱의 여러 기능으로 라우팅합니다. 구성 상태를 수정하려는 사용자의 요청은 서버에서 관리되며, 데이터 제공 앱의 수많은 서비스에 다시 정보를 제공합니다.
전반적으로 Snapchat의 현재 디자인은 단일 운영 체제에서 실행되는 여러 프로그램(이 경우에는 Snapchat 앱)과 비교할 수 있습니다. Snapchat 시스템 설계에 대한 높은 수준의 개요를 제공하기 위해 열심히 노력했습니다. 도움이 되었기를 바랍니다.
댓글을 남겨주세요.