Software-architecture

  • Làm sao tránh tạo trùng Order khi flash sale trong hệ thống e-commerce?
    Published on
    Trong bài viết này, mình sẽ cùng anh em tìm hiểu bài toán tạo trùng Order (duplicate order) trong một hệ thống e-commerce có rất nhiều người dùng truy cập đồng thời, đặc biệt là lúc flash sale. Mình đi từ nguyên nhân (user bấm đúp, refresh, client retry, message redelivery cho tới bot và replay attack), hậu quả khi đơn bị trùng, rồi lần lượt qua 6 cách xử lý từ cơ bản đến nâng cao - disable nút bấm, check-then-insert, Idempotency-Key với UNIQUE constraint, bảng idempotency record, Redis SET NX và checkout token dùng một lần - kèm code Java & Spring Boot cho từng cách và một bảng so sánh để anh em chọn đúng giải pháp.
  • Làm sao xử lý Inventory Reservation khi flash sale mà không bị oversell?
    Published on
    Trong bài viết này, mình sẽ cùng anh em tìm hiểu bài toán Inventory Reservation (giữ chỗ tồn kho) trong một hệ thống e-commerce có lượng truy cập đồng thời rất lớn, đặc biệt là lúc flash sale. Mình đi từ cách viết cơ bản nhất (đọc stock rồi trừ) và chỉ ra vì sao nó bị oversell, rồi lần lượt qua atomic UPDATE, pessimistic lock, optimistic lock, Redis Lua script và reservation có TTL, kèm code Java & Spring Boot cho từng cách và một bảng so sánh để anh em chọn đúng giải pháp cho hệ thống của mình.
  • Chống duplicate username trong hệ thống 100 triệu users: tại sao chỉ UNIQUE constraint là chưa đủ?
    Published on
    Bài viết này mình cùng anh em đi từ cách check duplicate username ngây thơ nhất (SELECT trước khi INSERT) đến việc hiểu tại sao nó vừa chậm vừa sai dưới concurrency, rồi từng bước xây dựng một giải pháp chịu được tải của hệ thống 100 triệu+ users - UNIQUE constraint (và cơ chế B+Tree đứng sau nó), pattern insert-and-catch, Redis SETNX fast-path, bài toán sharding, và cách kết hợp Bloom filter với cache tầng đọc để trả lời tức thì cho phần lớn request.
  • [Design Pattern] - Singleton
  • [Design Pattern] - Builder
  • [Design Pattern] - Factory Method
    Published on
    Factory Method là một design pattern trong nhóm Creational Pattern. Pattern này cung cấp các interface cho việc tạo ra các objects trong supperclass, nhưng cho phép các subclasses thay đổi kiểu object sẽ được tạo ra.
  • [OOP] - Các nguyên lý thiết kế hướng đối tượng - SOLID
    Published on
    Đối với các hệ thống được thiết kế theo mô hình hướng đối tượng, chúng ta có 5 nguyên tắc hàng đầu với mục tiêu tạo ra những thay đổi code ít ảnh hưởng tới các phần còn lại. Nói cách khác, đây là những nguyên tắc thiết kế với mục tiêu đáp ứng và thích nghi với sự thay đổi của hệ thống - rất phù hợp và thục tế cho các hệ thống hiện nay.