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

đồ án 2 phát triển sàn thương mại điện tử cho sản phẩm ocop dựa trên kiến trúc multi tenancy và microservice

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 (2.21 MB, 73 trang )

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

<b>ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH</b>

<b>TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN</b>

<b>KHOA CƠNG NGHỆ PHẦN MỀM</b>

<b>ĐỒ ÁN 2ĐỀ TÀI</b>

<b>PHÁT TRIỂN SÀN THƯƠNG MẠI ĐIỆN TỬ CHO SẢNPHẨM OCOP DỰA TRÊN KIẾN TRÚC</b>

<b>MULTI-TENANCY VÀ MICROSERVICE</b>

<b>Lớp: SE122.O11.PMCL</b>

<b>Giáo viên hướng dẫn: </b> Nguyễn Trịnh Đông

<b>Sinh viên thực hiện: </b> Nghi Lâm Minh Khôi - 20520593

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

Bên cạnh đó, chúng em xin cảm ơn các bạn bè trong lớp đã động viên, thảo luận vàgóp ý cho em đồng thời đã khơi thêm nguồn động lực cho em trong suốt q trìnhđầy khó khăn.

Mặc dù đã cố gắng hoàn thành báo cáo với tất cả nỗ lực song báo cáo của em chắcchắn không tránh khỏi những thiếu sót, em rất mong nhận được sự thơng cảm vàgóp ý chân thành từ thầy. Em xin chân thành cảm ơn.

<i><b>Thành phố Hồ Chí Minh, tháng 12 năm 2023</b></i>

<i>Nghi Lâm Minh Khơi</i>

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

<b>TĨM TẮT</b>

Đồ án với đề tài “Phát triển sàn thương mại điện tử cho sản phẩm OCOP dựatrên kiến trúc multi-tenancy và microservice” chú trọng vào việc xây dựng và tíchhợp hai kiến trúc tiên tiến này vào hệ thống thương mại điện tử. Đề tài này bắt đầubằng việc phân tích và đánh giá thực trạng hiện tại, từ đó nêu bật các vấn đề cần cảithiện và đề xuất các giải pháp cơng nghệ phù hợp. Mục tiêu chính là tạo ra một hệthống sàn thương mại điện tử đa khách hàng (multi-tenancy) có khả năng mở rộngvà linh hoạt, thơng qua việc áp dụng kiến trúc microservice.

Trong q trình nghiên cứu, đề tài cũng đặt ra các mục tiêu cụ thể và phạm viáp dụng của từng kiến trúc. Đối với kiến trúc multi-tenancy, mục tiêu là tối ưu hóaviệc quản lý và vận hành đối với nhiều khách hàng trên cùng một hệ thống, đồngthời duy trì sự độc lập dữ liệu và tùy chỉnh cho từng khách hàng. Đối với kiến trúcmicroservice, trọng tâm là phát triển các dịch vụ nhỏ, độc lập và linh hoạt, dễ dàngnâng cấp và bảo trì, từ đó nâng cao hiệu suất và khả năng mở rộng của hệ thống.

Ngoài việc xử lý các nghiệp vụ cơ bản, đề tài còn tập trung vào việc tìm hiểuvà lựa chọn các công nghệ mới, phù hợp với kiến trúc multi-tenancy vàmicroservice, nhằm cải thiện trải nghiệm người dùng, đồng thời tối ưu chi phí pháttriển và triển khai. Nhờ việc phân tích các yêu cầu rõ ràng, thời gian phát triển ngắnvà các yêu cầu, tính năng ít thay đổi, trong q trình phát triển đề tài đã sử dụng mơhình Waterfall cho việc xây dựng hệ thống. Kết quả thu được trong giai đoạn thiếtkế như kiến trúc hệ thống, cơ sở dữ liệu, giao diện được thể hiện bằng sơ đồ ngườidùng, sơ đồ tuần tự và bản thiết kế sử dụng công cụ Figma và Draw.io. Trong giaiđoạn thực hiện, client và server được phát triển song song sử dụng thư viện ReactJscho client và Java với Spring Boot framework cho server, công cụ phát triển IntellijIdea cùng công cụ quản lý công việc Notion. Công việc kiểm thử unit test được thựchiện xuyên suốt quá trình phát triển và được kiểm thử tích hợp ở cuối giai đoạn.Trong giai đoạn vận hành, server đã được triển khai lên máy chủ cá nhân, hồn tồn

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

có thể truy cập dữ liệu thông qua api từ bất cứ thiết bị nào gửi yêu cầu có chứatrường xác thực dữ liệu hợp lệ.

Phần cuối cùng của đồ án là trình bày kết quả đã thực hiện lên cuốn báo cáo,đưa ra kết luận và hướng phát triển cho hệ thống trong tương lai.

Nội dung đồ án được trình bày trong 5 chương:- Chương 01: Tổng quan

Trình bày sơ bộ về thực trạng, nhu cầu thực tế. Xác định mục tiêu và phạm viđề tài.

- Chương 02: Cơ sở lý thuyết, tổng quan công nghệ

Giớ thiệu về giải thuật, những công nghệ, nền tảng được sử dụng trong đồán.

- Chương 03: Phân tích thiết kế ứng dụng

Phân tích yêu cầu, thiết kế, hiện thực và triển khai ứng dụng.- Chương 04: Kết luận

- Chương 05: Cài đặt và thử nghiệm

Những kết quả đạt được sau khi kết thúc đồ án. Những hạn chế, khó khăntrong q trình phát triển đồ án và nêu ra hướng phát triển trong tương lai.

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

3.2.1. Lược đồ hoạt động đăng nhập...38

3.2.2. Lượt đồ hoạt động đăng ký...39

3.2.3. Lược đồ quản lý địa chỉ...39

3.2.4. Lược đồ hoạt động tìm kiếm sản phẩm...40

3.2.5. Lược đồ hoạt động xem chi tiết sản phẩm...41

