2011-10-09 30 views
6

Khi bạn nhìn vào một hình ảnh cá nhân trên một trang web mạng xã hội như Twitter, họ lưu trữ tập tin hình ảnh như:Tại sao chọn ngẫu nhiên tên tệp của bạn để lưu trữ đám mây/CDN?

http://a1.twimg.com/profile_images/1082228637/a-smile_twitter_100.jpg 

hoặc thậm chí với một ngày ở đâu đó trong đường dẫn như 20110912. duy nhất lợi ích trước mắt tôi có thể nghĩ ra đang ngăn bot truy cập và tải xuống tất cả các tệp trong bộ nhớ của bạn theo kiểu tuyến tính. Tôi có thiếu bất kỳ lợi ích nào khác không? Cách tốt nhất để đi về ngẫu nhiên nó là gì?

Tôi đang sử dụng Amazon S3 vì vậy tôi sẽ có một tên miền phụ phục vụ tất cả nội dung tĩnh của mình. Kế hoạch của tôi là lưu trữ một số nguyên ID trong cơ sở dữ liệu của tôi và sau đó chỉ cần concat URL với id để tạo thành vị trí.

Trả lời

11

Một lý do tôi mã hóa các số nhận dạng trong các URL công khai là do tốc độ tăng trưởng của doanh nghiệp không phải lúc nào cũng công khai.

Nếu id hiện tại có thể được suy ra đơn giản bằng cách tạo tài khoản người dùng mới hoặc tải lên hình ảnh, thì người bên ngoài có thể tính toán tốc độ tăng trưởng (hoặc giới hạn trên) bằng cách thực hiện điều này một cách thường xuyên và xem số lượng id đã được sử dụng trong suốt thời gian trôi qua.

Cho dù đó là trì trệ hoặc cho dù nó đang bùng nổ theo cấp số nhân, tôi muốn có thể kiểm soát việc phát hành thông tin này thay vì cho phép các đối thủ cạnh tranh hoặc nhà phân tích kinh doanh có thể suy ra nó.

Ví dụ ngoại tuyến về số này là hóa đơn và số séc. Nếu bạn nhận được thanh toán bởi hoặc trả tiền bởi một công ty một cách thường xuyên, sau đó bạn có thể xem có bao nhiêu hóa đơn hoặc kiểm tra họ viết trong khoảng thời gian đó.

Dưới đây là một CPAN (Perl) mô-đun Tôi khăng khăng rằng scrambles id 32-bit sử dụng hai mã hóa cách dựa trên cá ngừ vằn:

http://metacpan.org/pod/Crypt::Skip32

Đó là một bản dịch trực tiếp của thuật toán Skip32 viết bằng C bởi Greg Rose:

http://www.qualcomm.com.au/PublicationsDocs/skip32.c

Sử dụng phương pháp này ánh xạ từng ID 32 bit vào một số 32 bit tương ứng (có hiệu quả ngẫu nhiên) có thể được đảo ngược lại thành id ban đầu. Bạn không cần phải tiết kiệm thêm gì trong cơ sở dữ liệu của mình.

Tôi chuyển đổi id tranh giành thành 8 chữ số thập phân để hiển thị trong URL.

Khi id của bạn tiếp cận 4,29 tỷ (32 bit), bạn sẽ cần lập kế hoạch mở rộng cấu trúc URL để hỗ trợ nhiều hơn, nhưng tôi thích có URL ngắn càng lâu càng tốt.

+0

Tôi thích dòng suy nghĩ này. Tôi sẽ phải suy nghĩ lại chiến lược tạo ra id của mình. – Adam

2

Chủ yếu, nó ngăn chặn xung đột tên. Ví dụ: nhiều người có thể tải lên "IMG_0001.JPG". Bạn cũng tránh giới hạn số lượng tệp trong một thư mục và bạn có thể phân phát hình ảnh trên nhiều máy chủ - không có cách nào một trang web lớn như Twitter hoặc Facebook có thể lưu trữ tất cả ảnh trên một máy chủ, dù lớn đến cỡ nào.

+0

Tôi hiểu ý bạn là gì nhưng Twitter sử dụng Amazon S3 để họ không phải lo lắng về khái niệm về máy chủ hoặc thư mục. Họ có thể lưu trữ một nghìn tỷ đối tượng (hoặc nhiều như họ có) trong một thư mục và không bao giờ phải lo lắng về nó. Trong trường hợp của tôi, tôi đang sử dụng một cột số nguyên tăng tự động trong MySQL để hoạt động như tên tập tin tương ứng trên S3 do đó việc đặt tên va chạm không phải là một vấn đề. Vì vậy, bạn có nghĩ rằng có một cách tốt để ngăn chặn các bot tải xuống tất cả các tệp của bạn một cách có hệ thống? – Adam

+0

Họ chắc chắn là địa ngục phải lo lắng về nếu nếu họ muốn liệt kê các tập tin trong một thư mục tìm kiếm một cụ thể. – ceejayoz

+0

Họ phải lưu trữ dữ liệu meta về vị trí tệp ở một nơi khác (cơ sở dữ liệu, tài liệu JSON, v.v.). Tôi biết một thực tế Twitter sử dụng Amazon S3 và nếu họ thực sự muốn, họ có thể lưu trữ tất cả các hình ảnh dưới a1.twimg.com/*. Đám mây của Amazon xử lý phần cứng ở mức cao, bạn không phải suy nghĩ về các thư mục. Vì tôi hỏi về S3 một cách cụ thể, việc sharding và clustering không phải là vấn đề trong trường hợp này. – Adam

4

Thay đổi URL là cách an toàn để làm mất hiệu lực tài sản đã lỗi thời.

Đó cũng là điều cần thiết nếu bạn muốn cho phép người dùng lưu trữ hình ảnh riêng tư.Việc sử dụng đường dẫn được khấu trừ từ tên/id/đường dẫn tài khoản người dùng sẽ làm cho cài đặt bảo mật vô dụng ngay sau khi bạn lưu trữ nội dung trên CDN.

Các vấn đề liên quan