Công nghệ sử dụng

Một phần của tài liệu Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội (Trang 35 - 48)

2 Cơ sở lý thuyết và công nghệ

2.2 Công nghệ sử dụng

VueJS là một trong những framework (cùng với ReactJS, Angular, EmberJS,...) nổi tiếng

dùng để phát triển Front-end cho nền tảng web sử dụng ngôn ngữ JavaSciprt.

VueJS vốn được phát triển chỉ từ một người duy nhất là Evan You, nhưng nó đã khơng

rộng rãi nhất trong cộng đồng với một số lượng người phát triển cốt lõi đông đảo và chất lượng.

Hệ thống sử dụng VueJS vì khả năng dễ tiếp cận của nó, đồng thời sức mạnh nó mang lại là rất lớn (đặc biệt là sự ra đời của phiên bản 3 - cũng là phiên bản mà nhóm làm đề tài sử dụng để phát triển). Một số đặc điểm cơ bản của VueJS có thể kể đến như sau:

 Sử dụng tồn bộ tính năng, sức mạnh của HTML, CSS thuần chủng (khác với ReactJS sử dụng kiểu ngôn ngữ lai giữa HTML và JavaScript là JSX).

 Có khả năng scale cực kì lớn vì là một bộ framework hồn chỉnh bao gồm những tính năng, thư viện,... hỗ trợ đầy đủ mọi nhu cầu từ dễ tới khó của một trang web.

 Hiệu suất rất cao nhờ sử dụng Virtual DOM để hiện thực các bài toán liên quan tới hiệu suất khi phải giao tiếp giữa 3 ngôn ngữ khác nhau (HTML, CSS, JavaScript) như:

change detection, reactivity, asynchronous mechanism, smart rendering,...

 Phù hợp với mọi cấp độ phát triển web, từ mini-project tới enterprise level.

 Có cộng đồng sử dụng và phát triển đông đảo nhất hiện nay dù ra đời muộn hơn những framework “gạo cội” như: ReactJS, Angular.

Quản lý dữ liệu tập trung với Pinia

Việc sử dụng VueJS để hiện thực hệ thống này địi hỏi phải có rất nhiều component (thành phần), page (trang),… được người lập trình viết ra. Với VueJS thì Việc trao đổi dữ liệu giữa các component là theo từng nhánh, nghĩa là component cha có thể truyền dữ liệu xuống cho component con, component con có thể kích hoạt một sự kiện để component cha lắng nghe. Việc truyền dữ liệu từ các component kế cận nhau (cùng component cha) là rất phức tạp khi phải đi qua rất nhiều con đường. Do đó cần có một cơ chế để quản lý dữ liệu một cách tập trung.

Pinia là một project open-source dùng để tạo một cơ sở dữ liệu tập trung dành cho các

ứng dụng web viết bằng VueJS phiên bản 3. Với sự cải tiến về hiệu suất cũng như tích hợp tính năng mới của VueJS 3, Pinia dần trở thành một thư viện dữ liệu tập trung thay thế cho

Vuex vốn đã khá cũ vì chưa cập nhật những tính năng ưu việt mới của VueJS 3.

Pinia có thực thể chính là store - nơi chứa toàn bộ các dữ liệu, hàm sử dụng cho một mục

đích nào đó. Mỗi store bao gồm có 3 thành phần chính:  State: là trung tâm chứa toàn bộ dữ liệu của store.

 Getters: là một danh sách các hàm tính tốn suy ra từ State.

 Actions: là một danh sách các hàm có thể tác động lên bất cứ dữ liệu nào bên trong State.

Hình 9: Một đoạn code định nghĩa store cho các tác vụ liên quan tới Xác thực người dùng.Việc sử dụng store này là rất đơn giản, chỉ việc dùng hàm useStoreAuth() ở bất cứ đâu là Việc sử dụng store này là rất đơn giản, chỉ việc dùng hàm useStoreAuth() ở bất cứ đâu là có thể truy cập được tất cả các State, Getters, Actions đã được định nghĩa như trên.

Đa ngôn ngữ với Vue I18n

Vì hệ thống là có sự kết hợp với cả Mạng xã hội nên việc hỗ trợ đa ngôn ngữ là khá cần thiết. Cụ thể hệ thống cần hỗ trợ 2 ngôn ngữ:

 Tiếng Anh.  Tiếng Việt.

Vue I18n là một thư viện hỗ trợ hồn hảo cho cơng việc định nghĩa các đoạn chữ hiển thị

