Máy chủ bất biến là gì?


23

Có một số câu hỏi về máy chủ bất biến , chẳng hạn như:

Có vẻ như rõ ràng là nó phải làm với các máy chủ (phần tôi nhận được). Và chỉ cần tiêu hóa ngữ pháp bất biến , tôi sẽ nghĩ nó có liên quan đến "không thể tắt tiếng ". Nếu dự đoán đó gần, tôi sẽ không biết chính xác điều gì không thể bị tắt tiếng (và tôi nghi ngờ nó phải làm gì với soundcard hoặc thứ gì đó ...).

Câu hỏi của tôi :

  • Điều gì thực sự là một "máy chủ bất biến" (trong bối cảnh của DevOps)?
  • Tại sao chúng được sử dụng?

4
không thể đột biến
Evgeny

3
@Evgeny: ggggggggggggrrrrrrrrrrrrrrrr, tôi đã gần gũi, nhưng hoàn toàn sai với suy đoán câm của tôi (xin đừng cười tôi ...).
Pierre.Vriens


Tôi xin lỗi vì quá thẳng thắn, nhưng có phải là một tìm kiếm trên internet đơn giản để định nghĩa "bất biến" đó là khó chịu? Tôi nhận được câu hỏi lớn hơn thế, nhưng tìm kiếm ý nghĩa của từ hơn là đoán có thể đã cho bạn một khởi đầu tốt đẹp.
Adrian

@Adrian không có vấn đề gì khi bị cùn (vì tôi bị tiếng Anh, tôi phải google rằng để thực sự có được sự hiểu biết chính xác về sự cùn). Tuy nhiên tôi tự hỏi nếu bạn biết về câu hỏi meta.SA này ? Ngoài ra, tôi muốn học hỏi từ các chuyên gia DevOps, thay vì các lựa chọn thay thế giống như Wikipedia.
Pierre.Vriens

Câu trả lời:


19

Tính không thay đổi là một thuật ngữ thường được sử dụng trong giới khoa học máy tính, thường nói đến "không thể thay đổi sau khi tạo". Nó thường được sử dụng để tham chiếu song song, đồng thời và an toàn luồng.

Cuộc thảo luận về chủ đề đó rất hấp dẫn, nhưng nhìn chung có thể được tìm thấy ở nơi khác trên Stack Overflow . Tôi chống lại sự thôi thúc lao vào nó ở đây. Khái niệm chính là "không thể thay đổi sau khi tạo".

Hãy tưởng tượng nếu trên Amazon, bạn triển khai một dịch vụ web bằng cách nướng nó vào Máy ảnh (AMI - một phiên bản dựng sẵn bạn có thể cung cấp lại nhiều lần). Nó kết nối với cơ sở dữ liệu phụ trợ thông qua thông tin đăng nhập khi khởi động. Nó kết xuất các bản ghi vào một công cụ đăng nhập như Splunk. Đối với hoạt động hàng ngày bình thường, bạn không có lý do để ssh vào hộp này. Nếu bạn cần mở rộng quy mô dịch vụ đó, bạn chỉ cần tạo thêm phiên bản của AMI đó và điều chỉnh bộ cân bằng tải. Kéo nó xuống chỉ đơn giản là phá hủy các thể hiện và cân bằng tải.

Đối với hoạt động hàng ngày, hộp này không có lý do để thay đổi . Chúng tôi chỉ có thể kích hoạt nhiều hơn từ AMI.

Điều gì xảy ra khi bạn cần cung cấp một bản vá bảo mật cấp hệ điều hành? Đây là khi bạn có quyết định đưa ra ... bạn có nướng một AMI mới với bản vá được cài đặt và triển khai lại tất cả các trường hợp đang chạy hay bạn có ssh vào các hình ảnh hiện có và cập nhật bản vá không? Có rất nhiều người sẽ chỉ ssh in. Các tín đồ của 'kiến trúc bất biến' chỉ mắng tôi thậm chí còn gợi ý một điều như vậy là có thể.

