Kiến trúc hệ thống là gì?
Với 1 hệ thống bất kỳ, việc xây dựng kiến trúc luôn là bước đầu tiên và quan trọng nhất quyết định tính khả thi của cả hệ thống. Đầu ra của bước thiết kế hệ thống sẽ giải quyết nhu cầu đề ra của người dùng, đồng thời là bước quan trọng để bắt đầu việc xây dựng các ứng dụng cũng như cách giao tiếp giữa các phần trong hệ thống. Bài viết hôm nay mình sẽ cùng các bạn tìm hiểu Kiến trúc hệ thống là gì và tại sao nó lại có vai trò quyết định sự thành công của 1 dự án nhé.
Kiến trúc hệ thống là gì?
1 hệ thống bất kỳ nào đó sẽ luôn có 1 kiến trúc vật lý của riêng mình, từ những website đến các ứng dụng trên thiết bị di động, hầu hết chúng đều cần phải giao tiếp với server để thực hiện các thao tác lấy dữ liệu, cập nhật chỉnh sửa thông tin dữ liệu.
Để dễ hình dung trong bài viết này mình sẽ nhắc đến 1 hệ thống web và ứng dụng mobile sử dụng mô hình client-server như hình dưới đây.
Kiến trúc hệ thống, hiểu đơn giản đó là cách tổ chức của 1 hệ thống, bao gồm tất cả các thành phần, cách chúng tương tác với nhau, môi trường mà chúng hoạt động và các nguyên tắc được sử dụng để thiết kế ra phần mềm trong hệ thống. Như ở hệ thống trên, chúng ta có thể dễ thấy 2 phần chính là CLIENT và SERVER, trong đó:
- CLIENT: các trình duyệt web, các ứng dụng trên desktop hay smartphone truy cập để lấy và update dữ liệu bằng cách tương tác với SERVER (thông qua API)
- SERVER: máy chủ, hiểu đơn giản đó là 1 máy tính với CPU, RAM, ổ cứng và các phần mềm phục vụ cho việc phát triển web.
Vai trò của kiến trúc hệ thống
Kiến trúc hệ thống như 1 bản thiết kế cho 1 ngôi nhà, nó cung cấp 1 sự trừu tượng để quản lý độ phức tạp của hệ thống và thiết lập 1 cơ chế giao tiếp giữa các thành phần. Vai trò của kiến trúc hệ thống có thể được list ra như sau:
- Xác định 1 giải pháp có cấu trúc để đáp ứng tất cả các yêu cầu kỹ thuật và vận hành
- Tối ưu hóa về mặt hiệu suất và bảo mật
- Tác động đến chất lượng, hiệu suất và sự thành công chung của sản phẩm cuối cùng
- Quyết định đến cách xây dựng và phát triển phần mềm bao gồm việc lựa chọn ngôn ngữ, thư viện, framework sử dụng hay kể cả giao diện người dùng.
Xem thêm việc làm Back-end hấp dẫn trên TopDev
Một số kiến trúc hệ thống hay sử dụng
Kiến trúc nguyên khối (Monolith)
Kiến trúc này tạo ra 1 đơn vị phần mềm không thể chia tách, các thành phần khác nhau của ứng dụng được kết hợp thành 1 chương trình duy nhất trên 1 nền tảng duy nhất. Các thành phần trong kiến trúc nguyên khối thường bao gồm: cơ sở dữ liệu (database), giao diện phía người dùng (client) và ứng dụng phía máy chủ (server)
Một kiến trúc nguyên khối (Monolith) sẽ thích hợp thực hiện cho các công ty nhỏ, các thành phần được kết nối với nhau và phụ thuộc nhau giúp phần mềm được khép kín. Ưu điểm của nó là tiết kiệm được thời gian phát triển và triển khai 1 cách đơn giản; hiệu suất ứng dụng cũng cao hơn do các thành phần giao tiếp với nhau 1 cách trực tiếp, đồng thời bộ nhớ được chia sẻ. Tuy vậy, nhược điểm của kiến trúc này là càng theo thời gian, khi lượng code, chức năng càng lớn thì hệ thống càng trở lên cồng kềnh và kém linh hoạt; chưa kể nếu 1 thành phần nhỏ trong cả hệ thống bị lỗi sẽ kéo theo việc toàn bộ hệ thống không thể hoạt động được.
Kiến trúc Microservice
Như hình ở trên, kiến trúc microservice thường được đưa ra so sánh với Monolith cho việc giải quyết các vấn đề mà kiến trúc nguyên khối gặp phải. Microservice là 1 loại kiến trúc hệ thống hướng dịch vụ, tập trung vào việc xây dựng 1 loạt các thành phần có khả năng tự quản lý tạo nên ứng dụng. Cách tiếp cận microservice đã trở thành 1 xu hướng trong những năm gần đây khi ngày càng có nhiều công ty áp dụng, sử dụng nhiều công nghệ DevOps. Các công ty lớn như Netflix, Amazon, Twitter, Paypal là những công ty đã phát triển chuyển đổi từ cách tiếp cận Monolith sang Microservice.
Ưu điểm lớn nhất của microservice chính là việc có thể dễ dàng triển khai, thử nghiệm các ứng dụng nhỏ 1 cách độc lập mà không làm ảnh hưởng đến hệ thống hiện có. Các service khác nhau cũng không bị tình trạng phải chờ đợi nhau hoàn thành mới có thể triển khai và chạy được, nhờ đó rủi ro khi triển khai cũng được giảm xuống trên đơn vị 1 service con. Với microservice, hệ thống của chúng ta có khả năng mở rộng theo chiều ngang, tức là dễ dàng nâng cấp, bổ sung phần cứng cho từng service với chi phí vừa phải, không cần đầu tư vào 1 máy có cấu hình cao như kiến trúc monolith để chạy hệ thống.
Tuy vậy thì hệ thống nào cũng có nhược điểm, với microservice đó là sự phức tạp khi chia ứng dụng thành các service nhỏ độc lập khiến cần nhiều công việc quản lý hơn cho từng service đó. Ngoài ra tính bảo mật cũng là 1 vấn đề khi giờ đây các API sẽ phải public ra bên ngoài để các service khác có thể gọi tới, điều đó khiến nguy cơ bị tấn công cũng cao hơn.
Kiến trúc hướng dịch vụ (SOA)
SOA – Service-Oriented Architecture là kiểu kiến trúc phần mềm dùng để chỉ ứng dụng bao gồm các tác nhân phần mềm rời rạc và lỏng lẻo thực hiện 1 chức năng cần thiết.
Ứng dụng trong SOA có thể được thiết kế và xây dựng theo kiểu module hóa , tích hợp dễ dàng và có thể sử dụng lại.
SOA có thể xem như 1 là kiến trúc nằm giữa Monolith và Microservice, khi nó được tạo thành từ các thành phần độc lập nhưng gần như không giao tiếp (hoặc rất ít) với các thành phần khác kiểu trong microservice. Cách chia module của SOA cũng sẽ khác với cách tiếp cận dạng service trong microservice.
Kết bài
Như vậy chúng ta đã cùng đi qua khái niệm cơ bản về kiến trúc hệ thống cũng như 1 số kiến trúc hệ thống thường được áp dụng hiện nay. Đây là 1 phần khó trong lĩnh vực kỹ thuật lập trình nói riêng và kỹ sư công nghệ nói chung, vì thế nếu bạn yêu thích phần này, hãy tìm hiểu sâu thêm về các kiến trúc hệ thống mà các công ty đang áp dụng nhé. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.
Tác giả: Phạm Minh Khoa
Xem thêm:
- IoV (Internet of vehicle) là gì? Kiến trúc IoV
- Lựa chọn Vue hay React dành cho FE Developer
- CLI là gì? Tại sao developer nên làm quen với CLI
Cập nhật it jobs Developer lương cao mới nhất TopDev
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- F Framework nào tốt nhất cho dự án của bạn? – Checklist chi tiết
- K Kinh nghiệm xử lý responsive table hiệu quả
- S Stackoverflow là gì? Bí kíp tận dụng Stack Overflow hiệu quả
- 7 7 kinh nghiệm hữu ích khi làm việc với GIT trong dự án
- B Bài tập Python từ cơ bản đến nâng cao (có lời giải)
- B Bảo mật API là gì? Một số nguyên tắc và kỹ thuật cần biết
- H Hướng dẫn cài đặt và tự học lập trình Python cơ bản từ A-Z
- C Chinh Phục Phân Tích Dữ Liệu Với Pandas Trong Python: Hướng Dẫn Từng Bước
- D Display CSS là gì? Cách khai báo và sử dụng thuộc tính display trong CSS