2015-04-15 19 views
10

Tôi đang làm việc trên một ứng dụng đám mây Python/MySQL với một kiến ​​trúc khá phức tạp. Điều hành hệ thống này (hiện tại) tạo ra các tệp tạm thời (plain text, YAML) và các tệp nhật ký và tôi đã dự định lưu trữ chúng trên hệ thống tệp.Cách/lưu trữ tệp và nhật ký tạm thời cho ứng dụng trên đám mây?

Tuy nhiên, nhà điều hành đám mây tiềm năng của chúng tôi chỉ cung cấp hệ thống tệp tạm thời, không liên tục cho các ứng dụng. Điều này có nghĩa là cách tiếp cận ban đầu với lưu trữ các tệp nhật ký và tạm thời sẽ không hoạt động.

Phải có cách tiếp cận tiêu chuẩn để giải quyết vấn đề này mà tôi không biết. Tôi không muốn sử dụng lưu trữ đối tượng như S3 vì nó sẽ mở rộng ngăn xếp hiện tại và thêm độ phức tạp. Nhưng tôi có khả năng cài đặt một ứng dụng bổ sung, chuyên dụng (nếu có bất kỳ thứ gì được thực hiện cho mục đích này) trên một máy chủ khác với cùng một nhà cung cấp. Hạn chế duy nhất là nó sẽ có trong PHP, Python, MySQL.

Câu hỏi chung: Cách tiếp cận tiêu chuẩn để lưu trữ tệp khi không có hệ thống tệp liên tục là gì?

Và đối với trường hợp cụ thể của tôi: Có giải pháp nào sử dụng Python và/hoặc MySQL đơn giản và nhanh chóng để triển khai không? Đây có phải là một ứng dụng cho Redis không?

+0

Đây là một chút quá mơ hồ đối với câu trả lời. Bạn có thể chỉ định giải pháp đám mây nào bạn muốn sử dụng không? Bạn có muốn lưu trữ chúng trong cùng một đám mây hoặc trên một máy chủ khác không? Bạn có thể sử dụng bất cứ thứ gì khác ngoài Python/MySQL không? Bạn có thể cài đặt gì khác không? –

+0

Đã thêm một số thông tin khác. Nghĩ rằng câu hỏi là chung ... cách tiếp cận chuẩn để lưu trữ tệp khi không có hệ thống tập tin liên tục ... – boadescriptor

Trả lời

2

Như bạn đang yêu cầu hai câu hỏi, hãy để tôi cũng trả lời họ từng người một:

Câu hỏi chung: phương pháp tiêu chuẩn để lưu trữ các tập tin khi là gì không có hệ thống tệp liên tục nào khả dụng?

Nếu nội dung của tệp không phù hợp để lưu trữ cơ sở dữ liệu thông thường, nhưng bạn thực sự muốn lưu trữ tệp (như hình ảnh, nhị phân, vv) liên tục, Amazon S3 và các dịch vụ tương tự thường là cách của bạn . Ngoài ra còn có các lựa chọn thay thế miễn phí có sẵn như Riak, Aerospike hoặc nhiều hơn Cassandra nặng hơn.

Trong khi tất cả các dịch vụ này đều miễn phí (hoặc có sẵn các phiên bản miễn phí), chúng sẽ yêu cầu thiết lập và bảo trì liên tục. Ngoài ra, bạn không thể đạt được cùng mức độ sẵn có và khả năng mở rộng như các dịch vụ đám mây được lưu trữ như S3. Nếu bạn giải thích điều này, khoản tiết kiệm bằng cách không sử dụng một dịch vụ đám mây như S3 ít có vấn đề. Nhưng như mọi khi, YMMV.

Và đối với trường hợp cụ thể của tôi: Có giải pháp nào sử dụng Python và/hoặc MySQL đơn giản và nhanh chóng để triển khai không? Đây có phải là một ứng dụng cho Redis không?

Câu hỏi của bạn có đôi chút mâu thuẫn.Bạn đề cập đến ứng dụng của mình tạo ra các tệp tạm thời, nhưng bạn không muốn mất chúng?

Nếu tập tin của bạn chỉ là tạm thời, một giải pháp như Redis hoặc memcached sẽ được hoàn toàn phù hợp cho công việc, miễn là bạn có sự hiểu biết rằng cả hai đều là cache và dữ liệu sẽ bị mất trên khởi động lại, hoặc (nếu cho phép Redis ảnh chụp nhanh) ít nhất không đảm bảo rằng ghi được lưu vào đĩa.

Nếu bạn không muốn mở rộng ngăn xếp và Redis không cung cấp cho bạn mức bảo đảm bạn đang tìm kiếm, MySQL hỗ trợ lưu trữ blobs, có thể được sử dụng để lưu trữ tệp (dữ liệu nhị phân) trong MySQL. Điều này thường không quy mô rất tốt, nhưng một lần nữa, quyết định xem điều này là chấp nhận được đối với bạn rất cao phụ thuộc vào tình hình của bạn. (Xem thêm this câu trả lời tuyệt vời liên quan đến sự chuyên nghiệp và con của việc lưu trữ tệp trong MySQL.)

0

Lưu trữ nhật ký của bạn trong MySQL. Chỉ cần làm một bảng như thế này:

 
x***time*****source*****action 
---------------------------- 
****unixtime*somemodule*error/event 

lưu trữ tạm thời của bạn nên là đủ cho các tập tin tạm thời :)

+0

Được rồi cho nhật ký, nhưng tôi nên đặt các tệp văn bản thuần tuý tạm thời ở đâu? Chúng phải tồn tại lâu hơn một chút cho đến khi tôi xóa chúng bằng tay. – boadescriptor

+0

Bạn không cung cấp bất kỳ giải pháp nào khác ngoại trừ MySQL. Có lẽ là MySQL. Không có lựa chọn nào khác ... – hoschiCZ

+0

Chắc chắn, nhưng chắc chắn không có trong cấu trúc bảng mà bạn đã trình bày. Tôi đoán có phải có một số tối ưu hóa. Tôi cũng nói Python, vì vậy có lẽ Redis sẽ là một lựa chọn khác? – boadescriptor

0

Redis là một lựa chọn không tồi cho vấn đề này. Nó giữ tất cả dữ liệu trong bộ nhớ, do đó, nó đắt tiền và không thực tế để lưu giữ lâu dài các tệp nhật ký.

MySql là OK, tuy nhiên MongoDB là giải pháp nhanh và dễ sử dụng hơn. Trên thực tế nó là một trong đó là trường hợp sử dụng chính: https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/

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