CÔNG TY TNHH TRAINOCATE VIỆT NAM
Kiến trúc phần mềm là gì? Các mẫu kiến trúc phần mềm mà bạn nên biết?

Bài viết chuyên môn

Kiến trúc phần mềm là gì? Các mẫu kiến trúc phần mềm mà bạn nên biết?

Kiến ​​trúc phần mềm được phát triển tốt sẽ làm giảm các rủi ro kinh doanh liên quan đến việc xây dựng các giải pháp phần mềm. Nó cũng thu hẹp khoảng cách giữa các yêu cầu kinh doanh và kỹ thuật, tác động lớn đến hiệu suất, chất lượng và khả năng bảo trì của phần mềm. Cuối cùng, kiến ​​trúc phần mềm là yếu tố quyết định sự thành công của sản phẩm cuối cùng.


 

Kiến trúc phần mềm là gì?

 

 

Kiến trúc phần mềm của một chương trình máy tính hay một hệ thống tính toán là cấu trúc của các thành phần trong hệ thống đó. Kiến trúc phần mềm bao gồm các phần tử phần mềm, các thuộc tính và mối quan hệ giữa chúng.

Cuốn sách Software Architecture in Practice (2012) đã định nghĩa: “Kiến trúc phần mềm là tập hợp các cấu trúc cần thiết để lập trình nên hệ thống phần mềm, bao gồm các phần tử, mối quan hệ giữa chúng và các thuộc tính của chúng.”

Nói cách khác, kiến ​​trúc phần mềm cung cấp một nền tảng vững chắc để Software Engineer xây dựng nên phần mềm. Mỗi dự án phần mềm sẽ có một bản tóm tắt, và kiến ​​trúc phần mềm là bước đầu tiên để thực hiện bản tóm tắt đó. Kiến trúc và thiết kế phần mềm bao gồm một số yếu tố như: Chiến lược kinh doanh, thuộc tính chất lượng, nhân lực, thiết kế và môi trường CNTT.

Mục tiêu chính của kiến ​​trúc là xác định các yêu cầu ảnh hưởng đến cấu trúc của ứng dụng. Một kiến ​​trúc được bố trí hợp lý giúp giảm rủi ro kinh doanh liên quan đến việc xây dựng giải pháp kỹ thuật và xây dựng cầu nối giữa yêu cầu kinh doanh và kỹ thuật.

Một số mục tiêu khác của kiến trúc phần mềm có thể kể đến như sau:

  • Phơi bày cấu trúc của hệ thống, nhưng ẩn các chi tiết triển khai của nó.
  • Nhận ra tất cả các trường hợp sử dụng và tình huống.
  • Cố gắng giải quyết các yêu cầu của các bên liên quan khác nhau.
  • Xử lý cả các yêu cầu về chức năng và chất lượng.
  • Giảm mục tiêu sở hữu và nâng cao vị thế thị trường của tổ chức.
  • Cải thiện chất lượng và chức năng do hệ thống cung cấp.

 

Phân biệt kiến trúc phần mềm và thiết kế phần mềm

 

 

Kiến trúc phần mềm đề cập đến quá trình chuyển giao các đặc điểm phần mềm thành một cấu trúc giải pháp phù hợp với các yêu cầu kinh doanh và kỹ thuật. Các đặc điểm phần mềm là gì? Chúng có đặc điểm như bảo mật, linh hoạt, khả năng mở rộng, các thành phần của phần mềm làm việc với nhau hoặc tái sử dụng.

Kiến trúc phần mềm tập trung vào phát triển khung và cơ sở hạ tầng cấp cao của phần mềm. Thiết kế phần mềm, mặt khác, tập trung vào thiết kế cấp mã. Nó giải quyết các vấn đề như chức năng của các module riêng lẻ, phạm vi của các tầng lớp, mục đích của các chức năng khác nhau và tương tự. Hay nhìn cách khác, thiết kế phần mềm là triển khai các yêu cầu nghiệp vụ trên cơ sở kiến trúc phần mềm để tạo ra phần mềm.
 

Các mẫu kiến trúc phần mềm mà bạn nên biết?

 

Kiến trúc phân lớp (Layered Architecture)

 

 

Trong tiếng Anh, cụm từ “N-tier architecture” hoặc “Multi-tiered architecture” thường được dùng để mô tả cho kiến trúc phân lớp.

Đây là một mẫu thiết kế khá phổ biến khi mã nguồn (source code) được phân chia thành các tầng (tiers). Một vài đặc điểm của kiến trúc kiểu này:

