Mô hình kiến trúc phần mềm C4

Một trong các phương pháp thiết kế phần mềm hiệu quả và dễ hiểu. Cùng tìm hiểu về thành phần, công dụng và lợi ích của C4 và thử dùng AI tạo ra kiến trúc nhé.

Upload image

Tầm quan trọng của kiến trúc phần mềm

Trải qua nhiều năm, các mô hình và khung kiến trúc phần mềm đã không ngừng phát triển và hoàn thiện để đáp ứng những thách thức ngày càng phức tạp trong lĩnh vực phát triển phần mềm. Từ Zachman Framework ban đầu, đến TOGAF toàn diện hơn, tiếp theo là mô hình kiến trúc 4+1 và cuối cùng là mô hình C4, mỗi mô hình đều mang đến cho các kiến trúc sư hệ thống và nhà phát triển những phương pháp tiếp cận mới để thiết kế phần mềm, đáp ứng nhu cầu luôn thay đổi của ngành.

Tuy nhiên, những khung kiến trúc đồ sộ như Zackman hay TOGAF lại gặp khó khăn trong việc triển khai thực tế do tính phức tạp khiến việc áp dụng trở nên khó khăn cho kiến trúc sư phần mềm (Solution Architect - SA) và lập trình viên.

Mô hình C4 nổi lên như một giải pháp thay thế nhẹ nhàng và dễ tiếp cận hơn so với TOGAF. C4 tập trung vào việc cung cấp một phương pháp trực quan và dễ hiểu để mô tả kiến trúc phần mềm.

Có nhiều lý do khiến việc sử dụng mô hình kiến trúc phần mềm trở nên cần thiết:

  • Hiểu và giao tiếp về kiến trúc phần mềm: Cung cấp một ngôn ngữ chung để mô tả kiến trúc phần mềm, giúp các bên liên quan như kiến trúc sư, nhà phát triển, tester và quản lý dễ dàng hiểu được cấu trúc hệ thống.
  • Thúc đẩy sự hợp tác và phối hợp: Tạo nền tảng chung để các bên liên quan cùng hợp tác và phối hợp, nâng cao hiệu quả của quá trình phát triển phần mềm.
  • Hỗ trợ việc phát triển và duy trì hệ thống: Đảm bảo hệ thống đáp ứng nhu cầu của người dùng và có thể được phát triển, duy trì một cách hiệu quả.

Việc lựa chọn mô hình kiến trúc phù hợp đóng vai trò quan trọng trong việc xây dựng hệ thống phần mềm thành công. Các mô hình như C4, với tính đơn giản và dễ sử dụng, đang dần trở thành lựa chọn ưu tiên cho các kiến trúc sư và nhà phát triển phần mềm.

Mô hình kiến trúc C4

C4 là một mô hình kiến trúc phần mềm được phát triển bởi Simon Brown. Nó cung cấp một cách tiếp cận đơn giản và hiệu quả để mô tả kiến trúc phần mềm ở bốn cấp độ khác nhau:

Upload image

Context

Cấp độ Context đóng vai trò nền tảng và quan trọng nhất trong khuôn khổ C4. Nó cung cấp một phương pháp trực quan để mô tả kiến trúc phần mềm, bao gồm mục tiêu, yêu cầu, hệ thống và mối liên hệ giữa các hệ thống. Nhờ vậy, các bên liên quan dễ dàng nắm bắt mục đích và phạm vi của kiến trúc.

Cấp độ Context là công cụ hữu ích cho:

  • Kiến trúc sư phần mềm: Hiểu rõ các mục tiêu và yêu cầu của hệ thống, từ đó đưa ra quyết định thiết kế phù hợp.
  • Nhà phát triển phần mềm: Nắm bắt cấu trúc tổng thể của hệ thống, từ đó tập trung phát triển các phần mềm tương ứng.
  • Quản lý dự án: Theo dõi tiến độ dự án và đảm bảo dự án được thực hiện theo đúng kế hoạch.
  • Khách hàng và các bên liên quan: Hiểu rõ hệ thống sẽ được xây dựng như thế nào, từ đó đưa ra phản hồi và góp ý kịp thời.

