Shopify 아키텍처의 진화

Shopify(쇼피파이)가 성장에 대응하기 위해 기술적으로 발생한 이슈와 선택한 기술을 공식 발표 자료를 조사하여 정리한 글입니다.


Shopify(쇼피파이)가 성장에 대응하기 위해 기술적으로 발생한 이슈와 선택한 기술을 공식 발표 자료를 조사하여 정리한 글입니다.

2013년~2018년 기간의 공식 발표 자료를 조사한 결과물이며, 잘못되거나 누락된 정보가 있을 수 있음을 인지하고 읽어주세요.

목차


요약

쇼피파이는 마이크로서비스 아키텍처(MSA)가 아니라고 말합니다. 하지만 일부 기능이 도메인별로 분리되어 있고 이를 관리/추적하기 위한 ServicesDB 자체 도구를 만들어 도메인별 이슈를 해결하고 있습니다.

모놀리식 아키텍처로 단위 테스트가 약 10만건이며 ORM 의존도가 높아서 CI에 많은 시간과 리소스가 투입되고 있는데, 효율화를 위해 배포 도구로 Shipit를 사용하며 소스 병합은 Merge Queue 라는 개념을 추가했습니다.

쇼피파이에게 배울 점 3가지는 아래와 같습니다.
  • 유행하는 기술 문화가 아닌 “DevOps vs SRE vs PE” 분석 후 자사에 적합한 PE를 선택
  • DB Connection Pool 이슈를 해결하기 위한 방법으로 GraphQL과 GCP MySQL 순으로 순차 적용
  • 클라우드 환경이 아닌 상태에서 백업 서버가 즉시 프로덕션 서버로 전환될 수 있는 환경 구축

2018년



  • 모놀리식 아키텍처를 인프라만 Kubernetes로 전환
    • MySQL도 자체 데이터센터에서 구글 클라우드 서비스로 전환
    • 쇼핑몰 별 분산 처리 관리 비용이 늘어나자 해결 방안으로 구글 클라우드를 선택

2017년

  • 여전한 모놀리식 아키텍처
  • SPA 기술 변화: React와 TypeScript로 전환

2016년



  • 멀티 데이터센터 아키텍처
    • 운영 서버에 이슈가 발생하면 재해 복구 서버로 우회하도록 처리
      • 여기서 쇼피파이는 Mult DC Podding이란 용어를 사용함
  • SPA 기술 변화: 정적 HTML 페이지 및 VanillaJS 사용
  • GraphQL 적용 추측
    • GraphQL 발표가 2015년이고 쇼피파이의 GraphQL 발표가 2016년에 있는 것으로 보아서 추측

2015년



  • 재해 복구를 위한 백업 데이터 센터 운영

2013/2014



  • Memcached, Redis도 멀티 테넌트 아키텍처를 적용하면서 데이터베이스 격리 작업
    • MySQL, Memcached, Redis 3개의 데이터베이스 그룹으로 인스턴스를 운영
      • 여기서 데이터베이스 그룹을 쇼피파이는 pod이란 용어를 사용함
  • SPA 기술 적용: jQuery와 Batman.js
  • AWS S3
    • 제품 이미지, 테마(쇼핑몰 디자인 파일)
    • 오브젝트 스토리지를 사용하며 파일트리 시각화 도구로 화면 표시
    • 오브젝트 스토리지 파티션 이슈 발생(참고)

2005년

  • 멀티 테넌트 아키텍처
    • MySQL 상점별 데이터베이스 분리 및 샤딩
  • 단, Memcached, Redis는 싱글 테넌트 아키텍처

2004년

  • 싱글 테넌트 아키텍처
    • MySQL 단일 인스턴스
  • Ruby on Rails 1.0

초기




참고 자료

기술 문화(Tech Culture)

2018 - 조직 문화를 꾸준하게 유지

2017 - 조직 문화를 장려

2016 - 조직에 적합한 문화을 연구하여 결정 - 프로덕션 엔지니어링!

  • Why Shopify Moved to The Production Engineering Model
    • DevOps → Facebook Production Engineering (PE) vs. Google Site Reliability Engineering (SRE)
      • Production Engineering (프로덕션 엔지니어링)!
      • 소프트웨어 엔지니어링 + 시스템 엔지니어링입니다.
      • 서비스를 이해하여 디버깅이 가능하면서 전반적인 시스템 수정이 가능한 팀입니다.

아키텍처(Architecture)

2018 - Google Cloud 기반으로 인프라 전환

2017 - 클라우드 기반 준비

2016 - 분산 처리를 연구하며 컨테이너 운영 고도화

2015 - 컨테이너 운영 경험 쌓기

2014 - 도커의 시작

2013 - AWS S3 사용

마무리

결국은 퍼블릭 클라우드를 사용하네요.
그리고 수정해야 될 부분이나 추가적으로 알고 있는 부분이 있다면 알려주세요.

대화 참여하기

댓글 쓰기