iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
0
Software Development

後端攻城獅的實戰筆記系列 第 9

設定檔與日誌這件小事 上

  • 分享至 

  • twitterImage
  •  

前言

我想起這輩子第一次寫程式的時候,直接 hard code 在 .java 裡面,後來進步一點,寫了一個 Param.java 裡面全部放參數,哈哈。

然後 log 也只會 System.out.println("..."),如果有人跟我一樣不要害羞快舉手 XD

其實這兩個本來真的是小事,但他的複雜度隨著現在主流架構的改變上升不少。

那接下來我們分兩個部分來探討這兩個主題,如果你是高手請給我一點指導,如果你是小朋友希望可以指導到你。

今天是上集,我們先來講設定檔。

Source of Configuration

  • Hard Code
會不會有人看到J葛就驚呆了,其實如果極少變動的參數或者是核心參數,寫死在原始碼的確是一個作法。
  • Program Arguments
就是透過執行主程式時後面帶進去的參數,許多語言都有這種設計。
  • VM Arguments
傳說中的-D參數,Java 是用 System.getProperty("xxx") 來拿。
  • Environment Variable
環境變數,這個也是多語言通用,通常會跟部屬綁在一起,屆此控制一些相依環境的部份。
  • URL
短短一個字,代表的來源倒是挺多的。
無論是 classpath 裡頭的檔案,作業系統內絕對路徑或是相對路徑,甚至網路上的資源,可以用URL表示的都算。
  • VCS
版本控管,這個要說的簡單或是要說的難都可以,我們講最簡單的作法。
基本上可以跟上面的 URL 搭配,就是你把設定檔放在 GitHub or GitLab 上透過 URL 去存取。
那這樣你就會得到版控的好處。
  • Microservice Config
Config Server
像是 Spring Config 這種把 Config 管理也當成一個微服務模組在管的。

K8s Config
這個可能就比較少人碰到,有玩 K8s 的人才知道,就是 K8s 叢集內有一個元件是在管這個設定檔的,如果你的應用程式部屬在那上面就能透過 API 吃到。

Format of Configuration

  • Properties, 最基本的 key/value pair,但沒辦法弄出階層
  • JSON, J葛我還需要解釋他嗎 XD
  • HOCON, json的超集合,很酷,加了一些 Coding 特性上去,有興趣的 Google 大神一下。
  • YAML, 關於這個我是覺得畢竟 JSON 不是設計來設置參數的,這個真的輕薄簡潔許多。
  • TOML, 關於這個我是覺得人是很賤的 (大誤),上面那個輕薄短小不滿意就有人想要再變得更強大一點,噗。

special issue

經典的一個案例,我們參考 Spring 設定檔就好,看看那精美的層級,看看那優美的順序,你是不是想要回頭了阿。
來源神多,而且可以一層層按照優先序覆蓋過去,雖然複雜度上升了,可是彈性真的hen高。
  • hot reload
想想一個情境,如果我線上更改 config,我的應用程式能不能吃到這個更新後的值?當然這要細部探討還要分的更細,跟當初系統設計時也有關係。
但主流的 Config 框架多半都有提供一些手法來做這件事。
  • versioning
我進版我又退版,打我阿笨蛋 (方唐鏡表示:)。就是說設定檔也要有版控R,做錯了能舊,還能查歷史抓兇手呢 (笑)

Solution

先來澄清一下,沒被提到絕對是小弟我太孤陋寡聞,不是你們不有名R (照樣毆飛),我這邊稍微帶一下我用過或是我喜歡的東東,有興趣的大家也能蕉流蕉流。

其實現在成熟的設定檔函式庫已經很多了,除了我大春天原生的之外,以前寫 Scala 的時候用過 Typesafe 出的 Config,另外 cfg4j 也是功能蠻強的。

那如果是在分散式環境下面用的設定檔這邊也能寫舉幾個,例如:ZooKeeper, Etcd, Spring Config, Central Dogma, K8s Config, ...

好的上集先這樣,下集來講日誌 (揮手掰掰)


About Me

Jian-Min Huang

wide range skill set backend engineer

Research, Architecture, Coding, DB, Ops, Infra.

mainly write Java but also ❤️ Scala, Kotlin and Go

http://github.jianminhuang.cc

http://linkedin.jianminhuang.cc

http://note.jianminhuang.cc

yfr.huang@hotmail.com


上一篇
在這個春天變成顯學的時代 下
下一篇
設定檔與日誌這件小事 下
系列文
後端攻城獅的實戰筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言