Cách lưu trữ dữ liệu trên máy bị cắt ngẫu nhiên


13

Tôi có một máy ảo (Debian) đang chạy trên một máy chủ vật lý. Máy ảo hoạt động như một bộ đệm cho dữ liệu mà nó thường nhận được qua mạng cục bộ (khoảng thời gian cho dữ liệu này là 0,5 giây, do đó thông lượng khá cao). Mọi dữ liệu nhận được được lưu trữ trên máy ảo và liên tục được chuyển tiếp đến một máy chủ bên ngoài qua UDP. Khi máy chủ bên ngoài thừa nhận (qua UDP) rằng nó đã nhận được gói dữ liệu, dữ liệu gốc sẽ bị xóa khỏi máy ảo và không được gửi lại cho máy chủ bên ngoài. Kết nối internet kết nối VM và máy chủ bên ngoài là không đáng tin cậy, có nghĩa là nó có thể ngừng hoạt động trong nhiều ngày.

Máy vật lý lưu trữ VM bị cắt điện nhiều lần mỗi ngày một cách ngẫu nhiên. Không có cách nào để biết khi nào điều này sắp xảy ra và không thể thêm UPS, pin hoặc giải pháp tương tự cho hệ thống.

Ban đầu, dữ liệu được lưu trữ trên cơ sở dữ liệu HSQLDB dựa trên tệp trên máy ảo. Tuy nhiên, việc cắt điện thường xuyên cuối cùng khiến tệp tập lệnh cơ sở dữ liệu bị hỏng (không phải ở cấp hệ thống tệp, nghĩa là có thể đọc được, nhưng HSQLDB không thể hiểu ý nghĩa của nó), dẫn đến câu hỏi của tôi:

Làm thế nào dữ liệu nên được lưu trữ trong một môi trường nơi việc cắt điện có thể và xảy ra thường xuyên?

Một tùy chọn tôi có thể nghĩ đến là sử dụng các tệp phẳng, lưu từng gói dữ liệu dưới dạng tệp trên hệ thống tệp. Bằng cách này nếu một tệp bị hỏng do mất nguồn, nó có thể bị bỏ qua và phần còn lại của dữ liệu vẫn còn nguyên. Tuy nhiên, điều này đặt ra một số vấn đề, chủ yếu liên quan đến lượng dữ liệu có khả năng được lưu trữ trên máy ảo. Tại 0,5 giây giữa mỗi phần dữ liệu, 1.728.000 tệp sẽ được tạo trong 10 ngày. Điều này ít nhất có nghĩa là sử dụng một hệ thống tệp có số lượng nút tăng lên để lưu trữ dữ liệu này (thiết lập hệ thống tệp hiện tại đã hết các nút ở mức ~ 250.000 tin nhắn và 30% dung lượng đĩa được sử dụng). Ngoài ra, thật khó (không phải là không thể) để quản lý.

Có sự lựa chọn nào khác không? Có công cụ cơ sở dữ liệu nào chạy trên Debian mà không bị hỏng do cắt điện không? Ngoài ra, hệ thống tập tin nào nên được sử dụng cho việc này? ext3 là những gì được sử dụng tại thời điểm này.

Phần mềm chạy trên máy ảo được viết bằng Java 6, vì vậy hy vọng giải pháp sẽ không tương thích.


14
"Máy vật lý lưu trữ VM bị cắt điện nhiều lần một ngày một cách ngẫu nhiên. Không có cách nào để biết khi nào điều này sắp xảy ra và không thể thêm UPS, pin hoặc giải pháp tương tự cho hệ thống. " Tôi thực sự muốn biết làm thế nào có thể. Có phải trong Trạm vũ trụ quốc tế nên nó cần 20 triệu đô la để gửi một UPS lên hay không?
ceejayoz

3
Máy ít nhất có bộ điều khiển RAID với bộ nhớ cache được bảo vệ bằng pin không?
Zoredache

4
Chúng tôi có thể đề xuất các giải pháp rất thú vị, sáng tạo và có lẽ đúng về mặt lý thuyết cho vấn đề này. Tuy nhiên , chúng tôi không biết những gì hypervisor và phần cứng đang chạy trên máy chủ, vì vậy sẽ không có sự đảm bảo rằng ghi đĩa được thực sự bằng văn bản, hoặc bằng văn bản theo đúng thứ tự ...
pino42

