CƠ SỞ LÝ THUYẾT
Lý thuyết đồng bộ
Đồng bộ hóa dữ liệu là quá trình trao đổi và đồng bộ thông tin giữa hai hoặc nhiều nguồn dữ liệu theo thời gian thực Quá trình này có nhiều ứng dụng, bao gồm việc đồng bộ hình ảnh và tập tin Đồng bộ dữ liệu có thể được thực hiện trên các thiết bị điện tử như máy tính và điện thoại.
Có nhiều mô hình đồng bộ dữ liệu đã được công bố, trong đó vấn đề cốt lõi liên quan đến bài toán mã hóa Slepian-Wolf Việc xem xét dữ liệu đóng vai trò quan trọng trong quá trình đồng bộ hóa.
Đồng bộ hóa dữ liệu không có thứ tự có thể được thực hiện bằng cách tính mức chênh lệch đối xứng giữa hai tập dữ liệu xa nhau Các phương pháp xử lý này giúp đảm bảo tính chính xác và nhất quán của dữ liệu trong các hệ thống phân tán.
Chuyển toàn bộ: Toàn bộ dữ liệu sẽ đƣợc chuyển tới một nơi để so sánh cục bộ
Phương pháp này dễ dàng cài đặt và thực hiện, nhưng lại có nhược điểm lớn là tiêu tốn băng thông và mất nhiều thời gian khi xử lý dữ liệu lớn.
Theo dấu thời gian, mọi thay đổi trên dữ liệu sẽ được ghi lại và sử dụng để đồng bộ hóa chỉ những dữ liệu đã thay đổi, khắc phục nhược điểm của phương pháp chuyển toàn bộ Tuy nhiên, cần lưu ý cách ghi nhận những thay đổi giữa các nguồn dữ liệu và hòa hợp các thay đổi này vào tập dữ liệu đích.
Kiểu toán học: Gán dữ liệu như những đối tượng toán học và đồng bộ tương ứng với quy trình giải toán
Dữ liệu cần được xếp thứ tự khi hai chuỗi xa nhau cần hòa hợp với nhau Các chuỗi này thường được giả định là khác nhau do một số sửa đổi cố định, bao gồm các thao tác thêm, xóa và sửa ký tự Quá trình đồng bộ hóa dữ liệu nhằm giảm dần khoảng cách sửa đổi giữa hai chuỗi cho đến khi khoảng cách này bằng không.
Nhiều nhà khoa học đã phát triển các thuật toán đồng bộ hóa dữ liệu như Palm HotSync, Intellisync, SyncML và CPISync Tuy nhiên, việc xây dựng các thuật toán này cần chú ý đến sự phân tán của dữ liệu trên nhiều thiết bị và nền tảng khác nhau, cũng như sự khác biệt trong cấu trúc dữ liệu giữa hai nguồn.
Hệ thống sản phẩm của Lazada
Trong thương mại và thương mại điện tử, việc cung cấp nhiều lựa chọn cho người tiêu dùng là rất quan trọng Cấu trúc sản phẩm phân cấp cha-con giúp người mua dễ dàng tìm kiếm và xác định sản phẩm mong muốn Sản phẩm cha đại diện cho các thông tin cần thiết, cho phép khách hàng tìm kiếm theo thương hiệu hoặc loại sản phẩm, như áo sơ mi hay áo khoác Sau khi xác định sản phẩm cha, người mua có thể lựa chọn các sản phẩm con như màu sắc và kích cỡ cụ thể Tuy nhiên, nếu không có cấu trúc phân cấp này, người tiêu dùng có thể gặp khó khăn trong việc tìm ra sản phẩm phù hợp giữa vô vàn lựa chọn Do đó, sản phẩm cha giữ vai trò quan trọng trong việc định hướng và hỗ trợ khách hàng trong quá trình mua sắm.
Hình 2.1 Cấu trúc sản phẩm cha – con phổ biến trong thương mại điện tử
Hệ thống Lazada áp dụng cấu trúc cha – con, nhưng để phù hợp với chính sách không giới hạn cho các nhà kinh doanh nhỏ lẻ, cấu trúc sản phẩm của Lazada đã được cải tiến thành ba lớp.
Hình 2.2 Cấu trúc sản phẩm của Lazada
Mô hình quản lý sản phẩm của Lazada sử dụng cấp độ SPU (Stock Keeping Unit) để tối ưu hóa việc quản lý hàng hóa Các nhà bán lẻ sẽ tạo ra các Product và SKU riêng, liên kết với SPU để tránh tình trạng trùng lặp sản phẩm trên nền tảng Chẳng hạn, khi có hàng trăm nhà kinh doanh cùng bán áo sơ mi, Lazada sẽ tạo một SPU dành riêng cho loại sản phẩm này, giúp tổng hợp và hiển thị số lượng tối thiểu trên trang bán hàng Đối với những sản phẩm không có SPU, nhà cung cấp có thể không cần gán sản phẩm vào SPU có sẵn, dẫn đến việc gộp SPU và Product thành một lớp duy nhất, tương tự như cấu trúc 2 lớp cha-con truyền thống Thực tế cho thấy, hầu hết sản phẩm trên Lazada sẽ áp dụng phương thức này, vì các doanh nghiệp thường nhỏ lẻ và ít cạnh tranh, do đó khóa luận này sẽ tập trung vào việc đồng bộ hóa tự động các sản phẩm theo mô hình 2 lớp cha-con.
Ví dụ đăng bán sản phẩm trên Lazada:
Hình 2.3 Hình ảnh nhập sản phẩm lên Lazada
Hệ thống sản phẩm của Magento
Hình 2.4 Hệ thống điều chỉnh giá theo từng sản phẩm con trên Magento
Magento là nền tảng thương mại điện tử áp dụng cấu trúc sản phẩm cha – con thông qua Configurable Product và Simple Product Sản phẩm cha Configurable Product thực hiện hầu hết các chức năng trên giao diện khách hàng, với các thuộc tính như tên, mô tả, địa chỉ URL và danh mục được lấy từ sản phẩm cha Các thuộc tính chi tiết hơn như ảnh và đơn giá cũng do sản phẩm cha quản lý, trong khi sản phẩm con chỉ có thể hiển thị một ảnh khi người dùng chọn màu sắc Giá của Configurable Product thường được xác định bởi sản phẩm con đầu tiên, với các sản phẩm con khác điều chỉnh theo chênh lệch giá.
Cấu trúc Configurable – Simple Product trong Magento cho phép thực hiện các thao tác tính toán trực tiếp mà không cần dựa vào thuộc tính của Simple Product Tương tự, hệ thống tính toán giá và giá đặc biệt cũng được áp dụng trong Magento một cách hiệu quả.
Hệ thống sử dụng Configurable Product đã làm cho các sản phẩm cha trở thành sản phẩm thực tế, trong khi sản phẩm con trở nên ảo Các Simple Product chỉ giữ vai trò lưu trữ thông số lựa chọn như màu sắc, kích cỡ, trọng lượng và lượng hàng tồn kho Ngoài ra, Magento còn cung cấp các dạng sản phẩm khác như Bundle Product, Grouped Product, Virtual Product và Downloadable Product, nhưng cấu trúc Configurable Product và Simple Product vẫn phổ biến nhất, đặc biệt đối với các cửa hàng nhỏ lẻ.
Quá trình cập nhập sản phẩm trên Lazada
Hiện tại, quá trình tạo mới, cập nhật và xóa sản phẩm trên hệ thống Lazada hoàn toàn được thực hiện bằng tay Mặc dù giao diện hệ thống rất chi tiết và dễ sử dụng, nhưng điều này lại dẫn đến sự phức tạp trong quy trình Mỗi khi đăng tải sản phẩm, người dùng cần đăng nhập vào hệ thống Lazada Seller Center.
Vào sản phẩm và chọn thêm sản phẩm
Tiến hành điền các thông tin cần thiết cho sản phẩm
Sau đó bấm “Submit and Finish” để hoàn tất quy trình cập nhật sản phẩm mới
Quá trình cập nhập với nhiều sản phẩm
Hình 2.6 Bước điền thông tin cho quá trình tạo sản phẩm hàng loạt
Để đăng tải sản phẩm lên Lazada, người dùng cần tải mẫu đăng tải và điền thông tin sản phẩm Quy trình tạo mới hàng loạt sản phẩm yêu cầu nhiều bước, trong đó việc nhập liệu tốn thời gian và công sức Người nhập số liệu phải tự kiểm tra và gửi thông tin lên hệ thống, dẫn đến độ chính xác không cao và mất nhiều thời gian Quá trình cập nhật dữ liệu cũng tương tự, với mọi thay đổi đều được thực hiện bằng tay Đối với các cửa hàng lớn với hàng trăm hoặc hàng nghìn sản phẩm, thao tác này trở nên khó khăn Do đó, tự động hóa là giải pháp hiệu quả để khắc phục những vấn đề này, đồng thời giúp kiểm tra và đồng bộ dữ liệu từ Lazada một cách dễ dàng hơn.
Hệ thống Lazada API
API, viết tắt của Application Programming Interface, là giao diện lập trình ứng dụng cho phép kết nối giữa các thư viện và ứng dụng khác nhau Nó hoạt động như một phần mềm giao tiếp giữa chương trình và hệ điều hành, tương tự như bàn phím giúp người dùng tương tác với máy tính API cung cấp quyền truy cập vào một tập hợp các hàm thường dùng, đóng vai trò như công cụ xây dựng phần mềm, giống như những viên gạch tạo nên một ngôi nhà Việc xây dựng phần mềm được chia thành nhiều phần khác nhau, trong đó API là một thành phần quan trọng, có thể tự phát triển hoặc mua từ các nhà cung cấp.
Hình 2.7 Người phát triển sử dụng API để tương tác với ứng dụng
Lazada Open Platform là nền tảng tích hợp cung cấp phát triển API end-to-end, cho phép lập trình trao đổi dữ liệu với người bán, đơn đặt hàng, gói hàng và tài chính trên Lazada Nền tảng này tạo môi trường phát triển để tích hợp ứng dụng với hệ thống Lazada qua API, từ đó cải thiện hiệu quả và chất lượng ứng dụng, đồng thời chia sẻ ứng dụng cho người bán hàng trên Lazada.
2.5.3 Cách thức kết nối API
Lazada cung cấp hai phương thức gọi API: sử dụng SDK chính thức và gọi API qua yêu cầu HTTP SDK tự động tạo cho ứng dụng, bao gồm các chức năng như soạn yêu cầu, mã hóa, phản hồi và theo dõi tin nhắn, giúp việc gọi API trở nên đơn giản và dễ hiểu Trong khi đó, việc gọi API qua yêu cầu HTTP yêu cầu người dùng thực hiện các bước như điền thông số và giá trị, tạo chữ ký, tập hợp và khởi tạo các yêu cầu HTTP, nhận phản hồi HTTP và dịch các phản hồi dưới định dạng JSON hoặc XML.
2.5.4 Cấp quyền truy cập dữ liệu kinh doanh của nhà bán hàng Nếu ứng dụng cần truy cập vào dữ liệu kinh doanh của nhà bán hàng trên Lazada (nhƣ sản phẩm hoặc thông tin đơn hàng) thông qua Lazada Open Platform Ứng dụng cần đƣợc cấp quyền từ nhà bán hàng Đó chính là “Access Token” Nhà lập trình ứng dụng cần hướng dẫn nhà bàn hàng hoàn tất việc cấp quyền truy cập Để lấy được token cần thực hiện những bước sau:
2.5.5 Danh sách API mà Lazada cung cấp
2.5.6 Diễn giải chi tiết API thường dùng
Sử dụng dịch vụ điểm cuối này cho các APIs có điểm kết nối dịch vụ đánh dấu hoa thị
Sử dụng thông số yêu cầu chung này cho các APIs có thông số yêu cầu chung đánh dấu hóa thị “*”
Sử dụng thông số phản hồi chung này cho các thông số phản hồi chung đƣợc đánh dấu hoa thị “*”
Sử dụng API này để tạo một sản phẩm mới Dịch vụ điểm cuối *
Thông số yêu cầu chung * Thông số yêu cầu
Thống số phản hồi chung * Thông số phản hồi
Sử dụng API này để lấy danh sách thuộc tính cho một category Dịch vụ điểm cuối
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để truy xuất danh sách tất cả các danh mục sản phẩm trong hệ thống Dịch vụ điểm cuối*
Những tham số yêu cầu chung*
Những tham số phản hồi chung*
Sử dụng API này để lấy thông tin chi tiết về sản phẩm Dịch vụ điểm cuối*
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để nhận thông tin trả về từ hệ thống cho API MigrateImages
Tham số yêu câu chung*
Tham số phản hồi chung*
Sử dụng API này để chuyển hình ảnh từ trang web bên ngoài sang Lazada với các định dạng JPG và PNG Kích thước tối đa cho mỗi tệp hình ảnh là 1MB.
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để chuyển nhiều hình ảnh từ trang bên ngoài sang Lazada, với định dạng JPG và PNG Kích thước tối đa cho mỗi tệp hình ảnh là 1MB, và mỗi lần gọi API cho phép tối đa 8 hình ảnh.
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để xóa sản phẩm hiện tại, bao gồm việc xóa một số SKU hoặc tất cả SKU trong một sản phẩm Hệ thống cho phép tối đa 50 SellerSkus trong mỗi yêu cầu.
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để sét hình ảnh cho một sản phẩm bằng cách liên kết một hoặc nhiều URL với sản phẩm đó
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để cập nhật giá và số lượng cho một hoặc nhiều sản phẩm Số lượng sản phẩm tối đa có thể cập nhật là 50, tuy nhiên, khuyến nghị chỉ nên cập nhật 20 sản phẩm.
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để cập nhật thuộc tính hoặc SKU của sản phẩm hiện có
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API để tải lên một tệp hình ảnh duy nhất lên Lazada, với các định dạng được chấp nhận là JPG và PNG Kích thước tối đa cho mỗi tệp hình ảnh là 1MB.
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để lấy danh sách các mặt hàng cho một đơn hàng Dịch vụ điểm cuối*
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dung API này để lấy thông tin sản phẩm từ đơn hàng
Tham số yêu cầu chung*
Tham số phản hồi chung*
Sử dụng API này để lấy thông tin của một hay nhiều đơn hàng Dịch vụ điểm cuối*
Tham số yêu cầu chung*
Tham số phản hồi chung*
Tham số yêu cầu chung
Tham số phản hồi chung*
Tham số yêu cầu chung
Tham số phản hồi chung*
Hệ thống đồng bộ đã có
Khóa luận của Trần Trung Hà đã phát triển một module trên nền tảng Magento, hoạt động như cầu nối giữa Magento và Lazada thông qua Lazada API Module này đã thành công trong việc đồng nhất hai cấu trúc khác biệt của hệ thống Lazada và Magento.
- Cấu trúc thuộc tính Đồng bộ sản phẩm
- Hệ thống có thể tự động tổng hợp dữ liệu sản phẩm theo chuẩn của Lazada API
- Tạo sản phẩm, cập nhật sản phẩm và xóa sản phẩm
- Cập nhật số lƣợng từ Magento sang Lazada Lấy về và lưu trữ cây danh mục của Lazada
Xây dựng giao diện cho người quản lý
Các thành phần đã xây dựng một nền tảng vững chắc cho việc tự động hóa quy trình đồng bộ sản phẩm Tuy nhiên, cần tiếp tục hoàn thiện để chương trình hoạt động hiệu quả hơn với mức nhân lực tối thiểu và khả năng xử lý số lượng lớn.
GIẢI QUYẾT VẤN ĐỀ
Những thay đổi của hệ thống Lazada API
3.1.1 Hệ thống Lazada Open Platform Đầu năm 2018, sau một khoảng thời gian nghiên cứu và phát triển, Lazada bắt đầu giới thiệu Lazada Open Platform, kèm theo đó là một hệ thống API hoàn toàn mới với nhiều cải tiến so với Seller Center API trước đây Sau vài tháng sử dụng trải nghiệm và liên tục cập nhật, đến tháng 7 năm 2018, Lazada chính thức đóng cửa hệ thống Seller Center API
3.1.2 Ảnh hưởng đến hệ thống đồng bộ hiện tại
Hệ thống đồng bộ trong khóa luận của Trần Trung Hà trước đây được xây dựng dựa trên Seller Center API Tuy nhiên, do sự khác biệt lớn giữa hai hệ thống API, tôi đã phải viết lại hầu hết các thành phần, chỉ giữ lại một số logic cơ bản và các phần giao diện liên quan Quá trình thay đổi này bao gồm nhiều phần quan trọng.
Sử dụng bộ SDK PHP chính thức từ Lazada, tôi đã phát triển và đóng gói thành một thư viện cho Magento, giúp việc sử dụng trở nên thuận tiện hơn Toàn bộ quy trình thực hiện các câu lệnh API đã được điều chỉnh để tuân thủ tiêu chuẩn của Lazada Open Platform API, với các thông tin và tham số mới được thiết kế để người quản lý dễ dàng nhập từ hệ thống quản lý của Magento.
Hình 3.1 Mô hình chức năng tự động sinh và lưu trữ access/fresh token, làm
Hệ thống Lazada Open Platform API đã cập nhật quy trình cấp quyền sử dụng, yêu cầu người dùng xác thực định kỳ thông qua access_token, thay vì chỉ nhập thông tin xác thực một lần như trước Access_token được cấp sau khi người dùng xác thực và có thời hạn sử dụng nhất định Người dùng có thể làm mới access_token bằng refresh_token, nhưng refresh_token cũng sẽ hết hiệu lực, đòi hỏi người dùng phải xác thực lại Để đơn giản hóa quy trình này, tôi đã xây dựng một hệ thống tự động, cho phép người quản lý chỉ cần nhấn hai nút để tạo và làm mới access_token, kèm theo việc nhập thông tin xác thực.
Các vấn đề hiện có với module API trên Magento
Hệ thống cũ sử dụng hai tệp để lưu danh sách các thuộc tính có thể đồng bộ qua Lazada API Mỗi lần tổng hợp dữ liệu sản phẩm, danh sách này được kiểm tra và các thuộc tính có dữ liệu sẽ được đưa vào để thực hiện đồng bộ hóa.
Hình 3.2 Mô hình đồng bộ trước đây
Việc phụ thuộc vào files không chỉ ảnh hưởng đến hiệu năng mà còn dẫn đến dư thừa dữ liệu, có thể gây lỗi cho câu lệnh API Điều này cũng tạo ra khó khăn trong việc thay đổi các thuộc tính của hệ thống API sau này Do đó, tôi đã quyết định loại bỏ biện pháp tổng hợp dữ liệu và thay thế bằng câu lệnh GetCategoryAttribute của Lazada API, giúp lấy danh sách các thuộc tính cần thiết cho danh mục cần đồng bộ, từ đó chỉ tổng hợp những thuộc tính mà danh mục yêu cầu.
Hình 3.3 Mô hình đồng bộ mới
3.2.2 Loại bỏ hardcode và xây dựng tính năng Attribute Map
Do có sự khác nhau về thuộc tính giữ hai hệ thống làm cho vấn đề đồng bộ gặp nhiều khó khăn
Hình 3.4 Mô hình thể hiện sự khác nhau giữu các thuộc tính Cách giải quyết trước đây
Nhiều thành phần trong module đồng bộ trước đây sử dụng giá trị cứng trong code, như đường dẫn API và tham số đồng bộ, gây khó khăn cho quá trình tự động hóa Sự khác biệt về tên thuộc tính giữa Lazada và Magento đã dẫn đến việc phải xử lý bằng câu lệnh if else, chỉ đảm bảo hoạt động tại thời điểm đó Tuy nhiên, nếu có thay đổi hoặc thêm thuộc tính mới, hệ thống sẽ gặp khó khăn Do đó, tôi đã loại bỏ tất cả đoạn hardcode trong chương trình để nâng cao tính linh hoạt và khả năng mở rộng.
Hình 3.5 Mô hình hard code
Chức năng Attribute Map được phát triển để kết nối các thuộc tính khác tên giữa hai hệ thống Chức năng này được lưu trữ trong cơ sở dữ liệu, cho phép người quản lý dễ dàng thêm, sửa, hoặc xóa bất kỳ giá trị nào thông qua giao diện quản lý mà tôi đã thiết kế.
Hình 3.6 Mô hình Attribute Map
Các chức năng chƣa đƣợc xây dựng trong module hiện có
3.3.1 Đồng bộ hình ảnh Đặt vấn đề
Hình ảnh sản phẩm là yếu tố thiết yếu trong thương mại điện tử, đặc biệt khi bán hàng qua Internet Các sản phẩm trên Lazada sẽ bị từ chối nếu không có hình ảnh hợp lệ, do đó, việc đồng bộ hóa hình ảnh trở thành một phần quan trọng trong hệ thống đồng bộ tự động.
Dữ liệu hình ảnh khó quản lý và đồng bộ hơn so với các loại dữ liệu khác, do những hạn chế trong việc kiểm tra, so sánh, ghi đè và truyền ảnh qua API Lazada cung cấp API MigrateImages, cho phép người dùng tải ảnh lên hệ thống chỉ bằng cách cung cấp đường dẫn của ảnh gốc Đường dẫn ảnh trên Lazada được trả về qua API GetResponse và sau đó được tích hợp vào nội dung câu lệnh tạo sản phẩm, giúp đưa ảnh lên trước khi sản phẩm được đồng bộ Tuy nhiên, trong quá trình tạo sản phẩm mới, khả năng xảy ra lỗi dữ liệu là khá cao.
Hình 3.7 Mô hình đồng bộ hình ảnh theo gợi ý của lazada Cách giải quyết
Chuyển lại thứ tự thực hiện của quy trình
Hình 3.7 Mô hình đồng bộ hình ảnh ngược
Để tạo một sản phẩm mà không có ảnh, tôi sẽ sử dụng API trước Nếu quá trình tạo sản phẩm thành công, tôi sẽ thực hiện API MigrateImages để đăng ảnh, và cuối cùng sử dụng API SetImages để gắn ảnh vào sản phẩm đã tạo Phương pháp này giúp ngăn chặn việc ảnh bị đăng nhiều lần do phải chạy lại API tạo sản phẩm trong trường hợp có lỗi.
3.3.2 Đồng bộ số lƣợng từ Lazada về Magento
Khóa luận của Trần Trung Hà trình bày các phương pháp đồng bộ hai chiều giữa hệ thống Lazada và Magento Do chương trình không quản lý sản phẩm trên Lazada, việc tính toán số lượng từ thông tin API gặp khó khăn và tốn thời gian Do đó, việc đồng bộ số lượng từ Magento sang Lazada sẽ diễn ra khi có đơn hàng, trong khi thông tin từ Lazada về Magento sẽ được cập nhật theo định kỳ dựa trên đơn hàng Magento sẽ sử dụng API GetOrders mỗi 10 phút để lấy đơn hàng mới và đơn hàng bị hủy, từ đó tính toán số lượng sản phẩm thay đổi và cập nhật lên Lazada, đảm bảo cả hai hệ thống đều có số liệu chính xác.
Mô hình đồng bộ số lượng từ magento sang lazada
HÌnh 3.8 Mô hình đồng bộ số lượng từ lazada ngược về magento