Những người bất ổn (nếu có một từ như vậy) ủng hộ việc nướng ami mới. Họ ủng hộ loại bỏ tất cả lý do để ssh vào một máy bao giờ. Họ ủng hộ rằng bất kỳ cấu hình máy cụ thể nào cũng sẽ xảy ra khi khởi động máy đó bằng cách kéo chi tiết cấu hình ra khỏi kho lưu trữ. Đây là biểu hiện cuối cùng của "gia súc, không phải vật nuôi".

Kiến trúc bất biến đặc biệt là về cấu hình máy không có lý do để thay đổi sau khi tạo hình ảnh máy . Nếu có gì đó cần thay đổi, hãy nướng một hình ảnh cá thể mới, tắt cái cũ, đưa cái mới lên.


"Tắt cái cũ, mang cái mới lên". Hoặc nếu kiến ​​trúc của bạn cho phép nó, hãy đưa ra cái mới, điều chỉnh cân bằng tải, tắt cái cũ. Bằng cách đó bạn có thể làm điều đó bất cứ lúc nào bạn muốn, ngay cả trong thời gian cao điểm. :)
Tim Malone

Bất biến nếu từ lập trình chức năng (thập niên 1960), giờ đây người ta nhận ra rằng nó không chỉ làm giảm các lỗi (điều thường không được quan tâm), mà còn hỗ trợ đồng thời.
ctrl-alt-delor

Tôi thực sự quan tâm đến bất kỳ bổ sung nào cho câu trả lời tuyệt vời này về cách các tác nhân giám sát hoặc phần mềm bổ sung có thể khó nướng vào bản gốc có thể được sử dụng ở đây. Ví dụ: phần mềm giám sát APM phải phát hiện môi trường máy mới sau khi tạo và thay đổi các tham số. Tôi đang khám phá SSM và tự động hóa để triển khai điều này trong AWS, nhưng đã tìm thấy rất ít để thảo luận về tính bất biến với AMI / hình ảnh khi xử lý các tác nhân bổ sung có thể được cài đặt sau đó.
SheldonH

10

Các công nghệ đám mây đã thay đổi biên giới giữa phần cứng và phần mềm để nhiều hoạt động kỹ thuật trước đây là công dân độc quyền của thế giới phần cứng cũng là đối tượng của lĩnh vực phần mềm. Các môi trường điện toán dùng chung có thể lâu đời như chính máy tính 1 nhưng các công nghệ đám mây có thể phổ biến chúng bằng cách đưa ra các phép ẩn dụ thuận tiện và quen thuộc để tương tác với chúng: người dùng đám mây dành một ví dụ, máy tính hoàn chỉnh hoặc mô phỏng, trong khi môi trường máy tính chia sẻ cũ hơn có thể được thiết lập về những hạn chế khó sử dụng và chương trình của bạn phải được tải lên trên máy chủ FTP đó, sẽ chạy trong môi trường X (thường là với phiên bản 10 năm cũ của bất kỳ phần mềm nào bạn muốn sử dụng), trong tối đa 60 phút, âm thanh có thể quen thuộc với người dùng cũ hoặc thực tế của các trung tâm điện toán.

Hậu quả thực tế của sự thay đổi này là các quy trình triển khai hiện có thể được thể hiện bằng các vật phẩm phần mềm. (Quy trình triển khai là các hướng dẫn cho biết cách thiết lập cơ sở hạ tầng, với cơ sở dữ liệu, máy chủ web hoặc bất cứ thứ gì thuộc về cơ sở hạ tầng này, cùng với mạng nơi chúng chạy.) Được trang bị các ống kính mới này, bảo trì thủ công các máy chủ trông khá giống vá thủ công mã sản xuất - điều chỉ trong những trường hợp rất hiếm khi xảy ra. Bảo trì thủ công dễ bị giới thiệu sự khác biệt giữa các hệ thống thực sự đang chạy trong sản xuất và mã mô tả các hệ thống này, điều này có nghĩa là hành vi không thể sửa chữa và phân tích lỗi không thể, sửa lỗi kép và các thiên tai khác.

