Friday, August 7, 2015

Design a shopping cart



http://dp2.me/blog/?p=657
从OOP的角度,购物车里面每一个元素都是一个LineItem对象,每一种商品有自身的unique id。
购物车本身提供addToCart、removeFromCart、changeQuantity之类的操作,用一个map来管理这些元素,application可以方便地遍历/查看其内容。购物车需要提供物品价格总计,然后视情况提供tax & shipping estimation。

从分布式e-commerce网站的角度:
每一个对象的各种属性(价格、availability、图像、描述……)应该是从多个不同的service取来,比如价格和availability就是从仓储管理系统,图像和描述就是从别的什么media service取得。这样一来降低latency,二来拆分数据、服务,可以增加availability。
当操作购物车的时候,js进行ajax call。后台要考虑两种情况:
一种是guest cart,这种我们无法通过服务器来sync,于是我们必须要在用户本地储存cookie。这样当用户login的时候,我们要提供guest cart的merge功能。
另一种是customer cart。这时候我们要在后台保存user的选择。同时就产生了consistency的问题。因为我们的模型一般是eventually consistent,所以可能会出现多个不同版本的cart。这时候,如果我们能够通过该cart的vector clock来辨识哪个在先哪个在后,我们就取后面的cart;如果我们不能,则简单merge两个cart,这样至少不会丢失物品。另外customer cart也可以考虑生成cookie。

购物车要注意安全性。两个用户共享一台计算机的时候,其中一个不应该以任何方式能看到另一个的购物车。
cart在某些point需要检测其中物品是否已经变得unavailable 。这种情况,将其移除购物车,加入wishlist(这可能是另一个service),然后通知customer。

作为在顾客checkout的关键路径上的一个玩意,cart必须要有monitor。这个monitor包括两个方面:
一、cart本身的健康状态,如果addToCart的动作过少,或者经常出现fatal/exception,必须马上page operations.
二、abandoned cart。也就是说顾客checkout到某个步骤的时候不玩了。这个也可以是checkout application来report。这个数据对于卖家分析用户行为是至关重要的。

http://zhidao.baidu.com/question/584572507.html

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts