Thiết Kế Hệ Thống: 'Xẻ' Hệ Thống Theo Biến Động - Vì Sao Lại Hay Hơn Kiểu Cũ?
Lê Lân
0
Phân Tích Thiết Kế Hệ Thống Dựa Trên Độ Biến Động: Bước Tiến Quan Trọng Trong Phát Triển Phần Mềm
Mở Đầu
Thiết kế hệ thống là nghệ thuật và khoa học trong phát triển phần mềm – biết cách tuân thủ và linh hoạt áp dụng các quy tắc là chìa khóa thành công.
Trong lĩnh vực phát triển phần mềm, việc phân tách hệ thống thành các thành phần nhỏ là một bước thiết yếu để nâng cao tính bảo trì, khả năng mở rộng và hiệu quả vận hành. Tuy nhiên, việc lựa chọn cách thức phân tách ảnh hưởng rất lớn đến chất lượng tổng thể của hệ thống.
Bài viết hôm nay sẽ tập trung vào một cách tiếp cận mới mẻ và hiệu quả hơn so với phương pháp phân tách dựa trên chức năng truyền thống: đó là phân tách dựa trên độ biến động (volatility-based decomposition). Qua đó, ta sẽ phân tích sâu sắc sự khác biệt giữa hai phương pháp này thông qua ví dụ thực tế về hệ thống giao dịch chứng khoán, giải thích lý do tại sao tiếp cận dựa trên độ biến động mang lại thiết kế hệ thống linh hoạt, gọn gàng và dễ bảo trì hơn.
Tổng Quan Về Phân Tách Hệ Thống
Phân Tách Theo Chức Năng (Functional Decomposition)
Functional decomposition là cách phân chia hệ thống dựa trên chức năng chính của từng thành phần. Ví dụ, trong một ứng dụng giao dịch chứng khoán, các chức năng như mua bán, phân tích và báo cáo sẽ được tách rời thành từng module riêng biệt.
Hạn Chế Của Phân Tách Chức Năng
Client đảm nhận quá nhiều logic nghiệp vụ, làm phức tạp hóa vai trò giao diện người dùng và khiến frontend khó duy trì.
Quá trình giao dịch bị phân tán gây khó xử lý các tình huống biến động giá trong thời gian thực.
Chưa tuân thủ nguyên tắc tách biệt rõ ràng dịch vụ lõi và client.
Bất cập khi mở rộng, tích hợp thêm kênh giao tiếp mới (email, SMS), hay hỗ trợ đa quốc gia do phải chỉnh sửa nhiều dịch vụ liên quan.
Tính chặt chẽ giữa các thành phần dịch vụ khiến việc thay đổi một phần nhỏ ảnh hưởng lan rộng đến toàn bộ hệ thống.
Ví dụ tiêu biểu: Khi một người dùng muốn bán cổ phiếu để mua cổ phiếu khác, giá có thể thay đổi giữa hai bước. Hệ thống phải quyết định xử lý thế nào nhưng logic này lại bị dồn lên client – điều này làm mất tính linh hoạt và khó bảo trì.
Biểu Diễn Phân Tách Chức Năng
Thành phần
Vai trò chính
Vấn đề liên quan
Client
Thực thi logic nghiệp vụ
Phức tạp, không phải nhiệm vụ của frontend
Mua cổ phiếu
Xử lý giao dịch mua
Tính chặt chẽ, khó thay đổi
Bán cổ phiếu
Xử lý giao dịch bán
Đòi hỏi đồng bộ, dễ sai sót
Phân tích, báo cáo
Quan sát và xử lý dữ liệu
Phụ thuộc logic dịch vụ mua bán, dẫn đến coupling cao
Phân Tích Độ Biến Động Và Phân Tách Hệ Thống
Hiểu Về Độ Biến Động Trong Hệ Thống
Độ biến động đề cập đến các thành phần, yếu tố trong hệ thống có khả năng thay đổi hoặc phát triển không ngừng theo thời gian. Trong một hệ thống giao dịch, những thay đổi này có thể đến từ nhiều nguồn khác nhau:
Đa dạng kiểu người dùng với các mức độ quyền khác nhau.
Các ứng dụng khách (client apps) khác nhau.
Hệ thống quản lý bảo mật và xác thực với nhiều phương thức.
Các phương thức thông báo và trợ giúp đa dạng.
Hạ tầng lưu trữ dữ liệu thay đổi giữa các hệ thống.
Kỹ thuật kết nối và đồng bộ hóa khác nhau như Message Queue, async calls.
Sự đa dạng trong các mặt hàng giao dịch (cổ phiếu, trái phiếu, hàng hóa…).
Quy trình workflow riêng biệt cho từng mặt hàng hoặc kênh.
Nguồn cấp dữ liệu biến động liên tục (Bloomberg, Reuters…).
Tại Sao Phân Tách Dựa Trên Độ Biến Động Lại Hiệu Quả?
Giúp giảm trật tự phụ thuộc (coupling) giữa các phần hệ thống.
Cho phép thay đổi một phần mà không ảnh hưởng đến các phần còn lại.
Đơn giản hóa việc tích hợp các tính năng mới (ví dụ hỗ trợ một loại phương thức xác thực mới).
Tối ưu hóa bảo trì và mở rộng phần mềm một cách thuận lợi.
Tính linh hoạt và khả năng thích nghi cao với các yêu cầu thay đổi của thị trường và người dùng.
Ví Dụ Phân Tách Hệ Thống Giao Dịch Theo Độ Biến Động
Phân Thành Các Thành Phần Chính Và Đặc Điểm Biến Động
Thành Phần Truy Cập Dữ Liệu (Data Access Component)
Đóng gói toàn bộ sự biến động trong lưu trữ dữ liệu, công nghệ, vị trí.
Các module khác không cần biết chi tiết lưu trữ, giúp thay đổi hạ tầng mà không làm ảnh hưởng chức năng khác.
Thành Phần Lưu Trữ (Storage)
Có thể là cơ sở dữ liệu, bộ nhớ đệm, lưu trữ đám mây hay tệp tin.
Đảm nhận lưu trữ dữ liệu vật lý hoặc logic.
Thành Phần Thông Báo (Notification Utility)
Xử lý công nghệ gửi thông điệp như pub-sub hoặc message queue.
Hỗ trợ đa kênh: email, SMS, thông báo nội bộ.
Workflow Giao Dịch (Trade Workflow Component)
Quản lý các quy trình ứng với từng loại mặt hàng giao dịch khác nhau.
Có thể sử dụng công cụ của bên thứ ba để quản lý quy trình.
Đáp ứng các biến thể về thiết bị, thời gian, quốc gia.
Quy Trình Phân Tích (Analysis Workflows)
Tương tự workflow giao dịch, xử lý biến động trong các quy trình phân tích dữ liệu.
Sử dụng chung kho lưu trữ và công cụ workflow.
Thành Phần Truy Cập Dữ Liệu Thị Trường (Feed Access)
Xử lý biến động nguồn cấp dữ liệu thị trường từ nhiều nguồn khác nhau.
Ứng Dụng Khách Hàng (Clients)
Phần ứng dụng người dùng đa dạng, từ web cơ bản đến ứng dụng dành cho chuyên gia.
Đảm bảo linh hoạt trong việc trình bày và tương tác dữ liệu.
Việc dịch chuyển từ nhận dạng độ biến động sang thiết kế thành phần không phải lúc nào cũng một-một, mà đòi hỏi tuân thủ một số quy tắc và kinh nghiệm trong thực tế phát triển.
Kết Luận
Qua ví dụ về hệ thống giao dịch chứng khoán, ta nhận thấy:
Phân tách dựa trên chức năng truyền thống gây ra nhiều khó khăn trong bảo trì, mở rộng, và đa kênh.
Việc tập trung vào độ biến động của các thành phần và dịch vụ giúp hệ thống trở nên linh hoạt, ít phụ thuộc, và dễ dàng thích nghi với thay đổi.
Nguyên tắc cốt lõi: giảm coupling, để client chỉ làm nhiệm vụ client, tách biệt rõ ràng vùng biến động để dễ quản lý.
Việc thiết kế hệ thống là quá trình vừa tuân thủ nguyên tắc vừa cần vận dụng sáng tạo – một nghệ thuật thực sự trong kỹ thuật phần mềm.
Trong các bài viết tới, chúng ta sẽ đi sâu vào phương pháp thực thi chi tiết, cách xác định và xử lý các vùng biến động, cùng những ví dụ thực hành nhằm biến quy tắc thành kỹ năng capable của lập trình viên và kiến trúc sư hệ thống.
Tham Khảo
Juval Löwy, The Righting Software, Apress, 2017.
Ujjwal R., "Why Functional Decomposition Leads to Bad System Design", Dev.to, 2023.
Ujjwal R., "System Design Basics: Why The Right Method Matters", Dev.to, 2023.
Ujjwal R., "The Anti-Design Thinking in System Design", Dev.to, 2023.