Skip to content

Shopping Cart 2.0

Vorapod edited this page Nov 30, 2020 · 5 revisions

Contents

New Idea

ส่วนงานที่เกี่ยวกับ Application

  • ปรับตัว Compile Code Style ให้เป็นไปตาม Coding Convention ของทีม
  • เพิ่ม Contract Test ระหว่างจุดที่เป็น Integration ของระบบ
  • ปรับเรื่องการจัดการ Configuration ของ Store Web และการ Build Artifact สำหรับใช้ Deploy แต่ละ Environment
  • สร้าง Monitoring เพื่อดูการใช้ Resource ของ Application เช่น CPU , Memory , Network
  • ทำ Database Schema Versioning เพื่อจัดการโครงสร้างของฐานข้อมูลที่จะใช้กับตัวระบบว่าสามารถทำงานร่วมกันได้ตามเวอร์ชั่นที่กำหนด และสามารถ Rollback กลับมาเวอร์ชั่นก่อนหน้าได้หากมีปัญหา
  • ทำกระบวน Generate Test Data เพื่อเตรียมข้อมูลสำหรับทดสอบทั้ง Functional และ Non-Functional

ส่วนงานที่เกี่ยวข้องกับกระบวนการ Deployment

  • ทำ Zero Down Time Deployment เพื่อลดผลกระทบกับการใช้งานของ User เมื่อเกิด Down time จากการ Deploy ระบบเวอร์ชั่นใหม่
  • นำ Kubernetes มาช่วยในทำ Scaling ระดับ Container
  • ทำกระบวนการ Configuration Management เพื่อจัดการ Configในแต่ละ Environment มีการ Deploy Service Version อะไรไว้บ้าง

draft

Automation Test Strategy (Functional + Non-Functional)

โดยใช้ Agile Testing Quadrants เป็น guide

  • เพิ่ม Contract testing ระหว่าง store web กับ store service
  • เพิ่ม Contract testing ระหว่าง store service กับ third party
  • เพิ่ม UI test, Unit test, Integration test, Localization test ของ store web
  • เพิ่ม Load test ของ store web และ ปรับ Load test ของ store service
  • เพิ่ม Scalability ของ store web และ store service

Automation Tools

  • ฝั่งของ store web ใช้ Jest + Pact ในการทำ Contract testing
  • ฝั่งของ store web ใช้ Jest ในการทำ Unit test, Integration test, Localization test
  • ฝั่งของ store service ใช้ Testify + Pact ในการทำ Contract testing
  • ใช้ Jmeter ในการทำ Load test
  • ใช้ Jmeter + Kubernetesในการทำ Scalability

Automation Works: Build, Test and Deployment

Build

  • เพิ่มเรื่อง Docker Image Versioning และ Source Code Versioning เพื่อ track ว่า image ที่ build มาจาก source code ณ commit ไหน

Test

  • ส่วนของ Local และ CI จะทำกระบวนการ Unit Test, Integration Test, Component Test, Contract Test, API Test และ UI Test
  • ส่วนของ Dev Environment จะทำ End to end test, Performance Test และ Scalability Test
  • ส่วนของ Prod Environment จะทำ End to end test

Deploy

  • Deployment Strategy เลือกใช้เป็น Rollover Strategy เนื่องจากมีความซับซ้อนน้อยกว่า Blue/Green Deployment และ Canary Deployment เพื่อทดสอบสมมุติฐานเรื่อง Zero Downtime Deployment

ส่วนของการสนับสนุนให้เกิด Zero Downtime Deployment สิ่งที่ต้องปรับใน Shopping Cart Version 2.0 คือ

  • Liveness & Readiness เพื่อเช็ค service ว่า พร้อมสำหรับการรับ traffic
  • Graceful shutdown ป้องกันไม่ให้เกิดข้อผิดพลาดกับ data ระหว่างดับ service

จะต้องมีการออกแบบเรื่องการวาง Configuration ทั้งในส่วนของการ Build, Test และ Deploy เช่น

  • การระบุ endpoint ของ 3rd party ใน service
  • การระบุ Environment Config ว่า ใน Production Environment deploy Store-Service (v2.0) 3 ตัว, Store-web (v2.0) 2 ตัว ใน Dev Environment deploy Store-Service (v2.1) 3 ตัว, Store-web (v2.0) 2 ตัว quadrants pipeline env-local env-ci env-dev env-prod

Architecture

Link: https://drive.google.com/file/d/1UdD4q6GZJChtPSIIi8A9mMxbSHDath9x/view?usp=sharing

local

Local Machine

จะแบ่งออกเป็น 3 ส่วน เพื่อให้เป็นอิสระต่อกันเวลา Implement ระหว่าง Front-End และ Back-End และแต่ละส่วนจะมี Docker Compose ของตัวเอง แต่ละส่วนมีรายละเอียดดังนี้

  1. Store Web ช่วงที่ dvelop จะทำงานร่วมกับ Stub Store Service ในการทดสอบเพื่อให้ได้ feedback ที่เร็วขึ้น
  2. Store Service ทำงานร่วมกับ DB, Stub Payment Service และ Stub Shipping Service
  3. เป็นการ Integrate กันกับ Store Web ทำงานร่วมกับ Store Service, DB, Stub Payment Service และ Stub Shipping Service เพื่อใช้ในการทดสอบในระดับ Integration test

dev

Development Environment

จะใช้ Kubernetes เข้ามาช่วยในขั้นตอนการ Scalability ของ Store Web และ Store Service สำหรับใช้ทดสอบกับ Load Test

prod

Production Environment

จะคล้ายกับ Development แต่จะมีการเแบ่งกลุ่ม Namespace เพื่อแบ่งขอบเขตของกลุ่มงาน (Isolate)

Project Structure

มีส่วนที่เพิ่มเติมจาก Structure ตัวเก่า ดังนี้

  • เพิ่ม Folder /configuration สำหรับเก็บ Config File ของแต่ละ Environment
SHOPPING-CART
|__atdd
|__configuration
   |__ local
   |__ develop
   |__ production
|__...
  • เพิ่ม Folder ของ /develop และ /production ใน Folder /deploy เพื่อแยกเก็บ YML File ของแต่ละ Environment
SHOPPING-CART
|__atdd
|__configuration
|__deploy
   |__ develop
   |__ production
  • เพิ่ม Folder /stubs สำหรับเก็บ Contract file ของ Pact เพื่อใช้ในการทำ Stub
SHOPPING-CART
|__atdd
|__configuration
|__store-web
|__store-service
|__stubs
   |__ store-web-store-service.json
   |__ store-service-payment-service.json

Backlog

  • ปรับ Front-End ให้ต่อกับ API จริง
  • Shopping gateway ปรับเลข Tracking ให้ + 1
  • เพิ่มรูปสินค้าสำหรับแสดงใน Front-End (Hard url ให้ชื่อตรงกับ DB)
  • ปรับ Front-End ให้รองรับเรื่องสินค้าหมด
  • ปรับเรื่อง Http Status Code + Message แจ้ง ของ case หาสินค้าไม่เจอ (Status Code 404, Message not found)
  • ปรับเรื่องการตัด stock สินค้่าไม่ให้ติดลบ ( -1 เป็น 0)
  • แก้คำผิดในหน้า Frount-End
  • รองรับภาษาไทย, ภาษาอังกฤษ และอื่น ๆ
  • Stub ของ Shipping และ Payment เปลี่ยนจาก Stubby เป็น Mounte bank