Thi?t k? h? th?ng qu?n ly danh m?c s?n ph?m trong h? th?ng Ecommerce
S?n ph?m là ??i t??ng hi?n th? các th?ng tin ?? ng??i dùng th?c hi?n vi?c mua bán. M?t s?n ph?m có các thu?c tính ?a d?ng v? s? l??ng, lo?i thu?c tính, ki?u d? li?u. M?i thu?c tính có các yêu c?u khác nhau tính ch?t d? li?u: ?? dài, ki?u kí t?, các yêu c?u v? nghi?p v?… Do ?ó model product là m?t model kh?ng có c?u trúc c? ??nh (schemaless structure).
Cách ti?p c?n ph? bi?n ?? gi?i quy?t v?n ?? này là s? d?ng model d?ng EAV — Entity Attribute Value. ?ay là model ???c Magento, Word Press s? d?ng ?? l?u tr? các c?u trúc ?a d?ng kh?ng ??nh tr??c. ??c ?i?m c?a c?u trúc EAV là tách ph?n l?u tr? giá tr? thu?c tính (attribute value) kh?i ph?n c?u trúc các attribute c?a model. Nh? ?ó có th? ??nh ngh?a ?a d?ng các lo?i c?u trúc attribute khác nhau c?a product.
M?t attribute set là m?t t?p h?p các thu?c tính. M?i thu?c tính phan bi?t nhau b?i m? thu?c tính, lo?i ki?u d? li?u. M?t thu?c tính có th? thu?c nhi?u b? thu?c tính khác nhau. M?t product thu?c m?t b? thu?c tính. Các giá tr? thu?c tính c?a product t??ng ?ng v?i các thu?c tính, ??c tr?ng b?i ki?u d? li?u và m? thu?c tính. Giá tr? thu?c tính có ki?u d? li?u ???c ??nh ngh?a b?i thu?c tính. B?ng cách t? ch?c nh? v?y, h? th?ng có th? thêm các b? thu?c tính m?i d? dàng, c?ng nh? b? sung các thu?c tính vào các b? thu?c tính ?? có.
Ngoài ra m?t product còn có nhi?u h?nh ?nh, thu?c nhi?u category và có nhi?u bi?n th? khác nhau (có quan h? liên h? v?i nhi?u product khác, vd ?i?n tho?i iphone còn có các s?n ph?m bi?n th? theo màu s?c; hay m?t chi?c váy có nhi?u size khác nhau, có m?i quan h? v?i các product váy có kích c? khác nhau, phan bi?t b?i thu?c tính kích c?).
2. Thi?t k? t?ng nghi?p v?.
Các nghi?p v? s? ???c phát tri?n xoay quanh model ?? ???c xay d?ng. ?ay là layer ph?c t?p nh?t, chi?m ph?n l?n kh?i l??ng c?ng vi?c. Nghi?p v? qu?n ly s?n ph?m t?p trung vào vi?c thay ??i các thu?c tính ?a d?ng c?a s?n ph?m. Các m?c tiêu thi?t k?:
Các m?c tiêu ?ó s? ?nh h??ng t?i các cách thi?t k? m? hình ?ng d?ng khác nhau. Ph?n d??i ?ay s? phan tích t?ng m? hình thi?t k? ph?n m?m ?? ??a ra s? l?a ch?n phù h?p nh?t.
2.1. M? hình MVC.
M? hình MVC là m? hình ph? bi?n trong vi?c l?a ch?n ?? xay d?ng ?ng d?ng. ?ó là m? hình ??n gi?n, d? ti?p c?n và nhanh chóng ??a ra các tính n?ng. Theo m? hình MVC, thì ph?n qu?n ly catalog s? có ki?n trúc nh? sau:
V?i m? hình mvc, product model s? ch?a t?t c? các ??nh ngh?a thu?c tính c?a product, truy xu?t database, th?c thi các nghi?p v?. Th?ng th??ng m? hình MVC s? s? d?ng pattern Active Record ?? mapping v?i database. ?ay là cách làm ??n gi?n, nh?ng có các h?n ch? sau:
Do các h?n ch? ?ó nên ?ay kh?ng ph?i m? hình phù h?p v?i các ?ng d?ng logic ph?c t?p nh? ecommerce. Nó s? d?n t?i chi phí maintain v? sau cao.
2.2. M? hình ba l?p.
H??ng ti?p c?n ti?p theo là phan tích và thi?t k? theo ph??ng pháp?Domain Driven Design. ??c tr?ng c?a m? hình này là:
V?i vi?c t? ch?c nh? này các t?ng ?ng d?ng, nghi?p v? và data access s? chia tách riêng bi?t, và ch? t??ng tác th?ng qua interface. Các nghi?p v? s? xoay quanh model product. T?ng data acccess s? truy xu?t ho?c l?u tr? các object products.
Nh?ng vi?c áp d?ng m? hình ba l?p xoay quanh model product c?ng d?n t?i m?t khó kh?n khác là vi?c model cho các nghi?p v? ??c d? li?u. Các nghi?p v? này r?t ?a d?ng và cách làm hi?u qu? nh?t là s? d?ng các raw sql. Nh?ng n?u các vi?c truy xu?t b? th?t ch?t vào các m? hình ORM s? ?nh h??ng t?i hi?u n?ng, c?ng nh? khó cho vi?c thay ??i các logic truy xu?t d? li?u. ??ng th?i nó c?ng ?nh h??ng t?i t?c ?? phát tri?n, khi vi?c cài ??t các nghi?p v? query ?a d?ng ph?c v? client b? c?n tr? và ph? thu?c vào vi?c thi?t k? model và t?ng Repository.
2.3. M? hình CQRS.
M? hình CQRS (Command Query Responsibility Segregation) là s? m? r?ng c?a m? hình trong ba l?p trong DDD. ??c tr?ng quan tr?ng c?a CQRS là vi?c tách hai ph?n logic ??c và ghi d? li?u ra hai ph?n riêng bi?t:
M? hình CQRS ?? kh?c ph?c các h?n ch? ?? nêu ? m?c 2 bên trên. CQRS mang l?i các l?i th? l?n:
C? ba m? hình trên ??u có ?u nh??c ?i?m riêng:
??i v?i các h? th?ng ecommerce l?n thì m? hình CQRS là m? hình phù h?p nh?t. Vì nó giúp gi?i quy?t c? hai ?òi h?i l?n là x? ly nghi?p v? ph?c t?p và ph?i ?áp ?ng hi?u n?ng cao. Phan ti?p theo s? phan tích sau h?n v? m?t h? th?ng và m?t bi?n th? m? r?ng c?a CQRS là CQRS — ES (Command Query Responsibility Segregation — Event Sourcing).
3. Thi?t k? v? h? th?ng.
M?t trong các ?òi h?i l?n c?a vi?c qu?n ly danh m?c s?n ph?m là ph?i thi?t k? ?? ?áp ?ng các nhu c?u v? hi?u n?ng và tích h?p v?i các h? th?ng khác. ?? ?áp ?ng các yêu c?u t?t, thì ph?i ???c thi?t k? t? t?ng th? ngay t? ??u. Có v?y m?i t?o ra s? phát tri?n li?n m?ch, nh?t quán giúp ??m b?o tính ?n ??nh, c?ng nh? ti?n ?? làm vi?c.
3.1. M? hình CQRS — ES.
M? hình Event Sourcing — ES, là m? hình thi?t k? mà tr?ng thái c?a object s? ???c l?u tr? d??i d?ng chu?i các s? ki?n thay ??i. Nó khác v?i m? hình thi?t k? th?ng th??ng, khi mà ch? l?u tr? tr?ng thái cu?i cùng c?a object.
Khi object b? thay ??i, s? t??ng ?ng v?i m?t versioned event l?u tr? d? li?u thay ??i c?a object. Các event s? ???c l?u tr? d?ng appending only vào m?t c?u trúc table g?i là event store. Vi?c l?u tr? các event thay ??i này giúp mang l?i các l?i ích:
D?a trên các event ???c published ?i có th? xay d?ng ph?n l?u tr? riêng cho?read side, ?? t?i ?u cho t?c ?? truy xu?t d? li?u.
3.2. Event Bus — Kafka — MySql Binlog.
Các versioned event c?a ??i t??ng n?u ???c g?i ?i s? giúp h? th?ng d? dàng tích h?p v?i nhi?u h? th?ng khác. Event Bus là tên g?i logic c?a m?t ???ng truy?n ch?a t?t c? các versioned event d??i d?ng stream. Các consumer ch? vi?c subscribe event bus là có th? nh?n ???c các event ?? x? ly.
Các event ???c l?u tr? trong mysql database. T?t c? các thay ??i trong database ??u ???c MySql l?u vào m?t log file, g?i là binlog. B?ng vi?c extra binlog c?a mysql, thì h? th?ng có th? b?t ???c m?i event phát sinh ?? g?i ?i.
Kafka là m?t message broker theo m? hình log based, cho phép l?u tr? và g?i ?i các event ?úng v?i th? t? g?i vào. Vì v?y nó là l?a ch?n t?t nh?t ?? làm t?ng l?u tr? cho event bus.
3.3. Ki?n trúc t?ng th?.
?ên ?ay b?c tranh c?a h? th?ng ?? tr? nên r? ràng. T?ng m?nh ghép t? model, nghi?p v? t?i tích h?p ?? ??y ??. Có th? tóm t?t l?i: h? th?ng s? xay d?ng nghi?p v? quanh model product; c?u trúc theo m? hình CQRS — ES; s? d?ng MySql Binlog; Kafka ?? publish các event thay ??i m?t cách ?n ??nh; d?a trên event bus s? xay d?ng các c?u trúc l?u tr? có t?c ?? truy xu?t cao nh? Elastic, MongoDb, c?ng nh? tích h?p v?i các h? th?ng khác.
4. K?t lu?n.
Thi?t k? h? th?ng qu?n ly danh m?c s?n ph?m trong ecommerce ?òi h?i ph?i ??t ???c cùng lúc nhi?u m?c tiêu, v?i m?t t?m nhìn xuyên su?t và nh?t quán. T? m?c ?ng d?ng cho t?i m?c h? th?ng ??u ph?i có s? g?n k?t li?n m?ch. T?t c? h??ng t?i hai m?c tiêu quan tr?ng ph?i ??t ???c:
Ph??ng pháp phan tích thi?t k? Domain Driven Desing, m? hình CQRS — ES, c? ch? replicate ?n ??nh c?a MySql, s? ??m b?o th? t? message c?a Kafka, c?ng nh? các database t?i ?u cho read nh? Elastic, Mongo… là các nhan t? chính ??m b?o ch?t l??ng c?a h? th?ng.
Nghia Le