精华内容
下载资源
问答
  • 数据架构——数据架构

    千次阅读 2020-08-27 14:34:24
    数据的物理表现形式 数据的逻辑联系 数据的内部格式 数据的文件结构 数据架构在各自具有意义的特点上不断演化: 大数据给组织带来了新的信息和决策机会,同时也具有着巨大的潜力。大数据和已有系统的整体流程...

    数据既是信息技术的产物,又是支撑。经过多年的信息技术的发展,数据已经形成了自己特有的科学领域,包括数据治理、数据分析、数据架构等。由于数据非常复杂,数据架构包含了很多方面,其中以下四个方面最有意义:

    • 数据的物理表现形式
    • 数据的逻辑联系
    • 数据的内部格式
    • 数据的文件结构

    数据架构在各自具有意义的特点上不断演化:

    大数据给组织带来了新的信息和决策机会,同时也具有着巨大的潜力。大数据和已有系统的整体流程如下:

    原始大数据分为重复型和非重复型,这两种数据的处理方式和接口完全不同。重复型原始大数据的处理要对每一条记录进行解析,当定位到记录后对记录进行编辑,然后将其传送给已有系统环境,这种接口适用在原始大数据环境中,绝大多数记录都不会传送到已有系统环境中,通常当数据从大数据环境进入已有系统环境中时,将数据存放在数据仓库中是非常方便的,也可以根据需求将数据发送到已有系统环境的任何地方。一旦选用原始重复型大数据环境中的数据,就要对这些基于异常的数据进行如下分析:

    • 模式分析
    • 比较分析
    • 异常记录随着时间的增长及其分析

    从非重复型原始大数据环境接入的接口与重复型的区别是非重复型;由于非重复型原始大数据环境中的大多数数据都具有业务价值,而重复型大数据环境中大多数数据业务价值较小,非重复型原始大数据接口中会选定大多数数据,并且非重复型原始大数据不宜查找,语境不明显,查找语境需要文本消岐。大多数非重复型原始大数据都是具有业务价值的,小部分没有用的数据会在文本消岐中会被排除。数据从文本消岐后就可以输出导DBMS中。

    数据经过文本消岐后,一般采用另一条路线将输出数据回传到大数据环境中,原因包括以下几项:

    • 数据量:从文本消岐过程输出的数据量可能会很大,由于数量巨大需要回传到大数据环境中
    • 数据的本征:输出数据可能具有适合在大数据环境中存放的本质特征

    在将文本消岐输出结果回传到大数据环境时,需要涉及大数据中“语境丰富”的数据。大数据语境丰富部分的数据和重复型原始大数据非常相似,区别在于大数据中语境丰富部分数据具有开放而明显的语境,而且依附大数据环境中与这部分数据相对应的基础数据。因此,大数据中有两种类型的重复型数据,即简单重复型数据和语境丰富的重复型数据,这种划分结构在分析处理时非常重要。

    大数据可以划分为重复型和非重复型两个部分,而重复型部分分为简单重复型数据和语境丰富型数据。大数据环境中还关注处理过的数据,这些数据经过提炼或文本消岐可以存放在DBMS中。大数据和已有系统的接口并不是数据架构是关注的唯一接口,企业系统环境中另一个接口就是作业环境与数据仓库之间的接口——ETL接口。ETL代表抽取、转换、装载。通过ETL接口可以将应用程序产生的数据转换成企业共同的数据。作业数据是由各个应用程序定义的,其结果就是造成了不一致的数据定义、不一致的计算公式、不一致的数据结构等,但当数据经过ETL层的处理之后,这些不一致就会得到消解。ETL接口也有多种变体,其中一种就是将ODS包含在该接口中;另一种就是设立集结区的情况:

    • 第一种情况是将来自两个或者多个文件的数据必须经过合并处理,需要解决时间同步问题,先到的数据必须在集结区待命,直到可以进行合并操作为止
    • 第二种情况是大量的数据为了适应ETL处理的并行,需要将这些数据分割成不同的工作载荷
    • 第三种情况是来自作业的数据必须经过预处理

    要时刻牢记集结区是属于数仓内部的,数据仓库内部的数据并不是返回给最终用户的数据,因此无论何时都不应该访问分析数仓内部的数据。

    作业系统和数据仓库系统之间有一种接口变体称为CDC(变化数据捕获),对于高性能在线事务处理环境而言,每当需要将数据更新到数据仓库环境中时,扫描整个数据库就变得非常困难并且效率低下。这种情况下需要通过检查日志磁带来确定需要更新到数据仓库中的数据。创建日志磁带是为了进行在线备份,以便出现故障时恢复。

    从业务环境导数据仓库的另一种替代品是内联转换,在内联转换中,会将需要流入数据仓库的数据视为在线事务处理的一部分来进行捕获和处理。

    ETL接口是直接从作业环境将数据装载导数据仓库中的接口,当数据进入数据仓库之后就会进行转换。数据架构的特性之一就是能够提供一种高层视角:

    数据架构中的数据完整性是由记录系统确立的,记录系统是唯一性、决定性确立数据价值的唯一场所,记录系统仅仅适用于详细的粒度数据,并不适合用于汇总数据或者派生出来的数据。

    处理数据的环境会成为第一个记录系统,尤其是在OLTP环境下,随着时间的推移,数据架构中面向数据的记录系统会发生变化。另一种数据架构的方式是针对问题将数据架构划分成部分:

    位置1是为了解决及时查询问题,位置2则是查询历史活动数据;位置3是ODS层浏览信息使用;位置4是数据集市,为主题提供维度数据。数据架构中的信息可以供不同的群体使用,位置1、2为办公人员提供信息,位置3为所有人员提供,位置4根据部门进行划分,而位置5则可以作为整个组织的数据汇聚地。

     

    展开全文
  • martin fowler在《企业应用架构模式》一书中将我们平常接触到的应用开发分为三层:表现层、领域层和数据源层。 其中领域层的领域逻辑模式有:事务脚本、领域模型以及表模块。 1、事务脚本最容易理解也最易于开发,...
  • 数据架构模式之表入口模式

    千次阅读 2015-08-03 21:34:50
    martin fowler在《企业应用架构模式》一书中将我们平常接触到的应用开发分为三层:表现层、领域层和数据源层。 其中领域层的领域逻辑模式有:事务脚本、领域模型以及表模块。 1、事务脚本最容易理解也最易于开发,...

    martin fowler在《企业应用架构模式》一书中将我们平常接触到的应用开发分为三层:表现层、领域层和数据源层。

    其中领域层的领域逻辑模式有:事务脚本、领域模型以及表模块。

    1、事务脚本最容易理解也最易于开发,不过由于易造成代码重复等问题,不利于后期的维护,比较适合开发逻辑较为简单的业务,比如只有几个用于展示企业信息的企业站等;

    2、领域模型是三种模式中最为复杂的模式,缺点显而易见,需要较高的学习成本,不过优点也很鲜明,就是代码清晰,复用率高,便于后期的维护,比较适合用于复杂多变的应用情形下;

    3、表模块模式则介于事物脚本和领域模型之间,我们开发中小型项目时通常使用的都是表模块模式。

    好了,对于领域逻辑模式个人只有以上的粗浅理解,具体等以后加深理解了概念之后再来详谈。

    这里想跟大家说一说数据源层的数据源架构模式,主要有四种:表入口模式、行入口模式、活动记录和数据映射器。

    今天先讲最简单的表入口模式。

    书中对表入口模式的定义为:充当数据库表访问入口的对象,一个实例处理表中的所有行。

    可以理解为对之前分散在各个页面的sql语句进行封装,一张表就是一个对象,该对象处理所有与该表有关的业务逻辑,很好的提高了代码的复用性。

    现在想起来,当初刚毕业那会儿,经常使用表入口模式。

    具体的实现方式参见代码:

    database.php

    <?php 
    class Database{
    	//只是为了演示,通常情况下数据库的配置是会单独写在配置文件中的
    	private static $_dbConfig = array(
    		'host' => '127.0.0.1',
    		'username' => 'root',
    		'pwd' => '',
    		'dbname' => 'bussiness'
    		);
    
    	private static $_instance;
    
    	public static function getInstance(){
    		if(is_null(self::$_instance)){
    			self::$_instance = new mysqli(self::$_dbConfig['host'], self::$_dbConfig['username'], self::$_dbConfig['pwd'], self::$_dbConfig['dbname']); 
    			if(self::$_instance->connect_errno){
    				throw new Exception(self::$_instance->connect_error);
    			}
    		}
    		return self::$_instance;
    	}
    
    
    }

    person.php

    <?php 
    require_once 'database.php';
    class Person extends Database{
    
    	public $instance;
    
    	public $table = 'person';
    
    	public function __construct(){
    		$this->instance = Person::getInstance();
    	}
    
    	public function getPersonById($personId){
    		$sql = "select * from $this->table where id=$personId";
    		echo $sql;
    		return $this->instance->query($sql);
    	}
    
    	/**其他的一些增删改查操作方法...**/
    }

    index.php

    <?php 
    require_once 'person.php';
    
    $person = new Person();
    var_dump($person->getPersonById(1)->fetch_assoc());
    die();


    运行结果:

    select * from person where id=1
    array (size=2)
      'id' => string '1' (length=1)
      'name' => string 'ben' (length=3)



    展开全文
  • 微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 ...

    微服务架构设计实践
     


    目    次

    4.4.2  数据架构

    4.4.2.1  数据架构定义

            数据架构定义了用来支持业务的各种数据,以及他们之间的关系。

            数据架构着重考虑“数据需求”,关注点是持久化数据的组织。

            在数据架构设计过程中,主要涉及三部分内容:数据定义、数据分布与数据管理:

            1.数据定义,是数据架构规划中最重要内容。定义良好的数据模型,包括数据概念模型、数据逻辑模型、数据物理模型,以及更细化的数据标准,可以反映业务模式的本质,确保数据架构为业务需求提供全面、一致、完整的高质量数据,且为划分应用系统边界,明确数据引用关系,定义应用系统间的集成接口,提供分析依据。良好的数据模型与数据标准的制定才是实现数据共享、保证一致性、完整性与准确性的基础。有了这一基础,企事业单位才能通过信息系统应用逐步深入,最终实现基于数据的管理决策。

            2.数据分布,一方面是分析数据的业务,即分析数据在业务各环节的创建、引用、修改或删除的关系;另一方面是分析数据在单一应用系统中的数据结构与应用系统各功能模块间的引用关系,分析数据在多个系统间的引用关系。数据业务分布是数据系统分布的基础。对于一个拥有众多分支机构的大型企事业,数据存储模式也是数据分布中一项重要内容。从地域的角度看,数据分布有数据集中存储和数据分布存储两种模式。数据集中存储是指数据集中存放于企事业总部数据中心,其分支机构不放置和维护数据;数据分布式存储是指数据分布存放于企事业总部和分支机构,分支机构需要维护管理本分支机构的数据。这两种数据分布模式各有其优缺点,企事业应综合考虑自身需求,确定自己的数据分布策略。

            3.数据管理,一方面要制定贯穿企事业数据生命周期的各项管理制度,包括:数据模型与数据标准管理,数据分布管理,数据质量管理,数据安全管理等制度;另一方面应该确定数据管理组织或岗位。

            数据架构规划是进行企事业IT架构规划不能绕开的重要环节,对于完全通过定制化开发进行应用系统实施的企事业单位来说,数据架构设计是完全可以指导应用系统开发的。

            数据架构规划的目的有三个:

            1.分析业务运作模式的本质,为未来核心应用系统的确定以及分析不同应用系统间的集成关系提供依据。

            2.通过分析核心数据与业务之间的应用关系,分析规划应用系统间的集成关系。

            3.数据管理的需要,明确企事业的核心业务数据,这些数据是应用系统实施与运行时IT系统实施人员或管理人员应该重点关注的,要时时考虑保证这些数据在整个企事业层面的一致性、完整性与准确性。

    4.4.2.2  数据架构设计原则

            在数据架构设计过程中,应该考虑如下因素:

             
    4.4.2.3  数据架构实践

    4.4.2.3.1  数据定义

            一、 概念数据模型

            根据业务需求,分析业务过程中涉及到的所有业务实体,抽取出满足用户场景的实体对象,以及它们之间的关联关系。

            在概念建模阶段,主要做三件事:

            1.客户交流。

            2.理解需求。

            3.形成实体。

            这是一个迭代,如果先有需求,尽量去理解需求,明白当前项目需要完成什么,不明白或者不确定的地方和客户及时交流,和客户二次确认过的需求,落实到实体。如果没有,则通过先和客户交流,进而将交流结果落实到需求,之后进一步具体到实体。

            分行特色业务云平台数据概念模型-基本配置管理部分如下:

            

     

            1.系统管理类

            该部分主要包括系统管理类对象。由于采用基于角色的权限管理,所以涉及的对象主要有用户、角色、功能。

            2.基础数据类

            该部分主要是各种参数配置对象和流水的统一基础数据属性信息,包括:服务场景类型,业务领域,业务区域,机构信息等,后续可根据服务类型的扩展增加相应基础数据对象。

            其中,服务场景类型,业务领域和业务区域后续在控制及事后监控中控制风险使用,例如:通过定义不同的服务场景,来形成各服务场景调用内联服务的风险级别,配置不同的风险控制策略,并且在监控时进行区分关注。

            3.特色应用类:

            该部分主要包括特色业务应用组织、特色业务应用,特色业务产品信息、特色业务合作方信息以及使用业务服务的应用服务场景信息。这些对象用来管理各分行实现的特色业务应用,应用上实现的业务产品以及该业务产品归属的合作方信息,并且通过配置这些应用使用服务融合中心上业务服务的场景(服务场景)来差异化的控制调用服务时的数据属性以及业务风险。

            4.业务服务类:

            业务服务:管理服务融合中心对外发布的业务服务信息。

            业务服务原子服务映射规则:对业务服务与平台内部原子服务调用关系进行管理授权。

            5.原子服务类:

            原子服务:管理由服务融合中心封装的原子服务信息,这些原子服务不直接对外调用,供流程服务调用。原子服务可实现本地的原子服务功能以及后台模块的原子服务功能,针对于后台服务的原子服务一对一的进行封装。

            模块信息:管理服务融合中心原子服务的归属模块,对于服务融合中心封装的远程原子服务,在该表中注册远程服务的归属模块(如PE,NPS),对于本地封装的原子服务,在该表中注册本地模块。

            6.通用功能类:

            通用扩展属性:用来存储各个对象(如业务服务,服务场景等)扩展属性,通过对象类型+对象编码+控制规则主键匹配一组规则。

            对象营业时间:用来存储各对象的营业时间属性。如(特色业务应用、特色业务、特色业务合作方、服务场景、业务服务、原子服务)。

        分行特色业务云平台数据概念模型-流水部分如下:

        

     

            流水表主要分成基础类流水表和业务类流水表。

            1.基础类流水表:

                 接入流水表主要负责当外模块调用服务中心业务服务时,统一记录服务流水。

                 接出流水表主要负责当服务中心业务服务调用外部模块时,登记接出流水,记录与外部模块的交互情况。

            2.业务类流水:

                 目前主要先使用账务流水表,登记账务类流水的信息,后续可根据实际业务类型,扩展不同的业务流水表。

            上述概念数据模型定义了特色业务云平台核心部分的实体对象及它们之间的关系。后续随着功能的完善,业务的增加,需要继续完善概念数据模型。 

            二、 逻辑数据模型

            概念数据模型完成以后,需要进一步对实体对象进行细化,细化成具体的表,同时丰富表结构。

            根据需求确定具体需要哪些表,以及每张表的属性。此时会涉及主键的选取,外键的关联,约束的设置等细节。笔者认为只要能把每个实体属性落实下来就是很不错了,因为随着项目的开展,很多表的列都会有相应的改动。

            这个阶段的产物是,可以在数据库中生成的具体表及其他数据库对象,包括主键,外键,属性列,索引,约束甚至是视图以及存储过程。

            以下为服务融合中心部分逻辑数据模型,以供参考。

            1.系统管理部分逻辑数据模型:

            

             2.基本配置部分逻辑数据模型:

                 服务配置部分: 

                

                 业务产品配置部分: 

                

                 其它配置部分:

                

             3.流水部分逻辑数据模型:

     

             三、 物理数据模型

            物理建模可以将在逻辑建模阶段创建的各种数据库对象生成为相应的SQL代码,运行来创建相应具体数据库对象。

            这个阶段我们不仅仅创建数据库对象,针对业务需求,我们也可能做如数据拆分(水平或垂直拆分)、读写分离。

            根据所选数据库管理系统的类型,生成相关的SQL语句,然后创建具体的数据库对象。

            例如:业务区域表在MySQL数据库的创建语句:

            CREATE TABLE `t_busi_area_info` (

              `busi_area` VARCHAR(10) COLLATE utf8_bin NOT NULL COMMENT '区域编码',
              `area_name` VARCHAR(60) COLLATE utf8_bin NOT NULL COMMENT '业务领域名称',
              `area_level` CHAR(1) COLLATE utf8_bin NOT NULL COMMENT '区域层级',
              `parent_area` CHAR(6) COLLATE utf8_bin NOT NULL COMMENT '上级区域编码',
              `branch_no` CHAR(4) COLLATE utf8_bin DEFAULT NULL COMMENT '分行机构号',
              `status` CHAR(1) COLLATE utf8_bin NOT NULL DEFAULT '1' COMMENT '状态',
              `memo` VARCHAR(255) COLLATE utf8_bin DEFAULT NULL COMMENT '备注',
              `dac` CHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT 'dac校验',
              PRIMARY KEY (`busi_area`),
              KEY `t_busi_area_info_IDX0` (`area_name`)
        ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='业务区域表';

            四、 数据字典

            在数据建模过程中,基于对需求的理解,会抽取出部分业务规则,这些信息将会成为数据字典中非常重要的部分,即元数据。

            以下是数据字典的部分内容,以作参考:

            1.服务功能类型

            以服务的业务功能领域来定义数据规则,目的是为了统一规范服务的业务领域编码规范,后续可通过该编码对相同功能的服务进行统一管理、统计。

            两位编码表示一个类型含义,最多能表示15个层次的类型含义。

            功能类型按照从粗到细的原则进行编排,下级功能领域含义需要与上级功能领域含义一致。

            一级功能领域目前定义如下:

            

            各一级功能领域内的二级功能领域编码定义如下:

            


            2.业务领域

         

        

            

    4.4.2.3.2  数据存储

            一、 数据库管理系统

            在总行,数据库管理系统采用DB2,版本建议为10.5及以上。

            在总行,由于数据库管理系统采用DB2,所以数据库高可用性通过DB2 数据库产品所提供的多种高可用性策略的功能来实现,具体如下:

                1. DB2 高可用性功能部件-HA:支持IBM DB2服务器和集群管理软件相集成。

                2. DB2 数据服务器高可用性灾难恢复功能-HADR:一种数据库复制功能,它提供针对部分站点故障和整个站点故障的高可用性解决方案。HADR 通过将数据更改从源数据库(称为主数据库)复制到目标数据库(称为备用数据库)来防止数据丢失。

                3. DB2日志镜像:支持数据库级别的日志镜像。

                4. DB2故障监视器工具:该工具通过监视 DB2 数据库管理器实例并重新启动任何过早退出的实例来使 DB2 数据库正常运行。

            在分行,根据每个分行各自的需求,从DB2 10.5及以上、Oracle11g及以上、MySQL5.5及以上三种数据库管理系统中任选其一。 

            在分行,根据所选的数据库管理系统,采用相应的产品和工具实现数据库高可用性。

    4.4.2.3.3  数据分布

            根据系统数据产生、使用、管理等方面的不同特点,采用不同的数据分布式存储和处理手段。

            数据分布策略的3条应用原则:

            1.合适原则:合适的才是最好的。把握系统特点,确定分布策略。

            2.综合原则:当系统比较复杂时,其数据产生、使用、管理等方面可能很难表现出压倒性的特点,此时,就需要考虑综合运用不同的数据分布策略。

            3.优化原则:当难以“一步到位”地作出数据分布策略的正确选择,以及还存在质疑时,应从“对吗”、“好吗”两个方面进行对比、评估、优化。

            由于项目时间紧,人员紧缺,总行科技其它相关项目组进度方面的影响,以及其它一些行方政策上约束,所以在项目第一、二阶段,服务融合中心支持两种应用部署方式:

            一、 集中模式+复制模式+子表模式

            在项目第一、二阶段,主要进行服务融合中心基础开发框架、公共技术组件、公共业务组件的开发、测试。此时,总行服务融合中心提供的服务以对总行核心系统提供的服务进行服务封装为主,业务数据存储在总行核心系统中,不在服务融合中心存储。

            另外,总行服务融合中心接入的分行业务有限,业务访问量较低,每天产生的流水类数据量较少。

            基于上述原因,建议服务融合中心作为单一应用部署,采用集群部署实现水平扩展,支持大并发访问,实现高可用性。

            在数据库方面,同样采用单一库部署,通过读写分离、一写多读、内存缓存的方式保证读操作的性能和高可靠。

            单一应用集群模式如下图所示:

            

     

            在上述部署模式下,数据分布模式如下:

            1.服务融合中心中系统管理类、基本配置类数据,此类数据属于配置型数据,读写比大(即读多,写少),强依赖读,弱依赖写,不要求严格的读一致性,读可靠性要求高。对于这类数据,采用集中式管理。另外,通过读写分离、一写多读、分布式缓存、内存缓存的方式保证读操作的性能和高可靠。

            2.服务融合中心中流水类数据,属于流水型数据,此类数据读写比小(即读少、写多),不断产生新的数据,各条数据间是独立的。单条数据的更新需要保证强一致性。流水型数据很方便做水平扩展。对于流水类数据,由于处于刚投产阶段,接入的分行特色业务数量有限,所以暂时采用集中模式和子集模式。

            3.为每张流水类数据的表建立一个副本表(数据结构与主表一致),这样流水类数据的主表只存储热点数据,即指定维度内的数据(如按照时间维度:1个月以内、1个季度以内等,或按其它业务维度),而其它数据保存在副本表内。这样针对主表、副本表分别进行优化(如:支持大量写操作的主表减少索引,以读为主的副本表可以根据查询需求设置多个索引)。

            二、 集中模式+复制模式+子表模式+独立Schema 模式

            如果在项目第一、二阶段需要实现的本地业务服务较多,接入的分行业务较多,建议把服务融合中心中的流程服务按照业务域分组,每组单独集群部署。

            分布式应用集群部署模式如下图所示:

            

     

            在这种部署模式下,数据分布模式调整为:

            1.把单一数据库拆分为一个通用的基本配置管理库和多个应用业务库(一个应用对应于一个业务库)。

            2.通用基本配置管理库主要包括系统管理类、基本配置类、流水类数据,数据分布模式同单一应用集群模式。

           3.应用业务库主要包括该应用所需的业务相关数据,数据分布模式采用独立Schema模式,即每个应用采用单独数据库Schema的方式管理每个应用涉及的业务数据。

            4.每个应用涉及的业务数据,大部分属于状态型数据,读写比相当,必须保证可写才有意义,每一次写操作必须基于前一个正确的状态。针对关键业务的状态型数据,应尽量把维度拆细,一是提高并发处理能力,二是方便隔离故障影响。

            5.状态型数据要求严格的数据一致性。对于这类数据,除了阿里自主研发的基于 Paxos 协议的分布式强一致数据库(对于单节点故障,它提供 RPO=0,RTO<30 秒的容灾能力,致力于从数据库层屏蔽容灾细节,为应用层提供简单的使用方式)),暂时没有很好的完整解决方案。所以,这部分数据暂时采用单一数据库存储。

            三、 集中模式+复制模式+分区模式

            随着接入的分行特色业务数量的增加,预计每天1亿笔交易量,导致流水相关表的数据量急剧增加。

            在这种海量业务场景下,上述针对流水型数据的子表模式的数据库设计会遇到单表的容量瓶颈和单库的性能瓶颈。

            针对这种情况,按照分布式的思想,对数据进行拆分,让集中在单点的读写访问分布到多个数据库服务器上,从而获得容量和性能上的弹性延伸能力。

            常用的数据拆分模式:

                 垂直拆分:按业务域进行拆分;

                 水平拆分:按某个业务维度进行拆分,如用户、区间等;

                 读写拆分:读写分离;

            为了支持灵活的数据分区,并且数据分区对应用层透明,分行特色业务云平台引入分布式数据访问组件ZDAL支持数据库拆分模式。在引入ZDAL组件以后,针对不同类型的数据采用不同的处理方式。

            1.配置型数据:涉及系统管理类表、基本配置类表

            此类数据的特征是读多写少,数据量较小,采用群组模式。

            群组(Group)模式,示意图如下:

            

     

            采用该模式,一个主库,多个从库,主库负责写、从库负责读,在事务内的读也使用主库。

            2.流水型数据:涉及流水类表

            对于流水类相关表,进行分库分表设计,采用切片模式。

            切片(Shard)模式,示意图如下:

             

            流水类表采用该模式,按照表中流水号ID进行拆分,根据逻辑切片与物理数据库、表的路由规则分布到据库中。

            在本项目中,考虑到项目后期数据扩容方面的简易性、可维护性,建议采用如下数据库与表的拆分路由规则:

                     

            对按流水号ID进行切分的相关表水平切分为1024个逻辑分片,物理库为4个,逻辑分片按照分库分表规则分布在不同物理库中。1024个逻辑分片,逻辑分片与物理表一一对应,每个库256张表,每个表的顺序号都不相同,该模式下分库分表示意图如下:

            

     

            如果扩容物理库到8台,则只需修改分库分表路由映射规则,之前四个库的后128张表分别迁移到新增的物理库中,同时调整逻辑数据库序号。该模式数据迁移相对方便,每次扩容时,每个库的表数量都在减少,扩容上限1024。

            扩容后数据拆分示意图如下:

             

            迁移过程需要一定时间,由于涉及到表数据的迁移和路由规则的切换,所以会影响一段时间数据服务的访问,迁移流程大致如下:

                 停止对外提供服务,然后开始进行数据备份导出;

                 进行表数据的迁移工作;

                 修改ZDAL数据源配置文件,通过配置中心推送ZDAL动态加载;

                 迁移验证,主要包括迁移数据完整性、数据路由是否正确,交易服务是否正常;

                 验证无误后,删除原数据库中已迁移表;

                 对外开始提供服务;

            3.状态型数据

            针对本地服务业务库中的数据,如果某些业务表的数据量达到或超出特定数据库的单表限制,或单表数据量已经影响数据库读、写性能,则建议参考上述流水型数据,进行分库分表设计。

    4.4.2.3.4  数据管理

            在数据管理方面,主要包括两个部分:

            1.制定贯穿整个数据生命周期的各项管理制度,包括:数据模型与数据标准管理,数据分布管理,数据质量管理,数据安全管理等制度。

            2.确定数据管理组织或岗位。


      微信扫一扫,关注该公众号

      该系列文章已经在微信公众号发布,如果感兴趣,请关注。

       以后更多知识通过该微信公众号分享。


    展开全文
  • 在实际工作中,我们经常听到“架构”和“架构师”这样的名词,并不新鲜...

    在实际工作中,我们经常听到“架构”和“架构师”这样的名词,并不新鲜,但是总让很多刚入门的人感觉很神秘,甚至是高深莫测。很少有人对“架构”有全面的了解和认识能并说清楚架构是什么,更谈不上掌握了。事实上,也只有极少数人能成为或者被冠以“架构师”这样的title。为此,笔者总结了对架构的一些理解,希望能够补充很多初入门的人在这方面认识上的不足,纠正一些误解。高手和老鸟就直接跳过吧。

     

    • 架构的分类

     

    对于“架构”来讲,理论上划分了5种架构视图,分别是:逻辑架构、开发架构、运行架构、物理架构数据架构。根据名字,大家都可能大概能猜到其侧重点和含义。这里先用通俗的文字简单介绍下,便于大家理解,大家可以不必纠结概念和这些理论。

     

    逻辑架构:逻辑架构关注的是功能,包含用户直接可见的功能,还有系统中隐含的功能。或者更加通俗来描述,逻辑架构更偏向我们日常所理解的“分层”,把一个项目分为“表示层、业务逻辑层、数据访问层”这样经典的“三层架构”。

    开发架构:开发架构则更关注程序包,不仅仅是我们自己写的程序,还包括应用程序依赖的SDK、第三方类库、中间价等。尤其是像目前主流的Java、.NET等依靠虚拟机的语言和平台,以及主流的基于数据库的应用,都会比较关注。和逻辑架构有紧密的关联。

    运行架构:顾名思义,更关注的是应用程序运行中可能出现的一些问题。例如并发带来的问题,比较常见的“线程同步”问题、死锁问题、对象创建和销毁(生命周期管理)问题等等。开发架构,更关注的是飞机起飞之前的一些准备工作,在静止状态下就能规划好做好的,而运行架构,更多考虑的是飞机起飞之后可能发生的一些问题。

    物理架构:物理架构,更关注的系统、网络、服务器等基础设施。例如:如何通过服务器部署和配置网络环境,来实现应用程序的“可伸缩性、高可用性”。或者举一个实际的例子,如何通过设计基础设施的架构,来保障网站能支持同时10W人在线、7*24小时提供服务,当超过10W人或者低于10W人在线时,可以很方便的调整部署架构来支撑。

    数据架构:数据架构,更关注的是数据持久化和存储层面的问题,也可能会包括数据的分布、复制、同步等问题。更贴切来讲,如何选择需要的关系型数据库、流行的NOSQL,如何保障数据存储层面的性能、高可用性、灾备等等。很多时候,和物理架构是有紧密联系的,但它更关注数据存储层面的,物理架构更关注整个基础设施部署层面。

    上面讲了那么多,相信国内很少有公司是严格按照这五种视图去分工和设计的。其实在笔者眼中,架构大致分为两种:软件架构、系统架构。前三种视图,可以归纳为软件架构,而后两种架构,则归为系统架构。这也比较符合国内大部分中小型互联网公司的现状。

    根据应用特性的不同,关注侧重点可能不同。例如,某些门户类的互联网应用,读多写少而且业务相对比较简单,则更加关注“高性能、可伸缩性、可用性”等方面。对于更加复杂的应用,例如电商类大规模交易型的应用,对每个层面和每个环节都会比较关注。对于业务型的系统,例如一些生产型企业使用的ERP,或者仅供企业内部使用的一些MIS、OA应用,通常更关注功能和复杂的业务和实现和扩展,而对性能等方面又可能不要太高,这类应用则更关注纯软件架构层面。这里,不展开做具体讨论。所以很多时候,架构师也需要是一个团队,而不是一个人“全栈”。

     

     

    • 架构设计到底是什么

     

    在长期的技术招聘面试中,我发现在很多人眼中,架构就是分层,架构设计就是“三层架构”(或者四层、五层...反正分层越多就说明项目越复杂而且架构就越牛),或许是受到诸如PetShop之类的示例项目的影响,这里暂时不去追究原因了。

    之前已经纠正过很多人的误解-架构不只是软件架构。说一下通俗点的理解:

    软件架构就是实用而且优雅的设计,它不在于分多少层,或者应用了多少种设计模式/架构模式等。它应该是以满足实现用户需求为前提,以开发人员普遍可接受为根本的,而且要符合系统特性和业务发展需要的,从软件设计的角度,能够达到层次清晰、可维护、可重用、可扩展...就非常优秀了,无需刻意去纠结分了多少层,是否使用了什么模式,有多么抽象等。以面向对象设计为例,基本目标是“高内聚、低耦合”,为此我们可能会遵循一些常见的设计原则(例如经典的SOLID设计原则)。最后纠正一点,通常我们所说的模式,其实又分为很多种,并不是仅仅指的是“设计模式”(设计模式也有千千万,并不是只有常见的GOF 23种设计模式)。通常包括:企业架构模式、设计模式、SOA模式、企业集成模式等等。

    强调一下,架构要讲求“实用”,而且开发人员普遍可接受,要符合现状的。否则,再“优雅”的设计,都会沦为高成本的“花架子”,生搬硬套和过度设计只会让项目“流产”。

     

     

    • 关于Tier和Layer

     

    笔者曾多次在一些技术社区和论坛看到一些关于TierLayer的争论,众说纷纭。其实最容易被广泛认可和接受的理解就是:Tier通常指的是物理上的分层,由执行同样功能的一台(或者一组)服务器定义。而Layer通常指的是逻辑上的分层,对于代码的组织,例如:我们通常提到的“业务逻辑层,表现层,数据访问层”等等。

    Tier指代码运行的位置,多个Layer可以运行在同一个Tier上的,不同的Layer也可以运行在不同的Tier上,当然,前提是应用程序本身支持这种架构。以J2EE和.NET平台为例,大多数时候,不同的Layer之间都是直接通过DLL或者JAR包引用来完成调用的(例如:业务逻辑层需要引用数据访问层),这样部署的时候,也只能将多个Layer同时部署在一台服务器上。相反,不同的Layer之间如果是通过RPC的方式来实现通信调用的,部署的时候,便可以将不同的Layer部署在不同的服务器上面,这也是很常见的解耦设计。

    如下图所示:

     

    顺便再纠正一点,很多人问“到底什么是web服务器,什么是应用服务器”。这个恐怕没有标准答案的。有些人可能觉得,处理静态资源的就是web服务器,处理动态请求的就是应用服务器,这其实是不准确的。以互联网领域典型的SOA架构为例,上层Web应用所在的服务器,可以叫web服务器,web应用仅仅负责处理输入/输出,而提供服务宿主的服务器可以称为应用服务器(也包含对业务逻辑和数据访问的处理)。当然,服务的宿主方式可以有很多中,可以是系统服务,是可执行程序,是web应用,是Socket网络服务...

     

     

    • 逻辑分层和物理分层的好处

     

    逻辑分层的好处:

     

    1. 代码组织更清晰
    2. 更易于维护
    3. 更好的代码重用性
    4. 更好的团队开发体验性
    5. 更高的代码清晰度

    物理分层的好处:

     

    1. 性能
    2. 可伸缩性
    3. 容错性
    4. 安全性
    • 架构师的分类

     

    架构师往往是很多开发人员向往的职业,也不是像很多人想象中的那样(画一下PPT或者UML草图,然后交给程序员们去实现,然后自己就自由玩耍了)。国内很多公司,是没有架构师这种岗位定义的,通常是由技术优秀和经验比较丰富的开发人员担任,身兼多职的情况也并不少见(我见过很多小公司的骨干人员是身兼技术主管、系统分析师、项目经理、架构师、核心开发人员...)。值得纠正的就是,架构师和系统分析师不同,系统分析师更侧重在项目早期的需求分析。而架构师,一般贯穿整个软件开发周期,与项目经理也是相辅相成的。微软对于架构师,又分为:软件架构师、系统架构师、解决方案架构师、企业架构师等。而其它一些厂商,可能又会划分:技术架构师、业务架构师、网络架构师、安全架构师、SOA架构师......

    大家不必对这些概念太纠结。按照笔者的理解,国内大互联网公司里,架构师一般只会分2-3个方向:软件架构师和系统架构师(有些企业叫运维架构师),有些企业对于比较资深DBA而且懂整个系统架构的,还会分出所谓的“数据架构师”。至于具体Title,大可不必纠结,只需了解自己的兴趣,知晓了大致发展和定位,然后朝该方向努力即可。对于程序员而言,最基本的还是先写出高质量的代码,在实战中逐步提升自己设计思维。

     

    限于笔者水平和理解有限,文中全部文字和描述等全凭笔者记忆和理解写出,难免出现错误,请热心的读者及时批评和指正。

    由于时间有限,部分图片笔者画的比较粗糙,也请读者谅解。

    转载于:https://my.oschina.net/wmy596/blog/1623459

    展开全文
  • 2020数据架构师面试题库

    千次阅读 2020-09-27 10:58:59
    数据架构师面试问题不仅涉及特定于角色的主题,例如数据仓库解决方案,ETL和数据建模。实际上,面试官还会用脑筋急转弯,行为和情境问题来挑战您。那么,您如何为成功的数据架构师面试做准备?    在2020数据...
  • 一个运行了20多年的数据架构,必然有其合理性。也正是因为年代久远,存量过多,才导致举步维艰。在Cloud和5G时代,超密度网络集成和大数据洞察需求给电信供应商带来新的挑战,从数据仓库到数...
  • JAVA EE三层架构:Struts2.0+spring+hibernate三层软件架构是一个比较成熟的轻量级的软件架构,基于此开发的B/S模型的软件至少包含以下三个部分:表示层、业务逻辑层和数据访问层。由Struts2.0来完成的表示层主要...
  • 数据仓库的架构与设计

    万次阅读 多人点赞 2017-04-01 17:52:19
    数据仓库的架构 数据仓库多维数据模型的设计 1. 什么是数据仓库1.1 数据仓库的概念官方定义数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。
  • 表现数据分离: web语义化 在广义方面 在代码编译方面 页面布局和架构 布局 架构 开发人员会有一些困惑: 开发经理也会有一些困惑: 用户会对这些事情感到烦恼: 架构的本质是什么?其实也是一种管理。 常见的...
  • 问题二:不同的微服务经常使用不同的数据库,但是在微服务架构中,服务会产生不同类型的数据,关系数据库不一定是最佳选择,很多微服务会采用SQL和NoSQL结合模式,如搜索引擎、图数据库等NoSQL数据库大多数都不支持...
  • MVC表现模式和三层架构模式理解

    千次阅读 2018-07-26 15:51:03
    之前总是混淆MVC表现模式和三层架构模式,为此记录下。 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) 通常意义上的三层架构就是...
  • 什么是架构模式架构风格

    千次阅读 2018-10-16 09:29:19
    本文探讨如下几个问题: 架构模式架构风格有区别吗? 什么是架构模式? 什么是架构风格?...有的观点认为架构风格是架构模式的外在表现 有的观点认为架构模式架构风格是不同的两个概念(具...
  • 但是在微服务架构中,这两种方式都不是最好的选择。1. 使用本地事务和分布式事务保证一致性在传统的单击应用中,最简单、最直接、最普遍的会使用一个关系型数据库,通过关系型数据库的事务保证数据的一致性。这种...
  • 理解概念是理解数据管理的第一步,很多概念我们知道,但内涵却不清楚,或者你以为清楚,这类澄清概念的文章可以很好的帮到你! 源于数据治理周周谈,作者...关于数据架构,本公号曾用“一句话”的方式来说明,包括提.
  • Alluxio的整体架构数据形式

    千次阅读 2018-07-21 12:10:10
    不同框架的组合会有不同性能上的表现,但是这里会涉及到一个性能和开销的权衡问题。因为不同框架的组合需要有额外的联结适配工作,不可能组合所有的框架来做生成的实现方案。于是在计算和存储中间,其实我们可以多做...
  • 软件架构模式之分层架构

    万次阅读 多人点赞 2015-04-19 23:53:59
    对程序员来说很常见一种情况是在没有合理的程序架构时就开始编程,没有一个清晰的和定义好的架构的时候,大多数开发者和架构师通常会使用标准式的传统分层架构模式(也被称为多层架构)——通过将源码模块分割为几个...
  • IFC数据模式架构的四个概念层详解说明 IFC模型体系结构由四个层次构成,从下到上依次是 资源层(Resource Layer)、核心层(Core Layer)、交互层(Interoperability Layer)、领域层(Domain Layer)。每层中都包含一系列的...
  • 数据仓库架构及模型设计基础

    千次阅读 多人点赞 2019-06-26 21:58:18
    1.1数据集市架构 数据集市是按主题域组织的数据集合,用于支持部门级的决策。有两种类型的数据集市:独立数据集市和从属数据集市。 独立数据集市集中于部门所关心的单一主题域,数据以部门为基础部署,无须考虑企业...
  • 我们需要什么样的数据架构

    千次阅读 2020-02-22 17:52:10
    作者 |Stephanie shen编译 | 火火酱,责编丨Carol出品 | AI科技大本营(ID:rgznai100)在大数据和数据科学的新时代,对企业而言,一定要有与业务流程保持...
  • 架构数据分析应用

    万次阅读 2016-05-18 21:19:50
    数据管理比以往更加复杂,到处都是大数据,包括每个人的想法以及不同的形式:广告 , 社交图谱,信息流 ,推荐 ,市场, 健康, 安全, 政府等等.过去的三年里,成千上万的技术必须处理汇合在一起的大数据获取,管理 和分析;...
  • 架构设计(3)--架构模式

    万次阅读 2017-10-17 15:52:47
    模式的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,...架构模式类似于软件设计模式,但范围更广。 ...
  • 数据中心存储架构 文/刘新民 存储系统是数据中心IT环境的核心基础架构,是数据中心数据访问的最终承载体。存储在云计算、虚拟化、大数据等相关技术进入后已经发生了巨大的改变,块存储、文件存储、对象存储支撑起...
  • 4 网站架构模式

    千次阅读 2021-05-07 16:50:40
    为了解决大型网站面临的高并发访问、海量数据处理、高可靠运行等一系列问题 与挑战,大型互联网公司在实践中提出了许多解决方案,以实现网站高性能、高可用、 易伸缩、可扩展、安全等各种技术架构目标。这些解决方案又...
  • 五种大数据处理架构

    万次阅读 多人点赞 2017-12-14 14:12:21
    大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性、规模,以及价值在最近几年才经历了...
  • 软件架构模式

    千次阅读 2017-06-05 17:34:04
    分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构。多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师、开发者和软件设计者所熟知。...
  • 网站架构模式

    万次阅读 2015-10-09 17:26:29
    网站架构模式为了解决高并发访问,海量数据,高可靠运行,提出了很多解决方案实现高性能,高可用,易伸缩,可扩展,安全等技术架构。分层横向分成, mvc, 视图,业务,数据库层 进制跨层调用 会给以后的优化带来很...
  • Lambda架构作为一种模式,提供了在大型数据集上执行高度可伸缩和高性能分布式计算的方法,并且最终为批处理和近实时处理提供了一致的数据。 Lambda架构定义了能应对企业中各种数据负载的可水平扩展架构的实现方法与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,233
精华内容 68,093
关键字:

数据架构表现形式