Tôi nên đặt cấu hình ứng dụng của mình ở đâu?


17

Gần đây tôi đã đọc một cuộc tranh luận về "Các tài sản nên phụ thuộc vào môi trường nên được lưu trữ ở đâu? ".

Cách cổ điển là có nhiều tệp thuộc tính, từng tệp theo môi trường và dựa trên biến môi trường (DEV, SẢN PHẨM ...), bạn chọn nơi đọc chúng khi bắt đầu ứng dụng (như với cấu hình Spring).

Mặt khác, nếu bạn đang sử dụng một thùng chứa để triển khai ứng dụng của mình, có nghĩa là loại cấu hình này phải đến từ chính môi trường (sử dụng các biến môi trường mà ứng dụng đọc), vì vậy hình ảnh không thay đổi giữa các môi trường.

Những ưu và nhược điểm của từng phương pháp là gì? Có cách tiếp cận "tốt nhất" cho kịch bản container không?


Điều gì khiến bạn nghĩ rằng dựa vào một biến môi trường để chọn một tệp không phù hợp với việc sử dụng biến môi trường để hình ảnh không thay đổi? (nhược điểm chính là để lại thông tin xác thực trong các thùng chứa dev và qa nhiều hơn bất cứ thứ gì)
Tensibai

Câu trả lời:


6

Ai nói rằng các tệp thuộc tính và các biến môi trường loại trừ lẫn nhau?

Có một sự khác biệt được đặt ra giữa "nơi tôi lưu cấu hình ứng dụng của mình?" Và " nguồn ứng dụng của tôi cấu hình ở đâu?"

Kết quả rất có thể là mọi người có lẽ chỉ nên tiếp tục làm những gì họ đang làm với các tệp cấu hình như một cơ chế lưu trữ (suy nghĩ lâu dài, trạng thái bền bỉ miễn là môi trường tồn tại).

Tuy nhiên, thay vì bỏ tập tin cấu hình đó vào ngữ cảnh ứng dụng và để nó chạy ứng dụng, bạn chỉ có thể mong đợi các biến đó đã có sẵn trong môi trường khi khởi động.

Điều này có nghĩa là bạn cần có hai luồng công việc triển khai -

  1. Tôi triển khai có thể ứng dụng vào môi trường bằng cách trải qua quá trình kiểm soát thay đổi X và thực hiện đánh giá Y bằng công cụ Z, bất cứ điều gì.
  2. Tôi triển khai cấu hình môi trường của mình vào một môi trường bằng cách trải qua quy trình kiểm soát thay đổi A và thực hiện đánh giá B bằng công cụ C, cùng quy trình, kết quả khác nhau.

Để sử dụng một ví dụ về việc quản lý các biến môi trường dưới dạng cặp Giá trị khóa trong một công cụ như lãnh sự, nếu bạn đang lưu trữ các tệp cấu hình trong git thì các công cụ như git2consul sẽ xử lý việc đưa cấu hình đó vào môi trường khi được cập nhật.

Nếu bạn có một ứng dụng đang mong đợi rằng sẽ có cấu hình có sẵn dưới dạng tệp cấu hình thì bạn có thể tránh vận chuyển nhiều bản sao của tệp cấu hình với ứng dụng bằng cách xây dựng quy trình triển khai với một cái gì đó giống như mẫu lãnh sự có khả năng biến giá trị lãnh sự trở lại vào một tập tin.


0

 Cách chúng tôi làm là chúng tôi có 3 mảnh (hoặc tạo tác) cho mỗi ứng dụng đang chạy.

  1. Ứng dụng chúng tôi đang phát triển. Điều này là giống nhau bất kể môi trường. Để phù hợp với ví dụ của bạn, đó sẽ là ứng dụng Spring dưới dạng jar / war.
  2. Các container sẽ chạy ứng dụng. Điều này là giống nhau bất kể môi trường. Nếu sử dụng Spring Boot, bạn không cần Tomcat nữa và chỉ cần thời gian chạy Java. Vì vậy, sử dụng container Docker openjdk.
  3. Các cấu hình mà ứng dụng cần. Đây là điều duy nhất khác nhau giữa các môi trường. Trong ứng dụng Spring, bạn có thể sẽ sử dụng tệp thuộc tính.

Các tập tin cấu hình sống trong một điều khiển nguồn riêng biệt. Điều này từng là Git, nhưng chúng tôi hiện đang sử dụng SaaS mà chúng tôi đã xây dựng có tên là Config, tại http://www.configapp.com . Tính năng cốt lõi của cấu hình là xử lý dễ dàng cấu hình cụ thể của môi trường. Để chạy ứng dụng của chúng tôi trên một máy chủ mới, chúng tôi kéo bộ chứa Docker, tạo phẩm ứng dụng và tệp cấu hình cho môi trường đó. Trong vùng chứa, chúng tôi gắn thư mục nơi ứng dụng và tệp cấu hình được lưu trữ, như là một phần của vùng chứa. Ứng dụng của chúng tôi là như nhau. Container / hình ảnh của chúng tôi là như nhau. Chỉ có tập tin cấu hình là khác nhau.

Về tập tin cấu hình so với các biến môi trường. Trong thời gian dài nhất, chúng tôi đã sử dụng các tập tin cấu hình. Khi chúng tôi sử dụng PaaS / đám mây, chúng tôi đã sử dụng các biến môi trường. Đó là công việc bổ sung nếu bạn có nhiều cấu hình vì vậy chúng tôi đã kết thúc bằng cách sử dụng các biến môi trường để xác định tệp cấu hình chính xác. Chúng tôi có một ứng dụng biến các thuộc tính thành các biến môi trường, nhưng đó là không điển hình. Nếu chúng tôi có một công ty xử phạt máy chủ cấu hình tập trung, chúng tôi sẽ sử dụng nó, nếu không chúng tôi thích sự đơn giản của các tệp cấu hình.

Vì vậy, để tóm tắt, chúng tôi kéo app.jar, app.properies, openjdk Docker. Sau đó, chúng tôi chạy openjdk Docker gắn vị trí của app.jar và app.properies. Điều duy nhất môi trường cụ thể là app.properies. Để dễ dàng quản lý app.properies, bất kể có bao nhiêu khóa thuộc tính, môi trường, cụm / vùng, chúng tôi sử dụng Cấu hình.

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.