Tải bản đầy đủ (.docx) (69 trang)

Sad báo cáo môn học

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.13 MB, 69 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THÔNG</b>

<b>BÁO CÁO</b>

<b>Kiến trúc và thiết kế phần mềm</b>

<b>Sinh viên:</b> Phạm Thị Minh Nguyệt

<i>Hà Nội, ngày 26 tháng 04 năm 2024</i>

<b>Lời cảm ơn</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>Mục lục</b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

1.4.1 Tổng quan về hệ thống phần mềm doanh nghiệp...

1.4.2 Giới thiệu về kiến trúc hướng dịch vụ (SOA)...

1.4.3 Các bước triển khai một hệ thống SO...

1.4.4 Vấn đề bảo mật trong trong SOA...

1.4.5 Vấn đề về quản lý tiến trình trong SOA...

1.4.6 Ứng dụng và khó khăn khi triển khai SOA...

1.5 Kết luận...

<b>Chương 2: Kiến trúc Hệ thống ecomSys dựa trên Django...</b>

2.1 Mô tả Hệ thống ecomSys...

2.2 Kỹ thuật và Công nghệ Django...

2.3 Phân rã Hệ thống ecomSys dựa trên Django...

3.2.2 Biểu đồ hoạt động/swimlane...

3.2.3 Biểu đồ lớp phân tích cho từng Service...

3.2.4 Mơ hình data - kiểu/cơng nghệ dữ liệu...

3.2.5 Biểu đồ lớp thiết kế cho từng Service...

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Khi ứng dụng trở nên phức tạp và u cầu nhiều tính năng thì các vấn đề cơbản như hiệu năng, bảo mật, khả năng mở rộng, ... trở nên cấp thiết, đòi hỏi ứng dụngphải được tổ chức theo một hệ thống logic nhất định, từ đó các kiến trúc phần mềm rađời và các mẫu kiến trúc phần mềm (software architecture pattern) trở nên quan trọngđối với bất kỳ một ứng dụng nào.

<b>1.1.1 Kiến trúc phần mềm</b>

Theo Wikipedia, kiến trúc phần mềm (Software architecture) đề cập đến cấutrúc cơ bản của một hệ thống phần mềm và quy tắc của việc tạo ra những cấu trúc vàhệ thống như vậy. Mỗi cấu trúc bao gồm sự sắp xếp của các yếu tố phần mềm, mối

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

quan hệ giữa các yếu tố, và tính chất của các yếu tố đó.

Thiết kế kiến trúc phần mềm (software architecture design) ẩn dụ cho việc thiếtkế một tồ nhà. Nó được coi như bản thiết kế của hệ thống phần mềm. Từ đó có thểhình dung ra lượng công việc cụ thể phải làm, dẫn tới, việc quản lý dự án trở nên dễdàng hơn.

Cho tới giờ vẫn chưa có một định nghĩa phản ánh đầy đủ nhất về kiến trúcphần mềm bởi hai lý do:

- Sự phát triển nhanh chóng của cơng nghệ, mơi trường phát triển, các loạimơ hình kiến trúc phần mềm khác nhau khiến cho các định nghĩa trướcđó nhanh chóng trở nên lỗi thời.

- Sự khác biệt về quan điểm giữa các trường phái. Ví dụ: một số softwarearchitect coi kiến trúc phần mềm là bản thiết kế chi tiết của hệ thống,trong khi những người khác định nghĩa nó là lộ trình phát triển hệ thống.

<b>1.1.2 Mẫu kiến trúc phần mềm </b>

Theo Wikipedia, mẫu kiến trúc phần mềm (Software architecture pattern), gọitắt là mẫu kiến trúc (architecture pattern hoặc architectural pattern) là một giải phápchung, có thể tái sử dụng để giải quyết một vấn đề thường gặp trong một hồn cảnhcụ thể trong kiến trúc phần mềm. Nó giống như một khn mẫu có thể được áp dụngđể tạo ra kiến trúc của một hệ thống phần mềm.

<b>1.1.3 Tại sao kiến trúc phần mềm quan trọng?</b>

Kiến trúc phần mềm đóng vai trị quan trọng trong phát triển phần mềm vìnhiều lý do:

- Cung cấp khung làm việc rõ ràng: Kiến trúc phần mềm giúp định hìnhcấu trúc cơ bản của ứng dụng, bao gồm cách các thành phần kỹ thuậttương tác với nhau. Nó như bản đồ cho các nhà phát triển, giúp họ hiểucách xây dựng các thành phần của phần mềm để đạt được mục tiêu cụthể.

- Đảm bảo hiệu suất và khả năng mở rộng: Một kiến trúc tốt cho phép hệthống xử lý tải lớn và mở rộng dễ dàng khi cần thiết. Nó xác định cáchcác yêu cầu về hiệu suất và khả năng mở rộng được đáp ứng.

- Tối ưu hóa ngân sách và tài nguyên: Kiến trúc hợp lý giúp tránh lãng phínguồn lực và thời gian phát triển, do có kế hoạch và cấu trúc rõ ràng từđầu. Điều này cũng giúp kiểm sốt chi phí phát triển.

- Dễ dàng bảo trì và cập nhật: Kiến trúc rõ ràng và được tổ chức tốt giúpviệc bảo trì và cập nhật phần mềm trở nên dễ dàng hơn. Nó cho phép sửa

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

đổi hoặc thêm tính năng mới mà khơng làm ảnh hưởng đến tồn bộ hệthống.

- Giảm thiểu rủi ro: Một kiến trúc được thiết kế tốt giúp nhận diện vàgiảm thiểu rủi ro từ sớm trong quá trình phát triển, bao gồm vấn đề vềhiệu suất, bảo mật và sự phụ thuộc giữa các thành phần.

- Tăng cường bảo mật: Kiến trúc xác định cách bảo mật được tích hợp vàohệ thống, từ việc xác định các điểm truy cập quan trọng đến việc thiếtlập các lớp bảo mật.

- Hỗ trợ quyết định kỹ thuật: Nó cung cấp một khung tham chiếu để đưara các quyết định kỹ thuật, từ việc chọn công nghệ đến việc quyết địnhcách triển khai các tính năng.

- Tăng khả năng hợp tác: Kiến trúc rõ ràng giúp các nhà phát triển và cácbên liên quan khác làm việc cùng nhau một cách hiệu quả hơn, do mọingười đều hiểu cấu trúc tổng thể và mục tiêu của dự án.

<b>1.1.4 Đặc tính của kiến trúc phần mềm</b>

Kiến trúc phần mềm bao gồm nhiều đặc tính. Để đánh giá và lựa chọn mẫukiến trúc nào cho ứng dụng, các nhà phát triển thường dựa trên một số đặc tính quantrọng sau:

- Tính linh hoạt (Overall Agility): Có khả năng linh hoạt thích ứng với cácyêu cầu và thay đổi trong quá trình phát triển và triển khai hệ thống.- Khả năng triển khai (Deployment): Phải có khả năng triển khai dễ dàng

và linh hoạt trên nhiều nền tảng khác nhau.

- Khả năng kiểm thử (Testability): Architecture Pattern phải cung cấpđược khả năng kiểm thử linh hoạt với nhiều loại kiểm thử khác nhau mộtcách dễ dàng.

- Hiệu suất (Performance):Mơ hình kiến trúc phải cân nhắc giữa tính hiệuquả và yêu cầu hiệu suất của hệ thống, đảm bảo rằng nó đáp ứng đượccác tiêu chí về hiệu suất.

- Mở rộng (Scalability): Có khả năng mở rộng để đáp ứng nhu cầu tăngcường và đảm bảo tính linh hoạt trong quá trình mở rộng

- Phát triển ứng dụng (Development): Sự phức tạp của từng mơ hình kiếntrúc có thể ảnh hưởng tới khả năng phát triển của ứng dụng.

<b>1.1.5 So sánh Architecture pattern và Design pattern</b>

Architecture pattern (mẫu kiến trúc) và Design pattern (mẫu thiết kế) đều đượccoi là giải pháp tái sử dụng cho các vấn đề thường gặp trong thiết kế phần mềm,

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

nhưng chúng đề cập đến các cấp độ và phạm vi khác nhau của q trình phát triểnphần mềm.

Ta có bảng so sánh architecture pattern và design pattern như sau:

<b>Architecture patternDesign patternPhạm vi</b> Mẫu kiến trúc tập trung vào cấu trúc tổng

thể của hệ thống phần mềm. Chúng đềcập đến cách tổ chức và phân chia hệthống thành các thành phần lớn, cũngnhư cách thức tương tác giữa các thànhphần này.

Mẫu thiết kế thường tập trung vào giảiquyết các vấn đề cụ thể trong mã lậptrình.

<b>Mục đích Cung cấp giải pháp tổng thể cho việc</b>

phát triển phần mềm, giúp định hình cáchhệ thống sẽ làm việc, phản ứng với cácyêu cầu, và phát triển theo thời gian.

Cung cấp các cách tiếp cận tiêu chuẩn đểgiải quyết các vấn đề chung trong lậptrình, như cách quản lý các object, tươngtác giữa các class, hoặc cấu trúc của mãnguồn

<b>Ví dụ</b> Microservices, Monolithic, Layered tier), Event-driven,...

