Chào các bạn, kể từ khi các phần mềm được ra đời thì chúng đã được phát triển qua nhiều dạng khác nhau. Từ các trò chơi đen trắng cho tới những siêu ứng dụng mà chúng ta dùng hàng ngày như Facebook, Youtube…
Vậy đã bao giờ các bạn thắc mắc làm sao mà người ta tạo ra được những ứng dụng đó chưa? làm thế nào mà người ta thiết kế ra được những ứng dụng với số lượng người dùng nhiều như thế?
Trong bài viết hôm nay mình sẽ cùng các bạn tìm hiểu 5 mẫu kiến trúc phần mềm, hệ thống phổ biến nhất hiện nay. Biết đâu qua bài viết này thì các bạn sẽ phần nào hình dung ra được người ta đã tạo ra các phần mềm mà chúng ta vẫn dùng hàng ngày như thế nào ^^
Mục Lục Nội Dung
I. 5 mẫu kiến trúc phần mềm, hệ thống phổ biến
Đọc thêm:
#1. 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.
#2. 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.
#3. 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.
#4. 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.
Mình lấy ví dụ khi bạn đặt xe trên các ứng dụng đặt xe thì bạn sẽ phải đăng nhập, đặt xe và hệ thống sẽ tìm tài xế gần bạn nhất…
Nếu theo mô hình mircoservice 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ơ tru, tránh bị sấp hoặc quá tải.
#5. 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…
II. Lời kết
Trên đây là 5 mẫu kiến trúc, thiết kế phần mềm mình thấy khá phổ biến hiện nay. Mỗi mẫu thiết kế đều có những ưu điểm, nhược điểm riêng.
Còn trên thực tế sẽ còn rất nhiều mẫu thiết kế ứng dụng, phần mềm khác có thể kể đến như Blackboard, Intercepter, Peer-to-Peer…
Khi phát triển một ứng dụng hay xây dựng một hệ thống thì việc chọn thiết kế, kiến trúc thích hợp sẽ giúp tối ưu được rất nhiều chi phí và giúp dễ dàng mở rộng sau này. Hẹn gặp lại các bạn trong các bài viết tiếp theo.
CTV: Nguyễn Đức Cảnh – Blogchiasekienthuc.com