5
@Sevas Nghe có vẻ như đó không phải là cuộc gọi của bạn, nhưng tôi đề nghị rằng đáng để chỉ ra rằng 50 UPS cơ bản, giá rẻ sẽ có giá 2500 đô la và không cần bảo trì (bạn thay thế chúng sau vài năm khi pin bắt đầu hoạt động ). Chi phí cố gắng giải quyết vấn đề này trong phần mềm sẽ cao hơn thế nhiều, trừ khi bạn biết một nhóm các lập trình viên làm việc miễn phí. Có thể hữu ích để có được quản lý để giải quyết vấn đề này với giá 50 đô la / đơn vị, thay vì hàng chục hoặc hàng trăm nhân lực lành nghề @ 3 con số một giờ.
HoplessN00b

9
Điều này thực sự nghe giống như một chương trình độc hại. Người dùng không biết "VM" đang chạy trên máy tính của họ. Nó đang đánh cắp dữ liệu từ toàn bộ mạng - sau đó chuyển dữ liệu qua một kết nối để ẩn chính nó. Người dùng "tắt và bật máy tính" một cách ngẫu nhiên - vì vậy bạn không thể chỉ cần thêm một UPS.
Laurence

Câu trả lời:


23

Thành thật mà nói, cách tiếp cận tốt nhất của bạn ở đây là khắc phục sự cố cắt điện hoặc triển khai một hệ thống khác ở một vị trí tốt hơn.

Có, có những hệ thống như redis sẽ lưu trữ dữ liệu trong nhật ký chỉ bổ sung để phát lại, nhưng bạn có nguy cơ tham nhũng ở cấp thấp hơn - ví dụ: nếu hệ thống tệp của bạn bị xáo trộn thì dữ liệu trên đĩa có khả năng gặp rủi ro.

Tôi đánh giá cao bất kỳ cải tiến nào sẽ hữu ích cho bạn, nhưng thực sự vấn đề không phải là vấn đề có thể giải quyết được theo kịch bản bạn đã vạch ra.


8
+1 Câu trả lời đúng là "Đừng làm vậy"
Chris S

6
+1 Việc cắt điện ngẫu nhiên cuối cùng sẽ làm hỏng hệ thống tập tin của bạn. Điện tử làm những điều kỳ lạ không thể đoán trước khi sức mạnh của họ thất bại.
Cấp

-1 (ảo -1). Tôi nghĩ rằng một hệ thống như vậy phải được xây dựng dựa trên giả định rằng việc cắt điện xảy ra theo thời gian. Giả định này là một thực tế thế giới thực mà bạn phải đối phó.
Igal Serban

11

Cách tiếp cận của bạn có thể làm việc. Hãy để tôi đề nghị một số cải tiến cho nó. Có một câu hỏi trong ngăn xếp tràn về ghi nguyên tử vào tập tin . Về cơ bản, bạn lưu từng gói dữ liệu vào một tệp tạm thời và sau đó bạn đổi tên nó thành tên cuối cùng. Đổi tên là một hoạt động nguyên tử sẽ được an toàn từ sự cố mất điện. Bằng cách đó, bạn được đảm bảo rằng tất cả các tệp trong đích cuối cùng của bạn đã được lưu chính xác mà không bị hỏng.

Sau đó, những gì bạn có thể làm để đối phó với vấn đề có hàng triệu tệp. Đây có phải là một công việc chạy có thể mỗi giờ sẽ lấy tất cả các tệp cũ hơn một giờ và kết hợp chúng thành một tệp lớn bằng cách sử dụng lại các thao tác tệp nguyên tử để công việc này chạy an toàn ngay cả khi mất điện, sau đó xóa các tệp cũ. Kiểu như đăng nhập luân chuyển. Một tập tin có giá trị hàng giờ sẽ vào khoảng 7.200 tập tin. Vì vậy, tại bất kỳ thời điểm nào, bạn không nên có hơn 20.000 tệp trên đĩa.


1
Không phải là một câu trả lời tồi, nhưng vấn đề với nó là ở chỗ giả sử rằng bản thân nó là một hoạt động nguyên tử, điều đó không phải. Vì vậy, một sự cố mất điện không đúng lúc vẫn có thể tạo ra dữ liệu hoặc tham nhũng FS. Tuy nhiên, có lẽ là về tùy chọn tốt nhất trong việc sửa chữa nguồn điện hoặc cắm thiết bị vào UPS, vì vậy, +1.
HoplessN00b


Có, đổi tên tập tin một khi được viết là một hoạt động nguyên tử. Viết các tập tin ở nơi đầu tiên, là không.
HoplessN00b

