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

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ỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang 2

MỤC LỤC

3.Tóm tắt lý thuyết, giải pháp, thuật toán.53.1.Mô tả chung về kiến trúc và cách xây dựng hệ thống.53.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ển95.1.Kỹ năng & kiến thức thu thập được:95.2.Hướng phát triển tiếp theo để hoàn thiện giải pháp10

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ôngNghệ cho đến nay, em đã nhận được rất nhiều sự quan tâm, giúp đỡ của quý thầycô 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ầycô ở khoa Công Nghệ Thông Tin – Trường Đại Học Công Nghệ đã cùng với trithứ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 emtrong 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ậnvớ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 trongsuố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ầybỏ 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 đónggó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ĩnhvự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 chocả 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 đượclự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 vaitrò 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 gianhế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ònvề sự khác nhau thì nó nằm ở việc cài đặt thời gian chạy, phương án thứ nhấtsẽ 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ạisả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ẵncá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áocá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àngngà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ớichủ 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 frameworklinh độ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à remotecaching

● 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ốngnhư 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

Trang 11

làm việc thực tế, vì thế mà có thêm kỹ năng làm việc văn phòng ở công ty, được tham gia vào dự án thực tế và có kỹ năng sử dụng Github đúng chuẩn của công ty.

5.2 Hướng phát triển tiếp theo để hoàn thiện giải pháp

Về hệ thống hiện tại, em cảm thấy rất hài lòng với các chức năng mà nó đã làm được, tuy nhiên em vẫn thử sức xây dựng lại nó theo một kiến trúc mới đó là kiến trúc Microservice Mong muốn của em đó là chia nhỏ hệ thống này thành các service độc lập chạy trên các cổng khác nhau và phục vụ các chức năng riêng biệt như quản lý sản phẩm, quản lý người dùng, … Sở dĩ muốn làm như vậy là vì với kiến trúc như trên, việc tăng hiệu suất của từng service sau này của em sẽ dễ dàng hơn và không bị ảnh hưởng bởi các service khác.

Trên đây là toàn bộ bài báo cáo của em

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

w