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

Kiến trúc microservices và hệ thống quản lý đấu giá quảng cáo trực tuyến

76 48 0

Đ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

Định dạng
Số trang 76
Dung lượng 2,2 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN VŨ QUYỀN KIẾN TRÚC MICROSERVICES VÀ HỆ THỐNG QUẢN LÝ ĐẤU GIÁ QUẢNG CÁO TRỰC TUYẾN Chuyên ngành: Kỹ thuật phần mềm LUẬN VĂN THẠC SĨ KỸ THUẬT HÀ NỘI – 2019 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - NGUYỄN VŨ QUYỀN KIẾN TRÚC MICROSERVICES VÀ HỆ THỐNG QUẢN LÝ ĐẤU GIÁ QUẢNG CÁO TRỰC TUYẾN Chuyên ngành: Kỹ thuật phần mềm LUẬN VĂN THẠC SĨ KỸ THUẬT NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Nguyễn Thị Thu Trang HÀ NỘI - 2019 LỜI CẢM ƠN Lời đầu tiên, em xin chân thành cảm ơn TS Nguyễn Thị Thu Trang, Bộ môn Công nghệ phần mềm, Trường Đại học Bách Khoa Hà Nội, nhiệt tình hướng dẫn, truyền đạt kiến thức cần thiết định hướng cho em q trình thực đề tài để hoàn thành luận văn tốt nghiệp Em chân thành cảm ơn thầy, cô Viện Công nghệ Thông tin Truyền thông Trường Đại học Bách Khoa Hà Nội truyền đạt kiến thức, định hướng trình học trường Dù cố gắng luận văn chắn khơng tránh khỏi nhiều thiếu sót, em mong nhận ý kiến đóng góp thầy cô Em xin chân thành cảm ơn! LỜI CAM ĐOAN Tôi - Nguyễn Vũ Quyền - cam kết luận văn cơng trình nghiên cứu thân hướng dẫn TS Nguyễn Thị Thu Trang Các kết nêu luận văn trung thực, khơng phải chép tồn văn cơng trình khác Hà Nội, ngày 20 tháng 10 năm 2019 Học viên Nguyễn Vũ Quyền MỤC LỤC ĐẶT VẤN ĐỀ Lý chọn đề tài Mục đích nghiên cứu luận văn Tóm tắt luận điểm đóng góp tác giả Phương pháp nghiên cứu 10 CHƯƠNG KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU HỆ THỐNG ĐẤU GIÁ TRỰC TUYẾN 11 1.1 Khảo sát trạng 11 1.2 Tổng quan hệ thống 13 1.2.1 Biểu đồ use case tổng quan 15 1.2.2 Biểu đồ use case phân rã 16 CHƯƠNG KIẾN TRÚC MICROSERVICES VÀ CÁC CÔNG NGHỆ SỬ DỤNG 22 2.1 Kiến trúc microservices 22 2.1.1 Microservices 22 2.1.2 Đặc điểm Microservices 23 2.1.3 Microservices giao tiếp với 24 2.1.4 Ưu nhược điểm Microservices 24 2.2 CQRS Pattern 26 2.2.1 Command Pattern 26 2.2.2 Command Bus 27 2.2.3 CQRS Pattern gì? 29 2.3 API gateway 31 2.4 Các công nghệ sử dụng 33 2.4.1 Ngơn ngữ lập trình Golang 33 2.4.2 Hệ thống thông điệp NATS 36 2.4.3 Protobuf (Protocol Buffers) 38 2.4.4 gRPC (gRPC Remote Procedure Calls) 39 2.4.5 Hệ quản trị sở liệu Postgresql 42 CHƯƠNG THIẾT KẾ VÀ XÂY DỰNG ỨNG DỤNG ĐẤU GIÁ TRỰC TUYẾN VỚI KIẾN TRÚC MICROSERVICES 44 3.1 Kiến trúc Microservices cho hệ thống đấu giá trực tuyến 44 3.2 Thiết kế chi tiết 47 3.2.1 Dịch vụ đấu giá 49 3.2.2 Dịch vụ quản lý đấu giá .51 3.2.3 Dịch vụ lịch sử đấu giá 55 3.3 Xây dựng ứng dụng 58 3.4 Kết đạt 63 CHƯƠNG THỬ NGHIỆM VÀ ĐÁNH GIÁ HỆ THỐNG ĐẤU GIÁ 64 4.1 Thử nghiệm hệ thống đấu giá 64 4.1.1 Kịch thử nghiệm 65 4.1.2 Kiểm thử hệ thống 66 4.2 Đánh giá hệ thống 71 4.3 Phương hướng cải tiến .71 KẾT LUẬN 72 DANH MỤC CÁC TÀI LIỆU THAM KHẢO 73 DANH MỤC TỪ VIẾT TẮT VÀ THUẬT NGỮ Từ viết tắt, thuật ngữ Từ viết đầy đủ CSDL Cơ sở liệu MSA CQRS CRUD HTTP TCP/IP RPC CPU Microservices Architecture Command Query Responsibility Segregation Create, Read, Update, Delete Hyper Text Transfer Protocol Transmission Control Protocol / Internet Protocol Remote Procedure Call Central Processing Unit REST Representational State Transfer JSON JavaScript Object Notation Service Dịch vụ API Application Programming Interface API Gateway Cổng API SOA Services Oriented Architecture CAP Consistency, Availability, Partition tolerance Publisher Người xuất Subscriber Người theo dõi GUI Graphical user interface NATS Neural Autonomic Transport System MỤC LỤC HÌNH ẢNH Hình Biểu đồ use case tổng quan 15 Hình Biểu đồ phân rã use case đấu giá 16 Hình Biểu đồ phân rã use case quản lý đấu giá 18 Hình Biểu đồ phân rã use case lịch sử đấu giá 20 Hình Kiến trúc microservices 22 Hình Mơ hình giao tiếp Microservice 24 Hình Mơ hình command bus 29 Hình Mơ hình CQRS 30 Hình Mơ hình API gateway 32 Hình 10 Mơ hình hoạt động NATS 38 Hình 11 Giao tiếp máy chủ sử dụng gRPC 40 Hình 12 Kiến trúc microservice cho hệ thống đấu giá trực tuyến 44 Hình 13 Kiến trúc microservices theo mẫu CQRS 45 Hình 14 Tăng quy mô cho dịch vụ đấu giá 46 Hình 15 Biểu đồ thực thể hệ thống đấu giá 47 Hình 16 Luồng nghiệp vụ đấu giá công khai 48 Hình 17 Luồng dịch vụ đấu giá 49 Hình 18 Luồng dịch vụ quản lý đấu giá 51 Hình 19 Luồng dịch vụ truy vấn lịch sử đấu giá 55 Hình 20 Cấu trúc hệ thống 58 Hình 21 Cấu trúc phát triển dịch vụ 59 Hình 22 Khởi tạo kết nối tệp main.go 60 Hình 23 Khai báo chức handler interface 60 Hình 24 Đăng kí api với tệp proto 61 Hình 25 Khai báo chức service interface 61 Hình 26 Định nghĩa thực thể khai báo chức storage interface 62 Hình 27 Luồng xử lý hệ thống 62 Hình 28 Khởi tạo dịch vụ lịch sử đấu giá 64 Hình 29 Khởi tạo dịch vụ đấu giá 64 Hình 30 Khởi tạo dịch vụ admin 64 Hình 31 Admin tạo danh sách phiên đấu giá 66 Hình 32 Màn hình tạo phiên đấu giá 67 Hình 33 Danh sách phiên đấu giá 68 Hình 34 Màn hình lịch sử đấu giá 68 Hình 35 Màn hình gọi dịch vụ đấu giá 69 Hình 36 Màn hình thơng báo giá không hợp lệ .69 Hình 37 Thơng báo đấu giá thành cơng 70 Hình 38 Màn hình lịch sử đấu giá sau người dùng đấu giá .70 ĐẶT VẤN ĐỀ Lý chọn đề tài Trong thời đại bùng nổ công nghệ thông tin nay, nhu cầu nắm bắt tin tức, mua sắm trực tuyến người dân ngày tăng cao Ngoài hệ thống trang thương mại điện tử, trang báo điện tử thơng thường, cịn có kênh thơng tin cần khai thác quảng cáo, hệ thống báo nói VBee Do việc đọc báo trở nên tốn thời gian ngày có nhiều báo viết nói kiện nước giới, người dùng muốn cập nhật kịp thời rời mắt khỏi hình Khơng thế, đọc báo điện tử thời gian dài gây bệnh mắt mỏi mắt, nhược thị, cận thị… Báo nói đời nhằm khắc phục nhược điểm mà đồng thời phục vụ đầy đủ lợi ích mà báo điện tử đem lại Người dùng vừa lái xe, vừa nghe tin tức báo điện tử chuyên mục quan tâm: bạn trẻ cập nhật tin tức kiện ngơi sao, thần tượng mình, xu hướng thời trang, doanh nhân liên tục cập nhật tin tức tài cổ phiếu, chứng khốn, người già không cần nhờ cháu đọc hộ báo mệt… cịn nhiều trường hợp khác Từ tập người dùng lớn vậy, ta tận dụng để thương mại hóa cách cho phép doanh nghiệp, cá nhân đấu giá quảng cáo Dựa vào thói quen sở thích người dùng, ta lọc đưa quảng cáo tới tập khách hàng tiềm Để xây dựng hệ thống đấu giá trực tuyến phục vụ cho hàng triệu người dùng, kiến trúc monolithic truyền thống khó đáp ứng yêu cầu Với kiến trúc monolithic, phải đảm bảo tồn hệ thống ln hoạt động, thành phần cần bảo trì hay sửa chữa, hệ thống phải xây dựng triển khai lại Một mơ hình khác kiến trúc hướng dịch vụ (SOA - Service Oriented Architecture) cho phép tích hợp ứng dụng quy trình nghiệp vụ với để đáp ứng nhu cầu nghiệp vụ phần mềm SOA nhanh linh hoạt cho quy trình nghiệp vụ Các thay đổi quy trình ứng dụng chuyển đến thành phần cụ thể mà khơng ảnh hưởng đến tồn hệ thống Tuy nhiên SOA, tất đầu vào Hình 22 Khởi tạo kết nối tệp main.go  Handler chịu trách nhiệm điều hướng xử lý, nhận u cầu từ phía người dùng trả lại thơng tin cần thiết Hình 23 Khai báo chức handler interface  Logging: tệp ghi nhật kí cảnh báo lỗi phát sinh hệ thống  Pb: chứa tệp proto - nơi định nghĩa API Các tham số yêu cầu (request) trả (response) thể 60 Hình 24 Đăng kí api với tệp proto  Provider nơi để đăng kí Handler với hệ thống  Subscriber Publisher xử lý tùy chọn Những dịch vụ đấu giá quản lý đấu giá cần xử lý Publisher để xuất gói tin để dịch vụ cần nhận Dịch vụ lịch sử đấu giá cần xử Subscriber để nhận gói tin từ hai dịch vụ nói  Service thư mục chứa xử lý nghiệp vụ dịch vụ Hình 25 Khai báo chức service interface  Storage nơi chứa định nghĩa thực thể dịch vụ Đây nơi thực tương tác với sở liệu thực thể Dịch vụ đấu giá có bảng hai chức phục vụ mục đích kiểm tra lưu giá vào sở liệu (được thể hình 26) 61 Hình 26 Định nghĩa thực thể khai báo chức storage interface Hình 27 Luồng xử lý hệ thống Hình 27 phía thể luồng hoạt động dịch vụ Khi có yêu cầu gửi tới, tùy giao thức mà hệ thống gọi tới provider tương ứng Chúng gọi tới handler, handler chịu trách nhiệm nhận yêu cầu (request), kiểm tra liệu truyền vào trả kết sau gọi tới dịch vụ Trong service (đây tên thư mục xử lý dịch vụ, khơng có liên hệ với kiến trúc microservices) thực nghiệp vụ API kiểm tra giá đấu có quy định, giá đấu gửi lên có nằm khung phù hợp… Để làm điều này, service cần gọi tới storage để truy vấn để tạo thay đổi sở liệu 62 Publisher gọi service trả thành cơng cho handler để gửi gói tin tới máy chủ NATS Gói tin subscriber đón nhận xử lý lưu vào sở liệu 3.4 Kết đạt Hệ thống đấu giá quảng cáo trực tuyến phát triển theo kiến trúc microservices, mẫu CQRS Mỗi dịch vụ phát triển riêng biệt, không phụ thuộc lẫn giao tiếp với thông qua gRPC, đồng thời cung cấp public API để front-end gọi Nhờ việc phân tách dịch vụ trên, ta triển khai lên kubernetes để dễ dàng triển khai mở rộng Khi vận hành, phiên đấu giá mở, có khả số người dùng tăng đột biến, dựa vào lượng truy cập người dùng tới dịch vụ lớn, ta mở rộng nâng cấp dịch vụ nhanh chóng kịp thời (thay toàn hệ thống kiến trúc khối) Mã nguồn phát triển cách tổng quát, ứng dụng cho nhiều nghiệp vụ toán khác Cấu trúc thiết kế dịch vụ mặt lập trình tuân thủ mẫu service-repository Sau biên dịch, kết đạt bao gồm:  Ba dịch vụ hệ thống triển khai độc lập  NATS hoạt động ổn định Các gói tin API truyền nhận ổn định  Hệ thống ghi log theo ngày giúp việc tìm sửa lỗi dễ dàng Về nghiệp vụ toán, hệ thống cho phép quản trị viên người duyệt công cụ để tạo khung đăng quảng cáo báo nói, tạo phiên đấu giá cho khung Người dùng cá nhân doanh nghiệp xem danh sách phiên đấu giá tham gia phiên đấu giá cho khung mong muốn Khi đấu giá, hệ thống kiểm tra tính hợp lệ giá đấu trả kết cho người dùng biết lý không hợp lệ, thường giá đấu có thay đổi, giá người dùng đưa khơng phải giá cao (thể chương 4) Khi đấu giá thành công, hệ thống tự động trả lại chi tiết phiên đấu giá với thứ tự giá đấu giảm dần Nhìn chung, hệ thống thỏa mãn yêu cầu toán đặt ban đầu 63 CHƯƠNG THỬ NGHIỆM VÀ ĐÁNH GIÁ HỆ THỐNG ĐẤU GIÁ 4.1 Thử nghiệm hệ thống đấu giá Hệ thống đấu giá gồm ba dịch vụ chính, sau em thử nghiệm luồng nghiệp vụ người dùng đấu giá, hệ thống ghi nhận dịch vụ đấu giá phát hành gói tin với chủ đề (Subject) qua máy chủ NATS Dịch vụ lịch sử đấu giá theo dõi chủ đề phát hành nhận gói tin hàng đợi tiến hành xử lý để lưu vào CSDL Để bắt đầu thử nghiệm hệ thống đấu giá, em chạy dịch vụ đấu giá lịch sử đấu giá: Hình 28 Khởi tạo dịch vụ lịch sử đấu giá Hình 29 Khởi tạo dịch vụ đấu giá Hình 30 Khởi tạo dịch vụ admin Hệ thống xây dựng biên dịch file binary để dễ dàng triển khai 64 4.1.1 Kịch thử nghiệm Để xây dựng kịch thử nghiệm cho đấu giá trực tuyến, ta cần xác định mặt hàng cần đấu giá khung để đăng quảng cáo (đã nêu mục khảo sát trạng) Hình thức để người dùng (trong phạm vi luận văn cá nhân doanh nghiệp muốn đưa quảng cáo lên báo nói) tiếp cận với đấu giá khung thơng qua phiên đấu giá Việc tạo khung phiên đấu giá Quản trị viên thực thi Quản trị viên tạo khung để đấu giá phiên đấu giá trang admin Sau tạo, danh sách phiên đấu giá cho khung theo dõi người dùng sau duyệt để publish Chi tiết phiên đấu giá từ phía người dùng liệt kê giá đấu từ tới cũ Tại đây, người dùng tham gia đấu giá thời gian phiên cịn Việc đăng kí để tham gia phiên đấu giá cần người dùng đặt cọc khoản tiền tài khoản người dùng có số dư định để đảm bảo người phá hoại phiên đấu giá Giá đưa phải lớn giá lớn nhất, hệ thống kiểm tra tính hợp lệ từ chối giá nhập vào số lớn Sau nhập số đấu giá hợp lệ, hệ thống lưu vào lịch sử đấu giá, người dùng thấy giá đưa lên danh sách Người dùng quản lý phiên đấu giá tham gia, chi tiết biến động phiên đấu giá để từ điều chỉnh cho lần đấu giá Lúc này, ta hoàn thành luồng xử lý đấu giá Phần thực nhằm mục đích đánh giá thực nghiệm tính ổn định hiệu kiến trúc đề xuất nên tính phụ (đăng kí, đăng nhập, phân quyền kiểm tra tài khoản hợp lệ tham gia đấu giá…) tạm thời lược bỏ phạm vi đề tài 65 4.1.2 Kiểm thử hệ thống Từ kịch nêu trên, em tiến hành kiểm thử hệ thống Bước em đóng vai trị admin để tạo danh sách Hình 31 danh sách phiên đấu giá sau tạo Hình 31 Admin tạo danh sách phiên đấu giá Quản trị tạo thêm phiên đấu giá Bấm nút “Tạo phiên đấu giá”, bảng cho phép ta nhập thông tin tạo phiên (hình 32) 66 Hình 32 Màn hình tạo phiên đấu giá Các thơng tin cần lưu ý bao gồm:  Tên phiên  Giờ mở phiên đóng phiên: có định dạng Y-m-d H:i:s (ví dụ 2019-12-21 08:00:00)  Khung giờ: id khung cần đấu giá  Giá sàn (tùy chọn): giá thấp bắt đầu phiên người tham gia cần đặt 67 Người dùng xem danh sách phiên đấu giá (Hình 33) Tại hiển thị tên phiên giá đấu cao phiên thời điểm Hình 33 Danh sách phiên đấu giá Khi chọn vào chi tiết phiên đấu giá từ danh sách, người dùng xem lịch sử đấu giá phiên, bao gồm tên giá đấu người tham gia đấu giá Hình 34 Màn hình lịch sử đấu giá 68 Người dùng tiến hành đấu giá cách bấm vào nút “Đặt đấu giá” Một cửa sổ lên cho phép người dùng nhập giá cho phiên (Hình 35) Hình 35 Màn hình gọi dịch vụ đấu giá Nếu người dùng nhập giá thấp giá cao nhất, hệ thống trả lại thông báo giá cao phiên yêu cầu người dùng nhập lại Hình 36 Màn hình thơng báo giá khơng hợp lệ 69 Khi người dùng nhập giá thành công, hệ thống trả lại thông báo giá đấu người dùng hợp lệ thêm vào danh sách (Hình 37) Hình 37 Thơng báo đấu giá thành cơng Hình 38 thể giá người dùng thêm vào lịch sử đấu giá Hình 38 Màn hình lịch sử đấu giá sau người dùng đấu giá 70 4.2 Đánh giá hệ thống Ưu điểm  Hệ thống phân tách dịch vụ riêng biệt thực nhiệm vụ nhất, thỏa mãn đặc điểm dịch vụ kiến trúc microservices  Các dịch vụ giao tiếp với thơng qua NATS  Giải toán cốt lõi hệ thống đấu giá quảng cáo trực tuyến hiển thị danh sách phiên đấu giá cho phép đấu giá công khai Nhược điểm  Hệ thống dừng lại mức thử nghiệm, cần hoàn thiện phần API Gateway, đăng nhập, phân quyền… đưa vào áp dụng thực tế  Tính bảo mật chưa cao  Chưa thử nghiệm nhân rộng khơng có đủ sở vật chất 4.3 Phương hướng cải tiến  Hoàn thiện nghiệp vụ đấu giá để vào hoạt động  Hồn thiện hệ thống: bổ sung API gateway, dịch vụ đăng nhập, phân quyền quản lý người dùng  Kết hợp triển khai hệ thống với kubernetes: đưa dịch vụ chạy docker để dễ dàng triển khai nhân rộng  Ứng dụng rộng rãi cho toàn hệ thống microservice  Tăng bảo mật cho hệ thống thông qua đăng nhập phân quyền  Tích hợp tốn online  Thêm dịch vụ cần thiết báo cáo thống kê, phát quảng cáo tới người dùng… 71 KẾT LUẬN Sau thời gian tìm hiểu, đến em hiểu rõ kiến trúc microservices cách áp dụng vào toán thực tế Về nội dung luận văn đáp ứng nội dung đăng ký đề cương Cụ thể luận văn đạt số kết sau:  Tìm hiểu tổng quan kiến trúc microservices, đặc điểm, cách thức giao tiếp đánh giá ưu nhược điểm kiến trúc  Nghiên cứu áp dụng mẫu CQRS cho kiến trúc microservices, bóc tách nghiệp vụ tốn để dễ dàng mở rộng  Ứng dụng công nghệ Google để xây dựng hệ thống  Tìm hiểu chế hoạt động NATS – hệ thống tin nhắn mã nguồn mở nhẹ phổ biến cho kiến trúc microservices, IoT kiến trúc đám mây Do thời gian thực luận văn không nhiều kiến thức cá nhân cịn nhiều hạn chế nên luận văn khơng thể tránh khỏi thiếu sót Em mong ý kiến đóng góp thầy bạn đọc để luận văn hoàn thiện Xin chân thành cảm ơn! 72 DANH MỤC CÁC TÀI LIỆU THAM KHẢO [1] Microservices for Java Developers A Hands-On Introduction to Frameworks & Containers Compliments of Redhad Developers, By Christian Posta, O’Reilly 2016 Chapter: Spring Boot for Microservices, Chapter: Deploy Microservices at Scale with Docker and Kubernetes [2] David Gonzalez - Developing Microservices with Node.js - 2016 By David Gonzalez, Packt Publishing [3] Service - Oriented Architecture: Analysis and Design for Services and Microservices Thomas Erl, Prentice Hall, 2017 Chapter Understanding Layers with Services and Microservices Service API and Contract Design with REST Services and Microservices [4] Microservices Flexible Software Architecture, by Eberhard Wolff, 2017 Pearson Education Part VII, IIX, Part II: Microservices: What, Why, Why not? Reasons for Using Microservices, Challenges, Microservices and SOA Part III: Implementing Microservices Architecture of Microservice-Based Systems, Architecture of Individual Microservices [5] Building Microservices, O’Reilly Media by Sam Newman The Evolutionary Architect, How to Model Services [6] Microservices from Day One Build robust and scalable sofware from the start by Cloves Carneiro Jr Tim Schmelmer [7] Web API Design by Brian Mulloy [8] Microservices: Building Scalable Software 2016 Packt Publishing Authors: Sourabh Sharma Rajesh RV David Gonzalez [9] https://microservices.io/ [10] “Building Microservices” by Sam Newman [11] https://microservices.io/patterns/data/cqrs.html/ [12] https://microservices.io/patterns/apigateway.html [13] https://techtalk.vn/uu-nhuoc-han-che-cua-mot-kien-truc-microservices.html [14] https://grpc.io/ 73 [15] https://golang.org/ [16] “Building Microservices with Go” by Nic Jackson [17] https://en.wikipedia.org/wiki/PostgreSQL [18] https://nats.io/ [19] “Practical NATS – from Beginner to Pro” by Waldemar Quevedo [20] https://herbertograca.com/2017/10/19/from-cqs-to-cqrs/ 74 ... TRỰC TUYẾN VỚI KIẾN TRÚC MICROSERVICES 3.1 Kiến trúc Microservices cho hệ thống đấu giá trực tuyến Hình 12 Kiến trúc microservice cho hệ thống đấu giá trực tuyến Kiến trúc microservices cho hệ thống. .. tiết Hệ thống đấu giá quảng cáo trực tuyến gồm thành phần sau:  Dịch vụ đấu giá  Dịch vụ quản lý đấu giá  Dịch vụ truy vấn lịch sử đấu giá  API gateway Hình 15 biểu đồ thực thể hệ thống đấu giá. .. thống đấu giá quảng cáo trực tuyến khơng có nhiều, Việt Nam Appota phát triển ứng dụng đấu giá trực tuyến thời gian thực hỗ trợ quảng cáo Google Ads Hệ thống Admicro chuyên quảng cáo trực tuyến báo

Ngày đăng: 27/02/2021, 23:55

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w