(n-Singleton, Factory, Observer, Strategy,Decorator...

<b>1.2 Kiến trúc monolithic</b>

Kiến trúc một khối là mẫu thiết kế được dùng nhiều nhất trong giới lập trìnhweb hiện nay bởi tính đơn giản của nó khi phát triển và khi deploy. Mặc dù mỗi ứngdụng sẽ được triển khai theo những cách khác nhau, nhưng nhìn chung thì khi ứngdụng được lập trình theo kiến trúc một khối, kết quả thường đạt được như sau:

- Nó có thể hỗ trợ nhiều loại client như browser hay các app native trên cảdesktop và mobile.

- Nó có thể expose API cho bên thứ ba.

- Nó có thể tích hợp với các ứng dụng khác thông qua REST/SOAP webservice hoặc các message queue.

- Nó có thể xử lý các request dạng HTTP, thực hiện logic nghiệp vụ, truycập cơ sở dữ liệu và có thể trao đổi dữ liệu với các hệ thống khác.

- Nó có thể chạy trên các container như Tomcat, JBoss,..

- Nó có thể scale theo chiều ngang (vertical scalability) bằng cách tăngsức mạnh của phần cứng hoặc scale theo chiều dọc (horizontalscalability) bằng cách load balancers.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Một ví dụ phổ biến về kiến trúc một khối có thể được mơ tả như sau:Hãy tưởng tượng một hệ thống đặt phòng khách sạn trực tuyến nhận đơn

đặt hàng trực tuyến từ khách hàng, xác minh phòng trống, xác minh tùy chọn thanhtốn, đặt phịng và thơng báo cho khách sạn. Ứng dụng này bao gồm một số layer vàcomponent bao gồm ứng dụng phía client, xây dựng giao diện người dùng phong phúvà một số thành phần phụ trợ khác chịu trách nhiệm quản lý các đặt phịng, xác minhthanh tốn, thơng báo cho khách hàng / khách sạn, v.v. Ứng dụng sẽ được đóng góivà deploy bằng một file Web Application Archive (WAR) duy nhất và được chạytrên một container như Tomcat và có thể scale bằng load balancer. Hãy xem diagramdưới đây:

Những ưu điểm của kiến trúc một khối

- Dễ phát triển vì các stack công nghệ thống nhất ở tất cả các layer.

- Dễ test do tồn bộ project được đóng gói trong một package nên dễ dàngchạy test integration và test end-to-end.

- Deploy đơn giản và nhanh chóng nếu bạn chỉ có một package để bậntâm.

- Dễ scale vì chúng ta có thể có nhiều instance cho load balancer.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

- Yêu cầu team size nhỏ cho việc maintain app.- Team member có thể chia sẻ ít nhiều về skill.- Tech stack đơn giản và đa số là dễ học.

- Phát triển ban đầu nhanh hơn do đó có thể đem sale hoặc marketingnhanh hơn.

- Yêu cầu cơ sở hạ tầng đơn giản. Thậm chí một container đơn giản cũngđủ để chạy ứng dụng.

Những nhược điểm của kiến trúc một khối

- Các component được liên kết chặt chẽ với nhau dẫn đến side effectkhông mong muốn như khi thay đổi một component ảnh hưởng đến mộtcomponent khác.

- Theo thời gian thì project trở nên phức tạp và lớn dần. Các tính năngmới sẽ mất nhiều thời gian hơn để phát triển và tái cấu trúc các tính nănghiện có sẽ nhiều khó khăn hơn.

- Tồn bộ ứng dụng cần được triển khai lại cho bất kỳ thay đổi nào.

- Không hề dễ để hiểu project do các module liên quan chặt chẽ lẫn nhau.Một issue nhỏ cũng có thể làm chết tồn bộ ứng dụng.

- Áp dụng cơng nghệ mới khó khăn vì tồn bộ ứng dụng phải thay đổi. Dođó nhiều ứng dụng một khối thường phụ thuộc một công nghệ cũ và lỗithời.

- Các service quan trọng không thể scale riêng dẫn đến lãng phí tàingun vì tồn bộ ứng dụng phải scale theo.

- Các ứng dụng một khối lớn sẽ có thời gian khởi động lâu và tốn tàinguyên CPU cũng như bộ nhớ.

- Các team tham gia vào dự án phải phụ thuộc lẫn nhau và tất khó để mởrộng quy mơ team.

Chúng ta thường sử dụng kiến trúc một khối khi:

- Phạm vi ứng dụng là nhỏ và được xác định rõ. Bạn chắc chắn ứng dụngsẽ không phát triển mạnh về các tính năng. Ví dụ: blog, web mua sắmtrực tuyến đơn giản, ứng dụng CRUD đơn giản…

- Team-size nhỏ, thường ít hơn 8 người.

- Mặt bằng kỹ năng của các thành viên trong team thường không cao.- Thời gian để có thể marketing là quan trọng.

- Bạn khơng muốn mất thời gian cho cơ sở hạ tầng, monitoring,…

- Khi người dùng thường nhỏ và ít nên bạn khơng mong đợi họ sẽ mở

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

rộng. Ví dụ các ứng dụng doanh nghiệp nhắm đến mục tiêu là một nhómngười cụ thể…

<b>1.3 Kiến trúc microservice</b>

Đây là loại kiến trúc đang dần trở nên phổ biến trong những năm gần đây nhờkhả năng module hóa và khả năng mở rộng. Kiến trúc microservice có thể cung cấphầu hết các tính năng của một ứng dụng một khối. Ngồi ra, nó cung cấp nhiều tínhnăng và linh hoạt hơn, do đó nó là sự lựa chọn ưu việt cho ứng dụng phức tạp. Khônggiống như kiến trúc một khối, khá khó để khái qt hóa kiến trúc microservice vì nócó thể thay đổi nhiều tùy thuộc vào trường hợp sử dụng và triển khai. Nhưng nhìnchung thì chúng cũng có một số đặc điểm như sau:

- Các component trong kiến trúc microservice liên kết khá lỏng lẻo (loosecoupling). Các component có thể được phát triển, test, deploy và scaleđộc lập mà không ảnh hưởng đến các component khác.

- Các component không cần phải được phát triển cùng một stack côngnghệ. Điều này có nghĩa là một component có thể chọn stack cơng nghệvà ngơn ngữ lập trình của riêng nó.

- Chúng thường sử dụng các tính năng nâng cao như truy tìm dịch vụ(service discovery), circuit breaking, cân bằng tải (load balance),…- Các component chủ yếu là nhẹ và chúng làm theo chức năng riêng biệt.

Ví dụ dịch vụ xác thực sẽ chỉ quan tâm xác thực người dùng vào hệthống.

- Thường có một thiết lập giám sát (monitor) và xử lý sự cố.

Một ví dụ phổ biến về kiến trúc microservice có thể được mơ tả như sau:

Chúng ta hãy tưởng tượng một hệ thống thương mại điện tử trực tuyến khổnglồ, nơi khách hàng có thể xem các danh mục hàng hóa, đánh dấu mục u thích, thêmcác mặt hàng vào giỏ hàng, thực hiện và theo dõi đơn đặt hàng, v.v. Hệ thống có quảnlý hàng tồn kho, quản lý khách hàng, nhiều phương thức thanh toán, quản lý đơnhàng, v.v. Ứng dụng này bao gồm một số module và component bao gồm UIgateway, xây dựng giao diện người dùng đẹp, xử lý xác thực người dùng, cân bằngtải, và một số ứng dụng khác chịu trách nhiệm quản lý kho, xác minh thanh toán vàquản lý đơn hàng. Nó cũng có giám sát hiệu suất và tự động chuyển đổi dự phòngcho các service. Ứng dụng được deploy bằng nhiều file WAR trên các Dockercontainer và được host trên một dịch vụ cloud. Hãy xem diagram dưới đây:

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Những ưu điểm của kiến trúc microservice

- Các component có kết nối lỏng lẻo dẫn đến dễ cách ly, dễ test và khởiđộng nhanh.

- Vịng đời phát triển nhanh hơn. Tính năng mới được phát triển nhanhhơn và tính năng cũ được cấu trúc lại dễ hơn.

- Các service có thể deploy độc lập nên ứng dụng dễ đọc, dễ tạo các bảnvá hơn.

- Những issue, ví dụ liên quan đến memory leak một trong các service, bịcơ lập và có thể không làm sập ứng dụng.

- Việc áp dụng các cơng nghệ mới dễ hơn. Các component có thể đượcnâng cấp độc lập với nhau.

- Các mơ hình scale phức tạp và hiệu quả hơn có thể được thiết lập. Cácservice quan trọng có thể scale hiệu quả hơn. Các component riêng sẽkhởi động nhanh hơn và cải thiện thời gian khởi động của cả hệ thống.- Các team tham gia sẽ ít phụ thuộc lẫn nhau. Kiến trúc này rất thích hợp

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

cho các đội Agile.

Những nhược điểm của kiến trúc microservice

- Phức tạp hơn về mặt tổng thể vì các component khác nhau có các stackcông nghệ khác nhau nên buộc team phải tập trung đầu tư thời gian đểtheo kịp cơng nghệ.

- Khó thực hiện test end-to-end và integration test vì có nhiều stack cơngnghệ khác nhau.

- Deploy tồn bộ ứng dụng phức tạp hơn vì có nhiều container và nền tảngảo hóa liên quan.

- Ứng dụng được scale hiệu quả hơn nhưng thiết lập nâng cấp sẽ phức tạphơn vì nó sẽ u cầu nâng cao nhiều tính năng như truy tìm dịch vụ(service discovery), định tuyến DNS,…

- Yêu cầu một team-size lớn để maintain ứng dụng vì có nhiều componentvà cơng nghệ khác nhau.

- Các thành viên trong team chia sẻ các skill khác nhau dựa trêncomponent họ làm nên sẽ tạo ra sự khó khăn khi thay thế và chia sẻ kiếnthức.

- Stack công nghệ phức tạp và khó để học hơn.

- Thời gian phát triển ban đầu là chậm nên thời gian để có thể làmmarketing lâu hơn.

- Yêu cầu cơ sở hạ tầng phức tạp. Thông thường sẽ yêu cầu nhiềucontainer (Docker) và nhiều máy JVM để chạy.

Chúng ta thường sử dụng kiến trúc microservice khi:

- Ứng dụng có phạm vi lớn và bạn xác định các tính năng sẽ được pháttriển rất mạnh theo thời gian. Ví dụ: cửa hàng thương mại điện tử trựctuyến, dịch vụ truyền thông xã hội, dịch vụ truyền phát video với sốlượng người dùng lơn, dịch vụ cung cấp API,…

- Team-size lớn, có đủ thành viên để phát triển các component riêng lẻmột cách hiệu quả.

- Mặt bằng kỹ năng của team tốt và các thành viên tự tin về các mẫu thiếtkế microservice nâng cao.

- Thời gian để đem đi marketing không quan trọng. Kiến trúcmicroservice sẽ mất nhiều thời gian hơn để hoạt động được.

- Bạn sẵn sàng chi nhiều hơn cho cơ sở hạ tầng, giám sát,… để nâng caochất lượng sản phẩm.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

- Tiềm năng về người dùng lớn và bạn kỳ vọng số lượng người dùng sẽphát triển. Ví dụ một phương tiện truyền thơng xã hội với mục tiêu làngười dùng trên toàn thế giới.

- Nguyên nhân:

+ Sự xuất hiện của nhiều công nghệ mới tạo nên môi trường khôngđồng nhất. trong khi nhu cầu về trao đổi, chia sẻ, tương tác giữacác hệ thống không thể đáp ứng được trong một môi trường nhưvậy

+ Vấn đề lập trình dư thừa và khơng thể tái sử dụngPhân tích, đánh giá một số mơ hình kiến trúc phân tác hiện nay

- Ba kiến trúc phân tán phổ biến hiện nay: CORBA, DCOM và EJB

- Các kiến trúc này là sự mở rộng của các hệ thống hướng đối tượng bằngcách cho phép phân tán các đối tượng trên mạng.

● CORBA- Common Object Request Broker Architecture:

- CORBA được định nghĩa bởi Object Management Group (OMG), là mộtkiến trúc phân tán mở, độc lập nền tảng và độc lập ngơn ngữ

- Ưu điểm

+ các lập trình viên có thể chọn bất kỳ ngôn ngữ, nền tảng phầncứng, giao thức mạng và công nghệ để phát triển mà vẫn thoả cáctính chất của CORBA.

- Nhược điểm

+ ngơn ngữ lập trình cấp thấp, rất phức tạp, khó học và cần một độingũ phát triển có kinh nghiệm

+ các đối tượng CORBA khó có thể tái sử dụng ● EJB - Enterprise Java Bean:

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

và triển khai các ứng dụng phân tán hướng đối tượng cỡ vừa và lớn- Kiến trúc EJB có 3 tầng: tầng trình diễn, tầng xử lý nghiệp vụ, các tài

nguyên như cơ sở dữ liệu máy chủ- Ưu điểm:

+ EJB là một kiến trúc tốt cho việc tích hợp các hệ thống- Nhược điểm

+ không phải là một chuẩn mở, khả năng giao tiếp với các chuẩnkhác vẫn còn hạn chế

● DCOM – Distributed Component Object Model:

- là một mơ hình phân tán dễ triển khai với chi phí thấp,- hỗ trợ tigh coupling giữa các ứng dụng và hệ điều hành

- DCOM hỗ trợ kết nối giữa các đối tượng và những kết nối này có thểđược thay đổi lúc đang chạy

+ giảm chi phí đầu tư cơ sở hạ tầng

+ khai thác có hiệu quả các cơng nghệ có sẵn

+ phải cố gắng phục vụ yêu cầu của khách hàng ngày càng tốt hơn+ đáp ứng tốt các thay đổi nghiệp vụ

+ khả năng tích hợp cao với các hệ thống bên ngồi- Ngun nhân: sự khơng đồng nhất và sự thay đổi

<b>1.4.2 Giới thiệu về kiến trúc hướng dịch vụ (SOA)</b>

Khái niệm về kiến trúc hướng dịch vụ

- là một hướng tiếp cận với việc thiết kế và tích hợp các phần mềm, chứcnăng, hệ thống theo dạng module, trong đó mỗi module đóng vai trị làmột “dịch vụ có tính loose coupling”, và có khả năng truy cập thơng qua

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Nguyên tắc khi xây dựng một hệ thống SOA:

- Sự phân định ranh giới rạch ròi giữa các dịch vụ:

+ Các dịch vụ thực hiện quá trình tương tác chủ yếu thơng quathành phần giao tiếp

+ Thành phần giao tiếp quy định về những định dạng thơng điệp sửdụng trong q trình trao đổi

+ Cách duy nhất để các đối tượng bên ngồi có thể truy cập thôngtin và chức năng của dịch vụ.

+ Ta chỉ cần gửi các thông điệp theo các định dạng đã được địnhnghĩa trước mà không cần phải quan tâm đến cách xử lý của dịchvụ như thế nào

- Các dịch vụ tự hoạt động:

+ Các dịch vụ cần phải được triển khai và hoạt động như nhữngthực thể độc lập mà không lệ thuộc vào một dịch vụ khác.

+ Dịch vụ phải có tính bền vững cao.

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

hay gửi thông điệp ồ ạt) bằng cách sử dụng các kỹ thuật về antoàn, bảo mật

+ hệ thống sẽ có tính liên kết và khả năng dễ mở rộng- Tính tương thích của dịch vụ dựa trên chính sách

+ Một dịch vụ khi muốn tương tác với một dịch vụ khác thì phảithỏa mãn các chính sách (policy) và u cầu (requirements) củadịch vụ đó như là mã hóa, bảo mật, vv.

+ Để thực hiện điều này, mỗi dịch vụ cần phải cung cấp cơng khaicác u cầu, chính sách đó

Tính chất của một hệ thống SOA:- Loose coupling

+ các module có tính loose coupling khi có một số ràng buộc đượcmơ tả rõ ràng

+ Hầu như mọi kiến trúc phần mềm đều hướng đến tính loosecoupling giữa các module.

+ Mức độ kết dính của mỗi hệ thống ảnh hưởng trực tiếp đến khảnăng chỉnh sửa hệ thống của chính nó

- Sử dụng lại dịch vụ

+ Bởi vì các dịch vụ được cung cấp lên trên mạng và được đăng kýở một nơi nhất định (service registry) nên chúng dễ dàng được tìmthấy và tái sử dụng

+ Tái sử dụng lại các dịch vụ giúp loại bỏ những thành phần trùnglắp, tăng độ vững chắc trong cài đặt, đơn giản hoá việc quản trị+ Những dịch vụ được dùng chung bởi tất cả các ứng dụng của một

hệ thống SOA gọi là những shared infrastructure service- Khả năng cộng tác

+ các hệ thống có thể giao tiếp với nhau trên nhiều nền tảng và ngônngữ khác nhau

+ Mỗi dịch vụ cung cấp một interface có thể được triệu gọi thơngqua một dạng kết nối

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

+ Một kết nối gọi là interoperable chứa bên trong nó một giao thứcvà một định dạng dữ liệu mà mỗi client kết nối đến nó đều hiểu- Tự phục hồi

+ là một hệ thống có khả năng tự hồi phục sau khi bị lỗi mà khôngcần sự can thiệp của con người

+ Độ tin cậy (reliability) là mức độ đo khả năng một hệ thống xử lýtốt như thế nào trong tình trạng hỗn loạn; phụ thuộc vào khả năngphụ hồi của phần cứng sau khi bị lỗi

+ Nếu một thể hiện service nào đó khơng hoạt động thì một thể hiệnkhác vẫn có thể hồn tất giao dịch cho khách hàng mà khơng bịảnh hưởng gì

+ Đây là một trong những tình chất cơ bản của các hệ thống hướngdịch vụ.

Lợi ích khi triển khai hệ thống SOA- Sử dụng lại các thành phần sẵn có

+ nó giúp các cơng ty thu được giá trị nhiều hơn bằng cách sử dụnglại những tài ngun sẵn có

+ giảm chi phí cho phần kiến trúc và tích hợp; giảm chi phí muaphần mềm mới

+ Giảm chi phí phát triển và kiểm thử, và tránh công việc trùng lặp- Giải pháp ứng dụng tổng hợp cho doanh nghiệp

+ SOA mang đến khả năng tổng hợp một lớp các ứng dụng mớibằng cách kết hợp chức năng từ những hệ thống có sẵn, cung cấpcho người cuối những chức năng liên kết

- Tính loose coupling giúp tăng tính linh hoạt và khả năng triển khai càiđặt

+ phía triệu gọi dịch vụ khơng cần quan tâm đến địa chỉ hoặc côngnghệ nền tảng của service mang đến khả năng linh hoạt cao vànhiều lợi ích khác.

+ tăng khả năng triển khai

- Tăng khả năng mở rộng và khả năng sẵn sàng cung cấp

+ Nhờ tính độc lập địa chỉ của SOA, ta có thể tăng khả năng mởrộng bằng cách thêm nhiều thể hiện (instance) của một service+ SOA có thể chuyển tiếp nội dung yêu cầu đến một thể hiện khác

khi cần, nhờ đó tăng khả năng sẵn sàng phục vụ

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

Kiến trúc phân tầng hệ thống SOA:- Connectivity layer (tầng kết nối)

+ kết nối đến các ứng dụng enterprise hoặc tài nguyên bên dưới vàcung cấp chúng thành dạng những dịch vụ

+ chuyên giao tiếp với các nhà cung cấp, hoạt động như một bộchuyển đổi (adapter) giữa các ứng dụng phi dịch vụ và mạng cácdịch vụ khác

- Orchestration layer (tầng điều phối)

+ Tầng orchestration chứa các thành phần đóng vai trị vừa là nhữngdịch vụ sử dụng vừa là những dịch vụ cung cấp.

+ Những dịch vụ này sử dụng những dịch vụ của tầng kết nối và cácdịch vụ orchestration khác để kết hợp những chức năng cấp thấphơn thành những dịch vụ hoạt động ở cấp cao hơn, có hành vi gầnvới những chức năng nghiệp vụ thực hơn.

- Tầng tổng hợp (tầng trình diễn)

+ Dữ liệu truyền qua lại giữa những dịch vụ cuối cùng cũng địnhhướng đến người sử dụng theo nhiều dạng giao diện khác nhau.+ được xem là tầng tích hợp cuối cùng của q trình tích hợp.

+ là tầng đơn thuần sử dụng các dịch vụ, nó cung cấp các ứng dụngcho người dùng cuối

<b>1.4.3 Các bước triển khai một hệ thống SO</b>

- Mơ tả bài tốn- Phân rã Domain

- Xây dựng mơ hình Goal-service- Phân tích hệ thống con

- Phân bổ dịch vụ- Đặc tả thành tố

- Cấu trúc thành phần và dịch vụ- Lựa chọn giải pháp thực thi

<b>1.4.4 Vấn đề bảo mật trong trong SOA</b>

- Những hạn chế của tường lửa

- Cơ chế bảo mật chưa được định nghĩa một cách đầy đủ- Các giải pháp bảo mật khó tích hợp với nhau

- Bảo mật trong quy trình phối hợp hoạt động của các web service

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<b>1.4.5 Vấn đề về quản lý tiến trình trong SOA</b>

Khái niệm về quản lý tiến trình- Khái niệm

+ Tiến trình nghiệp vụ là hoạt động trong thế giới thực gồm mộtchuỗi các tác vụ được liên kết, phối hợp, thực hiện theo một trìnhtự thích hợp, với những quy định, ràng buộc nhằm hướng đến mộtmục tiêu

+ Quản lý tiến trình là cách xác định, mơ hình hóa, phát triển, triểnkhai, và quản lý các tiến trình nghiệp vụ

+ Quản lý tiến trình là các hệ thống phối hợp các web service- Mục tiêu và lợi ích