+ Tầng ngoài cùng sẽ là tầng nhận dữ liệu, dữ liệu sẽ được truyền tải (xử lý) thông qua các tầng trung gian. Cuối cùng, sau khi đã xử lý xong thì dữ liệu sẽ được lưu lại ở tầng cuối cùng (thường gọi là data tier – tầng này làm việc trực tiếp với database)

+ Đơn giản nhất mà chúng ta thường thấy là mô hình 3 tầng (three tiers) gồm có: Presentation Tier, Application Tier và Data Tier.

+ Trong đó Presentation Tier thường là tầng giao diện, tương tác trực tiếp với người dùng để nhận dữ liệu. Application Tier thường là tầng nhận dữ liệu và thực hiện xử lý các logic nghiệp vụ (còn được gọi là Business logic tier). Data tier là tầng thực hiện tương tác với cơ sở dữ liệu.

Ưu điểm:

+ Quá trình bảo trì khá là dễ dàng vì code được phân tầng rất rõ và các tầng hoàn toàn tách biệt.

+ Cấu trúc mã nguồn đơn giản, dễ hiểu cho người mới.

Nhược điểm:

+ Source code về lâu dài sẽ “phình to ra” theo kích thước dự án.

+ Một phần lớn code đôi khi chỉ đảm nhiệm việc trung chuyển dữ liệu giữa các tầng, gây ảnh hưởng tới hiệu năng của ứng dụng.
 

Kiến trúc Client – Server

 

 

Mô hình Client – Server (máy chủ – máy khách) có lẽ không còn xa lạ với nhiều người nữa. Mô hình này bao gồm một máy chủ và nhiều máy khách kết nối với máy chủ đó.

Một vài đặc điểm của mô hình này đó là:

+ Máy khách sẽ gửi yêu cầu tới máy chủ và đợi phản hồi từ máy chủ.

+ Khi máy chủ chấp nhập yêu cầu từ máy khách nó sẽ tạo một kết nối tới máy khách đó thông qua giao thức mạng bảo mật (thường là https).

Có rất nhiều ứng dụng, dịch vụ đang sử dụng mô hình này. Tiêu biểu có thể kể đến đó là dịch vụ gửi và nhận Email.

Ưu điểm:

+ Máy khách có thể truy cập tài nguyên dữ liệu của máy chủ thông qua các truy cập được bảo mật. Điều này giúp cho việc chia sẽ dữ liệu dễ dàng hơn khi ở xa.

+ Với mô hình này chúng ta không quá phụ thuộc vào công nghệ vì có thể sử dụng bất cứ ngôn ngữ lập trình nào phù hợp.

+ Việc bảo trì sẽ dễ dàng cho phân chia trách nhiệm máy khách, máy chủ rõ ràng.

Nhược điểm:

+ Nhược điểm lớn nhất có thể thấy của mô hình này là sức chịu tải của server khi có quá nhiều yêu cầu từ các máy khách khác nhau.

+ Ngoài ra, mô hình này nếu không đảm bảo được bảo mật đường truyền thì rất dễ bị ăn cắp dữ liệu.
 

Kiến trúc Model – View – Controller (MVC)

 

Tiếp theo chúng ta sẽ cùng tìm hiểu về một mô hình thiết kế phần mềm rất phổ biến nữa đó là mô hình MVC (Model – View – Controller)

Với mô hình này, chúng ta chia làm 3 thành phần: Applications’ data model, Presentation Layer (view) và Controller. Đặc điểm chung của mô hình này là:

+ Người dùng có thể tương tác với dữ liệu ứng dụng thông qua tầng view. Nhưng ngược lại tầng này lại không thể quyết định người dùng làm gì với dữ liệu.

+ Tầng Controller đứng giữa Model và View. Tầng view sẽ lắng nghe các sự kiện và tầng controller sẽ thực hiện các sự kiện đó. Thường hành động này sẽ gọi một hàm tới tầng model và kết quả sẽ được trả lại và hiển thị ở view.

Có rất nhiều web framework đang triển khai mô hình này giống như Spring hay Rails. Chính vì vậy nhiều ứng dụng vẫn đang sử dụng mô hình này.

Ưu điểm:

+ Mô hình này thúc đẩy quá trình phát triển phần mềm vì cả 3 thành phần view, model, controller có liên hệ chặt chẽ với nhau.

+ Do tầng view chỉ có trách nhiệm hiển thị và truyền nhận dữ liệu nên có thể hiển thị nhiều view khác nhau cho người dùng (trong khi dữ liệu không đổi)

+ Các thay đổi giao diện người dùng là cực kỳ phổ biến đối với các ứng dụng web nhưng với mô hình MVC giao diện có thể tùy biến mà không ảnh hưởng

