Thực tiễn tốt nhất để xử lý số lượng lớn tệp cấu hình / thuộc tính có cấu trúc


15

Hãy tưởng tượng một hệ thống có số lượng lớn máy chủ. Mỗi người trong số họ có một số cài đặt:

  • Một số cụ thể cho máy chủ
  • Một số cụ thể cho khu vực
  • Một số phổ biến trên tất cả chúng
  • Có lẽ bạn có thể có một số nhóm tùy chỉnh, như nhóm máy chủ này chỉ để đọc
  • Vân vân.

Thực tế hiện tại tôi có trong đầu là một cấu trúc tài sản đơn giản với khả năng vượt trội.

Hãy lấy máy chủ của Google cho mục đích của ví dụ. Mỗi người trong số họ có một danh sách các cài đặt để tải.

Ví dụ: máy chủ Luân Đôn có thể có:

rootsettings.properties, europesettings.properties, londonsettings.properties, searchengine.properties,, Vv

Trong đó mỗi tệp chứa một tập các thuộc tính và trình tự tải cho phép bạn ghi đè các thuộc tính, bạn càng đi xa hơn.

Ví dụ: rootsettings.propertiescó thể có accessible=falsemặc định, nhưng được ghi đè searchengine.propertiesbằngaccessible=true


Vấn đề tôi gặp phải với cấu trúc này là rất dễ thoát khỏi tầm kiểm soát. Nó hoàn toàn không có cấu trúc, có nghĩa là bạn có thể xác định bất kỳ tài sản nào ở mọi cấp độ và nhiều mặt hàng có thể trở nên lỗi thời.

Hơn nữa, việc thay đổi mức trung bình trở nên bất khả thi khi mạng phát triển, vì hiện tại bạn ảnh hưởng đến một số lượng lớn máy chủ.

Cuối cùng nhưng không kém phần quan trọng, mỗi trường hợp riêng lẻ có thể cần 1 thuộc tính đặc biệt, nghĩa là cây của bạn kết thúc với một cấu hình cho mỗi máy chủ, làm cho nó không phải là giải pháp tối ưu.

Tôi sẽ đánh giá rất cao nếu bạn có bất kỳ đề xuất / ý tưởng nào về kiến ​​trúc quản lý cấu hình tốt hơn.


1
Điều đầu tiên: đăng nhập tất cả các thuộc tính được tải khi khởi động, ít nhất bạn biết giá trị đang được sử dụng.
Walfrat

@Stoyan, bạn đang tìm kiếm phương pháp "cấu hình phần mềm" hay "cấu hình máy chủ"?
Yusubov

Ý tưởng kỳ quặc, mặc dù không hay lắm: có ai đã sử dụng một hệ thống "giống như CSS" cho bất cứ điều gì như thế này chưa? Thay vì (hoặc ngoài) tên tệp được cấu trúc, dữ liệu trong đó là.
dùng949300

Tôi xây dựng một hệ thống quản lý cấu hình tập trung dựa trên CSS giống như các quy tắc. Nó là miễn phí để sử dụng và nguồn mở. Xem câu trả lời của tôi dưới đây để biết thêm chi tiết.
bikeman868

có vẻ như một cách tiếp cận hợp lý với tôi
dagnelies

Câu trả lời:


5

Tôi nghĩ bạn cần phải tự hỏi mình một số câu hỏi trước, và làm rõ một số điểm, sau đó bạn có thể quyết định tốt hơn cách giải quyết vấn đề của mình.

Đầu tiên: ai sẽ kiểm soát các máy chủ?

  • Có phải là một quản trị viên duy nhất sẽ kiểm soát hàng trăm máy chủ? Sau đó, bạn cần tập trung hóa cấu hình càng nhiều càng tốt.

  • Hoặc là mỗi máy chủ có khả năng dưới sự kiểm soát của một quản trị viên riêng lẻ, những người không muốn các cài đặt của mình bị ghi đè hoặc kiểm soát bởi một cấu hình tập trung? Sau đó, bạn nên tập trung vào cấu hình phi tập trung. Nếu mỗi quản trị viên có một số ít máy chủ để quản lý tối đa, thì điều này vẫn có thể quản lý được bằng tay.

