• 存储

    文件存储 Network-Attached Storage(NAS) 块存储 Direct-Attached Storage(DAS)和 Storage Area Networks(SAN) 对象存储 Object-based Storage 块存储,操作对象是磁盘。存储协议是SCSI、iSCSI、FC。 以 SCSI 为例,主要接口命令有 Read/Write/Read Capacity/Inquiry 等等。 文件存储,操作对象是文件和文件夹。存储协议是 NFS、SAMBA(SMB)、POSIX等。 以 NFS(大家应该都用过“网上邻居”共享文件吧?就是那个)为例,文件相关的接口命令包括:READ/WRITE/CREATE/REMOVE/RENAME/LOOKUP/ACCESS 等等,文件夹相关的接口命令包括:MKDIR/RMDIR/READDIR 等等。 对象存储,主要操作对象是对象(Object)。存储协议是S3、Swift等。 在对象存储系统里,你不能直接打开/修改文件,只能先下载、修改,再上传文件 组成 OSD 对象存储设备 这是对象存储的核心,具有自己的 CPU、内存、网络和磁盘系统。它的主要功能当然是存储数据。同时,它还会利用自己的算力,优化数据分布,并且支持数据预读取,提升磁盘性能。 MDS 元数据服务器 它控制 Client 和 OSD 的交互,还会管理着限额控制、目录和文件的创建与删除,以及访问控制权限。 Client 客户端 提供文件系统接口,方便外部访问。 根据上面的架构可以看出,对象存储系统可以是一个提供海量存储服务的分布式架构。 MinIO is a high-performance, S3 compatible object...

  • 分布式数据库和云原生数据库

    分布式数据库和云原生数据库有一定的关联,但二者的关注点和设计理念不同。可以从 概念、关系、区别 三个角度来看: 1. 概念 1.1 分布式数据库 定义:数据库的数据和计算分布在多台服务器上,通过网络协同工作,对用户透明地提供统一访问接口。 核心目标: 数据分片和多副本存储(高可用)。 支持水平扩展(scale-out)。 提供分布式事务和全局一致性。 典型产品:TiDB、CockroachDB、OceanBase、MongoDB、Cassandra。 1.2 云原生数据库 定义:基于云原生架构理念(容器化、微服务、弹性伸缩、可观测性)设计的数据库。 核心特性: 原生支持云平台:容器化、Kubernetes 管理。 计算与存储分离,支持弹性扩缩容。 按需计费、自动运维、快速恢复。 深度利用云基础设施(分布式存储、Serverless)。 典型产品:Aurora、PolarDB、TiDB Cloud、YugabyteDB、Spanner。 2. 关系 云原生数据库通常是分布式数据库的延伸 云原生数据库的底层架构往往是分布式数据库(支持水平扩展、多副本)。 不是所有分布式数据库都是云原生数据库 传统分布式数据库如果未支持容器化、自动弹性、计算存储分离,就不算云原生。 简单理解: 分布式数据库 = 架构形态 云原生数据库 = 架构形态 + 云原生理念 + 云平台友好 3. 区别 维度 分布式数据库 云原生数据库 核心关注点 数据分布、水平扩展、一致性 云环境下弹性伸缩、自动化运维、资源高效利用 计算存储架构...

  • DDD

    限界上下文之间的映射关系 合作关系(Partnership):两个上下文紧密合作的关系,一荣俱荣,一损俱损。 共享内核(Shared Kernel):两个上下文依赖部分共享的模型。 客户方-供应方开发(Customer-Supplier Development):上下文之间有组织的上下游依赖。 遵奉者(Conformist):下游上下文只能盲目依赖上游上下文。 防腐层(Anticorruption Layer):一个上下文通过一些适配和转换与另一个上下文交互。 开放主机服务(Open Host Service):定义一种协议来让其他上下文来对本上下文进行访问。 发布语言(Published Language):通常与OHS一起使用,用于定义开放主机的协议。 大泥球(Big Ball of Mud):混杂在一起的上下文关系,边界不清晰。 另谋他路(SeparateWay):两个完全没有任何联系的上下文。 实体 当一个对象由其标识(而不是属性)区分时,这种对象称为实体(Entity)。 例:最简单的,公安系统的身份信息录入,对于人的模拟,即认为是实体,因为每个人是独一无二的,且其具有唯一标识(如公安系统分发的身份证号码)。 值对象 当一个对象用于对事务进行描述而没有唯一标识时,它被称作值对象(Value Object)。 例:比如颜色信息,我们只需要知道{“name”:“黑色”,”css”:“#000000”}这样的值信息就能够满足要求了,这避免了我们对标识追踪带来的系统复杂性。 值对象很重要,在习惯了使用数据库的数据建模后,很容易将所有对象看作实体。使用值对象,可以更好地做系统优化、精简设计。 它具有不变性、相等性和可替换性。 在实践中,需要保证值对象创建后就不能被修改,即不允许外部再修改其属性。在不同上下文集成时,会出现模型概念的公用,如商品模型会存在于电商的各个上下文中。在订单上下文中如果你只关注下单时商品信息快照,那么将商品对象视为值对象是很好的选择。 聚合根 Aggregate(聚合)是一组相关对象的集合,作为一个整体被外界访问,聚合根(Aggregate Root)是这个聚合的根节点。 首先领域的开放服务通过信息传输对象(DTO)来完成与外界的数据交互; 在领域内部,我们通过领域对象(DO)作为领域内部的数据和行为载体; 在资源库内部,我们沿袭了原有的数据库持久化对象(PO)进行数据库资源的交互。 同时,DTO与DO的转换发生在领域服务内,DO与PO的转换发生在资源库内。