+ Giảm khó khăn về việc khơng nhất qn giữa các yêu cầu nghiệpvụ và các hệ thống tin học.

+ Tăng hiệu suất làm việc của các nhân viên bằng cách qui trình hóavà tự động hóa các thao tác nghiệp vụ

+ Tăng tính linh hoạt và khả năng cơ động bằng cách tách biệt phầnxử lý ra khỏi các qui tắc nghiệp vụ, biểu diễn các qui trình xử lýdưới dạng dễ dàng đáp ứng được các thay đổi của các yêu cầu,của thị trường

Hệ thống quản lý tiến trình- Khái niệm

+ Cung cấp các kỹ thuật để hỗ trợ việc định nghĩa, mơ hình hóa,phát triển, triển khai, và quản lý các tiến trình nghiệp vụ

- Mơ hình hóa tiến trình xử lý

+ Mơ hình hóa các u cầu nghiệp vụ (trong giai đoạn phân tích)+ Mơ hình hóa ràng buộc giữa các tác vụ: trình tự thực hiện, khi nào

thì được kích hoạt, đối tượng nào sẽ thực hiện- Thực thi tiến trình

+ Gồm các phương pháp đảm nhiệm việc thực thi tiến trình, quản lýcác thể hiện của tiến trình.

+ Thực thi tiến trình với các ràng buộc sau:

● Đảm bảo thực thi các tác vụ đúng trình tự

● Đảm bảo đối tượng thực thi tác vụ có đầy đủ quyền

● Theo dõi trạng thái của tiến trình: tác vụ nào đã hồn thành,tác vụ nào đủ điều kiện để thực thi, kiểm tra thời gian cịnhiệu lực của tiến trình và các tác vụ

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

- Giám sát tiến trình

+ Bao gồm các công cụ hỗ trợ những người sử dụng tiến trình vàcác chun viên quản trị hệ thống có thể theo dõi và điều khiểncác tiến trình

+ Các thơng tin theo dõi bao gồm: thông tin về các tiến trình đangđược thực thi, thơng tin về các tiến trình đã hồn thành

+ Các điều khiển bao gồm: hỗn và tiếp tục thực thi một tiến trình,thay đổi quyền ưu tiên của tiến trình

Kết hợp quản lý tiến trình với SOA

- Một hệ thống quản lý tiến trình mà khơng có tầng dịch vụ thì rất phứctạp, dễ đổ vỡ

- Tầng tiến trình nghiệp vụ khi đó cần phải truy cập trực tiếp xuống tầngứng dụng. Vì thế sự ràng buộc giữa hai lĩnh vực: nghiệp vụ và kỹ thuậtlà quá chặt chẽ

- Khi triển khai SOA với công nghệ web service thì xuất hiện thêm mộttầng dịch vụ

- Tầng dịch vụ bao gồm:

+ Các dịch vụ nghiệp vụ tương ứng với các lĩnh vực nghiệp vụ trongthực tế(Nhân sự, Tài chính, Kế hoạch, Thống kê), kèm theo cácmơ hình dữ liệu

+ Các dịch vụ kỹ thuật với khả năng tái sử dụng để có thể chia sẻgiữa các lĩnh vực nghiệp vụ.

- Web services platform hỗ trợ cho việc xây dựng và sử dụng các dịch vụmột cách độc lập với tầng ứng dụng và tầng kỹ thuật bên dưới.

- Cung cấp các tính năng quản lý dịch vụ nhằm hỗ trợ tầng tiến trìnhnghiệp vụ có thể linh động hơn trong việc xác định và truy cập các dịchvụ

<b>1.4.6 Ứng dụng và khó khăn khi triển khai SOA</b>

Đối tượng áp dụng

- Các doanh nghiệp lớn- các tập đoàn kinh tế

- Các doanh nghiệp liên quan đến xử lý giao dịch đa dạng: Banking, Bảohiểm, Y tế Khối chính phủ với các dịch vụ hành chính

- Các đơn vị phát triển phần mềm – Cung ứng giải phápKhó khăn khi xây dựng mơ hình SOA

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

Tổng kết lại, kiến trúc monolithic và microservice đều có ưu điểm và hạn chếriêng. Việc chọn một kiểu kiến trúc phù hợp phụ thuộc vào yêu cầu của ứng dụng,

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

quy mô và khả năng mở rộng cần thiết. Kiến trúc monolithic thích hợp cho nhữngứng dụng đơn giản và quy mô nhỏ, trong khi kiến trúc microservice phù hợp chonhững ứng dụng lớn, phức tạp và đòi hỏi khả năng mở rộng cao

<b>Chương 2: Kiến trúc Hệ thống ecomSys dựa trên Django2.1 Mô tả Hệ thống ecomSys</b>

Hệ thống Ecommerce (ecomSys) là một nền tảng mua bán trực tuyến được xâydựng để cung cấp trải nghiệm mua sắm thuận tiện và linh hoạt cho người dùng. Hệthống này bao gồm các dịch vụ và thành phần quan trọng để quản lý thông tin ngườidùng, quản lý đơn hàng và quản lý sản phẩm.

<b>2.1.1 Dịch vụ User (Người dùng)</b>

Mô tả

- Dịch vụ User cung cấp chức năng đăng nhập và đăng ký tài khoản.Người dùng có thể tạo tài khoản mới hoặc đăng nhập vào tài khoản hiệncó để truy cập vào các tính năng của hệ thống

- Dịch vụ cung cấp cho người dùng khả năng quản lý thông tin cá nhân,bao gồm việc cập nhật thông tin, thay đổi mật khẩu và quản lý địa chỉgiao hàng

- Ngoài ra, dịch vụ User cũng giúp người dùng theo dõi lịch sử mua hàng,xem lại các đơn hàng đã đặt và theo dõi tiến trình vận chuyển

Chức năng

- Đăng ký tài khoản người dùng mới.

- Đăng nhập và xác thực tài khoản người dùng.- Quản lý thông tin cá nhân và cài đặt tài khoản.- Quản lý danh sách yêu thích và lịch sử mua hàngActors

- Khách hàng- Quản trị viên Use cases

- Người dùng đăng ký tài khoản mới.

- Người dùng đăng nhập và xác thực tài khoản.

- Người dùng cập nhật thông tin cá nhân và cài đặt tài khoản.- Người dùng quản lý danh sách yêu thích và lịch sử mua hàng

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<b>2.1.2 Dịch vụ Order (Đơn hàng)</b>

Mô tả

- Dịch vụ Order quản lý quá trình đặt hàng và xử lý các đơn hàng từkhách hàng. Người dùng có thể tạo mới đơn hàng, chọn sản phẩm, thiếtlập số lượng và thực hiện thanh toán

- Dịch vụ Order cũng cung cấp chức năng xác nhận đơn hàng, gửi thôngbáo đến khách hàng về trạng thái đơn hàng và cập nhật thông tin về việcvận chuyển

- Ngoài ra, dịch vụ Order cũng hỗ trợ quản lý đơn hàng từ phía quản trịviên, cho phép họ kiểm tra và xử lý các đơn hàng, quản lý trạng thái đơnhàng và tạo báo cáo liên quan

Use cases

- Người dùng thêm sản phẩm vào giỏ hàng và tạo đơn hàng.- Người dùng xem thông tin chi tiết về đơn hàng.

- Quản trị viên kiểm tra và quản lý đơn hàng.

- Người dùng theo dõi trạng thái và lịch sử đơn hàng

<b>2.1.3 Dịch vụ Product (Sản phẩm)</b>

Mô tả

- Dịch vụ Product quản lý thơng tin về các sản phẩm có sẵn trong hệthống. Nó cung cấp chức năng thêm, sửa đổi và xóa sản phẩm từ phíaquản trị viên

- Dịch vụ này cũng cho phép người dùng xem thông tin chi tiết về sảnphẩm, bao gồm mô tả, giá cả, hình ảnh và thơng tin liên quan khác

