Part 2
Tu Tran - Solution Architect
10/03/2021
Tu Tran + ITs team
- Chỉ ra sự lãng phí resources để serve lượng traffic hiện tại
- Thời gian deploy chậm do có quá nhiều services
- Chi phí vận hành và bảo trì infras
- Gộp chung nhiều store vào group
- Dynamic routing sử dụng Open Resty
- Inject configs thông qua headers và middleware
- Thử nghiệm với một mô hình Poc để chứng minh ý tưởng khả thi
Shopify architecture
Shopify architecture
Shopify architecture
Shopify architecture
Shopify architecture
1. Manager, store deployer
- Thêm một đối tượng group
- Thay đổi flow activate/suspend stores
2. Authorization
- Hiện tại các middleware chỉ support cho riêng từng store
- Move sang kiểu support theo từng request (context)
3. Setting container
- Hiện tại các setting-container chỉ support cho riêng từng store
- Move sang kiểu support theo từng request (context)
4. Worker, scheduler
- Tách ra service mới để độc lập giữa các service serve API và service dạng worker scheduler
5. Giao tiếp thông qua private DNS (APIs)
- Hiện tại các có 1 số service giao tiếp với nhau qua private DNS theo từng store.
- Kiến trúc mới do gộp lại nhiều store cùng nhau nên sẽ phải đổi lại cơ chế giao tiếp này
6. Heartbeat
- Cũ: Heartbeat check theo store
- Mới: Heartbeat check theo group stores
7.1 Database
- Thay thế cách connect cũ sang kiểu query theo request (context)
- Đảm bảo không thay đổi code business quá nhiều
7.2 Redis
- Sử dụng prefix cho nhiều store - Đã áp dụng
- Mỗi group có riêng 1 redis
8.1 NATS (postman)
- Internal store -> by prefix - Riêng cho mỗi group
- Cluster to store -> Old (sử dụng chung) với internal -> Cần tách ra postman riêng cho việc giao tiếp giữa cluster và store
- NATS streaming
8.2 Kafka
- Internal store -> by prefix - Đã áp dụng
9. EFK
- Mỗi group có riêng một bộ Elasticsearch + Fluentd + Kibana
- Các store tách biệt nhau bởi store ID
10. Custom themes
- Rendering-service có 1 tính năng là custom themes bằng cách sử dụng container khác nhau với các image khác nhau (code khác nhau) nên không thể gộp chung vào group.
11. Logging
- Log sdtout với prefix theo store ID
- Change log level at run time
- Thử nghiệm cơ bản kiến trúc mới với 1 số service để test flow
- Thử nghiệm implement code theo kiến trúc mới
- Đánh giá về khả năng mở rộng
Bootstrap:
- Xây dựng các packages core, libs đầy đủ và test chuẩn chỉnh
- Xây dựng tài liệu hướng dẫn cách migrate sang kiến trúc mới
Giai đoạn 1:
- Ưu tiên các store fulfillment
- Cụ thể sẽ là backoffice, sau đó đưa ra đánh giá
Giai đoạn 2:
- Sau khi backoffice đã ổn định thì sẽ migrate tiếp với storefront
Q&A