Black Friday, Cyber Monday, và cả Green Monday (Thứ hai cuối cùng để tiết kiệm "xanh" và có ngày giao hàng tối ưu cho Giáng Sinh) chắc chắn là đề tài nóng hổi cuối năm. Chủ đề chung nhất là săn Deal hấp dẫn, mua quà Giáng Sinh mong ước, và con số tiền tiêu ấn tượng của người tiêu dùng.
Báo cáo doanh số Black Friday 2018 cho thấy Doanh thu Online đạt 6,2 tỷ USD, tăng 23,6% so với năm trước, và Cyber Monday là ngày bán lớn nhất năm 2018 với doanh thu Online 7,9 tỷ USD, tăng 19,3% so với 2017.
Nhưng một cuộc hội thoại quan trọng song song cũng đang diễn ra: về nỗ lực công nghệ và quản trị dữ liệu khổng lồ cần thiết để duy trì trải nghiệm mua sắm Online suôn sẻ, bảo mật số thẻ tín dụng, và quy trình bán hàng Online/Offline không gián đoạn. Hầu hết người mua sắm không bao giờ nghĩ đến công nghệ phức tạp đằng sau trải nghiệm mua sắm, hoặc cách định giá và xử lý giao dịch, nhưng đối với những người sống nhờ công nghệ dữ liệu đằng sau trải nghiệm mua sắm, đây là thời điểm lập kế hoạch và triển khai quan trọng nhất cả năm.
Vì vậy nếu bạn là Merchant, hoặc hỗ trợ Merchant, hoặc liên quan đến E-commerce hay Tài chính, bạn chắc chắn rất bận rộn lúc này, và điện thoại luôn ở cạnh. Bây giờ là lúc chuẩn bị Database, hạ tầng hỗ trợ, và Application cho tải trọng lớn mùa mua sắm.
Blog này bao gồm các lĩnh vực chính của Data Technology Stack cần cân nhắc khi Black Friday đến gần, gợi ý cách chuẩn bị, và cách Team ObjectRocket hợp tác cùng bạn để sẵn sàng cho Black Friday và Cyber Monday.
Các bước chuẩn bị chung cho Data Stack
Có một số bước nên thực hiện để chuẩn bị, bất kể Database nào bạn dùng. Đây là Best Practices chuẩn để giữ Data Stores chạy trơn tru, nhưng có tính cấp bách đặc biệt khi chuẩn bị cho Black Friday và Cyber Monday.
- Chuẩn bị cho lượng Traffic lớn: Capacity Planning, Growth Projection, Data Stability, High Availability, Replication, Failover Clusters là khái niệm chính để chịu đựng tải Traffic tăng. Cân nhắc:
- Với Sharded Clusters, cân nhắc thêm Shards để tránh hết không gian Disk lúc Peak. Tại ObjectRocket, chúng tôi thường giữ Customer dự báo tăng trưởng lớn ở mức ~60% Usage để ngăn Outage do Disk đầy.
- Với Elasticsearch Clusters phiên bản 6.x trở lên, cần đảm bảo nếu dùng Plan Size nhỏ, khả năng tăng trưởng nhanh được xem xét, và đặc biệt mục tiêu quan trọng giữ Disk Size dưới 95% để tránh Read-only Lock. Nhớ khi Capacity Planning: mỗi Shard có Translog có thể lớn tới 512MB và duy trì 12 giờ.
- Với Replica Set đơn giản, nhỏ, không dùng Auto-scaling, cân nhắc chuyển sang Plan Size chịu đựng Concurrency và Growth dựa trên Growth Projection.
- Khi Traffic tăng, Connection Requests đến Database cũng tăng. Review với Team App/Khách hàng đảm bảo Connection Pooling Settings đúng và OS Settings đúng (như ULIMITS, cho phép hiển thị/đặt giới hạn tài nguyên cho User). Đôi khi App cần mở nhiều Connection hơn một Replica Set hoặc 4 Default Mongos (Node đặc biệt lắng nghe Connection trên Sharded Cluster) mà chúng tôi cung cấp. Trong trường hợp này, chúng tôi thường làm việc với Khách hàng cấp thêm Mongos để xử lý Connection.
- Đảm bảo Oplog Sized đúng là lĩnh vực khác cần xem. Oplog là Capped Collection (Kích thước cố định) của tất cả Create, Read, Delete Operations, từ đó Secondary Nodes Replicate Data từ Sync Source. Secondary Nodes có thể Out-of-sync nếu Oplog Size trên Node họ Sync từ nhỏ và không kịp theo dõi Operations – đặc biệt lúc Peak. Oplog càng lớn, Secondary Nodes càng có nhiều thời gian In-sync với Activity trên Primary, ngay cả khi chúng Down.
- Test, Tweak, và Test thêm: Càng Test Database, càng hiểu Database. Đây là lúc chạy Stress & Performance Tests, sau đó Apply Changes, tốt nhất trước khi Khách hàng bắt đầu mua sắm.
- Xem lại các sự cố/ Data Failure quá khứ, điểm yếu, xác định có cần củng cố không (đừng Apply Big Fixes ngay trước BF).
- Thực hiện Load & Performance Test sớm trong kỳ chuẩn bị, và quanh năm, xây dựng loại Test này vào Continuous Integration Process.
- Mô phỏng Traffic Patterns và độ dài Load trong Test Environment nếu có thể.
- Tận dụng Analytics: Nếu bạn đã theo dõi Traffic Flows và Patterns nhiều tháng qua, bạn nên quen với điều gì là "Bình thường".
- Tìm kiếm Performance hoặc I/O Issues bất ổn có thể giải quyết trước ngày lớn.
- Nghiên cứu Traffic Patterns: xem Max Connections lúc bận rộn nhất và Plan cho 20% Capacity thêm.
- Với Elasticsearch, dùng Third-party Metrics Collectors như New Relic cho CPU Use/GC Time/Query Time. Tất cả Stats này giúp Plan cho tuần Black Friday.
- Chắc chắn Giữ lại Major Repairs/Upgrades không quá gần ngày lớn! Và truyền đạt Moratorium này khắp Team.
- Xem lại Security Measures, hiểu rõ chúng, chuẩn bị và tự tin giải thích cho người khác (nếu cần). Tối thiểu, đảm bảo bạn không phải "Soft Target" cho Data Breach.
- Privacy Regulations, tương tự Security, ngày càng quan trọng. Cân nhắc GDPR Requirements ảnh hưởng như thế nào đến Sales Campaigns (và Cookies liên quan) và cách bạn dùng/lưu Data Khách hàng.
- Cải tiến liên tục với mắt nhìn tương lai: Ý tưởng tuyệt vời là tổ chức Retrospective Meetings (Retros) sau mỗi Black Friday/Cyber Monday để xác định điểm cải thiện cho lần sau!
Database-specific Considerations
Dưới đây là Pro Tips cho một số Database ObjectRocket hỗ trợ (hoặc bạn chạy cả 3 Database - Polyglot Persistence!)
MongoDB Pro Tips
MongoDB là lựa chọn NoSQL ngày càng phổ biến cho E-commerce, với Speed và Scalability là lợi ích chính. Nhiều Merchant dùng MongoDB Product Catalog quản lý Product Offerings, Pricing, Shipping, Inventory. Pro Tips từ chuyên gia MongoDB:
- Đảm bảo cả 3 Hostname của Replica Set đều có trong Connection String cho Replica Sets và cả 4 Mongos cho Sharded Cluster.
- Đảm bảo dùng Connection Pool để tránh mở quá nhiều Connection không cần thiết tới Database.
- Cân nhắc Traffic và Read/Write có thể tăng bao nhiêu (Growth Projection) và tận dụng Auto-scaling của MongoDB.
- Luôn nắm bắt Performance Tuning (Memory Usage, Connection Handling, Health của Replica Sets) trước và trong những ngày mua sắm lớn.
Elasticsearch Pro Tips
Chúng tôi thu thập Pro Tips chuẩn bị Database cho Black Friday/Cyber Monday từ Team Elasticsearch Experts. Elasticsearch thường là phần quan trọng của E-commerce Tech Stack, dù dùng chủ yếu cho Visualization/Analysis Streaming Log Data hay chức năng Search Online Shopping quan trọng (Auto-completion, Faceted Search, Synonyms).
- 2 ngày trước Black Friday, tăng tần suất Snapshot. Đề xuất Snapshot 2-3 lần/Ngày suốt cuối tuần mua sắm, sau Cyber Monday quay lại Backup Schedule bình thường. Lên lịch Snapshot trước Peak Traffic và sau Peak Traffic – và một lần tại thời điểm bạn chọn. Vì Elasticsearch Backup làm dưới dạng Diffs, Snapshot 3 lần/Ngày giữ Duration Snapshot khá ngắn.
- Nếu dùng Elasticsearch chủ yếu Visualize Log Files:
- Plan cho Increased Data Consumption trong Event.
- Đảm bảo Kibana Dashboards cập nhật với Settings phù hợp phân tích Log/Event quan trọng nhất.
- Biết Baselines trong Aggregations/Dashboards để nhận diện Spikes/Issues. Một số Use Cases hưởng lợi từ Elastalert Integration Alert trên các Event.
- Nếu dùng Elasticsearch chủ yếu cho Search:
- Vì đây sẽ là Read-heavy Days, bạn muốn:
- Tăng Node Count để có thêm Active Thread Pool
- Tăng Replica Count để có nhiều nơi đọc hơn
- Vì đây sẽ là Read-heavy Days, bạn muốn:
- Dùng Tool Rally của Elasticsearch để Benchmarking Test xem Cluster hiện tại chịu đựng được Search Throughput đã Plan hay không.
- Kiểm tra Elasticsearch Logs cho Additional Errors có thể ném ra.
- Đảm bảo tất cả Applications dùng hết 4 Connection Endpoints.
- Xem Slow Queries hiện tại, nếu muốn giúp phân tích/cải thiện Query, liên hệ Team ObjectRocket.
Redis Pro Tips
Redis thường dùng cho Data có thể rất Ephemeral, nghĩa là Caching: Query, Session, Full Page Caches. Trong Traffic nặng Black Friday/Cyber Monday, Caching là Key giữ Application Perform tốt nhất. Chuyên gia Redis đề xuất:
- Nếu dùng Redis làm Session Store hoặc Cache, cân nhắc Resize lên nếu nghĩ có thể chạm Memory/Bandwidth Limit với Traffic tăng Black Friday.
- Xác nhận bạn Set TTL ("Time To Live" xác định thời gian hết hạn Key) trên mọi Key có thể và nên tự động Expire.
- Xác nhận MAXMEMORY-POLICY được đặt phù hợp nếu hết Memory. Liên hệ ObjectRocket Support nếu cần sửa Setting trên Instance.
- Production Instances, đảm bảo Memory Fragmentation Ratio khỏe trước Spike Traffic.
- Nếu dùng Redis Backend cho Job Queue Management Framework, khuyến nghị mạnh mẽ có và kiểm tra Dashboard Framework đó Monitor Job Status. Ví dụ: Resque-web, Arena, Sideqik.
- Dù nghe hấp dẫn, KHÔNG CHẠY FLUSHDB, FLUSHALL, hoặc Large Deletion Operations ngay trước Campaign; thay vào đó viết SCAN và DEL Script.
- Kiểm tra COMMANDSTATS Log và SLOWLOG Log cho Entries hiện tại, xem Pattern nào có thể Optimize, tránh Blocking Operations. Tránh dùng "KEYS *" và Long-running Operations khác.
- Trên Dev Instance (KHÔNG PHẢI PRODUCTION!), chạy Stress Test khi quan sát Output từ MONITOR Command để phân tích Pattern.
- Trên Dev Instance với Sample Data, dùng RDB-TOOLS, REDIS-CLI --BIGKEYS, REDIS-CLI --MEMKEYS phân tích Data Distribution và Memory Usage.
- Setup Agent tích hợp Monitoring Instances vào Stats Platform hiện có. Ví dụ: Datadog, New Relic, Prometheus.
ObjectRocket làm gì để đồng hành cùng bạn
Đối với nhiều Khách hàng, mùa lễ hội chiếm tỷ trọng lớn Doanh thu năm. Đây là lúc Stakes cao nhất và Uptime quan trọng nhất. Chúng tôi làm rất nhiều việc giúp Khách hàng chuẩn bị cho Seasonal Traffic Events.
Dưới đây chỉ một vài ví dụ Team ObjectRocket làm:
- Slow Query Analysis: Chúng tôi tư vấn Query chạy lâu hơn tối ưu (ví dụ Elasticsearch Query > 1s là suboptimal).
- Slow Query Logging cần Enable trên Cluster (Khách hàng có thể yêu cầu) và sau 1-2 ngày có Data – chúng tôi xem số Query chạy lâu hơn Optimal Seconds và chạy qua Query Profiler, xác định phần tốn kém nhất của Query. Sau đó tư vấn Khách hàng cách giảm Query Time.
- Performance Tuning: Lĩnh vực khác chúng tôi dành thời gian Tuning Unoptimized Operations cho Khách hàng, đặc biệt:
- Bad Regex Queries làm Database chậm đến mức bò. Tham khảo Blog Post về Optimizations cho Regex Queries.
- Queries yêu cầu Collection Scans. Operations này tốn kém vì thường Scan nhiều Documents nhưng Return vài cái (không dùng Indexes).
- Operations dùng Non-performant Operators thường Examine nhiều Documents/Index Keys, nên tránh Operators như $NE, $EXISTS: TRUE, $NIN.
- Indexing: Có Indexes đúng chỗ thường là Task quan trọng nhất, và cách hầu hết Khách hàng sống sót qua Black Friday. Chúng tôi Profile Instance đảm bảo Indexes phù hợp cho hầu hết Operations, nếu cần Index thêm, làm việc cùng bạn tạo chúng.
- Load Testing & Scaling — Theo yêu cầu, chúng tôi phối hợp Load Testing mô phỏng Traffic tăng dự kiến trước khi xảy ra. Cực kỳ quan trọng đảm bảo Performance Application tối ưu khi Growth và Traffic Surges.
- Maintenance Moratorium — Chúng tôi hiểu Khách hàng phụ thuộc nhiều vào chúng tôi lúc này và triển khai Maintenance Moratorium. Nghĩa là Soft Freeze Infrastructure Maintenance từ đầu November đến đầu January. Chỉ Emergency Maintenances qua quy trình duyệt gắt gao mới được phép.
- 24x7x365 Support — Team Support ObjectRocket có mặt quanh năm. Team DBA và Data Tech Experts là Veteran của Black Friday/Cyber Monday Madness; họ ở đây cho bạn Trước, Trong, Sau kỳ quan trọng này!
Luôn luôn, cách tốt nhất liên hệ ObjectRocket Support là email support@objectrocket.com. Cho chúng tôi biết cách giúp đỡ, và Happy Black Friday!