Mẫu máy chủ bất biến chỉ là sự hoán vị cho các hoạt động đám mây của câu thần chú trên, theo đó chúng ta nên tránh bảo trì thủ công các chương trình đang chạy. Thay vì tự cấu hình sever, mẫu máy chủ không thay đổi khuyên bạn nên tự động hóa cấu hình này.

Hương vị thực hiện

Trong khi ý tưởng chung về mẫu máy chủ bất biến khá rõ ràng, có rất nhiều sắc thái thực hiện. Ví dụ, một số phương pháp đề xuất không nên cập nhật máy chủ mà thay vào đó thay thế một cách có hệ thống các máy chủ. Điều này là do việc cập nhật năng suất trong trường hợp triển khai bao gồm các máy chủ đã được khởi động tại một số thời điểm khác nhau và đã trải qua một số quy trình cập nhật riêng biệt, ngụ ý một bộ máy chủ không đồng nhất và có thể dẫn đến sự khác biệt tinh tế trong cách máy chủ xử lý công việc. Một điểm khác nhau phổ biến thứ hai là kỷ luật liên quan đến truy cập từ xa vào máy chủ. Một số người muốn vô hiệu hóa quyền truy cập quản trị từ xa hoàn toàn vào máy chủ, để đảm bảo rằng việc bảo trì thủ công không bao giờ xảy ra.

Ghi chú lịch sử

Theo hiểu biết tốt nhất của tôi, thuật ngữ máy chủ bất biến, trực tuyến, đã được phổ biến bởi Kief Morris nhưng bản thân ý tưởng này đã cũ hơn nhiều. Vào năm 1999, các nhà tù FreeBSD đã phổ biến ý tưởng tự động hóa hoàn toàn cấu hình của các môi trường máy tính dùng một lần, đây là cách tôi bắt đầu thực hiện mô hình máy chủ bất biến của cải cách đây nhiều năm trước khi tôi nghe tên này để mô tả kỹ thuật này.

Tính bất biến, trong vỏ bọc của tính bất biến vật lý dựa trên CD-ROMS, cũng là một biện pháp phổ biến để sản xuất các hệ thống máy tính đáng tin cậy. Điều này không bị nhầm lẫn với mẫu máy chủ bất biến.


1 Nếu chúng ta không tính các máy dệt tự động hoặc các cơ quan lăn như máy tính.


1
Wow, một lời giải thích thú vị khác, merci! Bây giờ tôi thực sự gặp rắc rối khi quyết định xem câu trả lời nào được chấp nhận (hãy kiên nhẫn với điều đó, và xin vui lòng biết rằng tôi chỉ có thể đánh dấu 1 ở mức tối đa, mặc dù tại thời điểm này tôi không quyết định chọn câu trả lời nào .. .).
Pierre.Vriens

1
Avec plaisir! - Tôi nghĩ rằng nên chờ vài ngày để chấp nhận câu trả lời, điều này làm tăng cơ hội người dùng viết nhiều câu trả lời hơn.
Michael Le Barbier Grünewald

9

Các máy chủ không thay đổi là các máy chủ không có thay đổi nào có thể được thực hiện (ngoài các bản cập nhật và bản vá bảo mật lý tưởng). Thay vì thay đổi phần mềm trên máy chủ, bạn sẽ tạo một máy chủ mới với phần mềm mong muốn và sau đó chấm dứt phần mềm cũ hơn.

Khái niệm này giúp đảm bảo rằng bài kiểm tra, phát triển và máy chủ QA của bạn hoàn toàn giống nhau, điều này rất quan trọng vì nhiều lý do nằm ngoài phạm vi của câu hỏi này. Một lợi ích khác của các máy chủ bất biến là khả năng khôi phục ứng dụng trên một máy chủ cũ hơn. Ví dụ: tôi cần thay đổi K trên máy chủ sản xuất 1, vì vậy tôi đã mở máy chủ 2 và thay đổi K. Bây giờ sau 10 phút, tôi nhận thấy rằng K đã phá vỡ một cái gì đó với ứng dụng của tôi, thay vì phải sửa nó ngay lập tức có thể mất hàng giờ và có khả năng gây ra thời gian chết cho khách hàng của tôi, tôi chuyển hướng lưu lượng truy cập trở lại máy chủ 1, trong khi tôi tìm ra điều gì không ổn với 2.


