Nghe có vẻ hầm hố, chả là hồi trước mình có viết một cái chrome extention để mỗi lần mở tab mới sẽ hiện ảnh một em gái xinh xinh. Hồi ấy làm ở VP9 nên dùng chùa server của VP9, sau đó nghỉ VP9 thì mua một cái VPS ở azdigi giá 170k/tháng để làm server crawl cũng như nghịch linh tinh.
Hồi ở VP9 học code nodejs nên dùng nodejs để code cái back-end cho extention, kiến trúc đại loại thế này:
- Crawl ảnh từ xkcn.info về, ném vào MongoDB (bước này chỉ làm một lần, chỉ lấy url ảnh)
- Dùng nodejs viết một cái cái app, mỗi khi có requests sẽ random ra một số ngẫu nhiên, rồi request từ mongodb ra cái ảnh có số thứ tự đó, trả về cho người dùng.
- Mỗi lần request lên mà query mongodb một lần thì hơi chậm, nên dùng Redis để ném hết vào cache, lấy từ cache ra chứ không lấy từ mongodb.
- Dùng cả socket.io để handle vụ NEXT ảnh.
Đó, 170k/tháng mà chạy một cái vpn thi thoảng đứt cáp mới dùng, với 2 cái extention thì cũng hơi xót ruột. Giờ làm ở bên Chappiebot toàn dùng python, rồi các dịch vụ của AWS, mình quyết định chuyển sang dùng thử xem sao. Kiến trúc mới sẽ chơi bằng python 2.7.10:
- Crawl ảnh từ xkcn.info, chỉ lấy ảnh có ít nhất một chiều lớn hơn 1000pixel. Ném vào một file csv
- Viết một đoạn python, mỗi lần chạy tạo ra một số ngẫu nhiên n, lấy ra ảnh ở dòng thứ n trong file csv kia, ném ra file html, ném file html này lên AWS S3. Tất cả người dùng sẽ xem cùng một file một lúc, hồi xưa là mỗi người xem một ảnh, nếu không thích thì có thể next, mỗi lần mở tab là một em khác, bây giờ mỗi em sẽ hiện trong vòng 1 phút. Đoạn code python sẽ chạy trên AWS Lambda, một phút chạy một lần.
- Nghĩa là mình dùng hai dịch vụ của Amazon Cloud: Lambda và S3, chắc tầm 1$/tháng. Hiện chưa giải quyết vấn đề next, nhưng thôi cứ từ từ. Hôm nào sẽ ngồi viết một cái tutorial chi tiết cho nó ngầu. Hôm nay tạm thế thôi 😀
Link ví dụ: http://chrome.sachluoc.com/helloae.html
Chrome hiện có 113 người dùng
Sao đồng chí ko dùng python lấy ảnh của fanpage xkcn.info từ FB api thẳng cho nhanh, khỏi cân dùng Amazon S3 :))
python chỉ là tạo ra file html thôi, phải có chỗ nào lưu file html tĩnh đó để anh em nhảy vào chứ 😀 Hình như có thể lưu trên github miễn phí thì phải.
Nếu là tao thì crawl url về ném luôn vào 1 cái redis set, mỗi lần có request đến backend thì xài cái hàm pop random của redis là có url trả về luôn.
Ah, giờ thì tao đã dùng Lambda là kiểu serverless, làm sẵn môt file html tĩnh ném lên đó, 1 triệu truy cập cũng không sợ sập server.