Architecture Characteristics là gì? Các đặc tính kiến trúc trong phần mềm (Phần 2) – Cloud và Cross-Cutting
Sự phát triển của điện toán đám mây đã làm thay đổi đáng kể cách chúng ta thiết kế phần mềm. Bên cạnh các đặc tính kiến trúc truyền thống như hiệu năng hay khả năng mở rộng, các hệ thống hiện đại còn phải đáp ứng nhiều yêu cầu mới như Elasticity, Availability theo Availability Zone, hay quản trị dữ liệu theo từng khu vực địa lý. Đồng thời, những yêu cầu xuyên suốt như Security, Privacy, Authentication, Authorization hay Accessibility cũng trở thành yếu tố bắt buộc trong hầu hết các dự án.
Trong bài viết này, chúng ta sẽ khám phá hai nhóm Architecture Characteristics quan trọng đối với các hệ thống hiện đại: Cloud Characteristics và Cross-Cutting Characteristics, đồng thời tìm hiểu vai trò của từng đặc tính thông qua những ví dụ gần gũi trong thực tế.Architecture Quantum là gì? Giải thích Lượng tử Kiến trúc trong Software Architecture
Architecture Quantum (Lượng tử kiến trúc) qua 8 ví dụ thực tế
4. Nhóm Đặc tính Đám mây (Cloud)
Các đặc tính xuất hiện
cùng với sự phổ biến của điện toán đám mây:
On-demand Scalability (Khả năng mở rộng theo nhu cầu)
Là khả năng tăng hoặc giảm
tài nguyên của hệ thống theo nhu cầu thực tế khi cần thiết. Khác với khả năng mở
rộng truyền thống, tài nguyên không được bổ sung cố định từ trước mà có thể được
cấp phát khi nhu cầu tăng và thu hồi khi nhu cầu giảm.
Ví dụ, một website bán vé
hòa nhạc thường chỉ có vài nghìn người truy cập mỗi ngày. Tuy nhiên, khi mở bán
vé, hàng trăm nghìn người có thể truy cập cùng lúc. Nếu hệ thống hỗ trợ
On-demand Scalability, nền tảng điện toán đám mây sẽ tự động bổ sung thêm máy
chủ hoặc container để đáp ứng lượng truy cập tăng đột biến. Sau khi đợt bán vé
kết thúc, các tài nguyên dư thừa sẽ được loại bỏ để tránh lãng phí chi phí.
Đặc tính này đặc biệt
quan trọng trên nền tảng đám mây vì doanh nghiệp chỉ cần trả tiền cho lượng tài
nguyên thực sự sử dụng thay vì phải đầu tư đủ hạ tầng cho thời điểm tải cao nhất.
On-demand Elasticity (Khả năng co giãn theo nhu cầu)
Là khả năng hệ thống tự
động và nhanh chóng mở rộng khi tải tăng và co lại khi tải giảm mà hầu
như không cần sự can thiệp của con người. Nếu On-demand Scalability trả lời câu
hỏi "Hệ thống có thể mở rộng khi cần không?" thì On-demand
Elasticity trả lời câu hỏi "Hệ thống có thể tự động mở rộng và thu hẹp
một cách linh hoạt theo thời gian thực không?"
Ví dụ, một dịch vụ xem
phim trực tuyến có lượng người xem tăng mạnh vào buổi tối và giảm đáng kể vào
ban đêm. Hệ thống có Elasticity sẽ tự động tăng số lượng máy chủ trong khoảng
thời gian cao điểm và tự động giảm số lượng máy chủ khi lưu lượng truy cập giảm,
giúp vừa đảm bảo hiệu năng vừa tối ưu chi phí.
Elasticity là một trong
những đặc trưng nổi bật của điện toán đám mây.
Phân biệt On-demand Scalability và On-demand Elasticity
Hai khái niệm này thường
bị nhầm lẫn vì đều liên quan đến việc thay đổi tài nguyên theo nhu cầu.
On-demand Scalability
nhấn mạnh khả năng mở rộng của hệ thống. Nghĩa là khi cần, hệ thống có
thể bổ sung thêm tài nguyên để đáp ứng khối lượng công việc lớn hơn. Việc mở rộng
có thể được thực hiện thủ công hoặc tự động.
On-demand Elasticity
nhấn mạnh khả năng co giãn linh hoạt và tự động. Hệ thống không chỉ mở rộng
mà còn tự động thu hồi tài nguyên khi không còn cần thiết. Đây là một mức độ
cao hơn của Scalability.
Có thể hình dung rằng mọi
hệ thống có Elasticity đều có Scalability, nhưng không phải mọi hệ thống có
Scalability đều có Elasticity.
Ví dụ, một quản trị viên
phải đăng nhập vào hệ thống và tự bổ sung thêm năm máy chủ khi lượng truy cập
tăng. Đây là Scalability nhưng chưa phải Elasticity. Nếu hệ thống tự phát hiện
tải tăng và tự động bổ sung năm máy chủ, sau đó tự giảm về hai máy chủ khi tải
giảm thì đó là Elasticity.
Zone-based Availability (Tính khả dụng theo Availability Zone)
Là khả năng hệ thống vẫn
tiếp tục hoạt động khi một Availability Zone (Vùng khả dụng - AZ) gặp sự
cố. Availability Zone là một hoặc nhiều trung tâm dữ liệu độc lập trong cùng một
khu vực địa lý (Region), được kết nối với nhau bằng mạng tốc độ cao nhưng vẫn
tách biệt về nguồn điện, hệ thống làm mát và hạ tầng vật lý.
Ví dụ, một ứng dụng được
triển khai đồng thời trên ba Availability Zone trong cùng một Region. Nếu một
AZ bị mất điện hoặc gặp sự cố mạng, lưu lượng truy cập sẽ tự động được chuyển
sang hai AZ còn lại mà người dùng hầu như không nhận thấy sự gián đoạn.
Để đạt được Zone-based
Availability, kiến trúc thường triển khai nhiều bản sao của ứng dụng trên nhiều
AZ, kết hợp với cân bằng tải, sao chép dữ liệu giữa các AZ.
Đặc tính này giúp hệ thống
chịu được các sự cố ở mức trung tâm dữ liệu, nhưng chưa đủ để đối phó với các
thảm họa ảnh hưởng đến toàn bộ Region
Region-based Privacy and Security (Quyền riêng tư và bảo mật theo khu vực)
Là khả năng đảm bảo dữ liệu
được lưu trữ, xử lý và bảo vệ theo các yêu cầu pháp lý, quy định và chính sách
bảo mật của từng khu vực hoặc quốc gia.
Ví dụ, một công ty toàn cầu
cung cấp dịch vụ cho khách hàng ở châu Âu, Mỹ và Nhật Bản. Dữ liệu của khách
hàng châu Âu có thể bắt buộc phải được lưu trữ và xử lý trong các Region thuộc
Liên minh châu Âu để đáp ứng các quy định về bảo vệ dữ liệu. Trong khi đó, dữ
liệu của khách hàng Nhật Bản có thể được lưu trữ trong các Region tại Nhật nhằm
đáp ứng các yêu cầu pháp lý của quốc gia này.
Đặc tính này ngày càng
quan trọng đối với các hệ thống toàn cầu vì nhiều quốc gia có quy định nghiêm
ngặt về chủ quyền dữ liệu (data sovereignty), quyền riêng tư và bảo vệ thông
tin cá nhân.
Nhìn chung, bốn đặc tính
này phản ánh những yêu cầu đặc trưng của kiến trúc phần mềm trên nền tảng điện
toán đám mây (cloud-native architecture). On-demand Scalability và On-demand
Elasticity giúp hệ thống thích ứng linh hoạt với sự thay đổi của khối lượng
công việc và tối ưu chi phí sử dụng tài nguyên. Zone-based Availability
đảm bảo dịch vụ vẫn duy trì hoạt động khi một trung tâm dữ liệu gặp sự cố, góp
phần nâng cao độ sẵn sàng của hệ thống. Trong khi đó, Region-based Privacy
and Security tập trung vào việc bảo vệ dữ liệu và tuân thủ các quy định
pháp lý của từng quốc gia hoặc khu vực, một yêu cầu ngày càng quan trọng đối với
các hệ thống hoạt động trên phạm vi toàn cầu. Khi kết hợp với nhau, các đặc
tính này giúp xây dựng những hệ thống cloud-native vừa linh hoạt, bền bỉ,
an toàn và đáp ứng tốt các yêu cầu kinh doanh hiện đại.
Cloud Native là gì? Tư duy thiết kế hệ thống hiện đại cho thời đại đám mây
5. Nhóm Đặc tính Xuyên suốt (Cross-Cutting)
Các đặc tính không nằm gọn
trong một nhóm cụ thể nhưng là những ràng buộc thiết kế quan trọng:
Accessibility (Khả năng tiếp cận)
Là khả năng giúp mọi người
đều có thể sử dụng hệ thống, bao gồm cả người khuyết tật hoặc những người có
các hạn chế về thị giác, thính giác, vận động hoặc nhận thức. Đây không chỉ là
một yêu cầu về giao diện người dùng mà còn ảnh hưởng đến cách kiến trúc phần mềm
được thiết kế, chẳng hạn như hỗ trợ trình đọc màn hình, điều hướng bằng bàn
phím, màu sắc có độ tương phản cao hoặc cung cấp văn bản thay thế cho hình ảnh.
Ví dụ, một hệ thống
thương mại điện tử được thiết kế đúng chuẩn Accessibility sẽ cho phép người khiếm
thị sử dụng screen reader để duyệt sản phẩm và thanh toán mà không gặp trở ngại.
Ngược lại, nếu toàn bộ chức năng chỉ hoạt động bằng chuột hoặc sử dụng màu sắc
làm phương tiện truyền tải thông tin duy nhất thì người khuyết tật sẽ khó hoặc
không thể sử dụng hệ thống.
Archivability (Khả năng lưu trữ lâu dài)
Là khả năng lưu giữ dữ liệu
trong thời gian dài mà vẫn đảm bảo dữ liệu có thể được truy xuất, đọc và sử dụng
khi cần. Đặc tính này thường xuất hiện trong các hệ thống tài chính, y tế, giáo
dục hoặc chính phủ, nơi dữ liệu phải được lưu giữ từ nhiều năm đến hàng chục
năm để phục vụ kiểm toán, tra cứu hoặc tuân thủ pháp luật.
Ví dụ, một bệnh viện cần
lưu hồ sơ bệnh án của bệnh nhân trong nhiều năm. Kiến trúc hệ thống phải hỗ trợ
lưu trữ lâu dài, sao lưu dữ liệu, định dạng dữ liệu ổn định và khả năng khôi phục
khi cần mà không bị mất mát hoặc hư hỏng.
Authentication (Xác thực)
Là quá trình xác minh một
người hoặc một hệ thống thực sự là ai. Nói cách khác, hệ thống cần trả lời câu
hỏi: "Bạn là ai?"
Kiến trúc phần mềm cần lựa
chọn cơ chế xác thực phù hợp như tên đăng nhập và mật khẩu, xác thực hai yếu tố
(2FA), đăng nhập bằng Google, Microsoft hoặc sử dụng chứng chỉ số. Một hệ thống
ngân hàng thường yêu cầu người dùng nhập mật khẩu và mã OTP trước khi được phép
truy cập tài khoản.
Authentication chỉ xác nhận
danh tính, chưa quyết định người đó được phép làm gì.
Authorization (Phân quyền)
Là quá trình xác định một
người dùng sau khi đã xác thực được phép thực hiện những hành động nào. Nó trả
lời câu hỏi: "Bạn được phép làm gì?"
Legal (Tuân thủ pháp lý)
Là khả năng đáp ứng các
yêu cầu pháp luật và quy định mà hệ thống phải tuân theo. Điều này không chỉ
liên quan đến mã nguồn mà còn ảnh hưởng đến cách lưu trữ dữ liệu, ghi nhật ký,
bảo mật, quản lý quyền riêng tư và quy trình vận hành.
Ví dụ, một hệ thống thanh
toán phải tuân thủ các tiêu chuẩn về bảo vệ dữ liệu thanh toán, trong khi một hệ
thống y tế phải tuân thủ các quy định về bảo mật hồ sơ bệnh nhân. Kiến trúc phần
mềm cần được thiết kế ngay từ đầu để đáp ứng các yêu cầu pháp lý thay vì bổ
sung sau này.
Privacy (Quyền riêng tư)
Là khả năng bảo vệ thông
tin cá nhân của người dùng và đảm bảo dữ liệu chỉ được thu thập, sử dụng, lưu
trữ và chia sẻ đúng mục đích mà người dùng đã đồng ý.
Ví dụ, một ứng dụng mạng
xã hội cho phép người dùng quyết định ai được xem bài viết, ai được xem số điện
thoại hoặc địa chỉ email của mình. Ngoài ra, hệ thống cũng cần cho phép người
dùng yêu cầu xóa dữ liệu cá nhân khi cần.
Privacy tập trung vào việc
bảo vệ quyền lợi của chủ sở hữu dữ liệu, khác với Security vốn tập trung vào việc
bảo vệ hệ thống khỏi các cuộc tấn công.
Security (Bảo mật)
Là khả năng bảo vệ hệ thống
khỏi các truy cập trái phép, tấn công mạng, đánh cắp dữ liệu hoặc phá hoại hệ
thống. Đây là một trong những đặc tính kiến trúc quan trọng nhất đối với hầu hết
các hệ thống hiện đại.
Kiến trúc bảo mật thường
bao gồm nhiều lớp như mã hóa dữ liệu, xác thực, phân quyền, tường lửa, phát hiện
xâm nhập, ghi nhật ký, kiểm toán, quản lý khóa mã hóa và bảo vệ API.
Ví dụ, khi người dùng
thanh toán trực tuyến, toàn bộ dữ liệu thẻ tín dụng được mã hóa trong quá trình
truyền và lưu trữ, đồng thời hệ thống giám sát các hành vi bất thường để phát
hiện gian lận.
Supportability (Khả năng hỗ trợ)
Là khả năng giúp đội ngũ
vận hành và bảo trì dễ dàng theo dõi, chẩn đoán và xử lý các sự cố xảy ra trong
hệ thống.
Một hệ thống có
Supportability tốt thường được trang bị đầy đủ log, metrics, tracing, dashboard
giám sát, cảnh báo tự động và công cụ phân tích lỗi. Khi xảy ra sự cố, đội vận
hành có thể nhanh chóng xác định nguyên nhân thay vì phải mất nhiều giờ hoặc
nhiều ngày để điều tra.
Ví dụ, nếu một dịch vụ
trong kiến trúc microservices phản hồi chậm, hệ thống quan sát (observability)
sẽ giúp xác định chính xác dịch vụ nào là nguyên nhân gây ra hiện tượng này.
Usability / Achievability (Khả năng sử dụng)
Là mức độ dễ sử dụng của
hệ thống đối với người dùng cuối. Một hệ thống có Usability tốt giúp người dùng
hoàn thành công việc nhanh chóng, ít mắc lỗi và không cần nhiều hướng dẫn.
Ví dụ, một ứng dụng ngân
hàng cho phép chuyển tiền chỉ với vài thao tác đơn giản sẽ có Usability cao hơn
một hệ thống yêu cầu người dùng đi qua nhiều màn hình phức tạp.
Một số tài liệu sử dụng
thuật ngữ Achievability để nhấn mạnh khả năng người dùng hoàn thành mục
tiêu của mình một cách hiệu quả. Trong thực tế, Achievability thường được xem
là một khía cạnh của Usability, tập trung vào việc liệu hệ thống có giúp người
dùng đạt được kết quả mong muốn hay không.
Interoperability (Khả năng tương tác)
Là khả năng nhiều hệ thống
khác nhau có thể trao đổi dữ liệu và phối hợp hoạt động với nhau, ngay cả khi
chúng được phát triển bằng các công nghệ hoặc nền tảng khác nhau.
Ví dụ, một hệ thống
thương mại điện tử cần kết nối với cổng thanh toán, hệ thống quản lý kho, đơn vị
vận chuyển và phần mềm kế toán. Kiến trúc phần mềm cần sử dụng các chuẩn giao
tiếp như REST API, GraphQL, gRPC hoặc các chuẩn dữ liệu như JSON, XML để đảm bảo
các hệ thống có thể làm việc cùng nhau.
Một hệ thống có
Interoperability cao sẽ dễ dàng tích hợp với các đối tác hoặc dịch vụ mới mà
không cần thay đổi lớn trong kiến trúc.
Learnability (Khả năng học sử dụng)
Là mức độ dễ dàng để người
dùng mới học cách sử dụng hệ thống trong thời gian ngắn. Đây là một thành phần
quan trọng của trải nghiệm người dùng (User Experience).
Ví dụ, hai phần mềm quản
lý dự án có thể cung cấp các chức năng tương đương nhau, nhưng phần mềm có giao
diện trực quan, hướng dẫn rõ ràng và quy trình thao tác đơn giản sẽ giúp người
dùng làm quen chỉ sau vài phút. Ngược lại, một hệ thống phức tạp với nhiều thuật
ngữ chuyên môn và giao diện khó hiểu sẽ khiến người dùng mất nhiều ngày hoặc
nhiều tuần để thành thạo.
Comments
Post a Comment