Hừm, thú vị ... Tôi cần một chút thời gian để tiếp tục tiêu hóa điều này ... Biết câu nói như "1 câu trả lời cho một câu hỏi kích hoạt 10 câu hỏi mới?" ...
Pierre.Vriens

1
Việc thực hành để nhanh chóng "rollback" thường được gọi là "Triển khai xanh / xanh" (cũng là đỏ / đen, tùy thuộc vào việc ai thực hiện cuộc gọi).
Evgeny

@Evgeny và tệ hơn cả, cũng có thể được đặt tên là triển khai A / B, phù hợp với các thử nghiệm A / B. (và thậm chí tệ hơn, khi loại triển khai này, nhiều phiên bản của cùng một ứng dụng, trực tiếp thực hiện các thử nghiệm A / B thay vì các cờ tính năng)
Tensibai

Tôi luôn được thông báo rằng Triển khai xanh / xanh là để triển khai bản cập nhật cho ứng dụng hiện có, KHÔNG phải bản thân máy chủ. @Evgeny
Rùa

Vâng. Bạn có thể trao đổi máy chủ, thùng chứa, ứng dụng và không có gì và vẫn gọi nó là Blue / Green . Tôi nghĩ rằng nó xứng đáng được hỏi đáp ở đây. Chỉ muốn chỉ ra rằng cách bạn giải thích rollback trong câu trả lời của bạn thường được gọi là B / G.
Evgeny

6

Có thể tìm thấy lời giải thích tốt nhất (như mọi khi) trên bài viết bliki của Martin Fowler về Máy chủ bất biến .

Một máy chủ, có thể là phần cứng hoặc máy chủ ảo trên đám mây, thường có hệ điều hành và ứng dụng chạy trên nó.

Thông thường ứng dụng và các thành phần của hệ điều hành, yêu cầu cấu hình và yêu cầu thay đổi để được áp dụng. Ví dụ: bản vá bảo mật, triển khai các phiên bản mới của ứng dụng và thay đổi cấu hình.

Khi bạn cho rằng bất kỳ thay đổi nào là đột biến ở trạng thái của máy chủ, thuật ngữ này immutablebắt đầu có ý nghĩa hơn. Nó có nghĩa là không có đột biến được cho phép trên một máy chủ như vậy.

Thông thường, khi mọi người tham gia vào việc thay đổi trạng thái của máy chủ - có thể là triển khai phiên bản hoặc thay đổi cấu hình hoặc đường dẫn bảo mật. Kết quả là một máy chủ không còn hoạt động như mong đợi. Ví dụ: ứng dụng có thể không chạy ngay bây giờ do cấu hình sai, v.v.

Đây là lý do tại sao một thực hành để tạo các máy chủ bất biến được thiết lập. Với sự bất biến các máy chủ , hình ảnh của một máy chủ được tạo với tất cả các cấu hình, bản vá, phiên bản ứng dụng được đóng gói. Sau đó, hình ảnh máy chủ đó có thể được sử dụng để tạo máy chủ trong các môi trường khác nhau.

Môi trường đầu tiên mà một sử dụng hình ảnh sẽ là môi trường mà hình ảnh có thể được kiểm tra để hoạt động. Bất kỳ sự bất thường nào cũng được phát hiện và chỉ sau đó một hình ảnh như vậy mới có thể được quảng bá đến môi trường sản xuất để thay thế các máy chủ ở đó bằng phiên bản mới (được biết là hoạt động tốt).

Khi quá trình tạo hình ảnh và quảng bá hình ảnh được tự động hóa, bạn sẽ nhận được một quy trình chống thất bại rất ít liên quan đến nỗ lực của con người và cơ hội rất thấp để đưa thất bại vào dịch vụ của bạn.

Thông thường các máy chủ bất biến thậm chí không bao gồm bất kỳ cách nào để "nhập" chúng, chẳng hạn như máy chủ ssh bị thiếu. Trong trường hợp này, thông thường tất cả các phép đo của máy chủ (số liệu, nhật ký) được chuyển đến các hệ thống bên ngoài như cơ sở dữ liệu số liệu hoặc dịch vụ tổng hợp nhật ký.

