Sự khác nhau giữa server có containerization và server không containerization
Anh em bạn bè gần xa giúp đỡ câu hỏi này với. Tình hình là em mới bị CTO của cty giao cho bài tập phân biệt giữa server được containerize và server không containerize. Sự khác nhau về khái niệm, cách sử dụng và hiệu quả từng trường hợp là ntn hả mọi người?
2 CÂU TRẢ LỜI
Rảnh rỗi nghe ông em rủ rê vào chém gió một tẹo :v
Về mặt khái niệm mà nói, containerization là việc mình đóng gói (bundle) chương trình ( application, ở trong câu hỏi của bạn gọi là server ) cùng với những thiết lập mà chương trình đó yêu cầu ( ví dụ như những file cấu hình, các gói thư viện, các dependencies cần phải có ) vào chung với nhau, để có thể đem ra sử dụng một cách ổn định, ít phụ thuộc nhất có thể vào các yếu tố môi trường máy khác. Docker là một lựa chọn khá phổ biến cho việc containerize ứng dụng của mình, nên ở đây mình sẽ lấy Docker làm ví dụ nhé ( nếu chưa rành thì bạn nên tìm hiểu thêm về Docker : khái niệm nó là gì, cách hoạt động ... Đọc hiểu xong về Docker thì mình nghĩ là cũng đủ để trả lời câu hỏi về cách sử dụng rồi đó.)
Còn về hiệu quả thì bạn cứ so sánh giữa việc có dùng Docker và không dùng Docker để minh họa cho dễ thấy. Khi không containerize, nghĩa là nếu bạn muốn deploy con server của mình lên đâu, bạn sẽ phải làm thủ công rất nhiều các công đoạn: cài đặt môi trường, cài đặt các thư viện cần dùng, cấu hình các thành phần trong server của mình như nginx, mysql để mọi thứ kết nối được đến với nhau ... Khá dễ để thấy là việc containerize sẽ giúp cho việc cài đặt đơn giản và dễ dàng hơn, ít xảy ra sai sót hơn ( chỉ cần cấu hình docker một lần lúc đầu chuẩn là được, sau đó đem đi đâu triển khai cũng nhanh ). Ngoài ra, vì tất cả những gì cần thiết cho chương trình của mình đã cùng được đóng gói vào trong một cục container, nên sẽ không sợ chương trình chạy không ổn định do các yếu tố môi trường máy khác ( kiểu chạy ở máy này lỗi mà máy kia không lỗi )
Có một lợi ích khác của containerization, đó là việc dễ dàng module hóa và tái sử dụng ( cái này không hẳn là chỉ thông qua containerization thì mới làm được, nhưng thực hiện nó ở đây thì thuận lợi hơn). Vì việc đóng gói những gì vào trong một container là do mình quyết định, nên bạn hoàn toàn có thể chia chương trình của bạn thành những module riêng, mỗi cái là một container. Ví dụ như bạn thấy hầu hết các dự án mình làm đều dùng chung một stack gồm laravel - mysql - nginx , bạn có thể đóng gói những phần này vào trong một container. Hay nếu như công việc của bạn mỗi lúc lại phải làm việc với một framework, bạn có thể đóng gói riêng phần database và web server vào chung một container để sử dụng chung giữa các dự án.
Lan man thêm một chút là ở trên thấy có bạn nói sang máy ảo. Thật ra cũng khá nhiều người hay so sánh hay đánh đồng giữa container và máy ảo vì cách sử dụng của hai khái niệm này khá giống nhau : Cùng là bạn build ra sẵn một cái image/box/disc ..., sau đó đem về dùng, chương trình của mình sẽ chạy trên cái nền này, và không phụ thuộc vào môi trường máy của bạn. Tuy nhiên, về bản chất, chúng khá là khác nhau. Container là mô phỏng của một ứng dụng phần mềm, còn máy ảo (virtual machine) đúng như tên gọi của nó là mô phỏng của một chiếc máy tính. Bạn có thể chạy nhiều container, cũng như có thể chạy nhiều máy ảo trên cùng một máy tính, nhưng với container, mỗi container sẽ có một process riêng nhưng vẫn chạy chung trên nền là hệ điều hành của máy tính của mình. Còn VM, mỗi VM sẽ có một hệ điều hành riêng, và các VM này cùng dùng chung tài nguyên phần cứng của máy tính của mình. Có thể hình dung ( một cách tương đối gần đúng), VM là một khái niệm rộng hơn, bao trùm ra ngoài container. Và về mặt hiệu năng, dù vẫn còn một số ý kiến phản đối, nhưng đa số mọi người đều nhận định, container nhẹ hơn ( sử dụng ít tài nguyên máy hơn, vì ít nhất là nó không phải dựng thêm 1 hệ điều hành riêng cho mình ), và chạy nhanh hơn so với việc sử dụng VM
hay đại ca ôi :v
hay cá anh ôi
tks =)) đùa hóa ra bản chất nó là cái mình biết =)) chắc mình ngồi đọc lại thôi
Câu trả lời tâm huyết quá anh!
bên trái như cách thông thường, còn bên phải là sever containerized, ở đây là docker. Vậy câu hỏi của bạn trở thành sự khác nhau giữa docker và virtual machine.
Hypervisor là các máy ảo (Virtual Machine - VM) cũng được tạo ra để triển khai các dự án khác nhau với các điều kiện môi trường và công nghệ khác nhau. Vậy điểm khác nhau giữa Docker và VM là gì: Giả sử bạn có 2 mảnh đất, mỗi mảnh 500m2.
Trên mảnh thứ nhất, bạn phân ra làm 10 lô nhỏ , mỗi lô 50m2 để bán, ai mua lô nào thì họ tự xây nhà , tự thiết kế, muốn nhà quay hướng nào thì xây, thích lắp điện nước như nào thì lắp, không lắp thì không dùng. Trên mảnh thứ 2 bạn bán cho một chủ đầu tư, họ xây chung cư 40 tầng, với rất nhiều căn hộ có các kích thước khác nhau tùy túi tiền người mua. Rõ ràng bạn thấy ở trường hợp 2, các căn hộ phải sử dụng chung đường ống nước , đường điện từ 1 nguồn nào đó, chung sân, chung nóc vv… cùng chia sẻ tài nguyên với nhau.
Trường hợp 1 thì mỗi nhà có quyền sử dụng riêng, không chia sẻ gì với ai. VM cũng giống TH1 vậy, mỗi máy ảo sử dụng một OS riêng, được cấp phát bộ nhớ ngay từ lúc đầu tạo ra, nên dẫn đến dư thừa không cần thiết. Còn Docker như những căn chung cư , các container (được ví như căn hộ) được tạo ra sử dụng chung tài nguyên, cần bao nhiêu dùng bấy nhiêu, tùy vào mục đích sử dụng nên tiết kiệm tài nguyên hơn VM.
Nguồn https://viblo.asia/p/docker-hay-hieu-theo-cach-cua-ban-Az45bnk65xY.
à, thế tức ở đây server thông thường ta coi là công nghệ virtualization, còn server có container là containerization nhỉ? nếu vậy thì hóa ra chỉ là hỏi khác của containerization khác virtualization ở điểm nào, đúng ko?
@devil_boom_129 có thể hiểu như vậy. vì nếu k dùng container, thì công nghệ cũ là virtualization. Khác nhau chủ yếu là về cách chia sẻ tài nguyên phần cứng. Máy ảo cần được chia tài nguyên riêng để sử dụng, còn các container thì dùng chung tài nguyên với máy chủ luôn.
@quanghung97 Thế nếu mình ko dùng máy ảo cx ko dùng container thì vẫn ko được gọi là server không dùng container à, thế gọi là gì nhỉ =))
@HaiHaChan @quanghung97 cảm ơn nhé. thốn thật. bản chất hóa ra là thứ đã biết mà cuối cùng lại phải hỏi. chắc ngồi đọc kỹ lại vậy
@Naem (doanxem)
@huukimit nguyên văn tiếng Nhật là "server dùng container với server không dùng container" ạ.
@huukimit đồng quan điểm với người ae =))