1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo thực tập đề tài ứng dụng công nghệ cải thiện hiệu suất cho trang web bán hàng

14 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng dụng Công Nghệ Cải Thiện Hiệu Suất Cho Trang Web Bán Hàng
Tác giả Nguyễn Đình Ngọc
Người hướng dẫn TS. Lê Phê Đô
Trường học Trường Đại Học Công Nghệ
Chuyên ngành Khoa Học Máy Tính
Thể loại Báo cáo thực tập
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 14
Dung lượng 1,54 MB

Nội dung

Giới thiệu qua bài toánNhư đã giới thiệu ở trên, bài toán mà em cần giải quyết chính là xây dựng một trang web bán hàng, nhưng khác với một trang web lập trình trong các bài tập lớn em l

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

-BÁO CÁO THỰC TẬP

NGÀNH: KHOA HỌC MÁY TÍNH

ĐỀ TÀI: ỨNG DỤNG CÔNG NGHỆ CẢI THIỆN HIỆU

SUẤT CHO TRANG WEB BÁN HÀNG

Giảng viên đánh giá: TS Lê Phê

Đô

Sinh viên: Nguyễn Đình Ngọc

Mã sinh viên: 18020963 Lớp: K63CA-CLC1

Hà Nội, tháng 9 năm 2021

Trang 2

MỤC LỤC

3 Tóm tắt lý thuyết, giải pháp, thuật toán 5 3.1 Mô tả chung về kiến trúc và cách xây dựng hệ thống 5 3.2 Một số lý thuyết, công cụ và dịch vụ nổi bật được ứng dụng và cách tích hợp chúng để giải

5 Kết quả đạt được, hướng phát triển 9 5.1 Kỹ năng & kiến thức thu thập được: 9 5.2 Hướng phát triển tiếp theo để hoàn thiện giải pháp 10

Trang 3

LỜI CẢM ƠN

Trong suốt thời gian 3 năm học tập và rèn luyện tại Trường Đại Học Công Nghệ cho đến nay, em đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý thầy

cô và bạn bè Với lòng biết ơn sâu sắc và chân thành nhất, em xin gửi đến quý thầy

cô ở khoa Công Nghệ Thông Tin – Trường Đại Học Công Nghệ đã cùng với tri thức và tâm huyết của mình để truyền đạt vốn kiến thức quý báu cho chúng em trong suốt thời gian học tập tại trường

Và đặc biệt, trong học kỳ này, Khoa đã tổ chức cho chúng em được tiếp cận với môn mà theo em là rất hữu ích đối với sinh viên ngành Khoa Học Máy Tính

Đó là bộ môn thực tập doanh nghiệp, để sinh viên có được kiến thức thực tiễn và

có định hướng cho công việc sau này Em xin gửi đến thầy Lê Phê Đô, người đã hướng dẫn cho em để có thể hoàn thành bộ môn thực tập doanh nghiệp này lời cảm

ơn sâu sắc nhất

Em cũng gửi lời cảm ơn tới công ty Open Commerce vì sự giúp đỡ và tạo điều thuận lợi cho em về mọi mặt cho dù tình hình dịch bệnh diễn biến phức tạp, cho em được tìm hiểu thực tiễn, tham gia đầy đủ các buổi học và hướng dẫn trong suốt quá trình thực tập tại công ty

Trong quá trình thực tập khó tránh khỏi những sai sót, em mong được thầy

bỏ qua Và với báo cáo này, nếu được thì em cũng rất mong nhận được ý kiến đóng góp từ thầy

Em xin chân thành cảm ơn!

Trang 4

1 Giới thiệu chung

1.1 Giới thiệu công ty

Open Commerce Group (tên cũ là Brodev Việt Nam) là công ty công nghệ cung cấp các giải pháp thương mại điện tử, với lợi thế 10 năm hoạt động trong lĩnh vực Ecommerce và sát cánh cùng gần 1 triệu khách hàng doanh nghiệp bán hàng trực tuyến trên toàn thế giới – công ty tự hào có đội ngũ có thể phục vụ các thị trường lớn và sôi động nhất toàn cầu như Mỹ và Trung Quốc Mục tiêu của Open Commerce Group là tạo ra hệ sinh thái các sản phẩm để thúc đẩy và nâng tầm thương mại điện tử nói chung, cũng như thương mại xuyên biên giới nói riêng, là

bệ phóng cho các doanh nhân và doanh nghiệp kinh doanh trực tuyến bắt đầu, phát triển và thành công

Sản phẩm nổi bật của công ty là Shopbase, mô tả ngắn gọn thì Shopbase là một web app giúp mọi người tạo các website bán hàng của riêng họ (Tương tự như Shopify.com, Haravan.com)

1.2 Giới thiệu công việc

Trong thời gian thực tập ở công ty, em được học tập nhiều kiến thức về lập trình nói chung và đi sâu hơn về lập trình ứng dụng web Công việc chính mà em thực hiện trong giai đoạn này đó là vừa học vừa áp dụng những kiến thức được học vào một trang web do cá nhân tự xây dựng

1.3 Giới thiệu qua bài toán

Như đã giới thiệu ở trên, bài toán mà em cần giải quyết chính là xây dựng một trang web bán hàng, nhưng khác với một trang web lập trình trong các bài tập lớn em làm ở trường ở đây có một số yêu cầu khác đó là phải ứng dụng được một

số công nghệ vào trang web của mình ví dụ như remote caching sử dụng Redis, công cụ quản lý hàng đợi message - Rabbitmq, công cụ tìm kiếm – ElasticSearch

để chất lượng của sản phẩm, tiến sát gần với cách hoạt động của các ứng dụng web thực thế của công ty

Trang 5

2 Yêu cầu bài toán

Trang web bán hàng lập ra cần có được các đặc điểm sau:

● Về ngôn ngữ và framework: Frontend sử dụng framework VueJs, backend

sử dụng ngôn ngữ golang

● Về chức năng: Trang web có đầy đủ các chức năng, hỗ trợ cả đầy đủ cho cho

cả người bán hàng và mua hàng Cụ thể đó là:

○ Chức năng phục vụ cho mọi người dùng:

■ Đăng nhập và đăng xuất: người dùng tạo tài khoản và thông tin

về họ sẽ được lưu cùng tài khoản đó Đi kèm với điều này sẽ là chức năng quan quản lý tài khoản

■ Xem sản phẩm: Tìm kiếm, lọc, xem chi tiết các sản phẩm

■ Mua hàng: Thêm sản phẩm vào giỏ hàng, thêm địa chỉ giao nhận, lựa chọn hình thức thanh toán và đặt hàng

○ Chức năng phục vụ cho người bán hàng

■ Quản lý sản phẩm: thêm, sửa, xóa các sản phẩm trong shop của mình

■ Thống kê bán hàng: Xem các thống kê về doanh số, lợi nhuận, chi tiết các mặt hàng bán ra theo các khoảng thời gian mong muốn

■ Chức năng báo cáo tự động hàng ngày đối cho người bán hàng, gửi các thông tin thống kê cho người bán

Về yêu cầu chất lượng đối với hệ thống:

- Quản lý phiên đăng nhập của người dùng sử dụng Json Web Token (JWT)

- Tìm kiếm sản phẩm được triển khai sử dụng ElasticSearch để thu được kết quả tìm kiếm nhanh nhất Ngoài ra tích hợp thêm caching bao gồm remote caching và local caching đối với các sản phẩm mà khách hàng vừa xem để có thể tăng tốc hơn nữa tốc độ tìm kiếm trong trường hợp khách hàng ấn xem lại sản phẩm đó Công cụ hỗ trợ remote caching được lựa chọn là Redis

- Xử lý các yêu cầu mua hàng của khách hàng có sử dụng ứng dụng quản

Trang 6

lý hàng đợi message (RabbitMq) để tránh hệ thống bị dừng do quá tải.

- Có tích hợp module gửi mail tự động tới khách hàng khi họ mua hàng và email thống kê hàng ngày tới người người bán hàng

3 Tóm tắt lý thuyết, giải pháp, thuật toán.

3.1 Mô tả chung về kiến trúc và cách xây dựng hệ thống

Hệ thống gồm hai phần chính là Frontend và Backend:

- Frontend được xây dựng bằng framework VueJs và bootstrap để tăng tính thẩm mỹ cho giao diện

- Backend được xây dựng bằng golang, sử dụng thư viện Gorilla Mux để xây dựng một Router & Dispatcher để xử lý các request phía Frontend gửi lên đến đúng API xử lý chúng Về kiến trúc bên trong, em xây dựng Backend thành 3 tầng riêng biệt với sự xuất hiện của Middleware nằm trước API và Database để thực hiện nhiệm vụ xác thực và kiểm tra quyền truy cập

3.2 Một số lý thuyết, công cụ và dịch vụ nổi bật được ứng dụng và cách tích hợp chúng để giải quyết các vấn đề trong hệ thống

- Token-based authentication: là phương thức xác thực bằng chuỗi mã hóa, khi người dùng sử dụng mật khẩu và tài khoản để đăng nhập vào hệ thống có

sử dụng phương thức này, họ sẽ nhận về một chuỗi token Chuỗi token này

sẽ được hệ thống sử dụng để xác minh quyền truy cập của người dùng trong các lần truy cập sau đó mà không cần phải đăng nhập lại

Trang web mà em xây dựng được triển khai phương thức xác thực này và củ thể hơn là sử dụng Json Web Token (JWT) để bảo bảo mật Tóm tắt về JWT: đây là 1 tiêu chuẩn mở định nghĩa cách truyền tin an toàn giữa các bên, một token của nó có bản chất là một chuỗi mã hóa từ một chuỗi json chứa thông tin, dựa vào đặc điểm đó mà hệ thống sẽ có thể thêm các thông tin xác thực cần thiết vào token, mã hóa và gửi về cho phía client (frontend)

Thực tế áp dụng trong trang web của em, em triển khai phương thức xác thực này như sau: Khi backend nhận được một yêu cầu đăng nhập với tài

Trang 7

khoản và mật khẩu hợp lệ từ frontend thì hệ thống sẽ tạo ra một chuỗi token

có một số thông tin đặc thù sau: IdUser - chứa Id của người dùng phục vụ cho việc xác định người gửi yêu cầu là ai khi cần; Role - chứa quyền hay vai trò của người đó đối với hệ thống, dựa vào đây để xác định nhanh xem người gửi có quyền được thực hiện các hành động có trong yêu cầu mà họ gửi lên hay không, ngoài ra còn có một số trường thông tin chung nữa của một chuỗi token như tên thuật toán mã hóa - để hỗ trợ việc giải mã, thời gian hết hạn - cho biết thời gian có hiệu lực của token, và cuối cùng phần quan trọng nhất là phần chữ ký số để giúp xác định token có hợp lệ hay không

- Elasticsearch: là một Search Engine hoạt động riêng biệt như một web server, có khả năng cho phép tìm kiếm dữ liệu được lưu trong nó một cách nhanh chóng và vượt trội so với tìm kiếm trong các Database khác như Mongodb, Mysql, Về bản chất thì mình có thể dùng Elasticsearch như một database bình thường nhưng do được thiết kế ra cho mục đích Search nên các nhiệm vụ khác như Create - Read - Update - Delete (CRUD) thì Elasticsearch kém thế hơn các Database vừa kể trên

Trong hệ thống của em, Elasticsearch được triển khai để phục vụ cho việc search sản phẩm khi người người dùng tìm kiếm, nhưng để giải quyết sự kém thế của Elasticsearch trong các nhiệm vụ CRUD kể trên thì em có sử dụng kết hợp thêm một Database nữa làm database chính đó là Mysql Cụ thể hơn thì tất cả các dữ liệu của hệ thống sẽ được lưu ở Mysql và chỉ có dữ liệu về sản phẩm được lưu thêm vào Elasticsearch Với sự kết hợp này đã mang lại một hiệu suất tốt hơn về mặt tìm kiếm dữ liệu cho hệ thống của em nhưng có một bài toán mới được tạo ra ở đây, đó là bài toán đồng bộ dữ liệu giữa hai Database Để giải quyết bài toán này em có tính đến hai phương án,