3.2.6. Lược đồ hoạt động thêm sản phẩm vào giỏ hàng...42

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

Chương 5. CÀI ĐẶT VÀ THỬ NGHIỆM...63

5.1. Môi trường cài đặt...63

5.2. Các thư viện, framework liên quan...63

5.3. Kiểm thử phần mềm...63

5.4. Hướng dẫn cài đặt...63

TÀI LIỆU THAM KHẢO...64

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

<b>CHƯƠNG 1.</b>

<b> TỔNG QUAN1.1.Khảo sát hiện trạng</b>

<b>1.1.1. Nhu cầu thực tế đề tài</b>

Hiện nay, q trình số hóa của các cửa hàng ngày càng tăng cao cùng vớiviệc đại dịch Covid diễn ra tạo nên một sự thay đổi lớn về vấn đề mua sắm củangười dân. Từ đó nhu cầu về mua sắm thông qua các trang web cửa hàng và sànthương mại điện tử tăng cao kéo theo việc . Các thành phố lớn phát triển hạ tầngchưa đồng đều, chưa xem trong hạ tầng bãi đỗ. Từ đó, ta thấy cơ sở hạ tầng và nhucầu khơng thỏa mãn, dẫn đến việc khó khăn khi tìm kiếm bãi đỗ xe. Do đó, emquyết định xây dựng phần mềm Tìm kiếm bãi đỗ xe.

<b>1.1.2. Khảo sát một số ứng dụng hiện có1.1.2.1. Shopee</b>

<b>1. Tổng quan</b>

Shopee là một nền tảng thương mại điện tử hàng đầu tại Đông Nam Á, đượcthành lập vào năm 2015. Nó kết nối người mua và người bán từ nhiều quốc giatrong khu vực, cung cấp một loạt sản phẩm và dịch vụ đa dạng. Shopee có giao diệndễ sử dụng, hệ thống thanh tốn an tồn và các chương trình khuyến mãi hấp dẫn.Nền tảng này cịn có Shopee Mall, nơi người dùng mua hàng chính hãng, và dịch vụgiao hàng nhanh chóng. Shopee đã trở thành một trong những nền tảng thương mạiđiện tử phổ biến nhất tại Đông Nam Á.

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

<b>2. Chức năng chính</b>

<b>1.1.2.2. Lazada1. Tổng quan</b>

Lazada là một trong những nền tảng thương mại điện tử hàng đầu tại Đông NamÁ. Với hàng ngàn người bán và người mua tham gia, Lazada cung cấp một trảinghiệm mua sắm trực tuyến thuận tiện và đa dạng. Với các danh mục sản phẩm đadạng như điện tử, thời trang và đồ gia dụng, Lazada đáp ứng nhu cầu mua sắm củangười dùng. Giao diện dễ sử dụng và các ưu đãi hấp dẫn giúp Lazada trở thành lựachọn phổ biến cho người tiêu dùng tại Đông Nam Á.

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

<b>1.2.1. Đối tượng sử dụng</b>

- Người có nhu cầu mua các sản phẩm OCOP

<b>1.2.2. Yêu cầu</b>

<b>1.2.2.1. Yêu cầu chức năng</b>

 Đối với người mua

o Quản lý tài khoản (đăng nhập, đăng ký,)o Tìm kiếm sản phẩm.

o Chọn lựa sản phẩm.o Đặt mua.

o Quản lý hóa đơn thanh toán.o Quản lý địa chỉ giao hàng.o Thanh toán tiện lợi

<b>1.2.2.2. Yêu cầu phi chức năng</b>

<small></small> Yêu cầu về giao diện: 

- Giao diện thân thiện, bố cục hợp lý, dễ sử dụng. 

- Giao diện thống nhất, đồng bộ, không gây bất ngờ cho người sử dụng. 

- Màu sắc, vị trí, hiển thị của các component có tính đồng bộ. 

<small></small> u cầu về độ tin cậy, bảo mật: 

- Có sử dụng phân quyền cho từng loại người dùng. - Dữ liệu tài khoản người dùng được bảo mật. 

- Dữ liệu không bị xóa hồn tồn, có thể khơi phục lại.

<small></small> u cầu về độ tương thích: o Đối với web

- IE11 / Edge 

- Firefox: 2 version gần nhất - Chrome: 2 version gần nhất 

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

- Opera: 2 version gần nhất - Electron: 2 version gần nhất 

<small></small> Yêu cầu về khả năng phát triển: 

<small>-</small> Dễ dàng nâng cấp tính năng đã có nhờ vào sự hệ thống hóa trong khâu xử lý. 

<small>-</small> Dễ dàng mở rộng khi có nhu cầu phát triển. 

<small></small> Yêu cầu về tính hiệu quả: 

<small>-</small> Hệ thống quản lý dữ liệu một cách logic. 

<small>-</small> Hiệu năng ổn định tránh gây khó chịu cho người dùng.

<small>-</small> Có khả năng chịu tải tốt.

<small>-</small> Khả năng mở rộng tùy chỉnh phụ thuộc theo tình hình tài chínhcủa chủ sở hữu. 

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

<b>CHƯƠNG 2.</b>

<b>CƠ SỞ LÝ THUYẾT, TỔNG QUAN CÔNG NGHỆ2.1.Cơ sở lý thuyết</b>

<b>2.1.1.Kiến trúc Microservice</b>

<i>Hình 2-1 Kiến trúc Monolithic (trái) và Microservices (phải)</i>

Kiến trúc Microservice, một phương pháp tiếp cận đổi mới trong phát triểnphần mềm, đã nhanh chóng trở thành xu hướng hàng đầu trong việc xây dựng cácứng dụng quy mô lớn và phức tạp. Phát triển từ nhu cầu về sự linh hoạt và khả năngmở rộng, kiến trúc này đánh dấu sự chuyển mình từ mơ hình monolithic truyềnthống sang một hệ thống gồm nhiều dịch vụ nhỏ, độc lập.

