lOMoARcPSD| 58647650
Họ và tên: Nguyễn Minh Tuấn
Mã sinh viên: B21DCCN759
Lớp : CMPM2
Câu 1. Why do we need to study Software Architecture and Design?
1. Giới thiệu
- Trong lĩnh vực công nghệ thông tin, việc xây dựng phần mềm không đơn thuần chỉ
viết nguồn còn đòi hỏi một chiến lược thiết kế hợp để đảm bảo phần mềm
có thể hoạt động hiệu quả, bền vững và dễ bảo trì. Đây chính là lý do tại sao môn học
"Kiến trúc và Thiết kế Phần mềm" trở nên quan trọng đối với các kỹ sư phần mềm
lập trình viên. Bài viết này sẽ phân tích các khía cạnh chính của môn học này và lý do
vì sao chúng ta cần phải học nó.
2. Khái niệm
- Kiến trúc phần mềm là cách tổ chức và cấu trúc của một hệ thống phần mềm, bao gồm
các thành phần, mô-đun, giao diện và cách chúng tương tác với nhau. Nó cung cấp cái
nhìn tổng quan về cách các thành phần hoạt động cùng nhau để đáp ứng yêu cầu của
hệ thống.
- Thiết kế phần mềm là quá trình chi tiết hóa kiến trúc thành các thành phần nhỏ hơn để
triển khai một cách hiệu quả. Thiết kế phần mềm bao gồm việc lựa chọn các mẫu thiết
kế, cách tổ chức dữ liệu, cách xử luồng công việc nhiều yếu tkỹ thuật khác giúp
hệ thống hoạt động ổn định và linh hoạt.
3. Những lý do phải học
3.1. Cung cấp nền tảng vững chắc cho phát triển phần mềm
Kiến trúc phần mềm đóng vai trò là xương sống của một hệ thống phần mềm. Nó giúp
các nhà phát triển xác định cách các thành phần khác nhau của phần mềm sẽ tương tác
với nhau, đảm bảo tính nhất quán giảm thiểu lỗi trong quá trình phát triển. Nếu
không có một nền tảng kiến trúc hợp lý, phần mềm thể trở nên rối rắm, khó mở rộng
và dễ gặp phải lỗi hệ thống.
3.2. Đảm bảo hiệu suất và khả năng mở rộng
Một phần mềm thiết kế kém sẽ dẫn đến các vấn đề về hiệu suất như tốc độ xử
chậm, sử dụng tài nguyên không tối ưu hoặc gặp khó khăn trong việc mở rộng quy mô.
lOMoARcPSD| 58647650
Bằng cách học môn Kiến trúc và Thiết kế Phần mềm, các kỹ sư có thể áp dụng các mô
hình thiết kế phù hợp như MVC (Model-View-Controller),
Microservices hay Layered Architecture để tối ưu hiệu suất giúp phần mềm phát
triển dễ dàng hơn.
3.3. Đảm bảo hiệu suất và khả năng mở rộng
Một phần mềm thiết kế kém sẽ dẫn đến các vấn đề về hiệu suất như tốc độ xử
chậm, sử dụng tài nguyên không tối ưu hoặc gặp khó khăn trong việc mở rộng quy mô.
Bằng cách học môn Kiến trúc và Thiết kế Phần mềm, các kỹ sư có thể áp dụng các mô
hình thiết kế phù hợp như MVC (Model-View-Controller),
Microservices hay Layered Architecture để tối ưu hiệu suất giúp phần mềm phát
triển dễ dàng hơn.
3.4. Giảm chi phí bảo trì và nâng cấp
Phần mềm không chỉ được xây dựng một lần còn phải duy trì nâng cấp theo
thời gian. Một thiết kế tốt giúp giảm thiểu thời gian công sức cần thiết để sửa lỗi
hoặc thêm nh năng mới. Nếu phần mềm không được thiết kế cẩn thận, việc bảo trì có
thể tốn kém và mất nhiều thời gian hơn do sự phức tạp không cần thiết.
3.5. Cải thiện khả năng tái sử dụng mã nguồn
Một trong những lợi ích quan trọng của thiết kế phần mềm là khả năng tái sử dụng
nguồn. Khi học về kiến trúc phần mềm, chúng ta thể áp dụng các nguyên tắc SOLID
(Single Responsibility, Open-Closed, Liskov Substitution,
Interface Segregation, Dependency Inversion) để viết mã sạch hơn, dễ hiểu hơn và
thể tái sử dụng trong các dự án khác nhau.
3.6. Tăng cường khả năng làm việc nhóm
Trong môi trường phát triển phần mềm hiện đại, các dự án thường được thực hiện bởi
nhiều nhóm làm việc cùng nhau. Một hệ thống có thiết kế rõ ràng giúp các thành viên
trong nhóm hiểu cấu trúc cách thức hoạt động của phần mềm, từ đó giúp việc
phối hợp trở nên hiệu quả hơn. Nếu không một kiến trúc phần mềm tốt, các thành
viên trong nhóm thể gặp khó khăn trong việc tích hợp các phần khác nhau của hệ
thống. 3.7. Đáp ứng các yêu cầu bảo mật
Bảo mật một yếu tố quan trọng trong thiết kế phần mềm. Một kiến trúc tốt giúp đảm
bảo dữ liệu hệ thống được bảo vệ khỏi các lỗ hổng bảo mật. Các hình thiết kế
lOMoARcPSD| 58647650
như Secure Software Development Lifecycle (SDLC) hoặc các phương pháp hóa
dữ liệu đều giúp tăng cường bảo mật cho phần mềm.
3.8. Thích nghi với công nghệ mới
Công nghệ thông tin không ngừng phát triển, do đó phần mềm cũng phải linh hoạt để
thích nghi với các công nghệ mới. Nếu phần mềm kiến trúc hợp lý, việc tích hợp
các công nghệ mới như trí tuệ nhân tạo (AI), điện toán đám mây hay blockchain sẽ trở
nên dễ dàng hơn.
4. Kết luận
Học môn Kiến trúc Thiết kế Phần mềm không chỉ giúp chúng ta hiểu cách
thức xây dựng một hệ thống phần mềm hiệu quả mà còn mang lại nhiều lợi ích về hiệu
suất, bảo trì, bảo mật khả năng mở rộng. Đây một kỹ năng quan trọng giúp lập
trình viên kỹ phần mềm xây dựng các sản phẩm công nghệ giá trị bền vững
trong tương lai.
Câu 2: Monolithic and Microservice. Microservice and AGILE
1. Monolithic
1.1. Định nghĩa
Monolithic, hay còn được gọi là kiến trúc Monolithic (Monolithic architecture), là một
hình kiến trúc phần mềm nguyên khối trong đó toàn bộ ng dụng được xây dựng
triển khai như một hệ thống duy nhất. Thông thường, một Monolithic cấu trúc
gồm ba tầng là database, user interface và server-side. Trong mô hình này, các module
hoạt động một cách liên kết, phụ thuộc vào nhau và mọi sự thay đổi, bảo trì đều được
lOMoARcPSD| 58647650
thực hiện trên cùng một đơn vị. nh này rất phổ biến trong các ứng dụng web
truyền thống, nơi tất ccác chức năng được tích hợp o một codebase duy nhất
được triển khai dưới dạng một ứng dụng duy nhất trên máy chủ
1.2. Đặc điểm của kiến trúc Monolithic
- Cấu trúc nguyên khối: Mọi thành phần của hệ thống được gói gọn trong một ứng dụng
lớn.
- Liên kết chặt chẽ: Các module trong hệ thống phụ thuộc trực tiếp vào nhau, khó tách
rời.
- Một quy trình triển khai duy nhất: Cả hệ thống được đóng gói và triển khai cùng nhau.
- Quản lý dữ liệu tập trung: Một cơ sở dữ liệu duy nhất phục vụ toàn bộ ứng dụng.
1.3. Ưu điểm
- Dễ triển khai phát triển: mọi thứ nằm trong một ứng dụng duy nhất, việc triển
khai đơn giản và ít yêu cầu về hạ tầng.
- Hiệu suất cao: Không độ trễ giữa các thành phần như trong Microservices do mọi
thứ chạy trên cùng một quy trình.
- Dễ dàng kiểm thử và gỡ lỗi: Tất cả thành phần cùng chạy trên một môi trường giúp dễ
phát hiện lỗi.
- Phù hợp với nhóm nhỏ: Do ít yêu cầu về kiến thức về hệ thống phân tán.
1.4. Nhược điểm
- Khó mở rộng: Khi ứng dụng lớn dần, việc thêm tính năng mới trở nên phức tạp và có
thể ảnh hưởng đến toàn bộ hệ thống.
lOMoARcPSD| 58647650
- Khó bảo trì: Codebase lớn, cồng kềnh, gây khó khăn trong việc tìm kiếm và sửa lỗi.
- Rủi ro cao khi triển khai: Một lỗi nhỏ có thể khiến toàn bộ hệ thống bị sập.
- Giới hạn trong công nghệ: Không thể sử dụng nhiều ngôn ngữ lập trình khác nhau cho
từng module.
1.5. Khi nào sử dụng ?
- Khi phát triển một ứng dụng nhỏ hoặc MVP (Minimum Viable Product).
- Khi nhóm phát triển ít thành viên, không đủ nguồn lực để quản lý hệ thống phức
tạp.
- Khi hiệu suất là ưu tiên hàng đầu và không cần mở rộng nhanh chóng.
- Khi không có yêu cầu sử dụng nhiều công nghệ khác nhau cho từng phần của hệ thống.
2. Kiến trúc Microservices
2.1. Khái niệm
Microservices một kiến trúc phần mềm trong đó ứng dụng được chia thành nhiều
dịch vụ nhỏ, độc lập, thể triển khai riêng lẻ. Mỗi dịch vụ đảm nhận một chức
năng cụ thể và giao tiếp với các dịch vụ khác thông qua API.
2.2. Đặc điểm
- Phân chia thành nhiều dịch vụ nhỏ: Mỗi dịch vụ là một module riêng biệt, có logic
cơ sở dữ liệu độc lập.
- Độc lập về triển khai: Các dịch vụ có thể được phát triển, triển khai, và mở rộng riêng
lẻ mà không ảnh hưởng đến toàn bộ hệ thống.
lOMoARcPSD| 58647650
- Giao tiếp qua API: Các dịch vụ thường sử dụng REST API, gRPC, hoặc message queue
để trao đổi dữ liệu.
- Sử dụng công nghệ đa dạng: Mỗi dịch vụ thể được phát triển bằng ngôn ngữ lập
trình hoặc framework khác nhau.
- Tự động mở rộng: Có thể tăng tài nguyên cho từng dịch vụ thay vì toàn bộ hệ thống.
2.3. Ưu điểm
- Dễ dàng mrộng: thể tăng hoặc giảm tài nguyên cho từng dịch vụ tùy theo nhu
cầu.
- Tăng tính chịu lỗi: Lỗi trong một dịch vụ không làm sập toàn bộ hệ thống.
- Cải thiện tốc độ phát triển: Nhiều nhóm thể làm việc song song trên các dịch vụ
khác nhau.
- Dễ bảo trì: Codebase nhỏ gọn, dễ quản lý hơn so với hệ thống Monolithic.
- Linh hoạt trong công nghệ: Cho phép sử dụng nhiều ngôn ngữ lập trình khác nhau.
2.4. Nhược điểm
- Phức tạp trong triển khai: Cần hệ thống quản lý dịch vụ, cân bằng tải, và giám sát lỗi.
- Độ trễ cao hơn: Giao tiếp giữa các dịch vụ qua mạng có thể làm giảm hiệu suất.
- Khó kiểm thử: Cần mô phỏng nhiều dịch vụ để kiểm tra tính năng của từng phần.
- Chi phí vận hành cao: Cần nhiều máy chủ và hạ tầng hơn để chạy các dịch vụ độc lập.
2.5. Khi nào sử dụng
- Khi phát triển ứng dụng lớn, cần mở rộng linh hoạt.
- Khi có nhiều nhóm phát triển làm việc song song trên các module khác nhau.
- Khi muốn tận dụng các công nghệ khác nhau cho từng phần của hệ thống.
- Khi hệ thống cần khả năng chịu lỗi cao, tránh ảnh ởng toàn bộ hệ thống khi một
phần gặp sự cố.
3. Mô hình Agile
3.1. Định nghĩa
Agile là một phương pháp phát triển phần mềm linh hoạt, lặp đi lặp lại và gia tăng
từng phần, tập trung vào sự hợp tác giữa các bên liên quan, phản hồi nhanh và thích
ứng với thay đổi liên tục.
3.2. Nguyên tắc cốt lõi
lOMoARcPSD| 58647650
- Customer satisfaction: Luôn đưa giá trị đến khách hàng thông qua việc
- giao phần mềm hoạt động một cách thường xuyên.
- Chào đón thay đổi: Sẵn sàng điều chỉnh yêu cầu ngay cả khi giai đoạn
- phát triển đang diễn ra.
- Giao hàng thường xuyên: Phát hành sản phẩm hoạt động theo chu kỳ
- ngắn (từ vài tuần đến một vài tháng).
- Hợp tác liên tục: Tăng cường giao tiếp giữa các thành viên trong đội với khách
hàng.
- Đội ngũ tự tổ chức: Đội phát triển được khuyến khích tự quản lý và đưa ra quyết định.
- Sự đơn giản: Ưu tiên hoàn thành công việc với nỗ lực tối thiểu.
- Phản hồi cải tiến: Thường xuyên tổ chức các cuộc họp đánh giá điều chỉnh quy
trình.
3.3. Các framework Agile phổ biến
- Scrum: Quản công việc theo các sprint, với các vai trò như Product Owner, Scrum
Master và Development Team.
- Kanban: Quản lý luồng công việc qua bảng Kanban, giúp giới hạn - Work-in-Progress
(WIP) và tối ưu hóa hiệu quả.
- Extreme programming (XP): Tập trung vào phát triển chất lượng thông qua Test-
Driven Development (TDD), pair programming và continuous integration.
- Lean & SAFe: Tập trung vào việc loại bỏ lãng phí, tối ưu hóa quy trình mở rộng
Agile cho các doanh nghiệp lớn.
3.4. Lợi ích và thách thức
Lợi ích o Giao hàng nhanh, linh hoạt trong việc thích ứng với yêu cầu mới
o Tăng cường sự hợp tác giữa các thành viên khách hàng. o Giảm thiểu rủi ro thông
qua các bản cập nhật nhỏ và liên tục.
o Cải tiến liên tục và nâng cao chất lượng sản phẩm.
Thách thức o Yêu cầu đội ngữ có kỷ luật và tự giác quản lý cao.
o Khó khăn trong lập kế hoạch dài hạn. o Phụ thuộc vào sự tham gia liên tục của
khách hàng. o Có thể thiếu tài liệu hướng dẫn chi tiết cho bảo trì sau này.
3.5. Khi nào sử dụng?
lOMoARcPSD| 58647650
- Khi yêu cầu dự án thay đổi liên tục.
- Khi cần phát triển sản phẩm nhanh chóng.
- Khi nhóm làm việc có khả năng phối hợp tốt.
- Khi ưu tiên sự phản hồi và cải tiến liên tục.
4. Mối liên hệ giữa Microservices và Agile
Kiến trúc Microservices và phương pháp Agile có mối liên hệ mật thiết với nhau, vì cả
hai đều hướng đến sự linh hoạt, khả năng thay đổi nhanh chóng phát triển phần
mềm hiệu quả. Dưới đây là những điểm kết nối giữa hai mô hình này:
- Cùng hướng đến sự linh hoạt và thay đổi nhanh chóng
Agile nhấn mạnh vào việc phát triển phần mềm theo từng vòng lặp nhỏ, thể thay
đổi yêu cầu dựa trên phản hồi từ khách hàng.
Microservices giúp hthống dễ thay đổi vì mỗi dịch vụ hoạt động độc lập. Khi cần cập
nhật một tính năng, chỉ cần thay đổi một dịch vụ nhỏ không ảnh hưởng đến toàn
bộ hệ thống.
→ Kết hợp Microservices với Agile giúp nhóm phát triển phản ứng nhanh với yêu cầu
mới mà không phải viết lại toàn bộ phần mềm.
- Tăng tốc độ phát triển và triển khai
Agile chia dự án thành các phần nhỏ (sprint), giúp đội phát triển hoàn thành các tính
năng nhanh hơn.
Microservices chia ứng dụng thành các dịch vụ độc lập, giúp nhiều nhóm thể m
việc song song không chồng chéo công việc. Sử dụng Microservices giúp các
nhóm Agile triển khai phần mềm nhanh chóng, đảm bảo tiến độ của các sprint.
- Dễ dàng bảo trì và cải tiến liên tục
Agile nhấn mạnh vào cải tiến liên tục thông qua phản hồi từ người dùng.
Microservices giúp việc bảo trì và nâng cấp dễ dàng hơn vì chỉ cần cập nhật từng dịch
vụ thay vì toàn bộ hệ thống.
→ Kết hợp cả hai giúp hệ thống có thể cập nhật liên tục mà không gây gián đoạn hoạt
động.
- Hỗ trợ làm việc nhóm hiệu quả
Agile thường chia nhóm phát triển thành các team nhỏ, làm việc độc lập trên từng phần
của sản phẩm.
lOMoARcPSD| 58647650
Microservices cho phép mỗi nhóm phụ trách một dịch vụ cụ thể, giúp tránh tình trạng
chồng chéo công việc.
Việc này giúp nhóm Agile phát triển phần mềm theo hướng tập trung, dễ dàng phối
hợp và quản lý công việc.
- Tích hợp DevOps để tối ưu hiệu suất
Agile thường đi kèm với DevOps để tự động hóa quá trình phát triển, kiểm thử và triển
khai.
Microservices tận dụng DevOps để triển khai từng dịch vụ riêng biệt, đảm bảo tính ổn
định và nhanh chóng.
Khi kết hợp, cả hai giúp rút ngắn thời gian từ lập trình đến triển khai thực tế, đảm
bảo phần mềm luôn được cập nhật nhanh nhất.
Câu 3: Decompose a software system in microservice and using tool such as VP
to represent. Determine requirements and then draw.
a. Decompose e-commerce system
Một hệ thống e-commerce thể được tổ chức gồm nhiều dịch vụ con, đảm nhiệm
chức năng cụ thể sau:
- Dịch vụ quản lý người dùng: xử lý đăng ký, đăng nhập, xác thực, phân quyền, quản lý
thông tin người dùng.
- Dịch vụ quản lý order: xử lý đặt hàng, cập nhật trạng thái order.
- Dịch vụ thanh toán: xử lý các giao dịch, thanh toán, hoàn tiền.
- Dịch vụ sản phẩm: quản thông tin các sản phẩm. - Dịch vụ kho vận: kiểm tra kho
hàng, nhập kho, xuất kho - Dịch vụ vận chuyển: theo dõi vị trí đơn hàng.
- Dịch vụ thanh toán: gửi thông báo, email, sms tới người dùng.
- Dịch vụ Review and Rating: quản lý nhận xét, đánh giá của khách hàng về sản phẩm,
chất lượng dịch vụ...
- Dịch vụ phân tích và báo cáo: lập báo cáo về tình hình kinh doanh.
Từng dịch vụ được triển khai độc lập, đảm bảo nền tàng e-commerce hoạt động
ổn định.
lOMoARcPSD| 58647650
b. Decompose medicine system
Một hệ thống y tê, đặc biệt chăm sóc sức khỏe, thể được chia thành các service
sau:
- Patient Management Service: quản lý bệnh án bệnh nhân, tình hình sức khỏe, lịch hẹn.
- Prescription Management Service: Handles prescription generation, approvals,
andtracking.
- Pharmacy Management Service: Manages medication inventory, availability,
anddispensation tracking.
- Billing and Insurance Service: Handles payment processing, insurance claims,
andbilling transactions.
- Doctor and Staff Management Service: Manages doctor schedules, specialties,
andstaffallocations.
- Diagnostic and Lab Service: Handles test orders, results processing,
andmedicalimaging.
lOMoARcPSD| 58647650
- Telemedicine Service: Supports virtual consultations, remote monitoring, and doctor-
patient communication.
- Emergency Response Service: Manages ambulance dispatch, emergencycases,
andtriage prioritization.
- Healthcare Analytics Service: Gathers and processes patient data for
insightsintotreatment efficacy and operational efficiency.
c. Decompose tourist assistant system
Hệ thống hỗ trợ du lịch gồm nhiều dịch vụ con sau:
- User management service: có chức năng như đăng ký, đăng nhập, xác thực, quản h
sơ người dùng, lưu lịch sử tìm kiếm, hành trình du lịch, đánh giá của người dùng.
- Destination service: chức năng cung cấp thông tin về các địa điểm du lịch (mô tả,
hình ảnh, đánh giá), hiển thị danh sách điểm tham quan gần vị trí người dùng, gợi ý
điểm du lịch theo sở thích cá nhân.
- Booking service: đặt vé máy bay, khách sạn, tour du lịch, quản lý lịch sử booking
lOMoARcPSD| 58647650
- Review & rating service: cho phép người dùng đanh giá, bình luận về địa điểm, khách
sạn, nhà hàng, hiển thị đánh giá của người khác, phân tích đánh giá đề xuất điểm
đến dựa trên AI
- AI recommendation service: đề xuất điểm đến, lịch trình dựa trên sở thích lịch sử
du lịch của người dùng.
d. University management system
Hệ thống quản lý trường đại học gồm các dịch vụ:
- User Management Service: Manages authentication, student, faculty,
andadministrativeprofiles.
- Course Management Service: Handles course creation, syllabus management,
andfaculty assignments.
- Student Enrollment Service: Manages student registration, course enrollment,
andacademic records.
- Examination and Grading Service: Facilitates exam scheduling, grading,
andresultpublication.
- Attendance Management Service: Tracks student and faculty attendance,
integratingwith biometric or RFID systems.
lOMoARcPSD| 58647650
- Library Management Service: Manages book inventory, lending, and returnprocesses.
- Hostel and Accommodation Service: Handles room allocation, fee payment,
andmaintenance requests.
- Financial and Fee Management Service: Processes tuition payments,
scholarships,andfinancial aid distribution.
- Research and Publication Service: Supports research project tracking,
fundingapplications, and journal publications.
- Event and Notification Service: Sends updates about university events, notices,
andemergency alerts
e. Decompose Grab Car Management System
Một hệ thống quản lý đặt xe của Grab gồm có các service sau:
- User Management Service: Handles user registration, authentication,
andprofilemanagement for both riders and drivers.
- Ride Matching Service: Matches riders with nearby available drivers inreal-time.
- Booking Service: Manages ride requests, ride status, and cancellations.
lOMoARcPSD| 58647650
- Payment Service: Handles fare calculations, payment processing, andrefunds.
Navigation and Routing Service: Provides optimized routes using real-timetrafficdata.
- Driver Management Service: Manages driver details, ride history,
andperformancetracking.
- Vehicle Management Service: Keeps track of vehicle details,
maintenanceschedules,and availability.
- Rating and Review Service: Collects user and driver feedback for qualityassurance.
- Emergency Assistance Service: Offers SOS features, emergency contacts,
andsupportin case of incidents.
- Promotions and Loyalty Service: Manages discounts, referral programs,
anduserrewards
Câu 4: Create PROJECT tensinhvien_project1 and APPLICATION customer, cart and
book (Customer & Item Management in e-commerce)
lOMoARcPSD| 58647650
Câu 5:
1. Book
2. Cart
lOMoARcPSD| 58647650
lOMoARcPSD| 58647650
3. Customer
lOMoARcPSD| 58647650
Hình ảnh minh họa
lOMoARcPSD| 58647650
lOMoARcPSD| 58647650

