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이란 용어를 사용함
- MySQL, Memcached, Redis 3개의 데이터베이스 그룹으로 인스턴스를 운영
- SPA 기술 적용: jQuery와 Batman.js
- AWS S3
- 제품 이미지, 테마(쇼핑몰 디자인 파일)
- 오브젝트 스토리지를 사용하며 파일트리 시각화 도구로 화면 표시
- 오브젝트 스토리지 파티션 이슈 발생(참고)
2005년
- 멀티 테넌트 아키텍처
- MySQL 상점별 데이터베이스 분리 및 샤딩
- 단, Memcached, Redis는 싱글 테넌트 아키텍처
2004년
- 싱글 테넌트 아키텍처
- MySQL 단일 인스턴스
- Ruby on Rails 1.0
초기
참고 자료
기술 문화(Tech Culture)
2018 - 조직 문화를 꾸준하게 유지
- Director of Engineering, Lawrence Mandel Talks Road to Leadership, Growth, and Finding Balance.
- 2016년에 언급한 Production Engineering 조직이 아직 존재하며, 외국은 조직 이름이 중요한게 아닌 문화를 이해합니다.
- Bug Bounty Year in Review 2018
- 취약점 신고 포상제를 운영하고 있습니다.
2017 - 조직 문화를 장려
- Tell Your Stories: The Benefits of Strategic Engineering Communications
- 작업한 일을 알려서 중복 개발이나 실수를 방지하고 더 좋은 개발 환경을 만들기 위한 노력들입니다.
- 2016년 인프라 개선에는 조직 문화도 중요함을 이해하고 노력하였으며 외부 발표도 장려했습니다.
2016 - 조직에 적합한 문화을 연구하여 결정 - 프로덕션 엔지니어링!
- Why Shopify Moved to The Production Engineering Model
- DevOps → Facebook Production Engineering (PE) vs. Google Site Reliability Engineering (SRE)
- Production Engineering (프로덕션 엔지니어링)!
- 소프트웨어 엔지니어링 + 시스템 엔지니어링입니다.
- 서비스를 이해하여 디버깅이 가능하면서 전반적인 시스템 수정이 가능한 팀입니다.
- DevOps → Facebook Production Engineering (PE) vs. Google Site Reliability Engineering (SRE)
아키텍처(Architecture)
2018 - Google Cloud 기반으로 인프라 전환
- Shopify Engineering Blog
- Iterating Towards a More Scalable Ingress
- A Pods Architecture To Allow Shopify To Scale
- Future Proofing Our Cloud Storage Usage
- 디자인 템플릿 파일도 S3를 사용합니다.
- 오브젝트 스토리지 파일을 파일트리 형태로 표시하기 위해 Dagre Interactive 사용합니다.
- 디자인 템플릿 파일도 S3를 사용합니다.
- Shopify’s Infrastructure Collaboration with Google
- Shopify 인프라 종착지는 Google Cloud!
- Shop Mover라는 마이그레이션 툴로 평균 다운타임 2.5초로 쇼핑몰 이전합니다.
- Shopify Chooses Google Cloud Service Over Amazon
- Shopify partners with Google Cloud for back-end infrastructure
- E-Commerce at Scale: Inside Shopify’s Tech Stack - Stackshare.io
- Iterating Towards a More Scalable Ingress
- Percona Live 2018
- SRECON 2018 Americas program
- SRECON 2018 Asia program
- Shopify’s Move from the Data Centre to the Cloud
- 구글 클라우드 아키텍처를 소개합니다.
- Shopify’s Move from the Data Centre to the Cloud
- SRECON 2018 Europe program
- Shopify Engineering Blog
2017 - 클라우드 기반 준비
- Shopify Engineering Blog
- GitHub Satellite 2017
- SRECON 2017 Americas program
- SRECON 2017 Asia program
- SRECON 2017 Europe program
2016 - 분산 처리를 연구하며 컨테이너 운영 고도화
- Flash Sale의 악몽! (Kylie Jenner Is Sorry Her Lip Kits Broke the Internet)
- SRECON 2016 Europe program
- Scaling Shopify’s Multi-Tenant Architecture across Multiple Datacenters
- 멀티 테넌트 아키텍처를 소개합니다.
- 장애 시 백업 서버를 바로 라이브 서버로 사용이 가능한 전략이 좋네요.
- Extreme OS Kernel Testing
- Scaling Shopify’s Multi-Tenant Architecture across Multiple Datacenters
- RailsConf 2016
- GraphQL Summit 2016
- Shopify Engineering Blog
2015 - 컨테이너 운영 경험 쌓기
2014 - 도커의 시작
2013 - AWS S3 사용
마무리
결국은 퍼블릭 클라우드를 사용하네요.그리고 수정해야 될 부분이나 추가적으로 알고 있는 부분이 있다면 알려주세요.