Categories
Software Architecture

Khung Nhìn Và Tài Liệu Kiến Trúc (Bass Và Những Người Khác) 1: Khái Niệm Kiến Trúc Phần Mềm

Lộ trình của khóa học

  • Kiến trúc phần mềm là gì?
  • Thiết kế kiến trúc phần mềm
    • Yêu cầu: thuộc tính chất lượng (quality attributes) hoặc phẩm chất (qualities)
    • Cách đạt được yêu cầu: chiến thuật (tactics)
    • Chiến thuật dẫn đến kiểu kiến trúc (architectural styles) như thế nào
    • Nghiên cứu điển hình (Case studies) về kiểu kiến trúc, quan sát những phẩm chất đã đạt được (the achieved qualities)
    • Phương pháp ADD
  • Lập tài liệu kiến trúc phần mềm
    • Hôm nay: Bass và những người khác
    • Lần sau: Hofmeister và những người khác

Định nghĩa SA

  • Kiến trúc phần mềm của một chương trình (program) hoặc hệ thống tin học (computing system) là cấu trúc (structure) hoặc các cấu trúc (structures) của hệ thống, bao gồm các phần tử phần mềm (software elements), các thuộc tính (properties) có thể nhìn thấy bên ngoài của các phần tử đó và mối quan hệ (relationships) giữa chúng. (Bass và những người khác)
  • Kiến trúc phần mềm mô tả các loại phần tử (the element types), cách chúng tương tác (interact), cách chức năng (functionality) được ánh xạ tới chúng và các thể hiện (the instances) tồn tại trong hệ thống. (Hofmeister và những người khác)

Khung nhìn (view) là gì?

  • Hệ thống phần mềm hiện đại rất phức tạp
  • Chúng ta tập trung vào một số lượng nhỏ các cấu trúc của hệ thống (view)
  • Khung nhìn – đại diện cho một tập hợp các phần tử kiến trúc (architectural elements) nhất quán, được đọc / viết bởi các bên liên quan (stakeholders) trong hệ thống (cộng thêm các quan hệ /relations)
  • Cấu trúc (Structure) – tập hợp các phần tử kiến trúc khi chúng tồn tại trong phần mềm hoặc phần cứng

Cấu trúc kiến trúc (Architectural structures)

  • Cấu trúc mô-đun (Module)
  • Cấu trúc thành phần và kết nối (Component-and-connector)
  • Cấu trúc phân bổ (Allocation)

Cấu trúc SA

Cấu trúc SA.

Cấu trúc mô-đun

  • Các phần tử:
    • Mô-đun – đơn vị hiện thực
      • Cách xem xét hệ thống dựa trên mã
      • Các khu vực được giao trách nhiệm chức năng
    • Ít nhấn mạnh vào kết quả SW biểu hiện như thế nào trong thời gian chạy
    • Các câu hỏi được trả lời ở đây:
      • Trách nhiệm chức năng chính của mỗi mô-đun
      • Mô-đun này có thể sử dụng các phần tử SW khác nào
      • Cấu trúc phân cấp

Cấu trúc thành phần và kết nối

  • Phần tử:
    • Thành phần thời gian chạy (Runtime components) – đơn vị chính của tính toán
    • Trình kết nối (Connectors) – phương tiện giao tiếp giữa các thành phần
    • Các câu hỏi được trả lời ở đây:
      • Các thành phần thực thi chính và tương tác của chúng
      • Kho dữ liệu được chia sẻ chính (Major shared data stores)
      • Các phần nhân bản (Replicated parts), luồng dữ liệu (data flows), các bộ phận hệ thống song song (parallel system parts)
      • Thay đổi cấu trúc hệ thống (system structure) khi nó thực thi

Cấu trúc phân bổ

  • Hiển thị mối quan hệ giữa các phần tử phần mềm và các phần tử trong một / nhiều môi trường bên ngoài
    • Nơi SW được tạo và thực thi
  • Các câu hỏi được trả lời ở đây:
    • Bộ xử lý mỗi phần tử SW thực thi trên chúng
    • Các tệp để lưu trữ các phần tử trong suốt thời gian hoạt động của hệ thống
    • Gán các phần tử SW cho nhóm phát triển (development teams)