- Đồng thời, dịch vụ Product cung cấp chức năng tìm kiếm sản phẩm,giúp người dùng dễ dàng tìm kiếm và duyệt qua danh sách các sản phẩmChức năng

- Quản lý thông tin chi tiết về sản phẩm.

- Hiển thị thông tin sản phẩm, bao gồm hình ảnh, mơ tả và giá cả.- Quản lý danh mục và thuộc tính của sản phẩm

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

- Người dùng (Khách hàng).- Quản trị viên

Use cases

- Người dùng xem thông tin chi tiết về sản phẩm.

- Người dùng thêm sản phẩm vào giỏ hàng hoặc danh sách yêu thích.- Quản trị viên quản lý thông tin chi tiết và danh mục sản phẩm.- Quản trị viên thêm, sửa đổi hoặc xóa sản phẩm

<b>2.1.4 Dịch vụ Search (Tim kiếm)</b>

Mô tả

- Dịch vụ Search trong hệ thống Ecommerce giúp người dùng tìm kiếmsản phẩm dễ dàng và nhanh chóng. Người dùng có thể nhập từ khóa tìmkiếm vào thanh tìm kiếm và hệ thống sẽ trả về kết quả phù hợp

- Dịch vụ Search sử dụng các thuật tốn tìm kiếm mạnh mẽ để tìm kiếmtrong cơ sở dữ liệu sản phẩm. Nó sẽ xem xét các yếu tố như tên sảnphẩm, mô tả, danh mục và các thuộc tính khác để đưa ra kết quả tìmkiếm chính xác và liên quan

- Kết quả tìm kiếm thường được hiển thị dưới dạng danh sách sản phẩm,với thơng tin cơ bản như tên, giá cả và hình ảnh. Người dùng có thểnhấp vào kết quả để xem thơng tin chi tiết về sản phẩm

- Người dùng tìm kiếm sản phẩm theo từ khóa.

- Người dùng duyệt qua danh sách sản phẩm tìm kiếm.- Người dùng xem thơng tin chi tiết về sản phẩm tìm kiếm.

- Quản trị viên kiểm tra kết quả tìm kiếm và tối ưu hóa thuật tốn tìmkiếm

<b>2.1.5 Dịch vụ Comment (Bình luận)</b>

Mơ tả

- Dịch vụ Comment cho phép người dùng chia sẻ ý kiến, nhận xét và đánh

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

giá về các sản phẩm trong hệ thống Ecommerce. Người dùng có thể viếtbình luận, đánh giá số sao và chia sẻ trải nghiệm cá nhân của mình

- Bình luận từ người dùng thường được hiển thị trên trang sản phẩm, chophép người khác đọc và tham khảo ý kiến của người dùng trước khiquyết định mua sản phẩm đó

- Dịch vụ Comment cũng cung cấp tính năng quản lý bình luận, cho phépquản trị viên kiểm duyệt và xóa bất kỳ bình luận khơng phù hợp hoặcspam

Chức năng

- Người dùng viết bình luận và đánh giá sản phẩm.

- Hiển thị bình luận và đánh giá sản phẩm cho người dùng khác.- Quản lý bình luận từ người dùng

- Khách hàng- Quản trị viên Use cases

- Người dùng viết bình luận và đánh giá sản phẩm.

- Người dùng đọc bình luận và đánh giá từ người dùng khác.- Quản trị viên duyệt và xóa bình luận khơng phù hợp hoặc spam

<b>2.1.6 Dịch vụ Shipment (Vận chuyển) </b>

Mô tả

- Dịch vụ Shipment quản lý quá trình vận chuyển sản phẩm từ kho hàngđến địa chỉ giao hàng của khách hàng. Khi người dùng đặt hàng thànhcông, dịch vụ Shipment sẽ xác định phương thức vận chuyển và tínhtốn chi phí vận chuyển dựa trên địa chỉ giao hàng và trọng lượng sảnphẩm

- Dịch vụ cung cấp tính năng theo dõi vận chuyển, cho phép khách hàngtheo dõi trạng thái của đơn hàng. Thông tin vận chuyển, bao gồm mãvận đơn và thông tin vận chuyển liên quan, có thể được cập nhật tronghồ sơ đơn hàng của người dùng

- Ngoài ra, dịch vụ Shipment cũng có thể tích hợp với các đối tác vậnchuyển bên ngoài để cung cấp lựa chọn vận chuyển đa dạng cho ngườidùng

Chức năng

- Xác định phương thức vận chuyển và tính tốn chi phí.- Theo dõi trạng thái vận chuyển của đơn hàng.

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

- Tích hợp với đối tác vận chuyển bên ngoài (tuỳ chọn)Actors

- Người dùng (Khách hàng).- Quản trị viên.

- Đối tác vận chuyển (tuỳ chọn)Use cases

- Người dùng chọn phương thức vận chuyển và nhập thông tin giao hàng.- Người dùng theo dõi trạng thái vận chuyển của đơn hàng.

- Quản trị viên kiểm tra và quản lý quá trình vận chuyển.

- Đối tác vận chuyển cung cấp thông tin vận chuyển cho hệ thống (tùychọn)

<b>2.1.7 Dịch vụ Payment (Thanh tốn)</b>

Mơ tả

- Dịch vụ Payment quản lý quá trình thanh toán trong hệ thốngEcommerce. Nó tích hợp các phương thức thanh tốn khác nhau như thẻtín dụng, chuyển khoản ngân hàng, ví điện tử, và có thể cung cấp tíchhợp các cổng thanh toán bên thứ ba

- Dịch vụ Payment đảm bảo rằng q trình thanh tốn diễn ra một cách antồn và bảo mật. Nó sử dụng các giao thức mã hóa để bảo vệ thơng tinthanh tốn và không lưu trữ thông tin tài khoản ngân hàng của ngườidùng

- Sau khi người dùng hồn tất thanh tốn, dịch vụ Payment gửi thơng báoxác nhận thanh tốn cho người dùng và cập nhật trạng thái thanh toántrong hồ sơ đơn hàng

- Cổng thanh toán bên thứ baUse cases

- Người dùng chọn phương thức thanh tốn và nhập thơng tin thanh tốn.- Người dùng hồn tất thanh tốn và nhận thông báo xác nhận.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

- Quản trị viên kiểm tra và quản lý q trình thanh tốn.

- Cổng thanh toán bên thứ ba xử lý thanh toán và gửi kết quả về hệ thống

<b>2.2 Kỹ thuật và Cơng nghệ Django2.2.1 Django là gì</b>

Django là phần mềm bạn có thể sử dụng để phát triển các ứng dụng web mộtcách nhanh chóng và hiệu quả. Hầu hết các ứng dụng web có một số chức năng phổbiến, như xác thực, truy xuất thông tin từ cơ sở dữ liệu và quản lý cookie. Các nhàphát triển phải viết mã cho chức năng tương tự vào mọi ứng dụng web mà họ viết.Django giúp họ làm việc dễ dàng hơn bằng cách nhóm các chức năng khác nhauthành một tập hợp lớn các mơ-đun có thể tái sử dụng, được gọi là một khung ứngdụng web. Các nhà phát triển sử dụng khung web Django để sắp xếp và viết mã củahọ hiệu quả hơn và giảm đáng kể thời gian phát triển web

<b>2.2.2 Tại sao các nhà phát phát triển web chọn Django?</b>

Có một số khung web trên thị trường. Django được viết bằng ngôn ngữ Pythonvà là một trong nhiều khung web Python. Tuy nhiên, các nhà phát triển thường ưu áikhung web Django hơn so với những khung web khác vì các lý do sau:

Tốc độ phát triển