Upload image

Trong Context, System Landscape diagram là một loại sơ đồ quan trọng. Sơ đồ này bao gồm tất cả các hệ thống phần mềm, cả bên trong và bên ngoài tổ chức, cũng như các mối quan hệ giữa chúng.

System Landscape diagram thường được sử dụng cho các mục đích sau:

  • Cung cấp cái nhìn tổng quan về hệ thống phần mềm trong một tổ chức.
  • Xác định các hệ thống phần mềm có liên quan đến nhau. Kể cả hệ thống cũ và mới phát triển.
  • Xác định các khoảng trống trong hệ thống phần mềm.
  • Giúp các bên liên quan hiểu về hệ thống phần mềm.

Upload image

Container

Cấp độ Container là một phần quan trọng trong mô hình kiến trúc C4, giúp mô tả chi tiết các thành phần chính của hệ thống phần mềm. Hãy tưởng tượng nó như một bản đồ chi tiết, giúp bạn hiểu rõ hơn về các "khối xây dựng" tạo nên hệ thống. Cấp độ này mô tả các thành phần phần mềm chính của hệ thống, chẳng hạn như máy chủ, ứng dụng, microservices và cơ sở dữ liệu. Trong Container, các hệ thống được mô tả chi tiết hơn. Sơ đồ này thường bao gồm các thông tin sau:

  • Tên hệ thống: Tên gọi đơn giản để nhận diện hệ thống.
  • Mô tả hệ thống: Tóm tắt ngắn gọn về chức năng và mục đích của hệ thống.
  • Các thành phần hệ thống: Liệt kê các phần mềm chính cấu thành hệ thống, ví dụ như máy chủ, ứng dụng, dịch vụ vi mô (microservices) và cơ sở dữ liệu.
  • Mối quan hệ giữa các thành phần: Mô tả cách các thành phần tương tác với nhau, ví dụ như dữ liệu được truyền tải như thế nào, hay các thành phần nào phụ thuộc vào nhau.

Cấp độ Container giúp cung cấp cái nhìn chi tiết hơn về các hệ thống trong kiến trúc phần mềm. Nó giúp các bên liên quan khác nhau hiểu được các thành phần của hệ thống và cách chúng tương tác với nhau.

Mục tiêu của cấp độ Container:

  • Giúp hiểu rõ hơn về các hệ thống: Sơ đồ cấp độ Container cung cấp một cách trực quan để thể hiện các hệ thống trong kiến trúc phần mềm, giúp các bên liên quan khác nhau hiểu được các thành phần của hệ thống và cách chúng tương tác với nhau.
  • Giúp xác định các rủi ro: Sơ đồ cấp độ Container có thể được sử dụng để xác định các rủi ro đối với các hệ thống, chẳng hạn như các thành phần phụ thuộc lẫn nhau hoặc các mối quan hệ phức tạp.
  • Giúp quản lý thay đổi: Sơ đồ cấp độ Container có thể được sử dụng để quản lý thay đổi đối với các hệ thống, bằng cách xác định các thành phần và mối quan hệ bị ảnh hưởng bởi thay đổi.

Ví dụ như một hệ thống ngân hàng trực tuyến. Cấp độ Container sẽ mô tả các thành phần chính như:

  • Ứng dụng web là lớp bao cho các nội dung tĩnh và ứng dụng ngân hàng
  • Ứng dụng ngân hàng được xây dựng bằng SPA
  • Ứng dụng di động
  • API cung cấp các chức năng bằng JSON/HTTPS
  • Cơ sở dữ liệu lưu trữ thông tin đăng ký, bảo mật
  • Các hệ thống ngoài: như Email và hệ thống ngân hàng chạy trên máy chủ độc lập