Cấu trúc và kiểu quyết định

  • Hệ thống được cấu trúc như thế nào như một tập hợp các đơn vị mã (mô-đun)?
  • Hệ thống được cấu trúc như thế nào như một tập hợp các phần tử có hành vi chạy (thành phần) và các tương tác (trình kết nối)?
  • Hệ thống có liên quan như thế nào với các cấu trúc không phải SW (non-SW) trong môi trường
    • CPU, hệ thống tệp (file systems), mạng (networks), nhóm phát triển

Cấu trúc dựa trên mô-đun

  • Phân rã
    • Cho biết cách các mô-đun lớn hơn được phân tách thành các mô-đun nhỏ hơn
    • Đơn vị: các mô-đun liên quan với nhau bởi “là một mô-đun con của” (is a submodule of)
    • Phân rã đệ quy
    • Điểm bắt đầu chung của thiết kế
      • Kiến trúc sư liệt kê những gì các đơn vị SW sẽ làm
      • Chỉ định từng mục vào một mô-đun để biết chi tiết hoặc triển khai tiếp theo

Cấu trúc dựa trên mô-đun, 2

  • Phân rã
    • Mô-đun thường có các sản phẩm đi kèm
      • Đặc tả giao diện (Interface specs), mã, kế hoạch kiểm tra
    • Cung cấp khả năng sửa đổi hệ thống
    • Thường được sử dụng làm cơ sở cho tổ chức dự án
      • Cấu trúc tài liệu, tích hợp, kế hoạch kiểm tra
    • Các đơn vị thường có tên dành riêng cho tổ chức (organization-specific names)

Cấu trúc dựa trên mô-đun, 3

  • Sử dụng
    • Cấu trúc quan trọng, thường bị bỏ qua
    • Đơn vị: mô-đun, thủ tục, tài nguyên trên giao diện của mô-đun
    • Đơn vị liên quan bởi quan hệ “sử dụng” (uses)
      • Đơn vị A sử dụng đơn vị B nếu tính đúng đắn của A yêu cầu sự hiện diện của một phiên bản chính xác của B
        • Trái ngược với phiên bản sơ khai
    • Được sử dụng để thiết kế các hệ thống có thể mở rộng

Cấu trúc dựa trên mô-đun, 4

  • Phân lớp
    • Sử dụng quan hệ được điều khiển theo một cách cụ thể
    • Lớp: tập hợp nhất quán các chức năng liên quan
    • Lớp n chỉ có thể sử dụng các dịch vụ của lớp n-1
    • Nhiều biến thể xảy ra trong thực tế
      • Nới lỏng hạn chế cấu trúc này
    • Các lớp được thiết kế dưới dạng trừu tượng, ẩn các chi tiết cụ thể về triển khai bên dưới khỏi các lớp bên trên

Cấu trúc dựa trên mô-đun, 5

  • Lớp / tổng quát hóa
    • Đơn vị: lớp
    • Quan hệ: kế thừa-từ (inherits-from), là-một-thể-hiện-của (is-an-instance-of)
    • Hỗ trợ suy luận về
      • Tập hợp các hành vi hoặc khả năng tương tự
      • Sự khác biệt được tham số hóa (phân lớp con/sub-classing)
      • Sử dụng lại, bổ sung gia tăng các chức năng

Cấu trúc dựa trên thành phần và kết nối

  • Tiến trình (các tiến trình giao tiếp nhau)
    • Trực giao với cấu trúc dựa trên mô-đun
    • Giải quyết các khía cạnh động của một hệ thống đang chạy
    • Đơn vị: tiến trình hoặc luồng (threads)
      • Được kết nối bằng các hoạt động giao tiếp, đồng bộ hóa, loại trừ
    • Quan hệ: phần đính kèm
      • Mô tả cách thành phần và trình kết nối liên quan với nhau
    • Quan trọng đối với hiệu suất thực thi và tính sẵn sàng (availability) của hệ thống

Cấu trúc dựa trên thành phần và kết nối, 2

  • Đồng thời
    • Đơn vị: các thành phần được kết nối bởi “luồng logic” (logical threads)
      • Trình tự tính toán
      • Có thể được phân bổ cho một luồng vật lý sau này
    • Cho phép kiến trúc sư xác định
      • Cơ hội cho song song (parallelism)
      • Vị trí có thể xảy ra tranh chấp tài nguyên (resource contention)
    • Được sử dụng sớm trong thiết kế để xác định các vấn đề thực thi đồng thời