Thứ hai: bạn có thực sự cần hàng tấn tùy chọn cấu hình, hoặc bạn có thể giữ số lượng xuống một vài? Thay vì làm cho tất cả và mọi thứ có thể cấu hình "chỉ trong trường hợp", tốt hơn bạn nên tự giới hạn bản thân trong các tùy chọn mà bạn biết hệ thống của mình thực sự cần. Điều này có thể được thực hiện, ví dụ, bởi

  • làm cho phần mềm của bạn thông minh hơn một chút (ví dụ, chương trình có thể tự động xác định điều gì bằng cách hỏi môi trường)?

  • tuân theo "quy ước về cấu hình" một cách cứng nhắc - ví dụ, bằng cách thiết lập các quy ước đặt tên nhất định hoặc bằng cách lấy một số tùy chọn làm mặc định từ các tùy chọn khác

Thứ ba: bạn có thực sự muốn một mức cấu hình phân cấp được mã hóa cứng vào phần mềm không? Hãy tưởng tượng bạn không biết trước sẽ có bao nhiêu máy chủ, nếu một hệ thống phân cấp giống như cây thực sự là cấu trúc tốt nhất cho chúng, hoặc cây cần bao nhiêu cấp. Giải pháp đơn giản nhất tôi có thể nghĩ đến là không cung cấp cấu hình tập trung nào cả, chỉ có một tệp cấu hình cho mỗi máy chủ và để quản trị viên máy chủ có trách nhiệm tự quyết định cách họ giải quyết vấn đề quản lý cấu hình của nhiều máy chủ.

Ví dụ: quản trị viên có thể viết các tập lệnh trình tạo phân phối tệp cấu hình trung tâm cho một nhóm các máy chủ khác nhau và thực hiện một số sửa đổi nhỏ cho mỗi bản sao. Bằng cách đó, bạn không phải đưa ra bất kỳ giả định nào về "cấu trúc liên kết phân phối máy chủ" trước đó, cấu trúc liên kết có thể được điều chỉnh bất cứ lúc nào theo yêu cầu của thế giới thực. Hạn chế là, bạn cần có quản trị viên với một số kiến ​​thức về cách viết tập lệnh bằng ngôn ngữ như Perl, Python, Bash hoặc Powershell.


Mặc dù điều này không cung cấp giải pháp trực tiếp, nhưng nó có ý nghĩa nhất là làm thế nào để xử lý một tình huống đã trở nên tồi tệ. Đặc biệt là làm cho phần mềm của bạn thông minh hơn một chút.
SDekov

2

Cá nhân tôi không bao giờ thích kế thừa tập tin cấu hình. Bạn đề cập đến việc có một chuỗi tải, không chắc chắn làm thế nào được xác định hoặc dẫn xuất. Có lẽ nó giúp làm cho trình tự rõ ràng bằng cách phản chiếu nó trong cấu trúc thư mục mà bạn đặt các tệp vào hoặc đưa nó vào tên tệp.

rootsettings.properties
rootsettings.eurosettings.properties
rootsettings.eurosettings.londonsettings.properties

Điều này sẽ phần nào hoạt động đến một điểm mà bạn có tổng hợp các giá trị cấu hình không phù hợp với một khu vực. Vì vậy, bạn cần phải quan tâm đến trục tổ chức bạn chọn.

Điều tôi thích hơn là tách biệt các giá trị cấu hình thành các tệp riêng của chúng và có tệp cấu hình (lá) trỏ đến một.

Một ví dụ:

bigcity.searchsettings.properties
regional.searchsettings.properties

Bên trong londonsettings.propertiesbạn có thể có một giá trị như:

searchsettings:bigcity.searchsettings.properties

Điều này cho phép nhiều mức độ tự do hơn hoặc một mức độ bổ sung.


2

Tôi đã có cùng một vấn đề và mở nguồn giải pháp của tôi. Bạn có thể tìm mã nguồn tại đây https://github.com/Bikeman868/Urchin

Tôi sử dụng nó cho một hệ thống lớn có nhiều máy chủ, với nhiều ứng dụng trên mỗi máy chủ và nhiều môi trường. Nó bao gồm một giao diện người dùng được viết bằng tiếng Anh để quản lý cấu hình.

Bạn có thể liên hệ trực tiếp với tôi nếu bạn cần giúp đỡ để lên khỏi mặt đất.