Upload image

Component

Cấp độ Component là bước đi sâu hơn trong mô hình C4, giúp bạn khám phá chi tiết từng "viên gạch" cấu tạo nên hệ thống phần mềm. Nó tương tự như bản vẽ kỹ thuật, mô tả rõ ràng các thành phần phần mềm và cách thức hoạt động của chúng.

Cấp độ Component mang lại nhiều lợi ích:

  • Hiểu biết sâu sắc: Cung cấp thông tin chi tiết về cấu tạo và hoạt động của từng phần mềm trong hệ thống.
  • Khả năng phân tích: Giúp xác định các điểm mạnh, điểm yếu và khả năng cải tiến của hệ thống.
  • Giao tiếp hiệu quả: Thúc đẩy sự hiểu biết chung và tạo điều kiện cho việc thảo luận chuyên sâu về các thành phần hệ thống.

Ví dụ hãy cùng xem xét hệ thống ngân hàng:

  • Dịch vụ đăng nhập:

    • Mô tả: Xác thực danh tính người dùng khi truy cập hệ thống.
    • Mối quan hệ: Phụ thuộc vào Security Component để xác minh thông tin đăng nhập.
  • Dịch vụ đặt lại mật mã:

    • Mô tả: Xử lý việc thiết lập lại mật mã.
    • Mối quan hệ: Tương tác với Security Component để đổi password và E-mail component để gởi email cho người dùng.
  • Dịch vụ tổng hợp thông tin tài khoản:

    • Mô tả: Cung cấp thông tin tổng hợp tài khoản.
    • Mối quan hệ: Tương tác với hệ thống máy chủ ngân hàng.

Upload image

Trong thực tế, component thường là

  • Ứng dụng web phía máy chủ: Ứng dụng web Java EE chạy trên Apache Tomcat, ứng dụng ASP.NET MVC chạy trên Microsoft IIS, ứng dụng Ruby on Rails chạy trên WEBrick, ứng dụng Node.js, v.v.
  • Ứng dụng web phía máy khách: Một ứng dụng JavaScript chạy trong trình duyệt web sử dụng Angular, Backbone.JS, jQuery, v.v.
  • Ứng dụng trên máy tính cá nhân: Ứng dụng máy tính để bàn Windows được viết bằng WPF, ứng dụng máy tính để bàn OS X được viết bằng Objective-C, ứng dụng máy tính để bàn đa nền tảng được viết bằng JavaFX, v.v.
  • Ứng dụng di động: Ứng dụng Apple iOS, ứng dụng Android v.v.
  • Serverless: Một chức năng không có máy chủ duy nhất (ví dụ: Amazon Lambda, Chức năng Azure, v.v.).
  • Cơ sở dữ liệu: Một lược đồ hoặc cơ sở dữ liệu trong hệ thống quản lý cơ sở dữ liệu quan hệ, kho tài liệu, cơ sở dữ liệu đồ thị, v.v. như MySQL, Microsoft SQL Server, - - Cơ sở dữ liệu Oracle, MongoDB, Riak, Cassandra, Neo4j, v.v.
  • Blob hoặc kho nội dung: Cửa hàng blob (ví dụ: Amazon S3, Microsoft Azure Blob Storage, v.v.) hoặc mạng phân phối nội dung (ví dụ: Akamai, Amazon CloudFront, v.v.).

Code

Code trong C4 là tuỳ chọn. Nó cung cấp mô tả chi tiết nhất về mã nguồn của các thành phần được xác định trong Cấp độ Component.

Cấp độ Code thường được thể hiện bằng các tài liệu văn bản, các mô hình lớp (class diagram). Tài liệu mức Code cung cấp một cách trực quan để thể hiện mã phần mềm trong kiến trúc phần mềm, giúp các bên liên quan khác nhau hiểu được chức năng, trách nhiệm và mối quan hệ của mã nguồn. Code có thể được sử dụng để xác định các rủi ro đối với mã, chẳng hạn như mã phụ thuộc lẫn nhau hoặc các mối quan hệ phức tạp.

