Chuyển tới nội dung chính

System Design Example: ECommerce Marketplace

· 11 phút để đọc
Nguyễn Đức
Software Enginner

Ở bài viết này thì mình sẽ design một hệ thống phức tạp khác - E-Commerce Marketplace.

Cũng như bài trước thì mình vẫn theo một phương phác gồm các bước sau để đạt được các functional và non-functional requirement của hệ thống:

  • Thu thập các requirements
  • Thiết kế API (bài viết này xin bỏ qua phần này vì mình sẽ chỉ tập trung và thiết kế hệ thống)
  • Tạo diagram mô tả hệ thống đáp ứng được các functional requirements
  • Tinh chỉnh diagram để đáp ứng được các non-functional requirements

Về tổng quan thì ta cần thiết kế một hệ thống tương tự như Amazone, Shopee, Lazada hay Tiki.

Software Architect and System Design Quiz

· 32 phút để đọc
Nguyễn Đức
Software Enginner

I. System Requirements & architectural Drivers

I.I. System Design & Requirement Types

Question 1: We received the following requirement from the client:

We would like you to build a system that allows sharing of large files between users. After a user uploads a file, they will get a unique link that they can share with other users. Any user with that link can download the file. The link should become active no later than 1 second after the file is uploaded. Download speeds should be at least 50 Mbit/sec. You have to support at least PDF and JPG file formats, as well as the following web browsers: Google Chrome, Mozilla Firefox, and Microsoft Edge.

Loading Balancing Solutions & Cloud Technologies

· 3 phút để đọc
Nguyễn Đức
Software Enginner

Các Giải Pháp Cân Bằng Tải Mã Nguồn Mở

HAProxy

HAProxy là một phần mềm cân bằng tải TCP/HTTP miễn phí và mã nguồn mở, nổi tiếng với độ tin cậy và hiệu suất cao. Nó đặc biệt phù hợp với các website có lưu lượng truy cập rất lớn, và đang được sử dụng bởi nhiều trang web nổi tiếng nhất thế giới. HAProxy được xem là tiêu chuẩn mặc định của các phần mềm cân bằng tải mã nguồn mở, và có sẵn trong hầu hết các bản phân phối Linux phổ biến. HAProxy hỗ trợ hầu hết các hệ điều hành theo phong cách Unix.

Bitwise Operations: Tối ưu hóa trong lập trình thuật toán

· 8 phút để đọc
Nguyễn Đức
Software Enginner

Trong lập trình, đặc biệt là khi giải các bài toán thuật toán, các phép toán bitwise là một công cụ mạnh mẽ nhưng thường bị bỏ qua. Chúng không chỉ giúp tối ưu hóa hiệu suất mà còn giải quyết một số vấn đề phức tạp một cách ngắn gọn và hiệu quả. Trong bài viết này, chúng ta sẽ khám phá các phép toán bitwise cơ bản, cách áp dụng chúng trong các bài toán thực tế, và minh họa bằng các ví dụ cụ thể sử dụng C++.

Kỹ thuật two pointers: Giải thuật hiệu quả cho các bài toán tối ưu

· 4 phút để đọc
Nguyễn Đức
Software Enginner

Kỹ thuật Two Pointers (hai con trỏ) là một phương pháp mạnh mẽ để tối ưu hóa thời gian xử lý, đặc biệt khi làm việc với mảng. Kỹ thuật này thường được sử dụng để giải các bài toán liên quan đến tìm kiếm, tính tổng, hoặc so sánh các phần tử trong một cấu trúc dữ liệu tuyến tính.

Reproducibility là gì? Tại sao nó quan trọng và cách làm phần mềm của bạn reproducible

· 2 phút để đọc
Nguyễn Đức
Software Enginner

Nếu bạn là một lập trình viên chắc hẳn bạn đã từng nói hoặc ít nhất là nghe tới câu nó chạy ở trên máy tôi mà. Vấn đề này nó có 1 khái niệm và như bạn có thể thấy là nó rất quan trọng - reproducibility(tính tái lập).

Declarative Programming vs. Imperative Programming: Hiểu đúng để viết code tốt hơn

· 4 phút để đọc
Nguyễn Đức
Software Enginner

Trong lập trình, có hai phong cách chính thường được nhắc đến: Imperative Programming (lập trình tường minh) và Declarative Programming (lập trình khai báo). Việc hiểu rõ sự khác biệt giữa hai phong cách này không chỉ giúp bạn viết code hiệu quả hơn mà còn giúp bạn lựa chọn công nghệ phù hợp với từng bài toán cụ thể.