Giải pháp tôi thực hiện là các quy tắc dựa. Bạn thường bắt đầu với một quy tắc áp dụng cho tất cả các cấu hình, sau đó thêm bạn có thể thêm các quy tắc như "tất cả các máy trong môi trường này tạo tệp nhật ký cho đường dẫn UNC này". Các quy tắc có thể được cụ thể cho một môi trường, một ứng dụng, một máy hoặc một thể hiện của một ứng dụng. Các quy tắc cũng có thể cụ thể hơn, vì chỉ trong trường hợp cụ thể của ứng dụng này chạy trên máy chủ cụ thể này.

Các quy tắc được áp dụng theo thứ tự ít cụ thể nhất cho cụ thể nhất và các quy tắc sau này có thể ghi đè các giá trị được chỉ định trong các quy tắc trước đó. Điều này có nghĩa là ví dụ bạn có thể tạo quy tắc áp dụng cho một ứng dụng cụ thể, sau đó ghi đè lên nó bằng một giá trị khác cho một máy cụ thể hoặc một phiên bản cụ thể của ứng dụng, v.v.

Máy chủ có giao diện REST + JSON, do đó hoạt động với hầu hết các hệ thống phát triển và cũng có thư viện máy khách thuận tiện cho các ứng dụng .Net.


1

Những loại cài đặt này là một cơn ác mộng để quản lý. Tốt nhất nên thử và giảm chúng càng nhiều càng tốt bằng cách để các thành phần phần mềm của bạn xử lý tất cả các trường hợp.

tức là thay vì thiết lập máy chủ api cho một vùng, hãy chuyển vùng đó bằng lệnh gọi api và để một thiết lập máy chủ duy nhất xử lý tất cả các vùng.

Tuy nhiên, do bạn đang ở trong trạng thái bạn đang ở. Tôi sẽ khuyên bạn không nên thiết lập một hệ thống để tạo cài đặt cấu hình. Nó chỉ thêm sự phức tạp cho một vấn đề đã phức tạp.

Thay vào đó, hãy cài đặt được lưu trữ trong công cụ triển khai của bạn cho mỗi loại máy chủ. (cài đặt triển khai bạch tuộc, viết lại tập tin teamcity, v.v.) Điều này cho phép bạn chắc chắn rằng bạn đang triển khai các cài đặt cấu hình giống như lần trước khi nâng cấp phần mềm và cung cấp cho bạn quyền kiểm soát chi tiết đối với các thay đổi.

Bạn không muốn ở trong tình huống bạn thực hiện thay đổi tệp meta-config của mình và sau đó phải kiểm tra tệp cấu hình nào tạo ra trong các vùng / máy chủ / nhóm tùy chỉnh khác nhau của bạn


0

Không có nghiên cứu; tất cả ý kiến ​​cá nhân, hơn 30 kinh nghiệm CNTT. Âm thanh giống như một cấu trúc dữ liệu phức tạp, có thể thay đổi / sửa đổi nhanh chóng, với số lượng lớn người dùng.

Xem xét kho lưu trữ cơ sở dữ liệu (ví dụ.SQL) để cấu trúc dữ liệu, với các quy trình trích xuất tùy chỉnh tạo ra các tệp cấu hình riêng cho từng người dùng. Bạn có thể sử dụng truy vấn của cơ sở dữ liệu để xác định tác động của thay đổi trước khi thực hiện; tìm sự xuất hiện trùng lặp, vv .. Các tệp phẳng riêng lẻ là một phần của vấn đề. Ngoài ra, bạn có thể nhận được nhật ký thay đổi và hỗ trợ phục hồi / xây dựng lại. Với kiểm soát cơ sở dữ liệu, bạn có thể loại bỏ vấn đề kế thừa cấu hình. Loại giải pháp đó sẽ yêu cầu cấu trúc cơ sở dữ liệu bổ sung. Cấu trúc khóa tổng hợp chính xác là rất quan trọng.

Đó là đề nghị của tôi.

Bạn có thể xem xét một số hệ thống kiểm soát và bảo mật hệ thống nhà cung cấp rất đắt tiền thực hiện loại dịch vụ này. Hãy xem xét chúng. Nói chung họ sẽ phụ thuộc vào môi trườ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.