theo các ngôn ngữ khác nhau thông qua key. Vue I18n cung cấp một mơi trường tích hợp đầy đủ các tính năng và tận dụng sự ưu việt của VueJS 3.

Công việc nhiều nhất khi sử dụng thư viện này đó là định nghĩa 2 file en.yaml và vi.yaml tương ứng với ngôn ngữ tiếng Anh và ngơn ngữ tiếng Việt:

Hình 11: Tập tin vi.yaml định nghĩa các key cho ngôn ngữ tiếng Việt.

Đặc biệt, hệ thống cũng thiết lập Vue I18n sử dụng lazy-loading tương ứng với ngôn ngữ hiện tại người dùng đã chọn. Điều này có nghĩa là khi mới vào sử dụng hệ thống, người dùng sẽ chỉ tải về một tập tin duy nhất ứng với ngôn ngữ mà người dùng đã sử dụng trước đó. Trong q trình sử dụng, chỉ khi người dùng đổi sang ngơn ngữ khác thì hệ thống mới cho phép người dùng tải về tập tin cịn lại, và trong suốt q trình sử dụng sau đó, hệ thống sẽ tự động cache lại trong trình duyệt, người dùng sẽ khơng cần phải tải lại nữa.

Đây là một yếu tố quan trọng giúp tăng hiệu suất của hệ thống bởi khi hệ thống càng lớn, các tập tin định nghĩa ngơn ngữ sẽ rất nặng, có thể lên tới hơn 1.000 dịng, do đó sử dụng lazy-loading là điều rất thiết yếu.

2.2.2 Back-end: NestJS

NestJS: Một framework được xây dựng dựa trên nền tảng framework Express của

NodeJS. Đây là một framework mới mẻ và linh hoạt, kết hợp các đặc điểm cứng rắn, nhất

quán và bảo thủ (opinionated) của Spring Java, kiến trúc mơ-đun hóa tinh gọn và dễ mở rộng của Angular với NodeJS – một platform xây dựng ứng dụng Web đã quá nổi tiếng nhờ vào hiệu năng khá tốt. Ngồi ra, NestJS sử dụng ngơn ngữ lập trình Typescript đã khắc phục được các nhược điểm về kiểu của Javascript mà vẫn giữ được sự uyển chuyển của Javascript trong quá trình hiện thực. Một điểm mạnh nữa của NestJS là sự hỗ trợ gần như toàn diện các use-

case của một hệ thống web điển hình, ví dụ như: Validation, Serialization, Caching, Database (SQL, No-SQL), Logging, Websocket, Server-sent event, Job Queue, v.v..

Việc lựa chọn NestJS cho phép nhóm làm đề tài thống nhất về mặt ngơn ngữ giữa phần front-end và back-end, giảm bớt q trình tìm hiểu và học hỏi các ngơn ngữ lập trình khác nhau. NestJS được xây dựng dựa trên nền tảng là NodeJS cũng là một điểm mạnh nữa cần nhắc đến, bởi NodeJS có một cộng đồng open-source đơng đảo cung cấp phong phú nhiều loại thư viện phục vụ hầu hết các use-case của một back-end truyền thống.

2.2.3 Database: PostgreSQL

PostgreSQL là một hệ thống quản trị cơ sở dữ liệu mã nguồn mở trung hòa hai yếu tố: đảm bảo tuân thủ tiêu chuẩn ANSI SQL, đồng thời vẫn ln đi đầu trong các tính năng mới mẻ để phục vụ nhu cầu use case ngày càng phong phú. Các tính năng độc đáo mà PostgreSQL hỗ trợ có thể kể đến như:

 Full-text Search phục vụ mục đích tìm kiếm nâng cao.

 Materialized View phục vụ truy vấn các dữ liệu tổng hợp hiệu quả  Regular Expression.

 Khả năng mơ hình quan hệ kế thừa trong EERD bằng từ khóa INHERITANCE.  Cung cấp các kiểu dữ liệu mới như range, array,…

 Cung cấp kiểu dữ liệu json và jsonb để phục vụ nhu cầu sử dụng các mơ hình phi quan hệ.

