2015-05-22 31 views
15

Gần đây tôi đã triển khai một ứng dụng Haskell nhỏ với docker, sử dụng "scratch-haskell" làm hình ảnh cơ sở.Docker Container so với Unikernel

Sau đó, tôi đã đọc về Unikernels và HALVM. Và tôi có chút bối rối.

Vùng chứa đế của tôi rộng khoảng 6MB. Một Unikernel (với cùng một ứng dụng haskell) sẽ có kích thước tương tự như tôi đoán.

Unikernel chạy trực tiếp trên Xen hypervisor, trong khi hình ảnh docker (hoặc chung LXC) chạy trên phân phối Linux bình thường, chạy trên kim loại trần.

Bây giờ tôi có "sự lựa chọn" để chạy Linux với nhiều vùng chứa tối thiểu HOẶC một máy Xen với nhiều Unikernels nhỏ.

Nhưng ưu điểm và nhược điểm của hai giải pháp đó là gì? Là một trong những an toàn hơn khác? Và có bất kỳ sự khác biệt hiệu suất đáng kể nào giữa chúng không?

+1

unikernel là khá gần đây, tôi đoán bạn nên chạy thử nghiệm của riêng bạn – user2915097

Trả lời

10

từ http://wiki.xenproject.org/wiki/Unikernels

Unikernels Cung cấp gì?

Những người lạ thường tạo ra môi trường thời gian chạy đơn lẻ có nghĩa là để bật các ứng dụng đơn được xây dựng chỉ với môi trường đó. Nói chung, môi trường này thiếu khả năng sinh ra các quy trình con, thi hành các lệnh shell, tạo nhiều luồng, hoặc các quy trình rẽ nhánh. Thay vào đó, chúng cung cấp một hóa thân thuần túy của thời gian chạy ngôn ngữ nhắm mục tiêu, có thể là OCaml, Haskell, Java, Erlang hoặc một số môi trường khác .

Unikernels so với Linux Container

Phần lớn đã được thực hiện gần đây trong những lợi thế của Linux container giải pháp trên máy ảo truyền thống. Người vận chuyển container nói rằng dấu chân bộ nhớ nhẹ, thời gian khởi động nhanh và dễ dàng gói làm cho container trở thành tương lai của ảo hóa. Trong khi các mặt hàng này của chắc chắn là đáng chú ý, chúng không đánh vần sự kết thúc của thế giới của hypervisor. Trên thực tế, Unikernels có thể giảm bớt tính hữu dụng lâu dài của các thùng chứa .

Unikernels tạo điều kiện cho cùng một thuộc tính mong muốn được mô tả bởi những người đề xuất vùng chứa, với việc bổ sung một câu chuyện bảo mật tuyệt đối tuyệt vời mà một vài giải pháp khác có thể phù hợp.

Vì vậy, nếu bạn chỉ muốn chạy ứng dụng Haskell, ứng dụng Unikernels có thể làm việc cho bạn và chúng sẽ có ít chi phí hơn docker (và docker overhead rất nhỏ), nhưng nếu ứng dụng của bạn cần môi trường chuẩn bị, cần để giao tiếp với docker phần mềm Unikernels không phải là lựa chọn tốt hơn. Tôi đoán còn quá sớm để nói rằng Unikernels sẽ hữu ích hay phổ biến hay không, chỉ có thời gian thôi.

+0

mặc dù, không unikernels trở nên mạnh mẽ hơn khi thời gian trôi qua? về việc có được luồng/giả mạo và có quyền truy cập vào lưu trữ, vv Tôi thấy tiềm năng cho một số hội tụ ... –

+1

Luồng và giả mạo là chống đối với định nghĩa của unikernel. – bahamat

2

Unikernals tuyệt vời cho những thứ không trạng thái. Khi bạn bắt đầu cần truy cập đĩa, bạn nên sử dụng Docker.

Đó là lý do tại sao tất cả các ứng dụng "kẻ giết người" cho người lạ là hạt nhân được định cấu hình tĩnh, như trang web tĩnh hoặc ngăn xếp mạng được xác định phần mềm.

+2

Tôi khá chắc chắn rằng unikernels có thể được thực hiện stateful nếu cần thiết. Có lẽ không phải bằng cách phơi bày một số loại đĩa I/O, nhưng có những phương tiện khác để kiên trì. –

2

Có nhiều cuộc khám phá tốt sẽ đơn giản như sau:

Unikernel là máy ảo nhưng chuyên dụng và tối ưu hóa cho ứng dụng cụ thể.

enter image description here

+1

Ở đây chúng tôi bỏ lỡ docker chạy trên kim loại trần mà không có hypervisor/không có máy ảo – bodrin

+0

Minh họa độc đáo, nhưng vui lòng liệt kê các tham chiếu. – securecurve

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