cả hai đều có ba bước chính là đánh dấu dữ liệu cần động bộ trong database chính, quét để lấy chúng và cập nhật những thay đổi sang Elasticsearch Còn

về sự khác nhau thì nó nằm ở việc cài đặt thời gian chạy, phương án thứ nhất

sẽ cài đặt tiến trình đồng bộ chạy khi có sự thay đổi ở database chính, phương án thứ hai là cài đặt tiến trình đồng bộ theo lịch cố định hằng ngày Căn cứ vào quy mô của hệ thống của mình em thấy, vì quy mô dữ liệu còn nhỏ và các sự thay đổi chưa có nhiều nên em quyết định cài đặt tiến trình

Trang 8

đồng bộ theo phương án thứ nhất Cụ thể hơn các module kích hoạt quá trình đồng bộ được em triển khai nằm ở ngay sau vị trí code của các Api có khả năng làm thay đổi dữ liệu về sản phẩm trong database

- RabbitMQ: là một AMQP message broker hay còn gọi là ứng dụng quản lý hàng đợi message, nó có bản chất là một ứng dụng trung gian phụ trách việc validating, transforming và routing các messages được gửi đến nó Trong hệ thống của em, có một hành động đó là gửi email về cho người dùng khi họ đặt hàng thành công, nhưng module gửi mail thì chỉ có một do

nó còn phải liên kết với một dịch vụ gửi email bên ngoài khác đó là Sendgrid, nên có một vấn đề không thể tăng tải cho nó khi số lượng đơn hàng đặt tăng lên cao Vì thế có một bài toán đó là là làm sao hệ thống không bị dừng vì quá tải và không một đơn hàng nào bị xảy ra trường hợp không có email gửi về Để giải quyết bài toán này, em cũng đã cài đặt RabbitMq để giải quyết Cụ thể hơn, khi có một đơn hàng mới xuất hiện thì thông tin của người mua và đơn hàng sẽ được gửi tới RabbitMQ thông qua một ứng dụng con là Producer, sau đó module gửi mail sẽ cài đặt một ứng dụng con khác gọi là Consumer để lấy các thông tin kia về và xử lý Mặc dù nhìn có vẻ đơn giản nhưng sở dĩ RabbitMQ có thể giúp hệ thống không bị dừng là nó có 1 tính năng là tạo các hàng đợi message, điều này có nghĩa là tại một khoảng thời gian nếu số lượng message gửi lên lớn hơn công suất xử

lý của ứng dụng lấy message về thì sẽ không có vấn đề gì xảy ra cả, các message vẫn nằm ở trên hàng đợi đó và chờ đến khi được lấy về, tính năng này chính là chìa khóa giúp hệ thống có thể xử lý bất đồng bộ

Ngoài ra thì RabbitMq còn rất nhiều tính năng khác hữu ích như validating, routing, … nhưng nó không được ứng dụng trong hệ thống này

- Redis: (Remote Dictionary Server) là một mã nguồn mỡ được dùng để lưu trữ dữ liệu có cấu trúc, có thể được sử dụng như database, bộ nhớ cache hay một message broker Điểm đặc điểm nổi bật của Redis đó là nó hỗ trợ nhiều cấu trúc dữ liệu cơ bản như: hash, list, set, sorted set string và một điểm nữa

là tất cả dữ liệu được lưu trên Ram nên tốc độ đọc ghi rất nhanh

Ứng dụng đặc điểm trên của Redis, trong hệ thống của em, em có triển khai

Trang 9

Redis để sử dụng như một bộ nhớ đệm để lưu trữ những sản phẩm khách hàng vừa tìm kiếm để có thể tăng tốc độ trả về khi khách hàng muốn xem lại sản phẩm đấy và một dữ liệu nữa cũng được em chọn để lưu trữ vào Redis

đó là mã xác thực email người dùng, vì mã này có khoảng thời gian hữu dụng ngắn và thường được sử dụng lại ngay trong vòng tối đa vài phút để đối chiếu nên lưu ở Redis là tốt hơn so với trong Database

- Sendgrid: là một dịch vụ gửi email, nó đóng vai trò là một Server chuyển các nội dung email mà mình gửi lên tới các người dùng mà mình muốn gửi

Ở hệ thống của mình, em tích hợp Sendgrid là điểm cuối trong module tự động gửi email của em Chi tiết hơn về bên trong module này, em cài đặt sẵn các hàm tạo ra các thư có khung nội dung sẵn ví dụ như thư cảm ơn, thư báo cáo thống kê, hay thư xác thực tài khoản Khi cần sử dụng để gửi email, tùy vào mục đích, em chỉ cần gọi các hàm tương ứng và truyền thêm các thông tin chi tiết là có thể gửi được

Ngoài ra, hàm gửi email thống kê còn được em cấu hình để gửi tự động hàng ngày, mỗi ngày tới lúc 12h trưa, hệ thống sẽ tự động quét doanh số và gửi tới chủ cửa hàng

Trên đây là 5 bài toán nổi bật mà em đã giải quyết được để tăng hiệu suất và tính bảo mật cho hệ thống

4 Mô tả phần mềm cài đặt

Để có thể tạo nên website này, em đã sử dụng công cụ là visual code để code Visual Code là 1 trình soạn thảo mã nguồn nhẹ nhưng mạnh mẽ, thích hợp với mọi máy tính và mọi hệ điều hành Visual Code có rất nhiều các extension để giúp người thoải mái hơn trong việc xử lý code cũng như coding

Bên phía frontend thì em sử dụng framework Vuejs Vuejs là một framework linh động dùng để xây dựng giao diện người dùng Khác với các framework nguyên khối (monolithic), VueJs được thiết kế từ đầu theo hướng cho phép và khuyến khích việc phát triển ứng dụng theo từng bước

Trang 10

Bên phía backend, em sử dụng ngôn ngữ Go để xây dựng Go là một ngôn ngữ khá mới, được thiết kế dựa trên tự duy lập trình hệ thống Một số đặc điểm nổi bật của Go đó là như hỗ trợ khai báo dữ liệu động, tốc độ biên dịch nhanh, ngôn ngữ đơn giản, ngắn gọn

Ngoài ra còn có Docker để triển khai các ứng dụng hỗ trợ như RabbitMq, Redis và ElasticSearch được chạy trong các docker container

5 Kết quả đạt được, hướng phát triển

5.1 Kỹ năng & kiến thức thu thập được:

Sau 5 tuần học và 3 tuần xây dựng ứng dụng web cá nhân thì em thu nhận được rất nhiều kiến thức, dưới đây là một số thứ nổi bật:

● Có khả năng tự tìm hiểu và giải quyết các vấn đề

● Có khả năng teamwork trong 1 nhóm nhỏ

● Áp dụng các cấu trúc dữ liệu và giải thuật vào các vấn đề thực tế

● Hiểu về Coding Convention

● Kỹ năng viết Test và hiểu được tầm quan trọng của việc viết test

● Hiểu về kiến trúc Microservice và cách triển khai

● Hiểu về API, API gateway, middleware và cách triển khai

● Hiểu cách sử dụng docker, chạy được các container của các ứng dụng khác

● Hiểu được một số design pattern cơ bản thường dùng

● Sử dụng một trong các opensource như gorilla, beego, gin

● Cách tương tác với database

● Hiểu về cơ chế caching, biết cách sử dụng cả local caching và remote caching

● Hiểu và biết sử dụng các công cụ, ứng dụng cải thiện hiệu suất cho hệ thống như ElasticSearch, Redis, RabbitMq

● Hiểu và biết sử dụng hai giao thức Http và gRPC

● Sử dụng framework VueJs

● Kiến thức về Webpack

Ngoài ra sau hai tháng thực tập, em cũng đã có cho mình được một tháng

Ngày đăng: 09/08/2024, 18:57

w