So với UML, C4 có một số điểm khác biệt: Cấp độ Code trong C4 tập trung vào việc cung cấp một mô tả trực quan và dễ hiểu về mã nguồn. UML, mặt khác, sử dụng một ngôn ngữ mô hình hóa chính thức hơn. Cấp độ Code trong C4 nhằm mục đích giúp các bên liên quan khác nhau hiểu được cách thức hoạt động của mã và cách nó tương tác với các thành phần khác. UML, mặt khác, có thể được sử dụng cho nhiều mục đích khác nhau, chẳng hạn như thiết kế, triển khai và bảo trì phần mềm.

Upload image

Ưu nhược điểm của mô hình C4

C4 có một số lợi thế so với TOGAF là:

  • Đơn giản hơn để học và sử dụng: C4 có quy mô nhỏ hơn và dễ hiểu hơn TOGAF. C4 chỉ tập trung vào bốn cấp độ kiến trúc: Context, Containers, Components, và Code. Điều này khiến nó dễ hiểu hơn và dễ sử dụng hơn TOGAF, vốn có 10 mô hình.
  • Khả năng tiếp cận cao hơn: C4 sử dụng ngôn ngữ và khái niệm đơn giản, khiến nó dễ tiếp cận hơn với các SA và Developer.
  • Linh hoạt hơn: C4 có thể được tùy chỉnh để đáp ứng nhu cầu của các tổ chức khác nhau. C4 không yêu cầu phải tuân theo một quy trình hoặc phương pháp luận cụ thể. Điều này cho phép các tổ chức tùy chỉnh C4 để đáp ứng nhu cầu cụ thể của họ.

Mô hình C4 là một mô hình kiến trúc phần mềm đơn giản và trực quan, nhưng nó cũng có một số khuyết điểm. C4 không cung cấp một cách tiếp cận toàn diện cho kiến trúc phần mềm. C4 chỉ tập trung vào bốn cấp độ kiến trúc: Context, Containers, Components, và Code. Điều này có thể không đủ để đáp ứng nhu cầu của các tổ chức lớn hoặc phức tạp. chẳng hạn như các mối quan hệ giữa các ứng dụng, giữa các dịch vụ và giữa các thành phần dữ liệu. Một tổ chức đang phát triển một ứng dụng phức tạp có thể cần một mô hình kiến trúc phần mềm cung cấp nhiều chi tiết hơn về các thành phần và mối quan hệ của chúng.

Tuy nhiên, C4 hoàn toàn là mảnh ghép còn thiếu để các nhà phát triển (SAs, Developers) có thể dựa vào đó để dễ dàng triển khai và bổ sung chi tiết hơn, giúp EA (Enterprise Architect) và SA (Solution Architect) hiểu nhau hơn.

Một trong những ưu điểm lớn nữa trong việc áp dụng C4, là nhờ C4 có các công cụ vẽ kiến trúc tiêu chuẩn mà khả năng dùng AI để sinh các mô hình là khả thi. Việc dùng AI sẽ giúp giảm thời gian vẽ vời và giúp cho SA có thời gian tập trung hơn vào việc phân tích yêu cầu và xây dựng các hệ thống chính xác hơn.

Dưới đây là 1 ví dụ dùng AI để sinh kiến trúc component cho một hệ thống ecommerce, được triển khai trên GCP.

Upload image

Sử dụng AI để sinh ra kiến trúc triển khai trên Google Cloud Platform

Tham khảo:

https://en.wikipedia.org/wiki/C4_model

https://c4model.com/

https://www.softwarearchitecturemodels.com/c4model/

Atekco - Home for Authentic Technical Consultants