Nhược điểm:

+ Do 3 thành phần view, model, controller liên kết và tương tác chặt chẽ với nhau nên khi có một lớp mới thì sẽ khó để tích hợp.

+ Nhà phát triển cũng phải tìm hiểu nhiều công nghệ nếu muốn làm chủ được mô hình này.
 

Kiến trúc Microservices

 

Trong những năm trở lại đây, với sự phát triển của các siêu ứng dụng thì khái niệm Microservices cũng được nhiều người biết đến hơn.

Microservices là mô hình kiến trúc nơi các dịch vụ được triển khai riêng biệt, trong đó mỗi dịch vụ sẽ có một nhiệm vụ chính. Các dịch vụ này thường sẽ độc lập với nhau để khi một dịch vụ lỗi thì các dịch vụ khác vẫn hoạt động bình thường.

Nếu theo mô hình microservice thì việc đăng nhập có thể tách thành một service riêng, việc đặt xe có thể tách thành một service riêng…

Các dịch vụ này hoạt động độc lập, nếu chức năng đặt xe hỏng bạn vẫn có thể đăng nhập bình thường chỉ là không đặt được xe nữa.

Ưu điểm:

+ Việc chia ứng dụng thành các chức năng nhỏ giúp cho quá trình phát triển, kiểm thử và bảo trì nhanh hơn, ít lỗi hơn.

+ Tránh được việc khi ứng dụng “chết” là cả hệ thống “sập” mà thay vào đó tăng tính linh hoạt và độc lập giữa các chức năng với nhau.

+ Có thể tái sử dụng các service ở các ứng dụng khác

Nhược điểm:

+ Có thể sẽ tiêu tốn nhiều tài nguyên phần cứng hơn do phải xây dựng nhiều server để triển khai nhiều service nhỏ.

+ Đội ngũ phát triển sẽ phải sử dụng khá nhiều công nghệ để đảm bảo hệ thống hoạt động trơn tru, tránh bị sấp hoặc quá tải.
 

Kiến trúc hướng sự kiện

 

Có những ứng dụng mà các thành phần (chức năng) chỉ hoạt động khi có xử lý dữ liệu và khi không có xử lý thì không hoạt động.

Với kiến trúc hướng sự kiện này chúng ta có thể liên tưởng tới các ứng dụng di động hoặc các ứng dụng desktop đều được thiết kế với kiến trúc này.

Ưu điểm:

+ Với việc xử lý theo sự kiện giúp cho ứng dụng có thể xử lý nhiều logic phức tạp

+ Đây là một kiến trúc có khả năng mở rộng tốt do nếu muốn thêm mới một thành phần chỉ cần thêm các sự kiện mới cho các thành phần đó.

Nhược điểm:

+ Có nhiều chức năng, thành phần liên quan đến nhau khiến cho việc kiểm thử đôi khi gặp khó khăn.

+ Nhiều chức năng khác nhau đôi khi lại xử lý cùng một sự kiện sẽ dẫn đến lỗi…

 

Lời kết

 

Để hoạt động thành công, kiến ​​trúc phần mềm cần phải phù hợp với các yếu tố còn lại của dự án phần mềm. Kiến trúc phần mềm được xây dựng tốt tạo điều kiện cho người dùng và nhà phát triển hiểu được hệ thống. Các yếu tố quan trọng ảnh hưởng đến khả năng ứng dụng của kiến ​​trúc phần mềm là lập kế hoạch dự án, phân tích rủi ro, tổ chức, quá trình phát triển, quy trình hoạt động, phần cứng, kiểm soát chất lượng và các yêu cầu.

 

Để nâng cao kiến thức về kiến trúc phần mềm và chinh phục chứng chỉ AWS Certified Solutions Architect – Associate, hãy tham khảo ngay khóa học AWS-ARC - Architecting on AWS của Trainocate!


Tự hào là đối tác đào tạo uỷ quyền của AWS tại Việt Nam, Trainocate cam kết mang đến chương trình học chuẩn quốc tế với giảng viên là các chuyên gia được chứng nhận bởi hãng. Ngoài ra, học viên còn được cung cấp tài liệu bản quyền từ những người ra đề thi và được học với Labs bản quyền chính hãng AWS không giới hạn số lần thực hành trong 5 tuần.

 

Trainocate luôn hân hạnh được đồng hành cùng bạn trong hành trình nâng cao kỹ năng, phát triển sự nghiệp!
 

 


 

 


 

 

Chia sẻ mạng xã hội:

Bình luận của bạn

Bản quyền thuộc về Trainocate Việt Nam

back to top