Trái tim của kiến trúc microservice là việc chia nhỏ ứng dụng thành một tậphợp các dịch vụ nhỏ, mỗi dịch vụ chạy một quy trình riêng biệt và giao tiếp vớinhau thông qua các API định nghĩa rõ ràng. Mỗi microservice được thiết kế để thựchiện một chức năng cụ thể và có thể được phát triển, triển khai, quản lý và mở rộngmột cách độc lập với những dịch vụ khác trong hệ thống.

Một trong những ưu điểm chính của kiến trúc microservice là khả năng mởrộng và linh hoạt. Khi nhu cầu sử dụng tăng lên, các dịch vụ cụ thể có thể được mở

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

hiệu suất ứng dụng mà còn giảm thiểu rủi ro liên quan đến việc triển khai các cậpnhật và cải tiến mới.

Khả năng sử dụng lại là một lợi ích khác của microservices. Các dịch vụ cóthể được chia sẻ và tái sử dụng trong nhiều ứng dụng và môi trường, giúp giảm thờigian phát triển và tăng cường sự nhất quán. Bên cạnh đó, kiến trúc này cũng hỗ trợsự đa dạng về ngôn ngữ lập trình và cơng nghệ, cho phép các đội phát triển chọncông nghệ phù hợp nhất cho từng dịch vụ.

Tuy nhiên, kiến trúc microservice cũng đặt ra thách thức về quản lý và phốihợp giữa các dịch vụ. Vấn đề này thường được giải quyết thông qua việc sử dụngcác công cụ và phương pháp tiêu chuẩn như Docker và Kubernetes cho việccontainer hóa và orchestration. Ngoài ra, việc theo dõi, ghi log và giám sát các dịchvụ cũng quan trọng để duy trì sự ổn định và hiệu quả của hệ thống.

Trong kết luận, kiến trúc microservice mở ra một hướng tiếp cận linh hoạt vàmở rộng cho phát triển phần mềm, phù hợp với nhu cầu của các doanh nghiệp trongkỷ nguyên số hóa và dữ liệu lớn. Với sự hỗ trợ của các công nghệ mới, kiến trúcnày đang dần trở thành tiêu chuẩn cho các ứng dụng quy mô lớn và phức tạp.

<b>2.1.2.Kiến trúc Multi-tenancy</b>

<i>Hình 2-1 Một số loại của kiến trúc Multi-tenancy</i>

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

Kiến trúc multi-tenancy, hay đa người dùng, là một mơ hình quan trọng trong phát triển phần mềm, đặc biệt là trong lĩnh vực ứng dụng dịch vụ đám mây. Mơ hình này cho phép nhiều người dùng, hoặc "tenant", sử dụng cùng một ứng dụng hoặc cơ sở hạ tầng với cấu hình riêng biệt và dữ liệu độc lập, tăng cường hiệu quả vận hành và giảm chi phí.

<b>Đặc Điểm của Kiến Trúc Multi-Tenancy:</b>

 Chia Sẻ Tài Ngun: Trong mơ hình multi-tenancy, cùng một ứng dụng hoặccơ sở hạ tầng được chia sẻ giữa nhiều tenant. Điều này giúp tối ưu hóa việc sử dụng tài nguyên và giảm thiểu chi phí cơ sở hạ tầng.

 Độc Lập Dữ Liệu: Mặc dù sử dụng chung cơ sở hạ tầng, dữ liệu của mỗi tenant được bảo mật và cơ lập, đảm bảo tính riêng tư và an tồn thơng tin. Tùy Chỉnh Linh Hoạt: Mỗi tenant có thể tùy chỉnh ứng dụng theo nhu cầu cụ

thể của họ, từ giao diện người dùng đến các chức năng đặc thù.

<b>Cách Thức Triển Khai Kiến Trúc Multi-Tenancy</b>

 Triển Khai Dựa Trên Database:

o Database Riêng Cho Mỗi Tenant: Mỗi tenant sử dụng một cơ sở dữ liệu riêng biệt, tạo ra sự cô lập dữ liệu tốt nhất nhưng có chi phí cao về quản lý và bảo trì.

o Chia Sẻ Database: Một cơ sở dữ liệu chung cho tất cả tenant, nhưng dữ liệu được phân biệt bằng các schema hoặc bảng riêng. Phương pháp này tối ưu chi phí nhưng địi hỏi thiết kế cơ sở dữ liệu cẩn thận để đảm bảo an ninh và hiệu suất.

 Triển Khai Dựa Trên Ứng Dụng:

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

o Chia Sẻ Codebase: Tất cả các tenant sử dụng cùng một phiên bản của ứng dụng, với cấu hình và tùy chỉnh linh hoạt dựa trên metadata của mỗi tenant.

o Tùy Chỉnh Ứng Dụng: Tùy chỉnh ứng dụng dựa trên yêu cầu riêng biệt của từng tenant, thường thông qua các module hoặc plugin. Triển Khai Dựa Trên Container và Virtualization:

o Sử dụng các công nghệ như Docker và Kubernetes, mỗi tenant có thể có mơi trường vận hành riêng biệt trong cùng một hệ thống vật lý, tạo ra sự cô lập và bảo mật cao.

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