Với các thùng chứa (xem: Docker ) cũng có một quy trình để tạo hình ảnh, và sau đó sinh ra chúng vào các container đang chạy. Chúng thường được thay thế bởi các container mới dựa trên hình ảnh được cập nhật và không bao giờ bị thay đổi. Có nghĩa là không có con người đi vào container để "sửa chữa một cái gì đó" bằng cách giới thiệu một sự thay đổi.


Giải thích thú vị, có thể bạn muốn thay đổi nó một chút, nếu bạn có thể, và nếu nó có ý nghĩa, để giải thích một cái gì đó mà tôi tin là có liên quan, bằng cách nào đó, "xả" một hệ thống. Điều tôi nghĩ là bạn cho phép (ít nhiều) bất kỳ ai "chơi" với thứ gì đó, và cảnh báo họ trả trước rằng (ví dụ) mỗi đêm có một số loại đặt lại về trạng thái ban đầu. Có vẻ như đầu vào cho thiết lập lại như vậy là ... euh ... tôi sẽ nói gì ... đúng: một thứ không thể thay đổi có thể được sử dụng cho nó.
Pierre.Vriens

2
Chạy một dịch vụ đưa máy chủ trở về trạng thái đã biết (chẳng hạn như Đầu bếp / Con rối / Ansible / vv ...), chỉ có nghĩa là bạn không sử dụng máy chủ bất biến. vi.wikipedia.org/wiki/Promise_theory là tuyệt vời, nhưng martinfowler.com/bliki/ImmutableServer.html thậm chí còn tốt hơn.
Evgeny

Bạn đang trêu chọc tôi Tôi tin, hoặc nó khá là "thách thức tôi" (để cố gắng khám phá giới hạn câu hỏi hàng ngày). Có phải ở đâu đó cũng có một quy tắc SE nói rằng "bạn chỉ có thể hỏi 50 câu hỏi trong 30 ngày"?
Pierre.Vriens

0

Hãy bắt đầu với nghịch đảo, máy chủ có thể thay đổi là gì?

Theo truyền thống, một cơ sở hạ tầng máy chủ có thể thay đổi là một cơ sở hạ tầng liên tục được sửa đổi và cập nhật tại chỗ. Bạn có thể bảo mật shell vào nó, nâng cấp các gói, cấu hình nó, cài đặt dịch vụ và triển khai mã mới cho nó. Đây là những gì làm cho nó có thể thay đổi, bạn có thể thay đổi hoặc sửa đổi nó.

Cơ sở hạ tầng bất biến là một mô hình cơ sở hạ tầng khác, trong đó các máy chủ không bao giờ được sửa đổi sau khi chúng được triển khai. Nếu một cái gì đó cần được cập nhật, sửa chữa hoặc sửa đổi theo bất kỳ cách nào, các máy chủ mới được xây dựng từ một hình ảnh chung với các thay đổi phù hợp được cung cấp để thay thế những cái cũ. Sau khi được xác thực, chúng được đưa vào sử dụng và những cái cũ đã ngừng hoạt động.

Tại sao chúng được sử dụng? Lợi ích của cơ sở hạ tầng không thay đổi là tính nhất quán và độ tin cậy cao hơn trong cơ sở hạ tầng của bạn và quy trình triển khai đơn giản hơn, dễ dự đoán hơn và nó giảm thiểu các sự cố máy chủ phổ biến trong cơ sở hạ tầng có thể thay đổi, chẳng hạn như ngừng hoạt động do sự cố máy chủ hoặc bất cứ điều gì.

Nhưng bạn phải biết cách cung cấp nó hiệu quả thông qua tự động triển khai toàn diện và cung cấp máy chủ nhanh.

Hãy tưởng tượng bạn đang khai thác bitcoin, bạn sẽ không muốn bất kỳ thời gian chết nào nếu máy chủ của bạn gặp sự cố, bạn sẽ cần sao lưu nhanh nhất có thể, vì vậy một cơ sở hạ tầng không thay đổi được coi là giải pháp.

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.