Cấu trúc dựa trên thành phần và kết nối, 3

  • Dữ liệu được chia sẻ (Shared data), kho lưu trữ (repository)
    • Bao gồm các thành phần và trình kết nối
      • Tạo, lưu trữ, truy cập dữ liệu thường trú (persistent data)
    • Hữu ích cho các hệ thống có cấu trúc xung quanh kho dữ liệu được chia sẻ
    • Cho biết cách dữ liệu được tạo ra và sử dụng bởi các phần tử SW trong thời gian chạy
    • Có thể được sử dụng để đảm bảo hiệu suất và tính toàn vẹn của dữ liệu

Cấu trúc dựa trên thành phần và kết nối, 4

  • Trình khách-trình chủ
    • Hữu ích cho các hệ thống được xây dựng như sự hợp tác của trình khách và trình chủ
    • Thành phần: trình khách và trình chủ
    • Trình kết nối: giao thức, thông điệp giữa chúng, để thực hiện công việc của hệ thống
    • Hữu ích cho
      • Tách các mối quan tâm (khả năng sửa đổi)
      • Phân phối vật lý
      • Cân bằng tải (hiệu suất thời gian chạy)

Cấu trúc dựa trên phân bổ

  • Triển khai
    • Cho biết cách SW được gán cho các phần tử xử lý và truyền thông HW (HW-processing and communication elements)
    • Các phần tử
      • SW (tiến trình từ khung nhìn C&C)
      • Các thực thể HW (bộ xử lý)
      • Các con đường truyền thông

Cấu trúc dựa trên phân bổ, 2

  • Triển khai, 2
    • Mối quan hệ
      • Phân bổ cho (Allocated-to): cho biết các đơn vị vật lý mà các phần tử SW cư trú trên đó
      • Di chuyển sang (Migrates-to): nếu phân bổ là động
    • Cho phép kỹ sư suy luận về
      • Hiệu suất, tính toàn vẹn của dữ liệu, tính sẵn sàng, bảo mật
    • Quan tâm đặc biệt đến các hệ thống phân tán hoặc song song

Cấu trúc dựa trên phân bổ, 3

  • Hiện thực
    • Cho biết cách các phần tử SW (mô-đun) được ánh xạ tới (các) cấu trúc tệp trong
      • Sự phát triển của hệ thống
      • Tích hợp
      • Kiểm soát cấu hình
    • Quan trọng đối với việc quản lý các
      • Hoạt động phát triển
      • xây dựng quy trình

Cấu trúc dựa trên phân bổ, 4

  • Phân công công việc
    • Giao trách nhiệm thực hiện và tích hợp các mô-đun cho các nhóm thích hợp
    • Nhấn mạnh quyết định đó về việc ai làm những gì có ý nghĩa về kiến trúc và quản lý
    • Kiến trúc sư biết chuyên môn cần thiết của mỗi nhóm
    • Các dự án phát triển phân tán lớn, đa nguồn
      • Cấu trúc này cho phép có các đơn vị chức năng tương đồng được thực hiện bởi một nhóm duy nhất thay vì tất cả mọi người

Liên quan các cấu trúc với nhau

  • Mỗi cấu trúc cung cấp một góc nhìn và xử lý thiết kế khác nhau trên một hệ thống
  • Các cấu trúc không độc lập
  • Chúng ta cần suy luận về các mối quan hệ
    • Điển hình là nhiều-nhiều
  • Đôi khi một cấu trúc chiếm ưu thế
    • Các cấu trúc khác được đúc kết theo nó
    • Exp: Phân rã mô-đun

Liên quan các cấu trúc với nhau, 2

  • Không phải tất cả các hệ thống đều xem xét nhiều cấu trúc
    • Lớn và nhỏ
  • Cấu trúc
    • Các điểm đòn bẩy kỹ thuật chính của một kiến trúc
    • Mang theo chúng sức mạnh để thao tác một / nhiều thuộc tính chất lượng
    • Cách tiếp cận tách mối quan tâm (separation of concerns) mạnh mẽ
    • Hữu ích cho tài liệu kiến trúc

Những cấu trúc để lựa chọn?

  • Nhiều cách tiếp cận
    • Kruchten, 1995: Bốn + 1
      • Tập trung vào bốn cấu trúc
        • Logic, quá trình, phát triển, vật lý
      • Đảm bảo chúng không mâu thuẫn và thực hiện công việc:
        • Các trường hợp sử dụng chính như một hành động kiểm tra
      • Quy trình thống nhất hợp lý (Rational Unified Process)
    • Soni, Nord, Hofmeister, 1995:
      • Khái niệm, mô-đun, thực thi, mã

Cấu trúc nào?

  • Trong số các nghĩa vụ của kiến trúc sư
    • Hiểu các cấu trúc khác nhau dẫn đến các thuộc tính chất lượng như thế nào
    • Chọn cấu trúc sẽ cung cấp tốt nhất các thuộc tính đó

Sơ lược về cấu trúc kiến trúc

Cấu trúc phần mềmMối quan hệHữu ích cho việc
Phân rãLà một mô-đun con của; chia sẻ bí mật vớiPhân bổ nguồn lực, cấu trúc dự án, lập kế hoạch; ẩn thông tin, đóng gói, kiểm soát cấu hình
Sử dụngYêu cầu sự hiện diện chính xác củaCác tập con kỹ thuật; phần mở rộng kỹ thuật
Phân lớpYêu cầu sự hiện diện chính xác của; sử dụng các dịch vụ của; cung cấp tính trừu tượng choSự phát triển gia tăng; hiện thực các hệ thống trên khả năng di động của “máy ảo”
LớpGiao tiếp với; phụ thuộc vàoTrong các hệ thống thiết kế OO tạo ra các triển khai gần như giống nhau từ mẫu chung
Trình khách-trình chủGiao tiếp với; phụ thuộc vàoHoạt động phân tán; tách biệt các mối quan tâm; phân tích hiệu suất; cân bằng tải
Tiến trìnhChạy đồng thời với; có thể chạy đồng thời với; loại trừ; đi trước; vvLập lịch phân tích; phân tích hiệu suất
Đồng thờiChạy trên cùng một luồng logicXác định các vị trí có tranh chấp tài nguyên; nơi các luồng có thể phân nhánh (fork), nối (join), được tạo hoặc bị hủy
Dữ liệu được chia sẻTạo ra dữ liệu; tiêu thụ dữ liệuHiệu suất, tính toàn vẹn của dữ liệu, khả năng sửa đổi
Triển khaiĐược phân bổ cho; di chuyển sangPhân tích hiệu suất, tính sẵn sàng, bảo mật
Hiện thựcĐược lưu trữ trongKiểm soát cấu hình, tích hợp, các hoạt động kiểm tra
Phân công công việcĐược giao choQuản lý dự án; sử dụng chuyên môn tốt nhất; quản lý tính chung

Sơ lược về cấu trúc kiến trúc, 2

  • Chúng ta thường nghĩ cấu trúc của hệ thống theo chức năng của nó
  • Có các thuộc tính hệ thống ngoài chức năng
    • Phân phối vật lý
    • Giao tiếp tiến trình
    • Đồng bộ hóa, v.v.
  • Mỗi cấu trúc: liên quan đến các thuộc tính chất lượng
    • Cấu trúc sử dụng: được thiết kế để xây dựng một hệ thống có thể mở rộng
    • Cấu trúc tiến trình: được thiết kế để loại bỏ các bế tắc (deadlocks) và tắc nghẽn (bottlenecks)
    • Cấu trúc phân rã mô-đun: được thiết kế để xây dựng một hệ thống có thể sửa đổi

Các thành ngữ kiến trúc phổ biến

  • Hệ thống luồng dữ liệu
    • Tuần tự hàng loạt
    • Các ống và bộ lọc
  • Hệ thống gọi và trả về
    • Chương trình chính & chương trình con
    • Các lớp phân cấp
    • Hệ thống OO
  • Máy ảo
    • Bộ thông dịch
    • Hệ thống dựa trên quy tắc
  • Các thành phần độc lập
    • Các tiến trình giao tiếp nhau
    • Hệ thống sự kiện
  • Hệ thống lấy dữ liệu làm trung tâm (kho lưu trữ)
    • Cơ sở dữ liệu
    • Bảng đen

Leave a Reply

Your email address will not be published. Required fields are marked *