Preview text:

lOMoAR cPSD| 58647650
Họ và tên: Nguyễn Minh Tuấn Mã sinh viên: B21DCCN759 Lớp : CMPM2
Câu 1. Why do we need to study Software Architecture and Design? 1. Giới thiệu
- Trong lĩnh vực công nghệ thông tin, việc xây dựng phần mềm không đơn thuần chỉ là
viết mã nguồn mà còn đòi hỏi một chiến lược thiết kế hợp lý để đảm bảo phần mềm
có thể hoạt động hiệu quả, bền vững và dễ bảo trì. Đây chính là lý do tại sao môn học
"Kiến trúc và Thiết kế Phần mềm" trở nên quan trọng đối với các kỹ sư phần mềm và
lập trình viên. Bài viết này sẽ phân tích các khía cạnh chính của môn học này và lý do
vì sao chúng ta cần phải học nó. 2. Khái niệm
- Kiến trúc phần mềm là cách tổ chức và cấu trúc của một hệ thống phần mềm, bao gồm
các thành phần, mô-đun, giao diện và cách chúng tương tác với nhau. Nó cung cấp cái
nhìn tổng quan về cách các thành phần hoạt động cùng nhau để đáp ứng yêu cầu của hệ thống.
- Thiết kế phần mềm là quá trình chi tiết hóa kiến trúc thành các thành phần nhỏ hơn để
triển khai một cách hiệu quả. Thiết kế phần mềm bao gồm việc lựa chọn các mẫu thiết
kế, cách tổ chức dữ liệu, cách xử lý luồng công việc và nhiều yếu tố kỹ thuật khác giúp
hệ thống hoạt động ổn định và linh hoạt.
3. Những lý do phải học
3.1. Cung cấp nền tảng vững chắc cho phát triển phần mềm
Kiến trúc phần mềm đóng vai trò là xương sống của một hệ thống phần mềm. Nó giúp
các nhà phát triển xác định cách các thành phần khác nhau của phần mềm sẽ tương tác
với nhau, đảm bảo tính nhất quán và giảm thiểu lỗi trong quá trình phát triển. Nếu
không có một nền tảng kiến trúc hợp lý, phần mềm có thể trở nên rối rắm, khó mở rộng
và dễ gặp phải lỗi hệ thống.
3.2. Đảm bảo hiệu suất và khả năng mở rộng
Một phần mềm có thiết kế kém sẽ dẫn đến các vấn đề về hiệu suất như tốc độ xử lý
chậm, sử dụng tài nguyên không tối ưu hoặc gặp khó khăn trong việc mở rộng quy mô. lOMoAR cPSD| 58647650
Bằng cách học môn Kiến trúc và Thiết kế Phần mềm, các kỹ sư có thể áp dụng các mô
hình thiết kế phù hợp như MVC (Model-View-Controller),
Microservices hay Layered Architecture để tối ưu hiệu suất và giúp phần mềm phát triển dễ dàng hơn.
3.3. Đảm bảo hiệu suất và khả năng mở rộng
Một phần mềm có thiết kế kém sẽ dẫn đến các vấn đề về hiệu suất như tốc độ xử lý
chậm, sử dụng tài nguyên không tối ưu hoặc gặp khó khăn trong việc mở rộng quy mô.
Bằng cách học môn Kiến trúc và Thiết kế Phần mềm, các kỹ sư có thể áp dụng các mô
hình thiết kế phù hợp như MVC (Model-View-Controller),
Microservices hay Layered Architecture để tối ưu hiệu suất và giúp phần mềm phát triển dễ dàng hơn.
3.4. Giảm chi phí bảo trì và nâng cấp
Phần mềm không chỉ được xây dựng một lần mà còn phải duy trì và nâng cấp theo
thời gian. Một thiết kế tốt giúp giảm thiểu thời gian và công sức cần thiết để sửa lỗi
hoặc thêm tính năng mới. Nếu phần mềm không được thiết kế cẩn thận, việc bảo trì có
thể tốn kém và mất nhiều thời gian hơn do sự phức tạp không cần thiết.
3.5. Cải thiện khả năng tái sử dụng mã nguồn
Một trong những lợi ích quan trọng của thiết kế phần mềm là khả năng tái sử dụng mã
nguồn. Khi học về kiến trúc phần mềm, chúng ta có thể áp dụng các nguyên tắc SOLID
(Single Responsibility, Open-Closed, Liskov Substitution,
Interface Segregation, Dependency Inversion) để viết mã sạch hơn, dễ hiểu hơn và có
thể tái sử dụng trong các dự án khác nhau.
3.6. Tăng cường khả năng làm việc nhóm
Trong môi trường phát triển phần mềm hiện đại, các dự án thường được thực hiện bởi
nhiều nhóm làm việc cùng nhau. Một hệ thống có thiết kế rõ ràng giúp các thành viên
trong nhóm hiểu rõ cấu trúc và cách thức hoạt động của phần mềm, từ đó giúp việc
phối hợp trở nên hiệu quả hơn. Nếu không có một kiến trúc phần mềm tốt, các thành
viên trong nhóm có thể gặp khó khăn trong việc tích hợp các phần khác nhau của hệ
thống. 3.7. Đáp ứng các yêu cầu bảo mật
Bảo mật là một yếu tố quan trọng trong thiết kế phần mềm. Một kiến trúc tốt giúp đảm
bảo dữ liệu và hệ thống được bảo vệ khỏi các lỗ hổng bảo mật. Các mô hình thiết kế lOMoAR cPSD| 58647650
như Secure Software Development Lifecycle (SDLC) hoặc các phương pháp mã hóa
dữ liệu đều giúp tăng cường bảo mật cho phần mềm.
3.8. Thích nghi với công nghệ mới
Công nghệ thông tin không ngừng phát triển, do đó phần mềm cũng phải linh hoạt để
thích nghi với các công nghệ mới. Nếu phần mềm có kiến trúc hợp lý, việc tích hợp
các công nghệ mới như trí tuệ nhân tạo (AI), điện toán đám mây hay blockchain sẽ trở nên dễ dàng hơn. 4. Kết luận
Học môn Kiến trúc và Thiết kế Phần mềm không chỉ giúp chúng ta hiểu rõ cách
thức xây dựng một hệ thống phần mềm hiệu quả mà còn mang lại nhiều lợi ích về hiệu
suất, bảo trì, bảo mật và khả năng mở rộng. Đây là một kỹ năng quan trọng giúp lập
trình viên và kỹ sư phần mềm xây dựng các sản phẩm công nghệ có giá trị và bền vững trong tương lai.
Câu 2: Monolithic and Microservice. Microservice and AGILE 1. Monolithic 1.1. Định nghĩa
Monolithic, hay còn được gọi là kiến trúc Monolithic (Monolithic architecture), là một
mô hình kiến trúc phần mềm nguyên khối trong đó toàn bộ ứng dụng được xây dựng
và triển khai như một hệ thống duy nhất. Thông thường, một Monolithic có cấu trúc
gồm ba tầng là database, user interface và server-side. Trong mô hình này, các module
hoạt động một cách liên kết, phụ thuộc vào nhau và mọi sự thay đổi, bảo trì đều được lOMoAR cPSD| 58647650
thực hiện trên cùng một đơn vị. Mô hình này rất phổ biến trong các ứng dụng web
truyền thống, nơi tất cả các chức năng được tích hợp vào một codebase duy nhất và
được triển khai dưới dạng một ứng dụng duy nhất trên máy chủ
1.2. Đặc điểm của kiến trúc Monolithic
- Cấu trúc nguyên khối: Mọi thành phần của hệ thống được gói gọn trong một ứng dụng lớn.
- Liên kết chặt chẽ: Các module trong hệ thống phụ thuộc trực tiếp vào nhau, khó tách rời.
- Một quy trình triển khai duy nhất: Cả hệ thống được đóng gói và triển khai cùng nhau.
- Quản lý dữ liệu tập trung: Một cơ sở dữ liệu duy nhất phục vụ toàn bộ ứng dụng. 1.3. Ưu điểm
- Dễ triển khai và phát triển: Vì mọi thứ nằm trong một ứng dụng duy nhất, việc triển
khai đơn giản và ít yêu cầu về hạ tầng.
- Hiệu suất cao: Không có độ trễ giữa các thành phần như trong Microservices do mọi
thứ chạy trên cùng một quy trình.
- Dễ dàng kiểm thử và gỡ lỗi: Tất cả thành phần cùng chạy trên một môi trường giúp dễ phát hiện lỗi.
- Phù hợp với nhóm nhỏ: Do ít yêu cầu về kiến thức về hệ thống phân tán. 1.4. Nhược điểm
- Khó mở rộng: Khi ứng dụng lớn dần, việc thêm tính năng mới trở nên phức tạp và có
thể ảnh hưởng đến toàn bộ hệ thống. lOMoAR cPSD| 58647650
- Khó bảo trì: Codebase lớn, cồng kềnh, gây khó khăn trong việc tìm kiếm và sửa lỗi.
- Rủi ro cao khi triển khai: Một lỗi nhỏ có thể khiến toàn bộ hệ thống bị sập.
- Giới hạn trong công nghệ: Không thể sử dụng nhiều ngôn ngữ lập trình khác nhau cho từng module. 1.5. Khi nào sử dụng ?
- Khi phát triển một ứng dụng nhỏ hoặc MVP (Minimum Viable Product).
- Khi nhóm phát triển có ít thành viên, không đủ nguồn lực để quản lý hệ thống phức tạp.
- Khi hiệu suất là ưu tiên hàng đầu và không cần mở rộng nhanh chóng.
- Khi không có yêu cầu sử dụng nhiều công nghệ khác nhau cho từng phần của hệ thống. 2. Kiến trúc Microservices 2.1. Khái niệm
Microservices là một kiến trúc phần mềm trong đó ứng dụng được chia thành nhiều
dịch vụ nhỏ, độc lập, có thể triển khai riêng lẻ. Mỗi dịch vụ đảm nhận một chức
năng cụ thể và giao tiếp với các dịch vụ khác thông qua API. 2.2. Đặc điểm
- Phân chia thành nhiều dịch vụ nhỏ: Mỗi dịch vụ là một module riêng biệt, có logic và
cơ sở dữ liệu độc lập.
- Độc lập về triển khai: Các dịch vụ có thể được phát triển, triển khai, và mở rộng riêng
lẻ mà không ảnh hưởng đến toàn bộ hệ thống. lOMoAR cPSD| 58647650
- Giao tiếp qua API: Các dịch vụ thường sử dụng REST API, gRPC, hoặc message queue
để trao đổi dữ liệu.
- Sử dụng công nghệ đa dạng: Mỗi dịch vụ có thể được phát triển bằng ngôn ngữ lập
trình hoặc framework khác nhau.
- Tự động mở rộng: Có thể tăng tài nguyên cho từng dịch vụ thay vì toàn bộ hệ thống. 2.3. Ưu điểm
- Dễ dàng mở rộng: Có thể tăng hoặc giảm tài nguyên cho từng dịch vụ tùy theo nhu cầu.
- Tăng tính chịu lỗi: Lỗi trong một dịch vụ không làm sập toàn bộ hệ thống.
- Cải thiện tốc độ phát triển: Nhiều nhóm có thể làm việc song song trên các dịch vụ khác nhau.
- Dễ bảo trì: Codebase nhỏ gọn, dễ quản lý hơn so với hệ thống Monolithic.
- Linh hoạt trong công nghệ: Cho phép sử dụng nhiều ngôn ngữ lập trình khác nhau. 2.4. Nhược điểm
- Phức tạp trong triển khai: Cần hệ thống quản lý dịch vụ, cân bằng tải, và giám sát lỗi.
- Độ trễ cao hơn: Giao tiếp giữa các dịch vụ qua mạng có thể làm giảm hiệu suất.
- Khó kiểm thử: Cần mô phỏng nhiều dịch vụ để kiểm tra tính năng của từng phần.
- Chi phí vận hành cao: Cần nhiều máy chủ và hạ tầng hơn để chạy các dịch vụ độc lập. 2.5. Khi nào sử dụng
- Khi phát triển ứng dụng lớn, cần mở rộng linh hoạt.
- Khi có nhiều nhóm phát triển làm việc song song trên các module khác nhau.
- Khi muốn tận dụng các công nghệ khác nhau cho từng phần của hệ thống.
- Khi hệ thống cần khả năng chịu lỗi cao, tránh ảnh hưởng toàn bộ hệ thống khi một phần gặp sự cố. 3. Mô hình Agile 3.1. Định nghĩa
Agile là một phương pháp phát triển phần mềm linh hoạt, lặp đi lặp lại và gia tăng
từng phần, tập trung vào sự hợp tác giữa các bên liên quan, phản hồi nhanh và thích
ứng với thay đổi liên tục. 3.2. Nguyên tắc cốt lõi lOMoAR cPSD| 58647650
- Customer satisfaction: Luôn đưa giá trị đến khách hàng thông qua việc
- giao phần mềm hoạt động một cách thường xuyên.
- Chào đón thay đổi: Sẵn sàng điều chỉnh yêu cầu ngay cả khi giai đoạn
- phát triển đang diễn ra.
- Giao hàng thường xuyên: Phát hành sản phẩm hoạt động theo chu kỳ
- ngắn (từ vài tuần đến một vài tháng).
- Hợp tác liên tục: Tăng cường giao tiếp giữa các thành viên trong đội và với khách hàng.
- Đội ngũ tự tổ chức: Đội phát triển được khuyến khích tự quản lý và đưa ra quyết định.
- Sự đơn giản: Ưu tiên hoàn thành công việc với nỗ lực tối thiểu.
- Phản hồi và cải tiến: Thường xuyên tổ chức các cuộc họp đánh giá và điều chỉnh quy trình.
3.3. Các framework Agile phổ biến
- Scrum: Quản lý công việc theo các sprint, với các vai trò như Product Owner, Scrum Master và Development Team.
- Kanban: Quản lý luồng công việc qua bảng Kanban, giúp giới hạn - Work-in-Progress
(WIP) và tối ưu hóa hiệu quả.
- Extreme programming (XP): Tập trung vào phát triển chất lượng thông qua Test-
Driven Development (TDD), pair programming và continuous integration.
- Lean & SAFe: Tập trung vào việc loại bỏ lãng phí, tối ưu hóa quy trình và mở rộng
Agile cho các doanh nghiệp lớn.
3.4. Lợi ích và thách thức
• Lợi ích o Giao hàng nhanh, linh hoạt trong việc thích ứng với yêu cầu mới
o Tăng cường sự hợp tác giữa các thành viên và khách hàng. o Giảm thiểu rủi ro thông
qua các bản cập nhật nhỏ và liên tục.
o Cải tiến liên tục và nâng cao chất lượng sản phẩm.
• Thách thức o Yêu cầu đội ngữ có kỷ luật và tự giác quản lý cao.
o Khó khăn trong lập kế hoạch dài hạn. o Phụ thuộc vào sự tham gia liên tục của
khách hàng. o Có thể thiếu tài liệu hướng dẫn chi tiết cho bảo trì sau này. 3.5. Khi nào sử dụng? lOMoAR cPSD| 58647650
- Khi yêu cầu dự án thay đổi liên tục.
- Khi cần phát triển sản phẩm nhanh chóng.
- Khi nhóm làm việc có khả năng phối hợp tốt.
- Khi ưu tiên sự phản hồi và cải tiến liên tục.
4. Mối liên hệ giữa Microservices và Agile
Kiến trúc Microservices và phương pháp Agile có mối liên hệ mật thiết với nhau, vì cả
hai đều hướng đến sự linh hoạt, khả năng thay đổi nhanh chóng và phát triển phần
mềm hiệu quả. Dưới đây là những điểm kết nối giữa hai mô hình này:
- Cùng hướng đến sự linh hoạt và thay đổi nhanh chóng
Agile nhấn mạnh vào việc phát triển phần mềm theo từng vòng lặp nhỏ, có thể thay
đổi yêu cầu dựa trên phản hồi từ khách hàng.
Microservices giúp hệ thống dễ thay đổi vì mỗi dịch vụ hoạt động độc lập. Khi cần cập
nhật một tính năng, chỉ cần thay đổi một dịch vụ nhỏ mà không ảnh hưởng đến toàn bộ hệ thống.
→ Kết hợp Microservices với Agile giúp nhóm phát triển phản ứng nhanh với yêu cầu
mới mà không phải viết lại toàn bộ phần mềm.
- Tăng tốc độ phát triển và triển khai
Agile chia dự án thành các phần nhỏ (sprint), giúp đội phát triển hoàn thành các tính năng nhanh hơn.
Microservices chia ứng dụng thành các dịch vụ độc lập, giúp nhiều nhóm có thể làm
việc song song mà không chồng chéo công việc. → Sử dụng Microservices giúp các
nhóm Agile triển khai phần mềm nhanh chóng, đảm bảo tiến độ của các sprint.
- Dễ dàng bảo trì và cải tiến liên tục
Agile nhấn mạnh vào cải tiến liên tục thông qua phản hồi từ người dùng.
Microservices giúp việc bảo trì và nâng cấp dễ dàng hơn vì chỉ cần cập nhật từng dịch
vụ thay vì toàn bộ hệ thống.
→ Kết hợp cả hai giúp hệ thống có thể cập nhật liên tục mà không gây gián đoạn hoạt động.
- Hỗ trợ làm việc nhóm hiệu quả
Agile thường chia nhóm phát triển thành các team nhỏ, làm việc độc lập trên từng phần của sản phẩm. lOMoAR cPSD| 58647650
Microservices cho phép mỗi nhóm phụ trách một dịch vụ cụ thể, giúp tránh tình trạng chồng chéo công việc.
→ Việc này giúp nhóm Agile phát triển phần mềm theo hướng tập trung, dễ dàng phối
hợp và quản lý công việc.
- Tích hợp DevOps để tối ưu hiệu suất
Agile thường đi kèm với DevOps để tự động hóa quá trình phát triển, kiểm thử và triển khai.
Microservices tận dụng DevOps để triển khai từng dịch vụ riêng biệt, đảm bảo tính ổn định và nhanh chóng.
→ Khi kết hợp, cả hai giúp rút ngắn thời gian từ lập trình đến triển khai thực tế, đảm
bảo phần mềm luôn được cập nhật nhanh nhất.
Câu 3: Decompose a software system in microservice and using tool such as VP
to represent. Determine requirements and then draw.
a. Decompose e-commerce system
Một hệ thống e-commerce có thể được tổ chức gồm nhiều dịch vụ con, đảm nhiệm chức năng cụ thể sau:
- Dịch vụ quản lý người dùng: xử lý đăng ký, đăng nhập, xác thực, phân quyền, quản lý thông tin người dùng.
- Dịch vụ quản lý order: xử lý đặt hàng, cập nhật trạng thái order.
- Dịch vụ thanh toán: xử lý các giao dịch, thanh toán, hoàn tiền.
- Dịch vụ sản phẩm: quản lý thông tin các sản phẩm. - Dịch vụ kho vận: kiểm tra kho
hàng, nhập kho, xuất kho - Dịch vụ vận chuyển: theo dõi vị trí đơn hàng.
- Dịch vụ thanh toán: gửi thông báo, email, sms tới người dùng.
- Dịch vụ Review and Rating: quản lý nhận xét, đánh giá của khách hàng về sản phẩm,
chất lượng dịch vụ...
- Dịch vụ phân tích và báo cáo: lập báo cáo về tình hình kinh doanh.
Từng dịch vụ được triển khai độc lập, đảm bảo nền tàng e-commerce hoạt động ổn định. lOMoAR cPSD| 58647650 b. Decompose medicine system
Một hệ thống y tê, đặc biệt là chăm sóc sức khỏe, có thể được chia thành các service sau:
- Patient Management Service: quản lý bệnh án bệnh nhân, tình hình sức khỏe, lịch hẹn.
- Prescription Management Service: Handles prescription generation, approvals, andtracking.
- Pharmacy Management Service: Manages medication inventory, availability, anddispensation tracking.
- Billing and Insurance Service: Handles payment processing, insurance claims, andbilling transactions.
- Doctor and Staff Management Service: Manages doctor schedules, specialties, andstaffallocations.
- Diagnostic and Lab Service: Handles test orders, results processing, andmedicalimaging. lOMoAR cPSD| 58647650
- Telemedicine Service: Supports virtual consultations, remote monitoring, and doctor- patient communication.
- Emergency Response Service: Manages ambulance dispatch, emergencycases, andtriage prioritization.
- Healthcare Analytics Service: Gathers and processes patient data for
insightsintotreatment efficacy and operational efficiency.
c. Decompose tourist assistant system
Hệ thống hỗ trợ du lịch gồm nhiều dịch vụ con sau:
- User management service: có chức năng như đăng ký, đăng nhập, xác thực, quản lý hồ
sơ người dùng, lưu lịch sử tìm kiếm, hành trình du lịch, đánh giá của người dùng.
- Destination service: có chức năng cung cấp thông tin về các địa điểm du lịch (mô tả,
hình ảnh, đánh giá), hiển thị danh sách điểm tham quan gần vị trí người dùng, gợi ý
điểm du lịch theo sở thích cá nhân.
- Booking service: đặt vé máy bay, khách sạn, tour du lịch, quản lý lịch sử booking lOMoAR cPSD| 58647650
- Review & rating service: cho phép người dùng đanh giá, bình luận về địa điểm, khách
sạn, nhà hàng, hiển thị đánh giá của người khác, phân tích đánh giá và đề xuất điểm đến dựa trên AI
- AI recommendation service: đề xuất điểm đến, lịch trình dựa trên sở thích và lịch sử
du lịch của người dùng.
d. University management system
Hệ thống quản lý trường đại học gồm các dịch vụ: - User Management Service: Manages authentication, student, faculty, andadministrativeprofiles.
- Course Management Service: Handles course creation, syllabus management, andfaculty assignments.
- Student Enrollment Service: Manages student registration, course enrollment, andacademic records.
- Examination and Grading Service: Facilitates exam scheduling, grading, andresultpublication.
- Attendance Management Service: Tracks student and faculty attendance,
integratingwith biometric or RFID systems. lOMoAR cPSD| 58647650
- Library Management Service: Manages book inventory, lending, and returnprocesses.
- Hostel and Accommodation Service: Handles room allocation, fee payment, andmaintenance requests.
- Financial and Fee Management Service: Processes tuition payments,
scholarships,andfinancial aid distribution.
- Research and Publication Service: Supports research project tracking,
fundingapplications, and journal publications.
- Event and Notification Service: Sends updates about university events, notices, andemergency alerts
e. Decompose Grab Car Management System
Một hệ thống quản lý đặt xe của Grab gồm có các service sau: - User Management Service: Handles user registration, authentication,
andprofilemanagement for both riders and drivers.
- Ride Matching Service: Matches riders with nearby available drivers inreal-time.
- Booking Service: Manages ride requests, ride status, and cancellations. lOMoAR cPSD| 58647650
- Payment Service: Handles fare calculations, payment processing, andrefunds.
Navigation and Routing Service: Provides optimized routes using real-timetrafficdata. - Driver Management Service: Manages driver details, ride history, andperformancetracking. - Vehicle Management Service: Keeps track of vehicle details,
maintenanceschedules,and availability.
- Rating and Review Service: Collects user and driver feedback for qualityassurance.
- Emergency Assistance Service: Offers SOS features, emergency contacts,
andsupportin case of incidents.
- Promotions and Loyalty Service: Manages discounts, referral programs, anduserrewards
Câu 4: Create PROJECT tensinhvien_project1 and APPLICATION customer, cart and
book (Customer & Item Management in e-commerce) lOMoAR cPSD| 58647650 Câu 5: 1. Book 2. Cart lOMoAR cPSD| 58647650 lOMoAR cPSD| 58647650 3. Customer lOMoAR cPSD| 58647650 Hình ảnh minh họa lOMoAR cPSD| 58647650 lOMoAR cPSD| 58647650