Hệ thống sử dụng PostgreSQL làm hệ thống quản trị cơ sở dữ liệu khơng chỉ vì tính năng động như đã trình bày ở trên mà cịn bởi hiệu suất mạnh mẽ và có phần nhỉnh hơn so với các hệ cơ sở dữ liệu đương thời. Khả năng hỗ trợ nhiều cách lưu trữ dữ liệu cũng là một điểm nổi bật để quan tâm, bởi lẽ các hệ thống lớn ln có nhu cầu chuyển các bảng quan hệ có tính độc lập cao thành dữ liệu JSON để tăng hiệu suất.

2.2.4 ActionML

ActionML là một tập hợp các giải pháp Machine Learning giúp giải quyết nhiều bài toán khác nhau, trong đó Hệ thống giới thiệu là cốt lõi. Hệ thống giới thiệu The Universal Recommender với cốt lõi là thuật toán Correlated Cross-Occurrence đã được giới thiệu ở phần Cơ sở lý thuyết giúp cho việc giới thiệu linh hoạt hơn bằng cách tiếp nhận nhiều sự kiện chuyển đổi khác nhau trong hệ thống.

Ngoài ra ActionML cung cấp một máy chủ có tên là Harness dùng để triển khai các mơ hình Machine Learning. Điểm mạnh của máy chủ này đó là các API cung cấp đa dạng và dễ dàng sử dụng. Một người lập trình khơng cần nhiều hiểu biết về thuật tốn cũng có thể hiện thực cho mình một hệ thống giới thiệu sử dụng các công cụ này.

ElasticSearch là một cơ sở dữ liệu phục vụ mục đích tìm kiếm. Điểm đặc biệt của ElasticSearch là ở chỗ nó khơng chỉ hỗ trợ tìm kiếm full-text, mà cịn đa dạng các nhu cầu tìm kiếm khác như tìm kiếm một phần, search-as-you-type, fuzzy search (nhập sai chính tả), tìm kiếm vector (được nhóm làm đề tài sử dụng để hiện thực chức năng tìm kiếm tương đồng ngữ nghĩa), v.v..

NestJS được tích hợp khá tốt với ElasticSearch khi nó cung cấp một thư viện để giúp người lập trình có thể dễ dàng viết các câu lệnh tìm kiếm và cập nhật dữ liệu thay vì gọi trực tiếp thông qua gửi API.

2.2.6 FastAPI

Đây là framework hiện thực API của Python sử dụng cơ chế lập trình async – await thay vì synchronous như các framework Python truyền thống. Hệ thống sử dụng công nghệ này để hiện thực API bao quanh mơ hình tìm kiếm tương đồng về ngữ nghĩa cũng viết bằng ngôn ngữ Python. Điểm mạnh của FastAPI dẫn đến quyết định sử dụng trên đó là sự đơn giản và dễ dàng trong việc hiện thực nhanh các API mà khơng tốn q nhiều thời gian cấu hình.

3 Yêu cầu hệ thống

Bởi vì bản chất hệ thống là sự kết hợp giữa Hệ quản trị đào tạo và Mạng xã hội nên dẫn tới hệ quả là không có một luồng hoạt động tổng quát nào có thể miêu tả các yêu cầu, tính năng của tồn bộ hệ thống. Do đó, nhóm làm đề tài sẽ khơng đề xuất ra luồng hoạt động nào mà thay vào đó sẽ liệt kê chi tiết các yêu cầu, tính năng mà hệ thống cung cấp. Qua đó khi kết hợp các yêu cầu, tính năng này với nhau có thể ra bất kỳ một luồng hoạt động nào và chúng đều có độ quan trọng là gần tương đương nhau.

3.1 Functional requirements

Dưới đây là sơ đồ các use-case của tồn bộ hệ thống:

3.2 Non-functional requirements

 Hệ thống đảm bảo các chính sách riêng tư của người dùng.

 Hệ thống đảm bảo máy chủ khơng gặp sự cố khi có 2,000 người truy xuất trong cùng một thời điểm.

 Dung lượng truyền tải của toàn bộ phần front-end không quá 8 MB (sử dụng gzip).  Máy chủ phân tán của từng dịch vụ không bị sập quá 60 giờ/tháng.

 Bảo trì và cập nhật hệ thống không quá 3 ngày (nguyên nhân chủ quan) và không quá 1 tuần (nguyên nhân khách quan). Nếu vượt quá sẽ ln có đền bù xứng đáng.

 Hệ thống dễ dàng sử dụng, chỉ cần dưới 30 phút để người dùng hiểu hết các tính năng.

Một phần của tài liệu Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội (Trang 35 - 48)

Tải bản đầy đủ (PDF)

(185 trang)