1.基本原理
Swift是一种软件开发架构,其中的组件化是指将一个大型应用程序划分为多个独立的模块(组件),每个模块都有自己的职责和功能。这样的设计使得应用程序的开发和维护更加灵活和可扩展。
在Swift中,组件化可以通过使用模块化的开发方式来实现。每个组件都是一个独立的模块,可以单独开发、测试和发布。这样的设计可以使得团队成员分工明确,并且可以更好地重用代码。
虚拟空间大小通常采用 2 的 n 次幂,便于进行高效的移位操作;然后通过独特的数据结构 Ring (环)再将虚拟节点映射到实际的物理存储设备上,完成寻址过程。
2. 数据一致性模型( Consistency Model )
Swift 是一种安全的,快速的,并且在设计时考虑了可读性的编程语言。然而,Swift 并不是一个数据库,因此它不支持像 MySQL 或 PostgreSQL 那样的关系型数据库事务。
在 Swift 中,事务通常是通过在一系列操作之前获取锁,然后在操作完成后释放这些锁来实现的。然而,这种方式并不能保证“严格一致性”(即 ACID 中的 C - 一致性),因为它依赖于开发者手动管理这些锁。
如果你需要在 Swift 中实现类似于事务的行为,你可能需要使用一个支持事务的库或者框架,例如 Apple 的 Core Data 或者开源的数据库库如 SQLite。
以下是一个使用 SQLite 在 Swift 中实现事务的简单例子:
import SQLite3
func performTransaction(db: OpaquePointer) {
// 开始事务
sqlite3_exec(db, "BEGIN TRANSACTION;", nil, nil, nil)
// 执行 SQL 语句
// ...
// 提交事务
sqlite3_exec(db, "COMMIT TRANSACTION;", nil, nil, nil)
}
// 使用 SQLite
var db: OpaquePointer?
if sqlite3_open(databasePath, &db) != SQLITE_OK {
// 数据库打开失败
sqlite3_close(db)
fatalError("数据库打开失败")
}
// 执行事务
performTransaction(db: db)
// 关闭数据库
sqlite3_close(db)
在这个例子中,sqlite3_exec
用于执行 SQL 命令。BEGIN TRANSACTION;
开启一个新的事务,而 COMMIT TRANSACTION;
提交之前的更改。如果在事务过程中发生错误,你可以使用 ROLLBACK TRANSACTION;
来回滚所有更改。
请注意,这个例子没有包含错误处理,实际应用中你应该检查每个 SQLite 调用的返回值,并适当处理可能的错误。
注意:wift 放弃严格一致性(满足 ACID 事务级别),而采用最终一致性模型 ]Eventual
Consistency( 最终一致性 )] ,来达到高可用性和无限水平扩展能力。为了实现这一目标, Swift 采用Quorum 仲裁协议 (Quorum 有法定投票人数的含义 ) :
a.强一致性: R+W>N 适合大量写少量读场景下的强一致性
b.弱一致性: R+W<=N 适合对一致性要求比较低的场景
c.折中: W >N/2 即 R+W>N
3.环的数据结构
环是为了将虚拟节点(分区)映射到一组物理存储设备上,并提供一定的冗余度而设计的,其数据结构主要由三个顶层域构成,分别是1:
- 设备列表(List of Devices) 。设备列表在Ring类内部被称为devs,表示集群中设备的列表,其中记录了设备的位置信息,包括设备名称、设备ID、IP地址、端口号、权重、区域和分区等。
- 分区指派列表(Partition Assignment List) 。用于存放每个副本与设备间的映射关系,在Ring类内部被称为_replica2part2dev_id。
- 分区移位值(Partition Shift Value) 。表示计算数据hash的移位量。
4.swift 组件
swift 包含Proxy Server、Object Server、Container Server、Account Server、Replicator、Auditor和Updater这些组件。
Swift是OpenStack的一个核心组件,它允许用户将大量的数据存储在云上,并且可以随时访问、检索和管理这些数据。Swift的架构由多个组件和模块组成,各组件的功能如下1:
- Proxy Server。负责接收客户端的请求,并将请求分发到后端的存储节点上,同时也负责处理授权、认证和负载均衡等。
- Object Server。存储对象数据,如图片、视频、文档等。
- Container Server。存储对象容器数据,如文件夹、目录等。
- Account Server。存储账户和认证信息,如用户、密码、角色等。
- Replicator。负责对象和容器的数据复制和同步,以保证数据的冗余和高可用性。
- Auditor。负责对对象和容器的数据进行检查和验证,以确保数据的完整性和可用性。
- Updater。负责对对象和容器的元数据进行更新和同步,以支持Swift的高效管理和查询。
5.swift 相关服务
1)swift: 在其他 Openstack 对象存储包中共享的底层通用文件,包括 swift 客户端
2)swift-proxy: 客户端链接的代理服务 , 可配置为在swift 节点前端
3)swift-account: 访问 Openstack 存储的账号服务
4)swift-object: 负责对象存储和编排同
5)swift-container:Openstack 对象存储容器服务器
6)memcached: 高性能内存对象缓存系统
7)ntp: 时钟同步服务
8)xfsprogs:xfs 维护工具
9)curl: 命令行 web 接口工具
欢迎关注交流: