知识 - 各类配置文件特点及优缺点

各种配置文件格式以及优缺点介绍。

概念

INI (Initialization)

  • 简介:INI是最传统的配置文件格式之一,常用于Windows系统的配置文件。
  • 特点
    • 简单直观,容易阅读和编辑。
    • 使用 [section] 来定义区块。
    • 主要支持字符串、整数、浮点数等基础数据类型。
    • 不支持复杂的嵌套结构。
    • 适用于简单的配置需求。
[database]
user=admin
password=secret
server=localhost
port=3306
1
2
3
4
5

TOML (Tom's Obvious, Minimal Language)

  • 简介:TOML是一种现代的配置文件格式,旨在解决JSON的一些不足之处。
  • 特点
    • 易于阅读和编写。
    • 支持多种数据类型,如数组、日期时间等。
    • 使用 [table] 来定义区块。
    • 支持嵌套结构。
    • 在Rust等现代编程语言的项目中较为流行。
[database]
user = "admin"
password = "secret"
server = "localhost"
port = 3306
1
2
3
4
5

INI和TOML形式上的相似点和区别

虽然INI和TOML在表面上看起来有些相似,因为它们都使用了区块(section/table)的概念来组织配置信息,但是它们之间还是存在一些重要的区别。

形式上的相似点

  • 区块标识:两者都使用方括号来标识区块的开始,例如 [database]
  • 键值对:两者都支持键值对的形式来表示配置项。

区别

数据类型支持

  • INI

    • 主要支持字符串、整数和浮点数。
    • 不支持数组或更复杂的数据类型
  • TOML

    • 支持更多类型的数据,包括数组、表(table/array of tables)、布尔值、日期时间等。
    • 支持嵌套结构,例如可以在表内再定义表。

语法上的差异

  • INI

    • 键值对通常写成 key=valuekey: value
    • 不支持注释行内的语法。
  • TOML

    • 键值对写法为 key = value
    • 支持行内注释,例如 # 这是一个注释
    • 支持数组,例如 users = ["Alice", "Bob"]
    • 支持嵌套表,例如:
      [database.settings]
      host = "localhost"
      port = 3306
      
      1
      2
      3

示例对比

INI 示例

[database]
user=admin
password=secret
server=localhost
port=3306
1
2
3
4
5
[database]
user = "admin"
password = "secret"
server = "localhost"
port = 3306

[database.settings]
host = "localhost"
timeout = 30 # 秒
1
2
3
4
5
6
7
8
9

YAML (YAML Ain't Markup Language)

  • 简介:YAML是一种常用的数据序列化格式,旨在以人类友好的方式表示数据。
  • 特点
    • 高度可读,使用缩进表示层级关系。
    • 支持复杂的数据类型,如字典、列表等。
    • 支持注释,方便理解。
    • 常用于配置文件、数据交换和API文档。
    • 学习曲线可能较高。
database:
  user: admin
  password: secret
  server: localhost
  port: 3306
1
2
3
4
5

JSON (JavaScript Object Notation)

  • 简介:JSON是一种轻量级的数据交换格式,基于JavaScript的一个子集。
  • 特点
    • 结构清晰,易于机器生成和解析。
    • 支持基本的数据类型(字符串、数字、布尔值、数组、对象)。
    • 不支持注释。
    • 在Web应用程序中非常流行,可以直接在JavaScript中使用。
    • 解析速度快。
{
  "database": {
    "user": "admin",
    "password": "secret",
    "server": "localhost",
    "port": 3306
  }
}
1
2
3
4
5
6
7
8

XML (eXtensible Markup Language)

  • 简介:XML是一种标记语言,用于结构化文档和数据交换。
  • 特点
    • 使用标签来定义元素和属性。
    • 支持复杂的嵌套结构和命名空间。
    • 支持DTD和Schema进行数据校验。
    • 适用于标准化的数据交换场景。
    • 解析速度相对较慢,文件体积较大。
<database>
  <user>admin</user>
  <password>secret</password>
  <server>localhost</server>
  <port>3306</port>
</database>
1
2
3
4
5
6

各类配置文件对比

特性/格式 INI TOML YAML JSON XML
可读性 简单直观 清晰,易读 高度可读,自然语言风格 清晰,结构明确 可读,但标记较多
注释支持 支持(;# 支持(# 支持(#<!-- --> 不支持 支持(<!-- -->
数据类型 字符串,整数,浮点数 字符串,整数,浮点数,布尔值,数组,表,日期时间 各种数据类型,包括字典,列表 字符串,整数,浮点数,布尔值,数组,对象 各种数据类型,通过元素和属性表达
层次结构 使用 [section] 组织 使用 [table] 组织 使用缩进表示嵌套 使用 {}[] 表示嵌套 使用嵌套标签表示层次
解析速度 较快 较慢 较慢
工具支持 广泛支持 支持度在增长 广泛支持 广泛支持 广泛支持
应用场景 简单配置文件 中等复杂度配置文件,偏好Rust语言生态系统 复杂配置文件,API文档 数据交换,Web API 标准化文档,复杂数据交换
错误检测 有限 有限 依赖于解析器 依赖于解析器 依赖于解析器,支持模式验证
国际化支持 有限 有限 良好 良好 优秀
扩展性 有限 良好 优秀 良好 优秀

裸机服务器

裸机服务器是专用于单个客户端(租户)的物理托管设备。通常设置在本地或第三方数据中心(租用或通过托管),裸机服务器可以处理比任何其他托管解决方案更多的数据,因为用户可以独占使用所有计算资源,包括:

  • 中央处理器
  • 内存
  • 磁盘空间
  • 带宽

除了完全专用的计算资源外,公司选择裸机服务器的其他主要原因是:

  • 高水平的处理能力。
  • 每秒一致的输入/输出操作 (IOPS)。
  • 数据隐私性很高(单用户)。
  • 完全控制服务器的硬件和软件堆栈。
  • 可预测的计费。

如果应用程序对性能很敏感,且希望将数据存储在单租户设备上,那么裸机的优势将难以匹敌。

虚拟机 (VM) 服务器

VM 服务器是基于软件的托管设置,可在单个设备内的多租户环境中运行。将机器拆分为单独的 VM 需要服务器虚拟化,该过程使设备能够托管多个系统,同时共享相同的物理资源(磁盘空间、RAM 和 CPU)。

数据中心使用管理程序创建共享资源服务器。管理程序将服务器分成不同的单元,这些单元依赖于相同的组件,但具有独立的操作系统、应用程序和网络。

大多数选择 VM 服务器而不是其他托管解决方案的公司,选择原因如下:

  • 快速简单的部署,便于弹性拓展。
    • 高频使用时,动态新增服务器数量;流量低时,动态减少服务器数量。
  • 通过现收现付模式控制和优化成本的能力。
  • 几乎没有硬件相关的服务器管理,没有硬件的维护成本。
  • 快速可靠的快照和备份。

VM 服务器是动态工作负载和非任务关键型应用程序的理想选择,这些应用程序优先考虑灵活性而不是始终如一的高性能。

裸机与 VM 服务器 对比

下表提供了裸机和 VM 服务器之间主要区别的概述:

比较点 裸机服务器 虚拟机服务器
主要卖点 一致的性能和完整的数据隐私 近乎即时的可扩展性和成本优化选项
硬件奉献 所有服务器资源(CPU、RAM、内存、带宽)都属于单个用户 租户托管在同一设备上并共享服务器资源
性能能力 始终如一的高性能 由于多个租户,性能不太一致
自定义选项 租户在设置硬件和软件时拥有完全的自由 由于服务器的共享特性,更少的软件定制选项
部署时间 设置新服务器需要时间(租用设备需要几个小时,本地服务器需要几天) 新部署只需几分钟
硬件维护 没有托管服务的复杂系统 无需硬件维护
可扩展性 扩大或缩小本地服务器需要数月,租用设备需要数小时 近乎即时的按需可扩展性(向上和向下)
容量优化 有限容量优化 通过负载平衡实现高级容量优化
安全 定制选项和单一租户确保安全的 IT 平台 其他租户可能会引起安全和隐私问题
系统恢复 从中型灾难中恢复可能需要数小时甚至数天 从灾难中恢复发生在几分钟内
服务器可移植性 移动物理服务器是一项复杂而漫长的任务 您可以轻松地将 VM 跨虚拟环境或从一台物理服务器移动到另一台
典型计费方式(租用服务器) 可预测的(通常是每月)账单 根据使用资源量收费
现场费用 硬件和空间的前期成本高(但无需购买许可) 较小的硬件成本但昂贵的 VM 软件许可证

下面详细介绍裸机和 VM 服务器之间的主要区别。

专用资源

资源专用是裸机和 VM 服务器之间最显着的区别:

  • 裸机服务器使用户能够依赖整个硬件设置。
  • VM 服务器要求您与其他租户共享资源。

专用资源的好处是巨大的,使裸机服务器的用户能够消除以下风险:

  • 网络拥塞。
  • 由于另一个租户的活动占用了资源,服务器响应时间变慢。
  • 在交通高峰时段加载时间很短。
  • 更频繁的停机。

虽然信誉良好的虚拟机提供商不会经常遇到这些问题,但如果您使用多租户服务器,遇到这些问题的机会要高得多。

表现

由于裸机服务器将所有资源专用于单个用户,因此这些托管设备提供比同类虚拟服务器更一致和更好的性能。

VM 解决方案性能较差的主要原因有两个:

  • 管理程序导致的延迟
    • 安装和运行管理程序会在服务器资源上产生 5% 到 10% 的自动开销。
    • 依赖虚拟服务器时,轻微的延迟和数据包延迟很常见。
  • 吵闹的邻居
    • 如果 VM 服务器中的另一个租户运行资源密集型应用程序,那么无论您在服务器上托管什么,都会看到性能下降。
    • 嘈杂的邻居因素会导致资源瓶颈,从而导致所有 VM 用户的性能损失 20% 到 30%。

虽然裸机服务器比同类虚拟机更强大,但一些企业发现虚拟机服务器的灵活性比物理服务器的性能提升更有价值。但是,如果始终如一的高性能是决定因素,那么裸机是更好的选择。

自定义选项

裸机服务器使用户能够从头开始构建设置并选择设备中的每个组件。除了硬件资源,用户还可以选择首选:

  • 操作系统。
  • 应用。
  • 工具和附加组件。
  • 资源控制系统。
  • 安全和数据备份措施。

裸机服务器的大量定制使您能够配置设备以满足您的特定操作需求。另一方面,VM 服务器在该部门有限制。

虽然您可以根据资源和特定操作系统自定义 VM,但用户在选择服务器允许的工具和安全措施时通常选择有限。

VM 服务器是为许多用例量身定制的多租户设备,因此提供商通常不会完全自由地设置自定义环境。

部署

部署新的裸机服务器比启动新 VM 需要更多时间。

  • 裸机服务器需要仔细规划并充分了解用户的需求,再进行设置。如果有特殊需求,时间将被延长。(通常几小时到几天时间不等)

部署 VM 服务器只需几分钟。选择配置后,启动新 VM 几乎是即时创建,马上投入使用。

  • 部署速度快
  • 可移植性强,能够快速进行环境切换