- Khung Django có cấu trúc hợp lý và dễ cài đặt cũng như học hỏi, vì vậy,bạn có thể bắt đầu sử dụng trong vịng vài giờ. Những nhà thiết kếDjango đã tạo ra khung để nhanh chóng triển khai bất kỳ kiến trúc webnào bằng mã. Nhờ có khung hỗ trợ, q trình phát triển diễn ra nhanhchóng và thiết kế nhìn gọn ghẽ, thực tiễn. Bạn có thể viết mã chỉ bằngvài dịng vì Django cung cấp cấu trúc sẵn sàng sử dụng cho một số tácvụ phát triển web phổ biến, chẳng hạn như

● Xác thực người dùng● Quản trị nội dung● Sơ đồ trang web

● Nguồn cấp dữ liệu RSSTiết kiệm chi phí

- Django là một dự án Python miễn phí và nguồn mở với một cộng đồnghoạt động tích cực trong việc đánh giá và bảo trì phần mềm. Django

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

dụng cũng như duy trì Django. Tổ chức này tổ chức các buổi gặp mặt,hội họp và sự kiện cộng đồng thường xuyên nhằm khuyến khích nhữngnhà phát triển khác đánh giá và đóng góp cho dự án Django. Qua đó,khung web thu được có chất lượng cao với tính năng phong phú, miễnphí

Phổ biến

- Hàng nghìn dự án nguồn mở và trang web tầm cỡ sử dụng Django như● Instagram

● Mozilla Firefox● Pinterest

● National Geographic

- Vì được sử dụng phổ biến, khung khơng ngừng phát triển và có cơ sở hạtầng hỗ trợ vững chắc. Một lượng lớn các cá nhân và cơng ty cung cấpgói hỗ trợ miễn phí và có trả phí cho bất kỳ thách thức nào trong qtrình phát triển mà bạn có thể đối mặt khi đang sử dụng Django

<b>2.2.3 Django hoạt động như thế nào?</b>

Bất kỳ ứng dụng web nào cũng đều được cấu tạo từ hai phần: mã máy chủ vàmã máy khách. Khách thể hoặc đối tượng truy cập trang web có trình duyệt. Khi nhậpURL vào trình duyệt của mình, họ sẽ gửi một yêu cầu tới máy chủ web chứa ứngdụng web đang chạy. Các máy chủ xử lý yêu cầu bằng cách sử dụng cơ sở dữ liệu vàgửi thông tin ngược về máy khách dưới dạng phản hồi. Mã máy khách hiển thị thôngtin cho đối tượng truy cập dưới dạng trang web

Django quản lý mã cho hệ thống yêu cầu và phản hồi này bằng cách sử dụngkiến trúc Mơ hình-Khung nhìn-Mẫu (MVT)

- Các mơ hình Django đóng vai trị là giao diện giữa cơ sở dữ liệu và mãmáy chủ. Chúng là nguồn thông tin chính xác duy nhất về dữ liệu củabạn. Những mơ hình dữ liệu này chứa các trường và thao tác thiết yếumà bạn cần có để tương tác với cơ sở dữ liệu của mình. Do đó, các mơhình Django chuyển đổi bảng cơ sở dữ liệu của bạn thành lớp hoặc đốitượng trong mã Python. Quá trình này được gọi là ánh xạ quan hệ đốitượng

- Nói chung, mỗi mơ hình ánh xạ tới một bảng cơ sở dữ liệu duy nhất vàcó các thuộc tính đại diện cho các trường cơ sở dữ liệu. Ví dụ: nếu trang

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

web của bạn bao gồm các chi tiết về nhân viên thì có thể được biểu diễndưới dạng

● Một bảng nhân viên có tên các nhân viên và trường địa chỉ.

● Một mơ hình nhân viên gọi là Class Employee (Lớp nhân viên),trong đó có hai thuộc tính hay trường mơ hình gọi là Name (Tên)và Address (Địa chỉ)

Chế độ xem

- Khung nhìn của Django sử dụng các mơ hình để xử lý u cầu. Bạn cóthể viết hàm khung nhìn cho từng loại u cầu mà đối tượng truy cậptrang web có thể thực hiện đối với trang web của bạn. Hàm khung nhìncó thể lấy yêu cầu làm dữ liệu đầu vào và trả về phản hồi. Phản hồi cóthể là mã lỗi, hình ảnh, tệp hoặc bất kỳ loại dữ liệu nào.

-- Django có tính năng trình ánh xạ URL hoặc trình điều phối URL, đóngvai trị ánh xạ hàm khung nhìn với URL của bạn. Bạn phải tạo tệp trìnhánh xạ URL để viết các mẫu URL tại đó như nội dung bên dưới

<i>urlpatterns = [path('employee/name', views.employee_name),path('employee/<int:year>/', views.year_archive),]</i>

- Ví dụ: nếu bạn muốn đối tượng truy cập trang web của mình xem danhsách gồm tất cả các nhân viên của bạn trong một năm cụ thể, vậy thì,bạn cần thiết lập đường dẫn URL employee/year number và viết hàmkhung nhìn tương ứng của Django year_archive. Khi đối tượng truy cậptrang web của bạn nhập "yourwebsitename.com/employee/2020" vàotrình duyệt của họ, sau đây là những bước sẽ diễn ra:

● Yêu cầu đến ứng dụng web của bạn.

● Khung web Django lấy số chỉ năm và tên hàm khung nhìn từ trìnhánh xạ URL.

● Khung này chạy hàm khung nhìn year_archive cho năm 2020.● Year_archive sử dụng mơ hình nhân viên để lấy tất cả dữ liệu

nhân viên từ cơ sở dữ liệu trong năm 2020.

● Khung web Django gửi trả dữ liệu dưới dạng phản hồiMẫu

- Các mẫu Django quản lý cách trình bày trang web trong trình duyệt. Vìhầu hết các trang web đều sử dụng Ngôn ngữ đánh dấu siêu văn bản

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

(HTML), bạn có thể viết mã mẫu Django theo cách tương tự nhưHTML. Tệp mẫu chứa một số thành phần nhất định

● Các phần tĩnh của đầu ra HTML cuối cùng, chẳng hạn như hìnhảnh, nút và tiêu đề.

● Cú pháp đặc biệt mô tả cách chèn nội dung hoặc dữ liệu động,thay đổi theo mọi yêu cầu

Các thành phần cấu tạo nên hệ thống mẫu Django- Ngôn ngữ mẫu

● Ngôn ngữ mẫu là ngôn ngữ lập trình mà bạn sử dụng để viết mãmẫu HTML. Django hỗ trợ Ngôn ngữ mẫu Django của riêng mìnhvà một lựa chọn thay thế phổ biến gọi là Jinja2

Biểu mẫu

- Hầu hết các trang web cần có biểu mẫu để thực hiện các tác vụ như đăngký và thanh tốn hoặc thu thập thơng tin từ đối tượng truy cập trangweb. Django cung cấp nhiều công cụ và thư viện mà bạn có thể sử dụngđể quản lý biểu mẫu trang web của mình. Django có thể đơn giản hóa vàtự động hóa q trình xử lý biểu mẫu và đảm bảo khả năng bảo mật caohơn nhiều so với việc tự bạn viết mã

- Django quản lý quá trình xử lý biểu mẫu theo ba cách

● Tạo biểu mẫu bằng cách chuẩn bị và tái cấu trúc dữ liệu để hiểnthị

● Xác thực biểu mẫu bằng cách kiểm tra các biểu mẫu HTML ởphía máy khách

● Xử lý biểu mẫu bằng cách nhận dữ liệu đã gửiXác thực người dùng

- Các trang web đương thời phải xác thực và cấp quyền cho người dùng.Xác thực tức là xác minh danh tính người dùng và cấp quyền là quá trình

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

quyết định người dùng được xác thực có thể thực hiện hoạt động nàotrên trang web. Django có thể quản lý q trình xác thực, phục vụ nhiềumục đích sử dụng khác nhau

● Tài khoản người dùng

● Các quyền và cờ có hoặc khơng cho phép người dùng thực hiệnnhững tác vụ nhất định trên trang web