3
@ HoplessN00b Không có vấn đề gì khi tệp mới được viết một nửa hoặc bị hỏng. Bạn có tập tin cũ ở trạng thái tốt. Khi bạn khôi phục hệ thống, bạn hủy tệp nửa viết.
DJClayworth

2
@ HoplessN00b Chính xác! chỉ các tệp tạm thời trong một thư mục tạm thời cho phép có thể được viết một nửa. Tất cả các tệp trong thư mục đích cuối cùng của bạn sẽ luôn không bị hỏng và an toàn trên đĩa
Marwan Alsabbagh

7

Bạn cài đặt một UPS hoặc thẻ RAID với bộ đệm ghi được hỗ trợ bằng pin cho hệ thống và chỉ với 49,95 đô la , bạn hoàn thành những gì đơn giản là không thể thực hiện được trong phần mềm.

Yêu cầu của bạn rằng bằng cách nào đó không thể kết nối máy chủ này với UPS hoặc pin ... đơn giản là không thể tin được.


9
Sự ngu ngốc quan liêu luôn luôn đáng tin.
Dan đang loay hoay bởi Firelight

3
@DanNeely My PHB won't let me hook this up to a UPS/batterylà một điều rất khác so với it is not possible to add a UPS, a battery, or a similar solution to the system. Không quá tầm thường, nhưng đó là một sự khác biệt quan trọng vì nó thay đổi cách tiếp cận và giải pháp có sẵn.
HoplessN00b

Hoặc, như đã đề cập ở nơi khác, người dùng máy tính bị tấn công sẽ ngạc nhiên nếu tôi yêu cầu cài đặt một UPS. Tình hình là một chút không thể tin được khác. Bất cứ ai cũng sẽ, trong lý do, chấp nhận một UPS về dữ liệu bị hỏng do trường hợp kinh doanh phù hợp.
WernerCD

@WernerCD Tôi muốn bạn gặp CIO của chúng tôi. Mặc dù tôi đồng ý rằng việc chiếm quyền điều khiển máy tính của ai đó là trường hợp có thể sử dụng cho việc này, tôi cũng có thể nghĩ đến những người hợp pháp, vì vậy tôi sẽ cho anh chàng lợi ích của sự nghi ngờ. Hãy suy nghĩ về các hệ thống nhúng và bộ điều khiển, hoặc như Raspberry Pi - đó chắc chắn có thể là trường hợp "máy tính" bạn đang sử dụng có giá trị thấp hơn 50 đô la mà nó sẽ sử dụng để gắn nó vào UPS.
HoplessN00b

Ngay cả khi máy tính có giá trị thấp hơn UPS $ 50 - đó là dữ liệu trên máy tính thực sự có giá trị. Google được xây dựng trên các máy tính "vô giá trị". Quan trọng hơn chi phí của CPU là chi phí mất dữ liệu, mất nhân lực (Cuộc phiêu lưu lập trình này, đuổi theo dữ liệu, theo dõi lỗi trong hệ thống cũ cũng như phần mới này), mất giá trị của khách hàng (Mất dữ liệu của tôi? Công ty tiếp theo xin vui lòng.),
V.v.

5

Gắn toàn bộ hệ thống chỉ đọc, ngoại trừ một thiết bị khối lưu trữ tất cả dữ liệu của bạn. Sử dụng trực tiếp thiết bị khối đó và thực hiện cơ chế lưu trữ dữ liệu của riêng bạn bằng thiết bị khối thô đó.


3
... và đầu tư vào thẻ điều khiển đĩa được hỗ trợ bằng pin và đảm bảo không có bộ đệm ghi trên đĩa, hoặc bạn vẫn bị vặn.
voretaq7

Đến đây để nói rằng họ nên khởi động hệ thống Live-CD hoặc ROM tương đương, với một số bộ lưu trữ trạng thái rắn được sử dụng với các giải pháp tệp phẳng.
Mark Allen

Bộ đệm ghi có thể bị vô hiệu hóa. Cách tiếp cận này là khả thi. Chỉ áp dụng cơ chế lưu trữ. Các khối được viết nguyên tử (tôi giả sử) để bạn có thể có hai khối "con trỏ" trỏ đến đầu và cuối của phần với dữ liệu mới / việc cần làm. Các con trỏ được cập nhật sau khi ghi / hoàn thiện dữ liệu. NCQ cũng nên bị vô hiệu hóa.
mất ngủ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.