Reduce Server Cost?

Part 2

Tu Tran - Solution Architect

10/03/2021

Contributors

Tu Tran + ITs team

TOCs

  1. Review buổi trước

  2. Mục tiêu

  3. Kiến trúc mới

  4. Thử nghiệm

  5. Kế hoạch tiếp theo

Review buổi trước

Review buổi trước

Vấn đề

- 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

Review buổi trước

Giải pháp

- Gộp chung nhiều store vào group

- Dynamic routing sử dụng Open Resty

- Inject configs thông qua headers và middleware

Review buổi trước

Kết quả

- Thử nghiệm với một mô hình Poc để chứng minh ý tưởng khả thi

Mục tiêu

  1. Giảm chi phí server
  2. Giảm chi phí bảo trì server
  3. Onboard tự động
  4. Stable, maintainable, scalable
  5. Chuẩn hóa quy trình develop new features
  6. Giảm thiểu rủi ro do impact từ các tính năng mới

Kiến trúc mới

Tham khảo

Shopify architecture

Tham khảo

Shopify architecture

Tham khảo

Shopify architecture

Tham khảo

Shopify architecture

Tham khảo

Shopify architecture

Kiến trúc mới

Impact

  1. Manager, store deployer
  2. Authorization
  3. Setting container
  4. Worker, scheduler
  5. Private APIs (giữa các services)
  6. Heartbeat
  7. Database, Redis
  8. NATS, Kafka
  9. EFK
  10. Custom themes
  11. Logging

Impact

1. Manager, store deployer

 

- Thêm một đối tượng group

- Thay đổi flow activate/suspend stores

Impact

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)

Impact

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)

Impact

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

Impact

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

Impact

6. Heartbeat

 

- Cũ: Heartbeat check theo store

- Mới: Heartbeat check theo group stores

Impact

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

Impact

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

Impact

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

Impact

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.

Impact

11. Logging

 

- Log sdtout với prefix theo store ID

- Change log level at run time

Thử nghiệm

- 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

Kế hoạch tiếp theo

  1. Đánh giá kiến trúc mới
  2. Có sự tư vấn của SA từ phía AWS
  3. Implement kiến trúc mới ở mức tối thiểu nhưng đủ luồng để test full luồng
  4. Benchmark để đánh giá performance của hệ thống

Chiến lược

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

Discuss

Q&A

Platform - New architecture

By Tu Tran

Platform - New architecture

  • 148