<b>2.1.3.Microservices và Multi-tenancyMối Liên Hệ và Tương Tác</b>

 Tích Hợp Dễ Dàng: Microservices cung cấp cơ chế phân chia và cô lập chức năng, làm cho việc triển khai mơ hình multi-tenancy trở nên dễ dàng hơn. Mỗi microservice có thể được thiết kế để hỗ trợ nhiều tenant mà không ảnh hưởng đến các dịch vụ khác.

 Mở Rộng và Linh Hoạt: Trong mơ hình microservice, việc mở rộng các dịch vụ cho nhiều tenant trở nên linh hoạt hơn. Có thể dễ dàng mở rộng hoặc thu hẹp các dịch vụ cụ thể tùy thuộc vào yêu cầu của từng tenant.

 Bảo Mật và Cô Lập Dữ Liệu: Microservices cho phép cô lập chức năng và dữ liệu giữa các tenant. Điều này cung cấp một lớp bảo mật bổ sung, vì các dịch vụ độc lập có thể hạn chế quyền truy cập dựa trên tenant cụ thể.

 Tối Ưu Hóa Tài Nguyên: Multi-tenancy trong mơi trường microservices giúptối ưu hóa việc sử dụng tài nguyên. Các dịch vụ có thể chia sẻ cơ sở hạ tầng, trong khi vẫn duy trì sự cơ lập dữ liệu và cấu hình cho mỗi tenant.

 Triển Khai và Quản Lý: Microservices hỗ trợ triển khai nhanh chóng và dễ dàng quản lý multi-tenancy. Các cơng cụ như Docker và Kubernetes tạo điềukiện cho việc triển khai và quản lý các ứng dụng multi-tenant dựa trên microservices.

<b>Thách Thức Khi Kết Hợp</b>

 Phức tạp trong quản lý: Việc quản lý nhiều microservices trong một mơi trường multi-tenant có thể trở nên phức tạp, đòi hỏi hệ thống giám sát và quản lý hiệu quả.

 Tích hợp và phụ thuộc: Việc đảm bảo tích hợp và phụ thuộc giữa các microservices cần được quản lý cẩn thận để tránh sự cố về hiệu suất và ổn định.

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

<b>2.2.Cơng nghệ sử dụng2.2.1. React</b>

<i>Hình 2-1 Logo thư viện React<small>1</small></i>

ReactJS là một opensource được phát triển bởi Facebook, ra mắt vào năm2013, bản thân nó là một thư viện Javascript được dùng để để xây dựng các tươngtác với các thành phần trên website. Một trong những điểm nổi bật nhất của ReactJSđó là việc render dữ liệu khơng chỉ thực hiện được trên tầng Server mà còn ở dướiClient.

Một trong những điểm hấp dẫn của React là thư viện này khơng chỉ hoạtđộng trên phía client, mà cịn được render trên server và có thể kết nối với nhau.React so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước vàcập nhật ít thay đổi nhất trên DOM. Trước khi đến cài đặt và cấu hình, chúng ta sẽđi đến một số khái niệm cơ bản:

- Virtual DOM:

công nghệ DOM ảo giúp tăng hiệu năng cho ứng dụng. Việc chỉ node gốcmới có trạng thái và khi nó thay đổi sẽ tái cấu trúc lại toàn bộ, đồng nghĩa với việcDOM tree cũng sẽ phải thay đổi một phần, điều này sẽ ảnh hưởng đến tốc độ xử lý.React JS sử dụng Virtual DOM (DOM ảo) để cải thiện vấn đề này.Virtual DOM làmột object Javascript, mỗi object chứa đầy đủ thông tin cần thiết để tạo ra mộtDOM, khi dữ liệu thay đổi nó sẽ tính tốn sự thay đổi giữa object và tree thật, điềunày sẽ giúp tối ưu hoá việc re-render DOM tree thật. React sử dụng cơ chế one-waydata binding – luồng dữ liệu 1 chiều. Dữ liệu được truyền từ parent đến child thôngqua props. Luồng dữ liệu đơn giản giúp chúng ta dễ dàng kiểm soát cũng như sửa

<small>1 Nguồn class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

lỗi. Với các đặc điểm ở trên, React dùng để xây dựng các ứng dụng lớn mà dữ liệucủa chúng thay đổi liên tục theo thời gian. Dữ liệu thay đổi thì hầu hết kèm theo sựthay đổi về giao diện. Ví dụ như Facebook: trên Newsfeed của bạn cùng lúc sẽ cócác status khác nhau và mỗi status lại có số like, share, comment liên tục thay đổi.Khi đó React sẽ rất hữu ích để sử dụng.

- Giới thiệu về JSX:

JSX là một dạng ngôn ngữ cho phép viết các mã HTML trong Javascript.Đặc điểm: Faster: Nhanh hơn. JSX thực hiện tối ưu hóa trong khi biên dịch sang mãJavacsript. Các mã này cho thời gian thực hiện nhanh hơn nhiều so với một mãtương đương viết trực tiếp bằng Javascript. Safer: an toàn hơn. Ngược vớiJavascript, JSX là kiểu statically-typed, nghĩa là nó được biên dịch trước khi chạy,giống như Java, C++. Vì thế các lỗi sẽ được phát hiện ngay trong quá trình biêndịch. Ngồi ra, nó cũng cung cấp tính năng gỡ lỗi khi biên dịch rất tốt. Easier: Dễdàng hơn. JSX kế thừa dựa trên Javascript, vì vậy rất dễ dàng để cho các lập trìnhviên Javascripts có thể sử dụng (tham khảo tại Giới thiệu về Components:

React được xây dựng xung quanh các component, chứ không dùng templatenhư các framework khác. Trong React, chúng ta xây dựng trang web sử dụng nhữngthành phần (component) nhỏ. Chúng ta có thể tái sử dụng một component ở nhiềunơi, với các trạng thái hoặc các thuộc tính khác nhau, trong một component lại cóthể chứa thành phần khác. Mỗi component trong React có một trạng thái riêng, cóthể thay đổi, và React sẽ thực hiện cập nhật component dựa trên những thay đổi củatrạng thái. Mọi thứ React đều là component. Chúng giúp bảo trì mã code khi làmviệc với các dự án lớn. Một react component đơn giản chỉ cần một method render.Có rất nhiều methods khả dụng khác, nhưng render là method chủ đạo.

- Props và State:

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

Props: giúp các component tương tác với nhau, component nhận input gọi làprops, và trả thuộc tính mơ tả những gì component con sẽ render. Prop là bất biến.State: thể hiện trạng thái của ứng dụng, khi state thay đồi thì component đồng thờirender lại để cập nhật UI.

<b>2.2.2. React Redux</b>

<i>Hình 2-2 Logo thư viện React Redux<small>2</small></i>

Redux là một predictable state management tool cho các ứng dụngJavascript. Nó giúp bạn viết các ứng dụng hoạt động một cách nhất quán, chạytrong các môi trường khác nhau (client, server, and native) và dễ dàng để test.Redux ra đời lấy cảm hứng từ tư tưởng của ngôn ngữ Elm và kiến trúc Flux củaFacebook. Do vậy Redux thường dùng kết hợp với React.

Các thành phần trong Redux:

- Actions đơn giản là các events. Chúng là cách mà chúng ta send data từ appđến Redux store. Những data này có thể là từ sự tương tác của user vs app,API calls hoặc cũng có thể là từ form submission.

- Reducers là các function nguyên thủy chúng lấy state hiện tại của app, thựchiện một action và trả về một state mới. Những states này được lưu nhưnhững objects và chúng định rõ cách state của một ứng dụng thay đổi trongviệc phản hồi một action được gửi đến store.

- Store lưu trạng thái ứng dụng và nó là duy nhất trong bất kỳ một ứng dụngRedux nào. Bạn có thể access các state được lưu, update state, và đăng ký orhủy đăng ký các listeners thông qua helper methods.

<small>2 Nguồn: class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<i>Hình 2.3 Các thành phần của Redux<small>3</small></i>

<b>2.2.3. Sematic UI</b>

<i>Hình 2-4 Logo thư viện Sematic UI</i>

Semantic UI được dựng trên LESS và jQuery. Mục tiêu của framework làcho phép designer và developer có khả năng chia sẻ UI thơng qua 1 ngơn ngữchung. Điều đó được thể hiện qua cách sử dụng ngôn ngữ mô tả để đặt tên cho cáclớp và các quy chuẩn thay thế cho việc sử dụng các từ viết tắt ở các frameworkkhác. Yếu tố này khiến cho Semantic UI gần gũi hơn với cộng đồng sử dụng tiếnganh. Ngoải ra còn phải kể đến một điểm cộng nữa của Semantic UI, nó được thiếtkế phẳng với kiểu dáng đẹp, tinh tế mang lại cho người dùng cảm giác gọn nhẹđúng với xu hướng thiết kế hiện đại ngày nay.

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

Semantic UI đặc biệt ở 2 điểm. Đầu tiên là phương thức framework được cấuthành. Nó sử dụng 5 hạng mục mơ tả để định nghĩa các thành phân UI có khả năngtái sử dụng:

 UI Element là một khối dựng cơ bản. Nó có thể xuất hiện một mìnhhay một nhóm thống nhất. Ví dụ như 1 button đọc lập hoặc một nhómcác button.

 UI Collection là một nhóm các loại thuộc tính khác nhau có sự liênkết. Ví dụ 1 form có thể có các button, input, checkbox, icon ...

 UI View là đại diện cho một phần của nội dung website. Ví dụ nhưfeed hoặc comment.

 UI Module là thành phần tương tác với các chức năng dựa trênJavaScript. Ví dụ accordion, dimmer, modal ...

 UI Behavior là môt thành phần không thể tồn tại độc lập, nhưng thayvào đó nó được sử dụng để them các chức năng vào các thành phầnkhác. Ví dụ, form validation cung cấp chức năng xác nhận cho form.

<b>2.2.1. Spring Boot</b>

<i>Hình 2-5 Logo Spring Boot</i>

Spring Boot là một framework phát triển ứng dụng Java mạnh mẽ, tập trungvào việc tạo ra các ứng dụng Java độc lập, tự chạy và dễ triển khai. Nó được xây

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

dựng dựa trên nền tảng Spring Framework, một trong những framework phổ biếnnhất trong cộng đồng Java.

Spring Boot giúp đơn giản hóa việc phát triển ứng dụng Java bằng cách cungcấp cấu hình mặc định và tự động cấu hình nhiều phần mềm của Spring Framework.Điều này giúp bạn tập trung vào việc viết mã ứng dụng chính mà khơng phải lo lắngvề cấu hình phức tạp.

<b>2.2.2. Redis</b>

<i>Hình 2-6 Logo Redis</i>

Redis (REmote DIctionary Server) là một hệ thống cơ sở dữ liệu mã nguồnmở dựa trên kiến trúc dữ liệu key-value (khóa-giá trị). Nó được xây dựng để cungcấp hiệu suất cao, độ tin cậy và khả năng mở rộng trong việc lưu trữ và truy xuất dữliệu.

Redis hỗ trợ nhiều loại dữ liệu, bao gồm chuỗi (strings), danh sách (lists), bộđịnh hướng (sets), bản đồ (hashes), tập hợp sắp xếp (sorted sets) và các cấu trúc dữliệu phức tạp khác như HyperLogLogs và Bitmaps. Điều này cho phép Redis đượcsử dụng cho một loạt các tác vụ, từ lưu trữ bộ nhớ đệm (caching) đến việc xử lý dữliệu thời gian thực.

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

<b>2.2.3. Docker</b>

<i>Hình 2.7 Logo Docker</i>

Docker là một nền tảng mã nguồn mở cho việc tạo, triển khai và quản lý cácứng dụng trong các môi trường ảo hóa. Nó giúp đóng gói ứng dụng cùng với tất cảcác phụ thuộc của nó vào một gói gọi là "container". Mỗi container hoạt động nhưmột môi trường độc lập, đảm bảo tính nhất quán và đồng nhất giữa các môi trườngthực thi.

Docker sử dụng công nghệ hệ điều hành cấp vỏ (OS-level virtualization) đểtạo ra các container nhẹ nhưng cơ lập hồn tồn. Mỗi container chứa tất cả những gìcần thiết để chạy một ứng dụng, bao gồm mã nguồn, các thư viện, biến mơi trườngvà cấu hình. Điều này giúp đảm bảo rằng ứng dụng sẽ chạy đúng cách và đồng nhấttrên mọi môi trường.

<b>2.2.4. JSON Web Token</b>

<i>Hình 2.8 Logo JSON Web Token (JWT)<small>4</small></i>

JSON Web Token (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cáchnhỏ gọn và khép kín để truyền một cách an tồn thông tin giữa các bên dưới dạng

<small>4 Nguồn: class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

đối tượng JSON. Thơng tin này có thể được xác minh và đáng tin cậy vì nó có chứachữ ký số. JWTs có thể được ký bằng một thuật tốn bí mật (với thuật tốn HMAC)hoặc một public / private key sử dụng mã hố RSA.

Một ví dụ về JWT Token:

Thoạt trông phức tạp là thế nhưng nếu hiểu, cấu trúc của một JWT chỉ đơngiản như sau:

<base64-encoded header>.<base64-encoded payload>.<base64-encodedsignature>

Nói một cách khác, JWT là sự kết hợp (bởi dấu .) một Object Header dướiđịnh dạng JSON được encode base64, một payload object dưới định dạng JSONđược encode base64 và một Signature cho URI cũng được mã hóa base64.

Thành phần JWT:

- Header: bao gồm hai phần chính: loại token (mặc định là JWT - Thông tinnày cho biết đây là một Token JWT) và thuật tốn đã dùng để mã hóa(HMAC SHA256 - HS256 hoặc RSA).

<i>Hình 2.9 Nội dung header JWT</i>

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

- Payload chứa các claims. Claims là một các biểu thức về một thực thể (chẳnghạn user) và một số metadata phụ trợ. Có 3 loại claims thường gặp trongPayload: reserved, public và private claims.

 Reserved claims: Đây là một số metadata được định nghĩa trước, trong đómột số metadata là bắt buộc, số còn lại nên tuân theo để JWT hợp lệ và đầyđủ thông tin: iss (issuer), iat (issued-at time) exp (expiration time), sub(subject), aud (audience), jti (Unique Identifier cho JWT.

<i>Hình 2.10 Nội dung Reserved claims</i>

 Public Claims - Claims được cộng đồng công nhận và sử dụng rộng rãi. Private Claims - Claims tự định nghĩa (không được trùng với Reserved

Claims và Public Claims), được tạo ra để chia sẻ thông tin giữa 2 parties đãthỏa thuận và thống nhất trước đó.

- Chữ ký Signature trong JWT là một chuỗi được mã hóa bởi header,payload cùng với một chuỗi bí mật theo ngun tắc sau:

<i>Hình 2.11 Nguyên tắc chuỗi bí mật</i>

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

- Do bản thân Signature đã bao gồm cả header và payload nên Signature có thểdùng để kiểm tra tính tồn vẹn của dữ liệu khi truyền tải.

<b>2.2.5. Stripe</b>

<i>Hình 2-12 Logo Stripe</i>

Stripe là một cơng ty cơng nghệ tài chính đặt trụ sở tại San Francisco,California. Công ty này được thành lập vào năm 2010 bởi hai doanh nhân PatrickCollison và John Collison. Stripe cung cấp một nền tảng thanh toán trực tuyến chocác doanh nghiệp và nhà phát triển, giúp họ chấp nhận thanh toán trực tuyến mộtcách dễ dàng và bảo mật.

Với Stripe, các doanh nghiệp có thể tích hợp thanh toán trực tuyến vào cácứng dụng và trang web của mình thơng qua các API và các sản phẩm của Stripe.Cơng ty này hỗ trợ thanh tốn bằng các phương thức khác nhau, bao gồm thẻ tíndụng và thẻ ghi nợ quốc tế, ví điện tử như Apple Pay và Google Pay, cũng như cácphương thức thanh toán kỹ thuật số như Bitcoin và Alipay.

Stripe nổi tiếng với việc cung cấp một trải nghiệm thanh toán trực tuyến dễdàng và linh hoạt cho cả người bán và người mua. Họ cung cấp các tính năng bảomật mạnh mẽ như mã hóa dữ liệu và xác thực hai yếu tố để đảm bảo rằng các giaodịch được thực hiện một cách an toàn và riêng tư.

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

<b>2.2.6. Grafana</b>

<i>Hình 2-13 Logo Grafana</i>

Grafana là một cơng cụ giám sát và phân tích dữ liệu mạnh mẽ, cung cấp khảnăng trực quan hóa dữ liệu phức tạp thơng qua giao diện đồ họa trực quan. Phát triển lần đầu vào năm 2014, Grafana đã trở thành một trong những cơng cụ hàng đầu cho việc trực quan hóa và giám sát dữ liệu thời gian thực, được sử dụng rộng rãitrong các hệ thống IT, mạng, và phân tích dữ liệu.

Grafana cho phép người dùng tạo các bảng điều khiển (dashboard) tùy chỉnh,với khả năng hiển thị dữ liệu từ nhiều nguồn khác nhau như Prometheus,

Elasticsearch, MySQL, PostgreSQL và nhiều hơn nữa. Điều này giúp người dùng có thể theo dõi và phân tích dữ liệu từ nhiều hệ thống và ứng dụng khác nhau trên một giao diện duy nhất. Grafana hỗ trợ nhiều loại biểu đồ và widget, từ biểu đồ cột, đường, đến bản đồ nhiệt và gauges, cung cấp cái nhìn sâu sắc và dễ hiểu về dữ liệu.

Một trong những tính năng nổi bật của Grafana là khả năng cảnh báo. Người dùng có thể định cấu hình các quy tắc cảnh báo dựa trên các điều kiện cụ thể trong dữ liệu. Khi các điều kiện này được kích hoạt, Grafana có thể gửi thông báo qua nhiều kênh như email, Slack, PagerDuty, v.v., giúp đội ngũ IT nhanh chóng phản ứng với các sự cố hoặc vấn đề tiềm ẩn.

Ngoài ra, Grafana cũng hỗ trợ việc tùy chỉnh và mở rộng. Người dùng có thể tùy chỉnh các bảng điều khiển, tạo plugin mới hoặc sử dụng các plugin do cộng đồng phát triển để mở rộng chức năng. Cộng đồng Grafana là một phần quan trọng

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

của sự thành cơng của nó, cung cấp tài liệu học tập, hỗ trợ kỹ thuật và các nguồn lựcphong phú để người dùng tối ưu hóa việc sử dụng cơng cụ này.

<b>2.2.7. Prometheus</b>

<i>Hình 2-14 Logo Prometheus</i>

Prometheus là một hệ thống giám sát và cảnh báo mở rộng cao, được thiết kếđặc biệt cho môi trường container và microservices. Phát triển bởi SoundCloud vào năm 2012, Prometheus nhanh chóng trở thành một trong những công cụ giám sát hệthống và ứng dụng hàng đầu, đặc biệt trong hệ sinh thái Kubernetes.

Trái tim của Prometheus là mơ hình dữ liệu dựa trên thời gian và ngôn ngữ truy vấn mạnh mẽ của nó, PromQL. Điều này cho phép người dùng thu thập và xử lý dữ liệu giám sát từ nhiều nguồn, bao gồm máy chủ, microservices, và các hệ thống phân tán. Prometheus thu thập dữ liệu giám sát thông qua mơ hình "pull", nơi Prometheus chủ động lấy dữ liệu từ các dịch vụ được giám sát, giúp dễ dàng tích hợp và mở rộng hệ thống giám sát.

Một trong những đặc điểm nổi bật của Prometheus là khả năng mở rộng và chịu lỗi cao. Nó có thể dễ dàng mở rộng để xử lý lượng dữ liệu lớn từ hàng ngàn nútvà dịch vụ, đồng thời duy trì hiệu suất cao và độ tin cậy. Cấu trúc lưu trữ dữ liệu của Prometheus cũng được tối ưu hóa cho việc lưu trữ và truy vấn dữ liệu thời gian thực, giúp người dùng nhanh chóng phân tích và hiểu rõ về trạng thái hệ thống.

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

Prometheus cũng hỗ trợ một hệ thống cảnh báo linh hoạt, cho phép người dùng định cấu hình các quy tắc cảnh báo dựa trên dữ liệu thu thập được. Khi các điều kiện cảnh báo được kích hoạt, Prometheus có thể gửi thơng báo thơng qua nhiều kênh như email, Slack, hoặc tích hợp với các hệ thống cảnh báo bên ngoài. Điều này giúp đội ngũ vận hành và phát triển nhanh chóng nhận biết và xử lý các vấn đề.

Bên cạnh đó, Prometheus cũng có một cộng đồng sôi động và hỗ trợ mạnh mẽ, cung cấp nhiều tài liệu, công cụ và plugin để hỗ trợ người dùng. Cộng đồng nàygiúp định hình và phát triển liên tục các tính năng mới, đảm bảo Prometheus luôn phù hợp với nhu cầu giám sát hiện đại và phức tạp.

<b>2.2.8. Kafka</b>

<i>Hình 2-15 Logo Kafka</i>

Apache Kafka là một nền tảng xử lý luồng dữ liệu mạnh mẽ và đa năng, pháttriển ban đầu bởi LinkedIn và hiện nay là một dự án mã nguồn mở dưới quản lý của Apache Software Foundation. Ra đời từ năm 2011, Kafka đã trở thành một công cụ không thể thiếu trong lĩnh vực xử lý dữ liệu lớn, tích hợp dữ liệu và microservices.

Kafka được thiết kế để xử lý luồng dữ liệu lớn và nhanh chóng trong thời gian thực. Nó hoạt động dựa trên mơ hình "publish-subscribe", nơi các ứng dụng có thể "publish" (gửi) dữ liệu vào các "topic" (chủ đề) và các ứng dụng khác có thể "subscribe" (đăng ký) để nhận dữ liệu từ các topic đó. Điểm nổi bật của Kafka là

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

khả năng xử lý lượng dữ liệu lớn, với độ trễ thấp, đảm bảo tính chính xác và độ tin cậy cao.

Một trong những ưu điểm chính của Kafka là khả năng mở rộng và phân tán. Nền tảng này có thể mở rộng dễ dàng để xử lý tăng cường về lưu lượng và dữ liệu, hỗ trợ quản lý dữ liệu trên nhiều máy chủ và trung tâm dữ liệu. Điều này làm cho Kafka trở thành một giải pháp lý tưởng cho các doanh nghiệp cần xử lý dữ liệu lớn và phức tạp, bao gồm cả dữ liệu streaming và batch.

Kafka cũng tích hợp chặt chẽ với các hệ thống lưu trữ dữ liệu và nền tảng xử lý dữ liệu khác, như Apache Hadoop, Apache Spark, và các hệ thống lưu trữ

NoSQL. Điều này cho phép các tổ chức xây dựng các hệ thống xử lý dữ liệu toàn diện, kết hợp khả năng xử lý luồng dữ liệu nhanh chóng của Kafka với các hệ thốngphân tích và lưu trữ dữ liệu mạnh mẽ khác.

Ngồi ra, Kafka cung cấp nhiều tính năng an ninh và quản lý, giúp đảm bảo an toàn và quản lý dữ liệu một cách hiệu quả. Điều này bao gồm tính năng mã hóa, xác thực và ủy quyền, cùng với khả năng theo dõi và giám sát dữ liệu. Cộng đồng Kafka cũng rất sôi động, cung cấp nhiều tài liệu học tập, hướng dẫn và công cụ hỗ trợ, giúp người dùng dễ dàng triển khai và tận dụng tối đa nền tảng này.

<b>2.2.9. Kubernetes</b>

<i>Hình 2-16 Logo Kubernetes</i>

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

Kubernetes là một hệ thống tự động hóa triển khai, mở rộng và quản lý các ứng dụng chạy trong container. Ra đời từ năm 2014 và ban đầu được phát triển bởi Google, Kubernetes đã nhanh chóng trở thành tiêu chuẩn ngành cho quản lý

container hóa ứng dụng, được sử dụng rộng rãi trong môi trường cloud và premises.

on-Tại trung tâm của Kubernetes là khả năng tự động hóa việc triển khai và quản lý các ứng dụng. Nó cung cấp một môi trường chạy đồng nhất cho các ứng dụng, cho phép chúng được phân phối và mở rộng một cách linh hoạt trên các môi trường cloud hoặc máy chủ vật lý. Kubernetes giúp quản lý trạng thái mong muốn cho các ứng dụng, tự động chữa lỗi khi có sự cố và quản lý cập nhật mà không làm gián đoạn dịch vụ.

Kubernetes cũng cung cấp khả năng mở rộng và cân bằng tải cao. Nó cho phép tự động mở rộng hoặc thu nhỏ số lượng bản sao của ứng dụng dựa trên nhu cầu thực tế, giúp tối ưu hóa việc sử dụng tài nguyên và đảm bảo hiệu suất ổn định. Cùng với đó, Kubernetes hỗ trợ cân bằng tải và phân phối lưu lượng mạng, giúp quản lý traffic một cách hiệu quả.

Về mặt an ninh, Kubernetes cung cấp các tính năng an tồn và bảo mật cho cả cấu hình hệ thống và ứng dụng. Nó hỗ trợ việc quản lý quyền truy cập, mã hóa dữ liệu và cơ lập mạng, giúp bảo vệ cả hệ thống và dữ liệu. Kubernetes cũng có mộtcộng đồng hỗ trợ mạnh mẽ, cung cấp tài nguyên học tập, tài liệu và công cụ, giúp người dùng dễ dàng triển khai và quản lý ứng dụng của mình.

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

<i>Hình 2-17 Logo Kind</i>

Kind (Kubernetes IN Docker) là một công cụ được thiết kế để giúp chạy các cụm Kubernetes trong các container Docker. Ra mắt vào năm 2018, Kind đã nhanh chóng trở thành một công cụ phổ biến trong cộng đồng Kubernetes, nhất là với những người phát triển muốn thử nghiệm và triển khai cụm Kubernetes một cách nhanh chóng và hiệu quả trong môi trường phát triển cục bộ.

Kind cho phép người dùng tạo và quản lý cụm Kubernetes bên trong container Docker. Điều này làm giảm đáng kể ngưỡng gia nhập cho những người mới bắt đầu với Kubernetes, vì khơng cần cấu hình phức tạp hay tài nguyên phần cứng đặc biệt. Kind cung cấp một cách thuận tiện để triển khai, kiểm thử và phát triển các ứng dụng trên Kubernetes mà không cần một cụm Kubernetes vật lý hay cloud-based.

Một trong những ưu điểm lớn của Kind là khả năng mô phỏng cụm

Kubernetes đa nút trên máy tính cá nhân. Điều này cho phép các nhà phát triển kiểmtra cách ứng dụng của họ hoạt động trong một môi trường sản xuất giống như thực tế mà khơng gặp rủi ro hoặc chi phí cao. Kind cũng rất hữu ích trong việc tự động hóa kiểm thử, giúp đảm bảo ứng dụng hoạt động chính xác trong một cụm

Ngồi ra, Kind cũng hỗ trợ tích hợp với các cơng cụ và quy trình phát triển

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

Deployment). Điều này giúp tối ưu hóa quy trình phát triển phần mềm, từ việc lập trình, kiểm thử cho đến triển khai ứng dụng. Cộng đồng Kind cũng rất năng động, cung cấp hướng dẫn, tài liệu và hỗ trợ kỹ thuật, làm cho nó trở thành một công cụ không thể thiếu cho bất kỳ nhà phát triển Kubernetes nào.

<i>Hình 2-18 Logo MySQL</i>

MySQL là một hệ quản trị cơ sở dữ liệu quan hệ phổ biến và mạnh mẽ. Đượcphát triển từ năm 1995, MySQL đã trở thành một phần không thể thiếu trong nềntảng phát triển phần mềm hiện đại.

Với MySQL, bạn có thể tạo, quản lý và truy vấn dữ liệu một cách dễ dàng.Nó hỗ trợ ngơn ngữ truy vấn SQL (Structured Query Language), cho phép bạn thựchiện các thao tác như tạo, đọc, cập nhật và xóa dữ liệu từ cơ sở dữ liệu.

MySQL có hiệu suất tốt và khả năng mở rộng linh hoạt. Nó có thể xử lý sốlượng lớn người dùng và tải truy vấn một cách hiệu quả, đồng thời hỗ trợ các tínhnăng như sao lưu và phục hồi dữ liệu, cân bằng tải và nhân rộng dữ liệu.

Ngồi ra, MySQL cũng cung cấp các tính năng an ninh để bảo vệ dữ liệu củabạn. Bạn có thể thiết lập quyền truy cập chi tiết cho người dùng và thiết lập các ràngbuộc để đảm bảo tính tồn vẹn và an tồn của cơ sở dữ liệu.

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

MySQL được sử dụng rộng rãi trong các ứng dụng web, hệ thống quản lý nộidung (CMS), ứng dụng di động và nhiều lĩnh vực khác. Nó được cộng đồng pháttriển đơng đảo và có nhiều tài liệu, hỗ trợ và cơng cụ hữu ích để giúp bạn làm việcvới cơ sở dữ liệu một cách hiệu quả.

</div>

×