● Nhóm gồm tài khoản nhiều người dùng có quyền tương tự nhau● Phiên người dùng dựa trên cookie

- Django cũng cung cấp hệ thống băm mật khẩu có thể cấu hình được vàcác cơng cụ để hạn chế nội dung trong biểu mẫu và khung nhìn

Quản trị trang web

- Trang quản trị Django giúp bạn dễ dàng cung cấp trang quản trị chotrang web của mình. Quản trị viên trang web có thể sử dụng trang để tạo,chỉnh sửa hoặc xem các mơ hình dữ liệu trên trang web của bạn

<b>2.2.5 Tính chất</b>

Chúng tơi gọi các khung web một cách khơng chính thức là “cứng nhắc” khichúng buộc các nhà phát triển web tuân thủ một quy trình. Các khung web sở hữumột quan điểm hoặc cách hợp lý mà người phát triển phải hoàn thành những nhiệmvụ nhất định. Ví dụ: khung cứng nhắc thường hỗ trợ các ngành cụ thể phát triển hiệuquả bằng cách lưu giữ tài liệu chi tiết cho các tác vụ ứng dụng liên quan đến ngànhđó.

Mặt khác, các khung khơng cứng nhắc ít bị hạn chế hơn về cách bạn có thể tíchhợp các thành phần khác nhau của kiến trúc Mơ hình-Khung nhìn-Mẫu (MVT) vớinhau. Mặc dù linh hoạt hơn, những khung không cứng nhắc khiến tổ chức mã trở nênphức tạp vì các nhà phát triển khác nhau có thể sử dụng nhiều cách tiếp cận đa dạngcho cùng một tác vụ.

Django có phần hơi cứng nhắc. Django cung cấp nhiều thành phần đa dạng vàbao gồm tài liệu về cách xử lý nhiều loại tác vụ phát triển web khác nhau. Các nhàphát triển có thể sử dụng kiến trúc tách biệt của Django để chọn trong một loạt cácphương án, đồng thời, kiến trúc này thậm chí cịn hỗ trợ thêm cho những phương ánmới mà họ yêu cầu

<b>2.2.6 Bảo mật </b>

Tội phạm công nghệ cao thường chọn ứng dụng web làm mục tiêu để truy cập

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

thông tin đăng nhập của người dùng, dữ liệu tài chính và những thơng tin nhạy cảmkhác. Khung web Django cung cấp một số tính năng bảo vệ các ứng dụng web vàngười dùng của bạn. Bạn sẽ tránh được nhiều lỗi bảo mật phổ biến bằng cách làmtheo những biện pháp thực hành tốt nhất sau đây của Django. Sau đây là một vài vídụ chúng tôi đưa ra

Bảo vệ chống chèn tập lệnh liên trang web

- Các cuộc tấn công chèn tập lệnh liên trang web (XSS) xảy ra khi tộiphạm công nghệ cao chèn mã độc vào trình duyệt của người dùng trangweb của bạn. Chúng có thể tấn cơng người dùng của bạn bằng cách đánhlừa ứng dụng web của bạn theo một số cách như

● Lưu trữ tập lệnh độc hại trong cơ sở dữ liệu của bạn để máy chủvô tình gửi đi mã độc trong lần phản hồi tiếp theo.

● Đánh lừa người dùng của bạn nhấp vào liên kết, khiến mã độc củamáy khách chạy trong trình duyệt của người dùng thay vì mã củabạn

- Ví dụ:

Mẫu Django có thể có {{name}}, hiển thị văn bản mà người dùngnhập vào trường tên trong hồ sơ của họ. Tội phạm công nghệ cao chiếmquyền kiểm soát phiên và thay đổi tên thành mã như

<i><script>alert('hello')</script>. Mẫu thay đổi thành{{<script>alert('hello')</script>}}.</i>

Mã này hiện đang chạy trong trình duyệt của người dùng của bạnnên văn bản thông báo "Hello" (Xin chào) bật lên trên màn hình của họ.Mặc dù đây là ví dụ giản lược, bạn có thể thấy cách tội phạm cơng nghệcao chèn tập lệnh phức tạp để kiểm sốt máy tính của người dùng củabạn

- Django bảo vệ bạn khỏi các cuộc tấn cơng như vậy bằng cách tự độngthốt hoặc bỏ qua các ký tự cụ thể biểu thị mã độc như < và >, loạichúng khỏi đầu vào của người dùng

Bảo vệ chống truy cập trái phép

- Các cuộc tấn công giả mạo yêu cầu liên trang web (CSRF) xảy ra khi tintặc đánh cắp thông tin chứng thực của người dùng của bạn và gửi yêucầu trái phép tới ứng dụng web của bạn. Django đã tích hợp biện phápbảo vệ chống lại hầu hết các loại tấn công CSRF trong mô-đun DjangoCSRF. Cơ chế hoạt động là gửi một giá trị bí mật cho mọi người dùngtrong lần đầu tiên họ đăng nhập.

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

- Các yêu cầu từ máy khách mới bao gồm giá trị bí mật làm bằng chứngrằng máy khách đúng là đối tượng đang khai nhận. Vì chỉ trình duyệtcủa người dùng được cấp quyền mới nắm được giá trị bí mật, Django cóthể tự động từ chối u cầu nếu những yêu cầu này đến từ một số máykhác đang giả mạo là người dùng. Bạn phải kích hoạt cài đặt mô-đunDjango CSRF để biện pháp bảo vệ hoạt động

Bảo vệ chống đưa SQL vào

- Tội phạm công nghệ cao sử dụng kỹ thuật đưa SQL vào để chèn mãSQL vào cơ sở dữ liệu thông qua các yêu cầu HTTP như POST. Mã độccó thể đánh cắp hoặc xóa dữ liệu chân thực của bạn. Django giải quyếtvấn đề này bằng chính thiết kế của nó. Dữ liệu do người dùng gửi, gọi làthông số, được giữ riêng biệt, không chung với truy vấn cơ sở dữ liệucho đến khi dữ liệu đi tới lớp mơ hình. Sau đó, mơ hình Django có thểtránh thốt các ký tự nguy hiểm khi đang tạo mã truy vấn

Bảo vệ nhờ hỗ trợ từ cộng đồng

- Biện pháp bảo vệ trong Django vượt xa các tính năng bảo mật tích hợpcủa nó. Vì Django là khung nguồn mở, nhiều nhà phát triển dày dạn kinhnghiệm sử dụng và đánh giá các mô-đun của Django. Nhờ kiểm thử kỹlưỡng, độ tin cậy của mã Django tăng lên cũng như phòng ngừa bỏ sótcác lỗ hổng bảo mật ngẫu nhiên

<b>2.2.7 Khả năng điều chỉnh quy mô</b>

Trong phát triển trang web, khả năng điều chỉnh quy mô đề cập tới khả năngtrang web đồng thời xử lý nhiều yêu cầu từ máy khách. Các dự án Django có quy mơrất linh hoạt và có thể xử lý hàng nghìn u cầu. Bạn có thể điều chỉnh quy mơ ứngdụng Django của mình theo những cách sau

Phần cứng

- Đội ngũ Django đã thiết kế khung web để sử dụng hiệu quả phần cứngtrong hệ thống của bạn. Với một kiến trúc không chia sẻ, Django táchbiệt các thành phần như lớp cơ sở dữ liệu (các mơ hình) và lớp ứng dụng(các khung nhìn). Bạn có thể thêm phần cứng ở bất kỳ cấp độ nào màkhơng ảnh hưởng tới phần cịn lại của hệ thống. Bạn có thể thêm nhiềumáy chủ cơ sở dữ liệu hoặc máy chủ ứng dụng vào hệ thống của mình vàDjango sẽ sử dụng những tài nguyên này một cách hiệu quả để quản lýnhiều đối tượng truy cập

</div>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×