精华内容
下载资源
问答
  • Greenplum数据库是一种大规模并行处理(MPP)数据库服务器,其架构特别针对管理大规模分析型数据仓库以及商业智能工作负载而设计。 Greenplum数据库是基于PostgreSQL开源技术的。它本质上是多个PostgreSQL面向磁盘...

    简介

    http://docs-cn.greenplum.org/v6/admin_guide/intro/arch_overview.html

    Greenplum数据库是一种大规模并行处理(MPP)数据库服务器,其架构特别针对管理大规模分析型数据仓库以及商业智能工作负载而设计。

    Greenplum数据库是基于PostgreSQL开源技术的。它本质上是多个PostgreSQL面向磁盘的数据库实例一起工作形成的一个紧密结合的数据库管理系统(DBMS)。其SQL支持、特性、配置选项和最终用户功能在大部分情况下和PostgreSQL非常相似。 与Greenplum数据库交互的数据库用户会感觉在使用一个常规的PostgreSQL DBMS。

    Greenplum数据库和PostgreSQL的主要区别在于:

    • 在基于Postgres查询规划器的常规查询规划器之外,可以利用GPORCA进行查询规划。
    • Greenplum数据库可以使用追加优化的存储。
    • Greenplum数据库可以选用列式存储,数据在逻辑上还是组织成一个表,但其中的行和列在物理上是存储在一种面向列的格式中,而不是存储成行。 列式存储只能和追加优化表一起使用。列式存储是可压缩的。当用户只需要返回感兴趣的列时,列式存储可以提供更好的性能。 所有的压缩算法都可以用在行式或者列式存储的表上,但是行程编码(RLE)压缩只能用于列式存储的表。Greenplum数据库在所有使用列式存储的追加优化表上都提供了压缩。

    Greenplum数据库也包括为针对商业智能(BI)负载优化PostgreSQL而设计的特性。 例如,Greenplum增加了并行数据装载(外部表)、资源管理、查询优化以及存储增强,这些在PostgreSQL中都是无法找到的。 很多Greenplum开发的特性和优化都在PostgreSQL社区中找到了一席之地。例如,表分区最初是由Greenplum开发的一个特性,现在已经出现在了标准的PostgreSQL中。

    整体类别

    计算

    计算+接口

    计算+存储+接口

    存储

    http://docs-cn.greenplum.org/v6/admin_guide/intro/arch_overview.html

    Greenplum数据库可以使用追加优化(append-optimized,AO)的存储格式来批量装载和读取数据,并且能提供HEAP表上的性能优势。 追加优化的存储为数据保护、压缩和行/列方向提供了校验和。行式或者列式追加优化的表都可以被压缩。

    Greenplum数据库支持多种存储模型和一种混合存储模型。 当用户创建一个表时,用户会选择如何存储它的数据。

    堆存储

    默认情况下,Greenplum数据库使用和PostgreSQL相同的堆存储模型。 堆表存储在OLTP类型负载下表现最好,这种环境中数据会在初始载入后被频繁地修改。 UPDATE和DELETE操作要求存储行级版本信息来确保可靠的数据库事务处理。 堆表最适合于较小的表,例如维度表,它们在初始载入数据后会经常被更新。

    追加优化存储(AO表)

    追加优化表存储在数据仓库环境中的非规范表表现最好。 非规范表通常是系统中最大的表。 事实表通常成批地被载入并且被只读查询访问。 将大型的事实表改为追加优化存储模型可以消除每行中的更新可见性信息负担,这可以为每一行节约大概20字节。 这可以得到一种更加简洁并且更容易优化的页面结构。 追加优化表的存储模型是为批量数据装载优化的,因此不推荐单行的INSERT语句。

    选择面向行或者面向列的存储

    Greenplum提供面向存储的模型选择:行,列或两者的组合。 

    • 面向行的存储:适用于具有许多迭代事务的OLTP类型的工作负载以及一次需要多列的单行,因此检索是高效的。
    • 面向列的存储:适合于在少量列上计算数据聚集的数据仓库负载,或者是用于需要对单列定期更新但不修改其他列数据的情况。

    对于大部分常用目的或者混合负载,面向行的存储提供了灵活性和性能的最佳组合。 不过,也有场景中面向列的存储模型提供了更高效的I/O和存储。 在为一个表决定存储方向模型时,请考虑下列需求:

    • 表数据的更新。如果用户会频繁地装载和更新表数据,请选择一个面向行的堆表。 面向列的表存储只能用于追加优化表。
    • 频繁的插入。如果频繁地向表中插入行,请考虑面向行的模型。 列存表并未对写操作优化,因为一行的列值必须被写到磁盘上的不同位置。
    • 查询中要求的列数。如果在查询的SELECT列表或者WHERE子句中常常要求所有或者大部分列,请考虑面向行的模型。 面向列的表最适合的情况是,查询会聚集一个单一列中的很多值且WHERE或者HAVING谓词也在该聚集列上。
    • 表中的列数。在同时要求很多列或者表的行尺寸相对较小时,面向行的存储会更有效。 对于具有很多列的表且查询中访问这些列的一个小子集时,面向列的表能够提供更好的查询性能。
    • 压缩。列数据具有相同的数据类型,因此在列存数据上支持存储尺寸优化,但在行存数据上则不支持。 例如,很多压缩方案使用临近数据的相似性来进行压缩。 不过,临近压缩做得越好,随机访问就会越困难,因为必须解压数据才能读取它们。

    对于追加优化表,在Greenplum数据库中有两种类型的库内压缩可用:

    • 应用于一整个表的表级压缩。
    • 应用到一个指定列的列级压缩。用户可以为不同的列应用不同的列级压缩算法。

    下面的表总结了可用的压缩算法。

    Table 1. 用于追加优化表的压缩算法
    表方向可用的压缩类型支持的算法
    ZLIB, ZSTD和 QUICKLZ1
    列和表RLE_TYPE, ZLIB, ZSTD和 QUICKLZ1

    Note: 1QuickLZ压缩在Greenplum数据库的开源版本中不可用。

    在为追加优化表选择一种压缩类型和级别时,要考虑这些因素:

    • CPU使用。
    • 压缩率/磁盘尺寸。
    • 压缩的速度。
    • 解压速度/扫描率。

     

    https://zhuanlan.zhihu.com/p/100703300?utm_source=wechat_session

    外部表:外部表的数据存储在外部(数据不被Greenplum管理),Greenplum 中只有外部表的元数据信息。Greenplum 支持很多外部数据源譬如 S3、HDFS、文件、Gemfire、各种关系数据库等和多种数据格式譬如 Text、CSV、Avro、Parquet 等。

    存储引擎

    没有找到具体是用什么数据结构,不过压缩、分区、索引都是有的

    平台管理

    架构

    Greenplum数据库的查询使用一种火山式查询引擎模型,其中的执行引擎拿到一个执行计划并且用它产生一棵物理操作符树,然后通过物理操作符计算表,最后返回结果作为查询响应。

    Greenplum数据库通过将数据和处理负载分布在多个服务器或者主机上来存储和处理大量的数据。 Greenplum数据库是一个由基于PostgreSQL 9.4的数据库组成的阵列,阵列中的数据库工作在一起呈现了一个单一数据库的景象。 Master是Greenplum数据库系统的入口。客户端会连接到这个数据库实例并且提交SQL语句。 Master会协调与系统中其他称为Segment的数据库实例一起工作,Segment负责存储和处理数据。

    Figure 1. 高层的Greenplum数据库架构

    关于Greenplum的Master

    Greenplum数据库的Master是整个Greenplum数据库系统的入口,它接受连接和SQL查询并且把工作分布到Segment实例上。Greenplum数据库的最终用户与Greenplum数据库(通过Master)交互时,会觉得他们是在与一个典型的PostgreSQL数据库交互。 

    Master是全局系统目录的所在地。全局系统目录是一组包含了有关Greenplum数据库系统本身的元数据的系统表。 Master上不包含任何用户数据,数据只存在于Segment之上。 Master会认证客户端连接、处理到来的SQL命令、在Segment之间分布工作负载、协调每一个Segment返回的结果以及把最终结果呈现给客户端程序。

    Greenplum数据库使用预写式日志(WAL)来实现主/备镜像。 在基于WAL的日志中,所有的修改都会在应用之前被写入日志,以确保对于任何正在处理的操作的数据完整性。

    关于Greenplum的Segment

    Greenplum数据库的Segment实例是独立的PostgreSQL数据库,每一个都存储了数据的一部分并且执行查询处理的主要部分。

    当一个用户通过Greenplum的Master连接到数据库并且发出一个查询时,在每一个Segment数据库上都会创建一些进程来处理该查询的工作。 

    Segment运行在被称作Segment主机的服务器上。 一台Segment主机通常运行2至8个Greenplum的Segment,这取决于CPU核数、RAM、存储、网络接口和工作负载。Segment运行在被称作Segment主机的服务器上。 一台Segment主机通常运行2至8个Greenplum的Segment,这取决于CPU核数、RAM、存储、网络接口和工作负载。

    关于Greenplum的Interconnect

    Interconect是Greenplum数据库架构中的网络层。

    Interconnect指的是Segment之间的进程间通信以及这种通信所依赖的网络基础设施。 Greenplum的Interconnect采用了一种标准的以太交换网络。出于性能原因,推荐使用万兆网或者更快的系统。

    默认情况下,Interconnect使用带流控制的用户数据包协议(UDPIFC)在网络上发送消息。 Greenplum软件在UDP之上执行包验证。这意味着其可靠性等效于传输控制协议(TCP)且性能和可扩展性要超过TCP。 如果Interconnect被改为TCP,Greenplum数据库会有1000个Segment实例的可扩展性限制。对于Interconnect的默认协议UDPIFC则不存在这种限制。

    关于表分区

    http://docs-cn.greenplum.org/v6/admin_guide/ddl/ddl-partition.html

    分区并不会改变表数据在Segment之间的物理分布。 表分布是物理的:Greenplum数据库会在物理上把分区表和未分区表划分到多个Segment上来启用并行查询处理。 表分区是逻辑的:Greenplum数据库在逻辑上划分大表来提升查询性能并且有利于数据仓库维护任务。

    Greenplum数据库支持:

    • 范围分区:基于一个数字型范围划分数据,例如按照日期或价格划分。
    • 列表分区:基于一个值列表划分数据,例如按照销售范围或产品线划分。
    • 两种类型的组合。

    关于数据分布策略

    Greenplum 6 提供了以下数据分布策略。

    • 哈希分布
    • 随机分布
    • 复制表(Replicated Table)(整张表在每个节点上都有一个完整的拷贝,就是citus广播表)

     

    部署

    安装

    http://docs.greenplum.org/6-10/install_guide/install_gpdb.html

    没有自动化安装,需要手动配置集群的各个选项

    文档

    http://docs.greenplum.org/6-10/install_guide/install_gpdb.html

    有比较全面的安装和运维文档

    升级

    如果是6.x可以使用工具升级到最新,如果是更老的版本,需要使用数据迁移

    高可用

    http://docs-cn.greenplum.org/v6/admin_guide/highavail/topics/g-overview-of-high-availability-in-greenplum-database.html

    Greenplum数据库系统的高可用可以通过提供容错硬件平台实现,可以通过启用Greenplum数据库高可用特性实现, 也可以通过执行定期监控和运维作业来确保整个系统所有组件保持健康来实现。

    硬件平台的最终故障,可能因为常见的持久运行故障或非预期的运行环境。异常断电会导致组件临时不可用。系统可以通过为可能故障的节点配置冗余备份节点,以此来保证异常出现时仍能够不间断提供服务。在一些情况下,系统冗余的成本高于 用户的服务终端容忍度。此时,高可用的目标可以改为确保服务能在预期的时间内恢复。

    Greenplum数据库的容错和高可用通过以下几种方式实现:

    硬件级别RAID

    Greenplum数据库部署最佳实践是采用硬件级别的RAID为单盘失败的情况提供高性能的磁盘冗余,避免只采用 数据库级别的容错机制。该方式可以在磁盘级别提供低级别的冗余保护。

    数据存储总和校验

    Greenplum数据库采用总和校验机制在文件系统上验证从磁盘加载到内存的数据没有被破坏。

    Greenplum数据库有两种存储用户数据的方式:堆表和追加优化表。两种存储模型均采用总和校验机制 验证从文件系统读取的数据,默认配置下,二者采用总和校验机制验证错误的方式基本类似。

    Greenplum数据库master和segment实例在他们所管理的自有内存中更新页上的数据。当内存页被更新 并刷新到磁盘时,会执行总和校验并保存起来。当下次该页数据从磁盘读取时,先进行总和校验,只有成功 通过验证的数据才能进入管理内存。如果总和校验失败,就意味着文件系统有损坏等情况发生,此时Greenplum 数据库会生成错误并中断该事务。

    Segment镜像

    Greenplum数据库将数据存储在多个segment实例中,每一个实例都是Greenplum数据库的一个PostgreSQL实例, 数据依据建表语句中定义的分布策略在segment节点中分布。启用segment镜像时,每个segment实例都由一对 primarymirror组成。镜像segment采用基于预写日志(WAL)流复制的方式保持与主segment 的数据一致。

    Master镜像

    在一个高可用集群中,有两种master实例,primarystandby。像segment一样,master和standby 应该部署在不同的主机上,以保证集群不出现单节点故障问题。客户端只能连接到primary master并在上面执行查询。 standby master采用基于预写日志(WAL)流复制的方式保持与primary master的数据一致。

    双集群

    可以通过维护两套Greenplum数据库集群,都存储相同的数据来提供额外的冗余。

    备份和恢复

    建议经常备份数据库,可以保证一旦出现问题可以很容易的重新生成数据库集群。备份可以很好的保护 误操作、软件错误和硬件错误。

    监控和管控

    http://docs-cn.greenplum.org/v6/admin_guide/intro/about_utilities.html

    Greenplum数据库提供了标准的命令行工具来执行通常的监控和管理任务。

    Greenplum的命令行工具位于 $GPHOME/bin目录中并且在Master主机上执行。Greenplum为下列管理任务提供了实用工具:

    管控方面:

    • 在一个阵列上安装Greenplum数据库
    • 初始化一个Greenplum数据库系统
    • 开始和停止Greenplum数据库
    • 增加或者移除一个主机
    • 扩展阵列并且在新的Segment上重新分布表
    • 恢复失效的Segment实例
    • 管理失效Master实例的故障切换和恢复
    • 备份和恢复一个数据库(并行)
    • 并行装载数据
    • 在Greenplum数据库之间转移数据

    监控方面:

    • 系统状态报告
    • Greenplum数据库包括一个包含查询状态和系统指标的可选的性能管理数据库。
    • gpperfmon_install管理工具创建名为gpperfmon的数据库, 并启用运行在Greenplum数据库Master和Segment节点上的数据收集代理。 数据收集代理会从节点上收集查询状态,还包括诸如CPU和内存使用量等系统指标。 Master节点上的代理周期性的(通常15秒)从节点代理上收集数据并更新gpperfmon数据库。 用户可以查询gpperfmon数据库来查看查询和系统指标。

    监控数据库活动和性能

    Greenplum数据库包含一个可选的系统监控和管理数据库gpperfmon,管理员可以 选择启用它。

    监控系统状态

    http://docs-cn.greenplum.org/v6/admin_guide/managing/monitor.html

    一个Greenplum数据库系统由横跨多台机器的多个PostgreSQL实例(Master和Segment)构成。要监控一个 Greenplum数据库系统,需要了解整个系统的信息以及个体实例的状态信息。gpstate 工具提供有关一个Greenplum数据库系统的状态信息。

    • 查看Master和Segment的状态及配置
    • 查看镜像配置和状态
    • 检查磁盘空间使用
    • 检查分布式数据库和表的大小
    • 查看一个数据库的磁盘空间使用情况
    • 查看一个表的磁盘空间使用情况
    • 查看索引的磁盘空间使用情况
    • 检查数据分布倾斜
    • 查看数据分布
    • 查看数据库对象的元数据信息
    • 查看会话内存使用信息

    (还有SQL标准错误代码)

    错误查询

    如果整个Greenplum数据库系统由于一个Segment故障(例如,如果没有启用镜像或者没有足够的Segment在线 以访问全部用户数据)而变得无法运转,用户在尝试连接到数据库时会看到错误。返回给客户端程序的错误可能表明 失效。

    如果启用了镜像,Greenplum数据库会在主Segment宕机后自动故障转移到一个镜像Segment上,镜像Segment承担 主Segment的角色和职能,故障主Segment变成镜像,用户感觉不到segment产生了故障。

    错误侦测子进程

    在Greenplum数据库master主机上,Postgres的postmaster进程会创建一个错误侦测子进程 ftsprobe。该进程也被称为FTS (Fault Tolerance Server)进程。如果FTS进程出现故障, postmaster会重启该进程。FTS进程循环执行,每个循环之间会停顿一会。每一个循环中,FTS都会从gp_segment_configuration 系统表中获取每一个主segment实例的主机名和端口号,并通过与其建立TCP套接字连接的方式连接segment实例 来侦测segment的状态。

    当系统中只有主segment正常,其对应的镜像故障时,主segment会进入not synchronizing 状态并继续记录数据库日志变化,一旦镜像修复,便可以将这些变化继续同步,而不用从主segment执行一个完整的拷贝。

    gpstate工具

    运行gpstate工具并带有-e选项可以展示单个主segment和镜像segment实例 的任何问题。gpstate的另外一些选项也能显示所有主segment或镜像segment实例的信息。

    系统表

    您也可以从系统表gp_segment_configuration查看当前模式: s (同步状态)n (非同步状态),还有当前状态 u (在线) or d (离线)。

    检查日志文件

    日志文件可以提供信息来帮助判断一个错误的成因。每个Master和Segment实例都在其数据目录的 pg_log中有它们自己的日志文件。Master的日志文件包含了大部分信息,应该总是首先检查它。

    gplogfilter工具可以用来检查Greenplum数据库日志文件。 如果要检查segment日志文件,使用gpssh在segment主机上执行gplogfilter工具。

    性能

    https://www.cnblogs.com/pbc1984/p/12045886.html

    Greenplum :4台8核56G,9个segments  表:列存,无索引

    tidb :6台8核56G,ssd

     

    https://zhuanlan.zhihu.com/p/54907288

    greenplum在3亿级别的多表关联查询对比测试中表现还行,且当时用的是版本5.7,现在更新到6.10版本,速度应该更快

    接口

    http://docs-cn.greenplum.org/v6/admin_guide/dml.html

    http://docs.greenplum.org/6-10/ref_guide/sql_commands/sql_ref.html

    增删改查是全部支持的,而且文档非常全面。

    应用

    优势

    https://segmentfault.com/a/1190000022817663

    https://blog.csdn.net/u012564911/article/details/60956500

     

    SQL标准
    通过SQL 2003 OLAP控制功能全面支持SQL-92和SQL-99。所有查询信息都并行地在整个系统上执行。

    统一分析处理
    可以在同一个并行数据流引擎上执行所有查询和分析(SQL、MapReduce、R等)操作,从而允许分析人员、开发人员和统计人员使用同一个基础构架进行数据分析。

    可编程并行分析
    为从事运算和统计工作的人员提供了更先进的并行分析功能,支持R、线性代数和机器学习功能。


    数据库内压缩
    采用了业内领先的压缩技术,提高性能的同时,显著地减少存储数据所需的空间。客户可以将所用空间减少3-10倍,并提高有效的I/O性能。


    千万亿字节规模的数据加载操作
    高性能的并行数据装载器可以在所有节点上同步执行操作,装载速度超过4.5TB/小时。

    随地访问数据
    不管数据的位置、格式或存储介质如何,都可以从数据库向外部数据源执行查询操作,并行向数据库返回数据。

    动态扩展
    帮助公司对数据仓库进行便捷的小规模或大规模扩展,同时避免高成本的设备或SMP服务器升级。

    工作负载管理
    允许管理人员创建基于角色的资源队列,以便划分资源和管理系统负载。

    集中管理
    提供集群级管理工具和资源,帮助管理人员像管理一台服务器一样管理整个Greenplum数据库平台。

    性能监控
    通过图形化的性能监控功能,用户可以确定当前运行的情况和历史查询信息,并跟踪系统使用情况和资源信息。

    支持索引
    Greenplum支持二叉搜索树、哈希、位图、GiST和GIN,从而能够实现多种索引功能,提供给数据架构师实施优化设计所必需的工具。


    工业标准接口
    支持标准数据库接口(SQL、ODBC、JDBC、DBI),并且可以与市场上先进的商务智能和抽取/转换/加载(ETL)工具互相操作。

    约束

    (网上找不到啥相关资料)

    1.根据我搜到的性能测试,GP数据库支持的数据量在gb和tb级,数据量达到pb级时,gp的性能就达不到那么快了

    2.由于gp数据库会将每个查询分发到各个节点上并发执行,所以gp数据库在sql并发量比较高的时候性能会下降很多

    3.由于架构本身的问题,集群在扩容时需要等待数据重分布,虽然提出了一致性哈希,但这个过程是很慢的(之前甚至不能在线扩容,6版本之后可以在线扩容了)

    展开全文
  • Snowflake数据库调研架构介绍

    千次阅读 2020-11-03 20:46:07
    简介 ...Snowflake的数据仓库不是建立在现有数据库或Hadoop等“大数据”软件平台上的,Snowflake数据仓库使用新的SQL数据库引擎,该引擎具有为云设计的独特架构。对于用户而言,Snowflake与其他企业数

    目录

     

    简介

    整体类别

    存储

    存储引擎

    平台管理

    架构

    部署

    自动化

    文档

    监控

    资源

    tps/qps,慢查询

    管控

    高可用,升级,提升配置

    扩容

    错误查询

    性能

    接口

    sql增删改查

    sql兼容性

    应用

    优势

    约束

    企业实例

    附录


    简介

    https://docs.snowflake.com/en/user-guide/intro-key-concepts.html

    Snowflake是作为软件即服务(SaaS)提供的分析数据仓库。与传统的数据仓库产品相比,Snowflake提供了一个更快,更易于使用且更加灵活的数据仓库。Snowflake的数据仓库不是建立在现有数据库或Hadoop等“大数据”软件平台上的,Snowflake数据仓库使用新的SQL数据库引擎,该引擎具有为云设计的独特架构。对于用户而言,Snowflake与其他企业数据仓库有很多相似之处,但还具有一些其他特有功能。

    整体类别

    计算

    计算+接口

    计算+存储+接口

    存储

    https://zhuanlan.zhihu.com/p/56745552

    https://zhuanlan.zhihu.com/p/126357511

    Snowflake是一款面向Amazon Cloud上EC2和S3而构建起来的在线数仓系统,支持极致弹性、多租户、端到端安全、完整CRUD、事务、内置半结构化、无结构化数据等特性。

    属于对象存储类型。

    这里其实snowflake是做了较多的调研,包括hdfs,s3,最后的结论是发现s3在peformance,usabliity, high avaibability, strong durabllity guarantees hard to beat。所以存储层聚焦到virtual warehouse层的data cache和skew resilience。skew resilience指的是即使ecs的规格一样,但是由于网络、磁盘io等原因,还是会导致不同节点之间性能不均衡的问题,云计算超卖原罪。

    底层选择S3解决了很多的存储问题,但在现阶段延时问题还是存在的,因此,针对热数据做本地SSD缓存+多级缓存是很自然的选择。因为VirtualWarehouse单元是用户级别的,所以这些热数据缓存可以被Query级、进程级、EC2级、用户级大量复用,从而极大的降低成本。

    Snowflake选择在多个VW间构建Consistent Hashing的缓存层,来管理S3上的表文件和对应node节点(真正的计算节点)之间的关系;同时优化器感知这个缓存层,在做物理执行计划时,将query中的扫表算子按表文件名分派到对应的node上,从而实现缓存的高命中率;同时,因为存储计算分离+share data架构,计算上并不强耦合缓存层,所以node节点的增删并不需要立即做缓存数据的shuffle,而是基于LRU,在多个后续Query中摊还的替换表文件,完成缓存层的Lazy Replacement,平滑过渡。

    S3无限容量+数据多副本+分布式强一致等,还给Snowflake带来更多红利。

    S3的问题:

    1. latency

    2. cpu overhead,使用HTTP连接。http解包,封包

    S3的优势:

    1. 操作简单,put、get、delete

    2. 文件只能被整个重写,甚至不能在文件末尾append,文件大小必须在put的时候指定。

    3. Get可以取部分文件。

    基于这些特性做了很多适配的设计

    1. 表被水平划分成large,immutable文件,等同于传统数据库的block或者page;

    2. 列或者属性使用PAX格式混合列存;

    3. 每个文件有header,保存metadata;

    4. 不仅仅使用s3作为table的存储,还使用s3保存临时数据(当节点的磁盘满的时候)

    5. 大的query结果,因为结果可以全部写入s3,所以不需要传统数据库的curser

    Metadata例如catalog对象,table由哪些s3文件组成,统计,锁,事务日志保存在一个kv存储里面,这个kv存储作为Cloud Services layer一部分。

     

    存储引擎

    https://docs.snowflake.com/en/user-guide/intro-key-concepts.html

    Snowflake数据仓库使用新的SQL数据库引擎,该引擎具有为云设计的独特架构。

    https://www.sohu.com/a/411196821_185201?_trans_=000014_bdss_dkygcbz

    (关于引擎的具体设计没有查到,Snowflake既无法建立索引,又不可捕获统计信息,更无法管理分区,能知道的引擎功能只有压缩很好)

    https://zhuanlan.zhihu.com/p/126357511

    snowflake自己实现了一个执行引擎,engine build is :

    列存, 向量化,和push-based(这里针对是传统的火山模型)。这里并没有提code-gen。

    • 列存:对cpu cache更加友好,避免cache miss,能使用SIMD指令;
    • 向量化:避免雾化中间结果,相反数据是以pipeline的方式处理,数据以千行为单位一个batch一个batch处理,这种方式提高了IO效率和cache效率
    • Push-based:相比经典的火山模型。基于push的模型可以提高cache效率,因为他减少了loop的控制流,另外他还是snowflate可以有效的处理DAG类型的plan,相比于tree型执行计划,为sharing和pilelining中间结果创造了机会。

    平台管理

    架构

    https://docs.snowflake.com/en/user-guide/intro-key-concepts.html

    Snowflake的架构是传统shared-disk数据库架构和shared-nothing数据库架构的混合体。

    与shared-disk数据库架构相似,Snowflake数据仓库中所有计算节点访问的持久化数据使用中央数据存储库存储。

    也与shared-nothing数据库架构相似,Snowflake使用MPP(大规模并行处理)计算集群处理查询,集群中的每个节点都在本地存储整个数据集的一部分。

    这种方法简化了shared-disk数据库架构的数据管理,还具备shared-nothing数据库的性能和横向扩展优势。

    架构概述

    Snowflake的独特架构包括三个关键层:

    数据库存储

    将数据加载到Snowflake后,Snowflake会将数据重组为内部优化的压缩列式格式。Snowflake将此优化的数据存储在云存储中。

    Snowflake管理着存储此数据的所有方面——组织(organization),文件大小,结构,压缩,元数据,统计信息,并且数据存储的其他方面由Snowflake处理。Snowflake存储的数据对象不直接可见,客户也无法访问;只能通过使用Snowflake运行SQL查询操作才能进行访问。

    查询处理层

    查询功能在处理层中执行,Snowflake使用“虚拟仓库”(virtual warehouses)处理查询。每个虚拟仓库都是一个MPP计算集群,集群使用多个云提供商提供的计算节点,由Snowflake分配组成。

    每个虚拟仓库是一个独立的计算集群,不与其他虚拟仓库共享计算资源。因此,每个虚拟仓库都不会影响其他虚拟仓库的性能。

    云服务层

    云服务层是协调整个Snowflake服务的集合。这些服务将Snowflake的所有不同组件结合在一起,以便处理从登录到查询等不同阶段分发的用户请求。云服务层也运行在由Snowflake提供且来自于云提供商的计算实例上。

    这一层中包含如下服务:

    1. 认证方式
    2. 基础设施管理
    3. 元数据管理
    4. 查询解析与优化
    5. 访问控制

     

    https://zhuanlan.zhihu.com/p/126357511

    snowflake的架构带来的优势:

    1. 在执行过程中不需要事务管理。当前只专注于处理immutable的文件。

    2. 不需要buffer pool。(本地cache其实也是一种buffer pool,只是相比事务型数据库,少了很多一致性和加锁保护,本质还是由于处理的是immutable的文件)

    3. 允许主要的操作(join,group by,sort)当主存满的时候,使用磁盘空间,纯粹的使用主存在分析型场景下太受限,大部分分析都会有大join和aggeration。

    部署

    自动化

    snowflake的部署不需要自己布置,用户只需要选择想要购买的资源。

    文档

    https://docs.snowflake.com/en/other-resources.html

    官方有挺全的教学文档

    监控

    资源

    监控仓库负荷

    https://docs.snowflake.com/en/user-guide/warehouses-load-monitoring.html

    Web界面提供了一个查询负载图,该图描述了仓库在两周时间内处理的并发查询。仓库查询负载衡量在特定时间间隔内正在运行或排队的查询的平均数量。

    tps/qps,慢查询

    使用历史记录页面监视查询

    https://docs.snowflake.com/en/user-guide/ui-history.html

    通过“历史记录” 页面,可以查看和深入查看最近14天执行的所有查询的详细信息。该页面显示查询的历史列表,包括从SnowSQL或其他SQL客户端执行的查询。为每个查询显示的默认信息包括:

    1. 查询的当前状态:正在队列中等待,正在运行,成功,失败。
    2. 查询的SQL文本。
    3. 查询ID。
    4. 有关用于执行查询的仓库的信息。
    5. 查询开始和结束时间以及持续时间。
    6. 有关查询的信息,包括扫描的字节数和返回的行数。

    管控

    高可用,升级,提升配置

    https://www.zhihu.com/question/421034559/answer/1482996654

    https://docs.snowflake.com/en/user-guide/data-time-travel.html

    snowflake使用Fail-safe而不是备份的方式实现高可用,用户完全不用操心。

    升级提升配置也是购买的方式,剩下的不用管

    资源以tshirt的x/xx/xxl方式来定义。这种规格定义初略看起来很有新意,但是归根结底还是以计算节点个数来定义规格,关键的创新还是在于:

    • 用户按使用付费,如果没有跑query就不需要付费。
    • 用户如果不满意,可以方便改规格,改规格还不能满足,还可以增加cluster数量。并且改规格和数据的体验对用户做的非常好,用户改规格和扩容可以做到业务不中断,不需要做数据重分布(这2点应该是开发和使用传统数仓的老疮疤)。

    扩容

    https://zhuanlan.zhihu.com/p/56745552

    同时,Snowflake这套纯SaaS化体验的架构又与现在云平台上主推的“容器化”、“ServerLess“、“Pay-as-you-go”等主流趋势不谋而合。用户完全不需要关心集群有多大,有多少机器,只需要根据自己的“性能需求”和“价格意愿”而选择VirtualWarehouse的尺寸即可,就像买T恤一样非常宽松、简单的规格;面向用户的CloudService和面向数据的Storage,完全实现弹性伸缩、按量计费,用户开通完服务,通过系统分配的Endpoint就可以“拎包入住”了

    错误查询

    Time Travel

    https://docs.snowflake.com/en/user-guide/data-time-travel.html

    利用Snowflake Time Travel,您可以在定义的时间段内随时访问历史数据(即已更改或删除的数据)。它是执行以下任务的强大工具:

    1. 恢复可能意外或有意删除的与数据相关的对象(表,模式和数据库)。
    2. 过去从关键点复制和备份数据。
    3. 分析指定时间段内的数据使用/操作。

    您可以在定义的时间段内执行以下操作:

    1. 查询过去已更新或删除的数据。
    2. 在过去的特定时间点或之前,创建整个表,模式和数据库的克隆。
    3. 还原已删除的表,架构和数据库。

    在定义的时间段过后,数据将移入Snowflake Fail-safe,这些操作将不再执行。

    Fail-safe

    与Time Travel不同,Fail-safe 确保在发生系统故障或其他灾难性事件时保护历史数据,例如,硬件故障或安全漏洞。

    连续数据保护生命周期中的故障保护

    为什么使用故障安全而不是备份?

    任何数据库管理系统都可能发生数据损坏或丢失。为了降低风险,DBA传统上执行完整和增量备份,但这会使整体数据存储增加一倍甚至三倍。此外,由于多种因素,数据恢复可能会很麻烦且成本很高,其中包括:

    1. 重新加载丢失的数据所需的时间。
    2. 恢复期间的业务停机时间。
    3. 自上次备份以来的数据丢失。

    Snowflake的多数据中心冗余架构大大减少了传统备份的需求。但是,由于数据损坏/丢失可能会无意中发生,因此仍然存在风险。

    Fail-safe为备份提供了一种高效且具有成本效益的替代方案,可消除残留风险并随数据扩展。

    性能

    https://docs.snowflake.com/en/user-guide/sample-data-tpcds.html

    TPC-DS测试

    对于10 TB版本,使用Snowflake 2X-Large仓库,完整的99个TPC-DS查询应在不到2小时的时间内完成。如果使用100 TB版本,则使用4X大型仓库的查询将在大约3个小时内完成。

    接口

    Snowflake支持多种连接服务的方式:

    • 基于Web的用户界面,可从该界面访问管理和使用Snowflake的所有方面。

    • 命令行客户端(例如SnowSQL)也可以访问管理和使用Snowflake的所有方面。

    • 其他应用程序(例如Tableau)可以使用ODBC和JDBC驱动程序来连接到Snowflake。

    • 本机连接器(例如Python)可用于开发用于连接到Snowflake的应用程序。

    • 可用于将ETL工具(例如Informatica)和BI工具等应用程序连接到Snowflake的第三方连接器。

    sql增删改查

    https://docs.snowflake.com/en/sql-reference-commands.html

    增删改查都是支持的

    sql兼容性

    https://docs.snowflake.com/en/user-guide/querying.html

    Snowflake支持标准SQL,包括ANSI SQL:1999和SQL:2003分析扩展的子集。Snowflake还支持许多命令的通用变体,这些变体不会相互冲突。

    应用

    优势

    https://www.zhihu.com/question/421034559/answer/1482996654

    它的优点可以一言以蔽之,那就是一个商业化的“Spark“集群,让你不用再操心高可用,运维,安全等等问题 (当然,SF用的是自己的技术,不是Spark)。

    https://zhuanlan.zhihu.com/p/54439354

    snowflake的优势用一句概况就是cloud-native的数据仓库服务。

     

    具体有点没找到说的,我自己根据资料写几点吧

    1.计算层独立于存储层存在,可以随时提高或降低计算资源以应对需求,可以在搬运数据的同时进行查询,可以给各个LOB提供合适的资源并独立出ETL和DevOps的处理需求。

    2.数据库规格和cluster数量方便更改,且可以做到业务不中断,不需要做数据重分布,用户体验极佳

    3.用户按使用付费,如果没有跑query就不需要付费

    4.支持半结构化和非结构化数据,方便用户导入和处理数据,不必线下处理

    5.安全性,Snowflake是把安全作为基础能力而设计的。

    https://zhuanlan.zhihu.com/p/56745552,国外的市场和法律对云平台的用户数据安全有着异常严苛的要求,Snowflake从计算链路的端到端,以及数据存储上两方面来构建其安全体系。设计出一套多层次的key加密体系,为这些加密key设计生命周期,通过key rotation来持续更新key,通过rekey来持续更新数据,最顶层key则利用硬件加密(比如阿里云上的KMS服务)来维护。)

    6.提出了With Secure Data Sharing(安全数据共享)的新概念。不会在帐户之间复制或传输任何实际数据。所有共享都是通过Snowflake的独特服务层和元数据存储来完成的。这是一个重要的概念,因为这意味着共享数据不会占用消费者帐户中的任何存储,因此不会对消费者的月度数据存储费用有所贡献。

    约束

    网上基本都是各种夸,不好找约束。

    1.由于架构和引擎的不同,snowflake不支持索引,迁移数据库时可能需要对sql做特定的改动。

    2.数据对用户不透明,不可见,只能通过使用Snowflake运行SQL查询操作才能进行访问。

    3.节点故障可以通过retry其他node来解决,当前并不处理部分失败的问题,大事务失败话重试时间会比较久。

    4.选择S3这种“Write-once”或“Append-only”的存储作为其底层存储,相比于传统存储有些劣势,在现阶段有延时问题

    企业实例

    https://zhuanlan.zhihu.com/p/248545758?utm_source=wechat_timeline

    该公司服务于多个行业的3117家不同规模的机构。在这些客户中,有7家是财富10强企业,146家是财富500强公司,分别占收入的4%和26%。以下是按行业垂直分类的代表性客户名单:

    该公司根据使用时间以及使用中的计算能力和存储容量来对其产品进行定价。这与亚马逊Redshift解决方案的定价方式类似,不过在Snowflake中,客户可以将存储和计算分开,并按照使用量付费。

    BigQuery更适合偶尔大量使用数据的用户,而Snowflake则更适合稳定使用数据的用户。

    附录

    来自db-engines.com的相关信息

    Editorial information provided by DB-Engines
    NameSnowflake
    DescriptionCloud-based data warehousing service for structured and semi-structured data
    Primary database modelRelational DBMS
    DB-Engines Ranking inforanking trend
    Trend Chart
    Score10.10
    Rank#42  Overall
     #26  Relational DBMS
    Websitewww.snowflake.com
    Technical documentationdocs.snowflake.net/­manuals/­index.html
    DeveloperSnowflake Computing Inc.
    Initial release2014
    License infocommercial
    Cloud-based only infoyes
    DBaaS offerings (sponsored links) info 
    Server operating systemshosted
    Data schemeyes info
    Typing infoyes
    XML support infoyes
    SQL infoyes
    APIs and other access methodsCLI Client
    JDBC
    ODBC
    Supported programming languagesJavaScript (Node.js)
    Python
    Server-side scripts infouser defined functions
    Triggersno info
    Partitioning methods infoyes
    Replication methods infoyes
    MapReduce infono
    Consistency concepts infoImmediate Consistency
    Foreign keys infoyes
    Transaction concepts infoACID
    Concurrency infoyes
    Durability infoyes
    In-memory capabilities infono
    User concepts infoUsers with fine-grained authorization concept, user roles and pluggable authentication
    展开全文
  • 做好应用系统调研的四大步骤

    千次阅读 2016-08-30 11:45:10
    2) 提前了解需求方的组织架构、规则制度、操作规范、标准等相关内容; 3) 了解公司竞争对手或市面上类似产品的软件或操作说明书,认真操作软件或详细阅读说明书; 4) 大致勾勒出待开发的系统,做到心中有谱; 二 ...

    公众号:构建设计编程
    欢迎关注我们的微信公众号:构建设计编程


    序言

    做好需求是一个系统建设成功的关键,系统需求人员需转换自己角色,站在用户的立场上考虑问题。**一切需求源于客户,落地于系统**。
    

    一 预热

    • 了解待开发系统所属行业的基本标准及专业术语;
    • 了解需求方的组织架构、规则制度、操作规范、标准等相关内容;
    • 了解公式竞争对手或市面上类似产品的软件或操作说明书,认真操作软件或仔细阅读操作说明书;
    • 大致勾勒出待开发的系统,做到心中有谱;

    二 文档准备

    • 调研进度安排表;
    • 调研双方联系人及项目成员联系方式;
    • 按岗位划分制定的调研问卷;
    • 调研核心问题清单;
    • 调研所需收集客户纸质文档或电子问卷清单;
    • 客户软、硬件环境配置清单;
    • 客户IT部门人员清单、技术水平;

    三 需求调研

    • 获取组织架构;
    • 获取系统使用人员规模并评估系统数据数量级别;
    • 了解用户日常办公习惯;
    • 获取业务流程;
    • 获取日常办公纸质或电子表单(带有数据的表单);
    • 获取业务统计报表、打印报表;
    • 获取用户查询数据条件;
    • 获取用户目前的痛点;
    • 获取系统使用用户的关键人员,并建立良好关系;
    • 有条件的情况下替用户处理日常业务,转换角色,获取更深层次的业务需求;

    四 调研后期处理

    • 确定系统属于何种类型的系统:台账类、流程类、状态流类、其他类或混合类;
    • 对获取的纸质电子文档或电子文档进行电子化处理并进行编号归档;
    • 制作系统级框架;
    • 制作系统级流程图
    • 制作业务架构图;
    • 制作业务流程图;

    公众号:构建设计编程
    欢迎关注我们的微信公众号:构建设计编程

    展开全文
  • 假如我来架构12306网站(二) - 浅谈系统需求调研

    万次阅读 多人点赞 2013-01-02 11:02:58
    前言: 此文的是续接假如我来架构12306网站(一) - 概论一文,目的是继续探讨整个项目的开发链条,将项目开发中的每个环节都进行一定程度的剖析研究,跟各位同行切磋技艺,共同提高,但毕竟此项目带有虚拟性,如有言...
    前言: 此文的是续接假如我来架构12306网站(一) - 概论一文,目的是继续探讨整个项目的开发链条,将项目开发中的每个环节都进行一定程度的剖析研究,跟各位同行切磋技艺,共同提高,但毕竟此项目带有虚拟性,如有言之不妥之处,还请各位同行予以谅解。
    

    需求分析是至关重要的,对于每个系统而言,需求是生命线,是一切后续工作的源头,笔者在大量的项目实践中发现成功的项目往往在需求定义上相对比较清晰,双方的沟通很顺畅,而死搅难缠的项目往往在需求阶段就能发现苗头,沟通上也困难重重,从某种意义上来讲,一个系统的开发其实就是系统开发商与客户的一次“恋爱”行为,系统从某种程度上就是双方“恋爱”的结果,能否有好的结果,取决于双方是否投入了充足的精力,是否有高度统一的认识以及一致的协调配合,在这里笔者个人非常反对如下两种片面的认识,
        ->系统开发是开发供应商(俗称“乙方”)的事情。这种思路在客户(“甲方”)中很普遍存在,甲方很多时候都认为签好合同付好钱后就等待系统上线了,这个对于跨行业过来对IT几无了解的客户存在得极为普遍,其实客户在整个过程中起着极为关键的作用,可以毫不夸张地讲,一个系统的成功是甲方的成熟度+乙方的成熟度的和值能够达到成熟的结果。
        ->需求是调研出来的,这种思路在开发商(“乙方”)中普遍存在,开发人员总是认为需求应该是客户的事情,这些认识都是片面与有害的,需求来源于调研,但又要基于现实的模型进行适度的优化并且设计后的出来的结果,这个也是很多系统失败的一个极为重要的原因,毕竟电脑系统的操作跟纸张操作模型存在着巨大的差距。

    很多的项目经理,做了很多年的项目,然而对于需求的重要作用,依然认识不清,当项目成功的时候,归于客户“好说话”,当项目碰到困难或者失败的时候,归于客户“不讲道理”,当然鉴于国内目前的信息业现状,我们只能说应用科学合理的管理方式来提高项目的成功概率,但确实无法保证项目百分之百成功。

    笔者认为,为了确保一个项目的需求阶段能够取得成功,如下方面是必不可少的:
        a. 合同中有关工作任务的定义,即俗称的 SOW定义必须很清晰,很多的开发公司的合同在这块定义极度不清晰,笔者见过的最极端的例子就是只有寥寥数语来简单介绍此合同对应的工作范围,如果各位有幸碰到这样的合同,唯一能做的就是紧紧拉住客户关系,烧香拜佛了,乞求客户控制需求欲望了,不要将一个几十万的MIS系统演变为一个数百万的ERP系统了。 那什么样的定义才能称为清晰的范围定义呢? 笔者认为必须满足如下标准:
            -> 流程定义清晰,板块划分明确; 如果无法划分的部分建议不要放到合同中,否则害人也害己;
            -> 角色分明,功能点定义明确;如果都不知道有几个用户需要使用此系统,那角色定义以及功能点定义肯定就是一塌糊涂;
            -> 必须量化每个功能点,建议大家使用业务信息字段数量以及页面数量、流程数量、报表数量的定义放到此SOW, 量化是最好的去模糊手段
        b. 定义好项目的管理组织结构,梳理好双方的项目管理组织结构,建立通畅的项目沟通渠道,并且将决策人员在关键点确认上必须予以加入,此处理论上很好解释,实践中的难处在于如何真实地确定这些实际的内容,笔者的建议是直接咨询付款决定人由他/她来直接告诉你这个结构是最为合适的;
        c. 控制好需求确认流程以及需求变更流程,并且严格形成文档, 此处的流程与文档是需求的关键环节,很多的年轻项目经理,由于阅历比较浅,总是依赖于口头上的确认,以至于日后发生争执时,只能顿足捶胸地说,悔当初没能记下来这个那个;其实严格的流程是保证效率的关键,而 文档是证据管理的根子,同时证据管理又是项目管理的关键环节,忽视证据管理的项目管理失败是在所难免的;
        d. 跟客户的干系人必须讲清楚项目的最终目标是什么,很多时候这些关键控制人总是热衷于尽力提需求,总是尽力将系统变为一个尽善尽美的系统,这个时候必须得统一大家的思路,双方的目标不是构建尽善尽美的系统,而是构建一个可用、适用系统,能够满足大多数目前能够看到的清晰需求(在合同当中严格定义过的系统),另外特别需要强调的是,尽善尽美的系统本来就不存在,人类对事物的认识总是按照哲学规律在逐步深入的,此处笔者常用的例子就是乔布斯做iPhone与iPad,在此之前他失败过多少回,何况iPhone/iPad也经历了这么多代,如果他老人家能构造一个近乎完美的iPhone,哪儿还来iPhone3, iPhone4, iPhone5这么多代的发展呢?

    结合本文的主题,假如我来架构12306网站,如何来实施需求调研工程呢?笔者根据自己的经验,大体可以分为如下几方面:
    功能需求:
    从12306设计的功能角度来看,主要需实现如下2大块业务:
    主营业务需求: 此处包含了如下几个大块的基本需求。
        客运服务需求,此处系统需求的核心是构建一个以用户为中心,围绕用户在铁路旅行方面的服务需求来进行展开的各项服务,其基础服务包含如下几块:
           出行服务: 用户注册、车票预订、退票服务、余票查询、列车时刻表查询、车次查询、发到站查询、票价查询、中转查询、车站经过、车次查询、起售时间查询、正晚点查询、客票代售点、铁路旅程规划等;
           接行服务: 车次查询、列车时刻表查询、发到站查询、正晚点查询、旅客信息查询、列车信息、乘务服务信息查询、接行信息服务等;
           托运服务: 提供货物交运、状态监控、到站提取、安全保证服务等;
           用户支付服务: 便捷支付(主流银行以及网银支付)、支付账单、对账查询、退款、支付投诉等各种支付服务;
        货运服务需求,此处系统需求的核心是构建一个以服务于货运主的货运需求为核心的各项服务,其基础服务包含如下几块:
           货运服务:其中包含整车、散货、小件物品运输业务办理、跟货运相关的理赔业务的办理等;
           货运信息服务:其中包含货运路线、车辆运输参数、运输能力、运价、保价、运输时刻信息、货物安全保障信息、运输方案等各种运输信息服务,其目的是帮助货主寻求合适的运输方案,提供便捷的货运服务;
           支付服务: 企业支付服务(含线上与线下支付服务),个人支付服务、支付安全等;
        信息发布需求,此处提供是铁路运输相关的各类法律、法规、发文、消息、新闻等各类信息;
        后台管理需求,包含如下几部分:
               客运管理后台,提供各类客运相关的基础数据譬如列车班次信息、时刻表信息、票价信息、车票分配策略调控、列车运行时刻信息、各种起售时刻信息等;
           货运管理后台,提供各类货运相关的基础数据譬如列车的车辆运输参数、线路信息、运力、运能、时刻、运价等各类跟货运相关的信息;
               信息发布管理后台,提供跟铁路运输相关的各种法规、规程、信息集装、新闻、公告信息等的录入、维护等;
           各类角色的管理,提供各种级别的角色管理,并且这些角色还需要跟各列车车次以及路局等直接相关联;
           其他系统级别的后台管理服务,譬如用户管理、用户投诉、角色管理、系统维护服务、系统监控服务等;
    增值业务需求:
        目前的12306网站暂时不提供此类业务,但笔者认为凭借着铁路在全国齐全的路网以及运价、运能的优势,在中长途的货物运输上面,公路以及民航几乎无力与其进行全面竞争,因此此处的增值业务还是大有作为的。
        物流增值服务: 考虑到铁路的布局全面性,因此建设现代化的大型物流基地,培养形成一批网络化、链条化、规模化、具有知名品牌的大型现代物流企业,为目前的货运服务提供延伸的现代物流服务而不仅仅局限于铁路运输服务是非常有切入价值的,此块增值业务为其最大的增值服务;
        电子商务服务: 由于铁路几乎掌握全国70%以上的大宗货物运输服务,因此对于供需双方的信息以及货物信息以及季节性具有非常强的全局掌握性,由此引发的信息匹配增值服务也可以极大地服务于各大型制造、物流、贸易类型的企业,由此而引发的各类电子商务增值服务也是独具天然优势的;
        其他类型的增值服务: 针对服务的个人、企业等提供各类增值服务,譬如各类出行方案挖掘、VIP服务、运输类数据挖掘带来的运输方案优化等各类增值服务将极大地带动铁路的运营活力的发挥,同时为铁路带来大量的增值收益。

    性能需求:
         精度方面的需求: 其中包括了用户的数据精度,特别是时间、金额、密码等重要敏感数据的精度要求以及各类计量规则方面的需求(含四舍五入规则等),依照铁道部的要求制定出相应的精度方面的要求;
         响应时间与时间特性方面的需求: 由于此系统服务的用户数量非常巨大,初步估算都是在数千万并发用户级别,并且考虑到后面的交易系统依然沿用了诸多旧的交易系统,因此在响应时间方面过去的基于TPS的计算模型比较难于精确地预估到在响应速度方面的需求,此处笔者建议通过原型系统的演绎方式来做,具体地来说先投入一部分资金依照目前的核心业务需求开发出一个原型交易系统,依照铁道路内部的系统架构来部署一个小型测试系统(譬如20台服务器规模)实施测试,然后做适量的服务器增减来测算CPU/Memory/Disk IOPS/Network bandwidth与用户数量的变化关系曲线图来测试用户的响应时间等方面的需求,逐步求精,但在实际的用户需求规划时依然需要坚持平时用户的单个页面响应速度<2秒,高峰时<5s这样的计算与设计标准,达到优良的用户体验;

    安全性需求:
      外部安全需求
        防黑客入侵,需要防止黑客从外部入侵的如下几种手段:
        利用操作系统以及防火墙的漏洞等进行入侵获取高级别的权限;
        利用特洛伊木马程序来感染并且获取系统的高级别权限或者窃取敏感的交易数据;
        口令猜测,通过暴力破解以及字典攻击等方式来实施管理员口令猜测,以期实现对系统的入侵;
        缓冲区溢出攻击技术;
        扫描探测技术;
        防拒绝服务攻击(DDOS),多人同时向主机提出Web请求,在流量到达一定的程度之后导致系统无法为真实正常的用户提供访问服务;
        防页面注入攻击,通过HTML、Javascript、SQL等人为地构造计算逻辑来攻入系统导致系统的崩溃或者数据异常;
        防IP伪装技术,通过截获、分析数据传送包来分析同时构造新的数据包发送到服务器来实施攻击;
      内部安全需求
        防止数据丢失与被盗的安全机制,需要杜绝生产环境下的数据丢失以及被盗,建立起一整套数据的储运、销毁等的数据安全保障机制;
        防止管理员密码遗失与被盗的安全机制,对于管理员密码,必须以一定强度的加密格式予以安全存放,同时建立严格的管理制度,禁止管理员私自将自己的密码在未经流程许可的前提下告知他人等行为发生,避免密码的传播与遗失、被盗等情形;
        防止交易数据篡改,特别是要防止超级管理员(含应用管理员与数据库管理员)在未经许可的流程下私自篡改系统数据,另外更改数据的行为系统都要有可以审核的记录,特别是账户与交易信息必须具备修正历史可供查阅;

    高可用性方面需求(HA): 可以确定的是在高可用的规划方面,应该将此系统的定位确定在7*12小时的可用度在99.9%这个级别,用户的系统可访问度定义在95%以上,这样整体的高可用能够达到大多数用户的心理预期。

    系统接口方面的需求:12306系统由于关联了众多的铁路局的内部管理系统以及调度系统,另外也关联了众多的支付接口,因此系统的接口部分内容极为众多,大体上按照性质可以划分为两个大类 即内部系统接口以及外部系统结构,另外按照提供与调用的关系 分为12306提供给其他系统的接口与调用其他系统的接口, 对于提供接口,需要明确接口标准,建议采用Restful格式来提供给其他系统并且对于普通信息可以走HTTP通道,而交易信息必须走HTTPS通道来实施,对于调用其他系统的接口将依照既有系统的接口形式来逐个细化实施;

    软件的其他部分需求: 其他方面的需求主要包括如下几块:
       运行环境方面的需求: 这当中包括了服务器端的硬件环境(服务器)、软件环境(操作系统、数据库、应用服务器、中间件)、网络环境(包括数据中心的布局以及分布式设计、网络连接以及容量设计)等方面的需求;另外对于客户端,需要明确指出支持的浏览器的种类以及版本、需要安装的安全组件(插件)等。 笔者特别需要提到的是很多需求调研都忘记确认运行环境, 结果到上线前用户使用Firefox甚至IE6等来检验发现根本无法进行验证运行的情况,其中的苦只有自己能够知晓了。
       系统可维护方面的需求: 其中包括Bug修复流程、系统发布流程、系统升级部署流程、系统扩容流程方面的需求,考虑到此系统的服务器数量众多、地域分布有一定的广度,因此在设计此部分维护性需求时必须考虑到凡此种种情况。
       系统可监控性方面的需求: 其中包含服务器端的常规监控(CPU/Memory/Disk I/O)以及网络流量监控,另外需要特别增加对于交易事务队列以及请求队列的队列长度、去化速度等方面的监控,从HTTP方面需要监控每个request的去化速度以及队列长度,从而从各个方面全面地了解系统的当前性能指标。
       其他需求包含了可移植性、可扩张性等各个方面的需求。

    需求文档的写法: 此处列出需求文档的全部目录结构供大家参考,具体的文档内容就不贴出来了。
    1. 引言    
    1.1 编写的目的    
    1.2 背景说明    
    1.3 术语定义    

    2. 任务概述    
    2.1 目标描述    
    2.2 功能性需求    
    2.3 业务信息定义    
    2.4 约束条件    

    3. 数据流图    
    3.1 全局数据流图
    3.2 各子块数据流图

    4. 系统接口    
    4.1 用户接口    
    4.2 硬件接口    
    4.3 软件接口    

    5. 性能需求    
    5.1 精度要求    
    5.2 时间特征    
    5.3 灵活性    

    6. 软件属性    
    6.1 可使用性    
    6.2 系统安全性    
    6.3 可维护性    
    6.4 可移植性    

    7. 系统配置需求    
    7.1系统硬件和软件配置
    7.2网络配置    
    7.3网络拓扑图    

    8. 其他需求    
    8.1 数据库需求    
    8.2 故障及其处理需求

    可以毫不夸张地说,需求确定的清晰程度以及双方的认可度,直接决定最终项目的成败与否,很多的同事总是抱怨客户在最后不讲道理,不留情面,其实仔细分析发现项目开始的时候项目组就已经沟通很不充分了,存在了巨大的隐患,留给整个项目的执行是无穷尽的遗憾。

    项目需求的沟通可以简单、形象地总结为一句话: 需求调研就是了解在什么环境下(服务器、客户端环境、网络环境)实现怎么样的一个系统(功能列表),其可用度如何(性能、安全、可靠度)?
         
    理论虽是如此,可实际执行的时候大家还是发现存在如下的诸多问题:
    1. 跟客户的一个领导将需求讨论清楚了,可是后面换了新领导,整个思路全变了,系统也必须大改, 如何控制需求?
    2. 跟客户下面的项目管理人员定义得很清楚了,可是等到最后给高层领导一看,才发现需求根本偏向了,怎么办?
    3. 在设计、开发过程中,客户总是想方设法变着法子来添加需求,还会有种种这样那样子的理由,需求想控也控不住;
    4. 碰到极端客户,就算你一开始跟他谈得很好,也签字认可了,到了后面一翻脸就说,这事儿我还得改,否则我就不打算让你上线?

    如此种种,令很多理论派PMP的管理人员手足无措,也不知何从处理,根据笔者的个人经验来看,如果真的出现上述情况了,那我们还得必须考虑一下,任何项目管理都是寄生于企业的管理生态与社会的交往生态当中,此处从PMP的经典理论已经无法来解决上述问题了,必须升华为管理生态以及客户关系生态来解决了,此时项目经理必须借助销售以及公司的其他各种途径来突破解决此问题了。


    后记: 当项目经理真的能够站在管理生态与客户关系生态来解决项目管理的各种棘手问题之时,也恭喜各位已经突破性升级了,笔者在多年的工作实践中,很少看到这样的优秀的项目经理,正如笔者在参加PMP大会时经常听到的一句话,经济的发展不可或缺的是项目经理,此话既是套话,同时也是实话,能够深刻理解项目管理的业务实践并且站在全局的角度来主动出击解决项目当中碰到的各种问题真可谓优秀项目经理,确实为经济发展大潮乃至人类发展大潮中的弄潮儿,必将获得个人职业乃至人生理想的成功。

    展开全文
  • 组织架构图,比较实用,收走

    万次阅读 2015-08-19 10:52:10
    每个项目启动或者调研我都会先把项目的组织架构搞清楚,然后画出来,便于团队理解系统,以及与客户的沟通。组织架构图可以显示系统职能的划分,可以知道其权责是否适当等等。每个项目的组织架构图大同小异,画的方法...
  • 这篇文章就不多说了,自行百度一下,总而言之最后我得出了一个结论——企业什么样的人员组织架构就会什么样的系统技术架构。我们先以下一幅图: 第一阶段:小型企业 这个阶段就是企业的初创阶段。公司就几个...
  • 监控系统调研报告

    千次阅读 2011-11-13 16:40:08
    监控系统调研报告各位领导,各位同事:XX地方税务局(以下简称地税局)2009年采购并部署了IBM网络及服务器设备监控管理软件(以下简称一期工程),供应商基于IBM Tivoli产品进行了数据中心机房服务器及网络设备监控...
  • 大数据部门组织架构(通用型)

    千次阅读 2020-04-30 00:03:10
    数据平台组 集群运维、性能调优; 基础服务开发 ... 搭建Hadoop、Spark等... 调研、对比服务升级等; 数据仓库组 数据建模 数据分析 ETL 数据挖掘...
  • SAP SD基础知识之组织架构设计-Shipping Point篇 今天博主项目上不太忙,关键用户在做单元测试,那就再写一篇吧,作为组织架构设计的完结篇。 Shipping Point,即装运点,同信贷控制范围一样,也是很多SD顾问...
  • 作者|杨波编辑|小智作者近期针对企业数字化和架构转型思考后陆续写了三篇文章,这篇是第二篇,主题专注组织架构转型,前一篇称为《企业的组织架构是如何影响技术架构的?》,主题是建立背景上下文 (background)...
  • 部门架构 CTO 技术总监 架构师 产品组 研发组 运维组 职责描述 CTO 沟通能力得强、情商得高,得有亲和力 管理多条业务线,产品、技术等,人员,公司,规划等 参与公司运营:什么时候应该做什么样的事情,要做什么样...
  • 软件研发团队架构目录研发人员构成研发组长美工/页面制作人员系统架构师开发工程师研发组织结构研发人员构成研发人员构成-研发组长研发组长一般由具有3~5年软件开发经验并在特定业务领域内有一定特长的人员担任对...
  • 近期要规划机房,从阿里云迁移业务到自建机房,针对目前所有...网站组织架构图   硬盘分区方案 http://solin.blog.51cto.com/11319413/1856598 Linux系统对分区的要求 1、最少要有/分
  • MES 系统调研问卷 一 业务管理 1. 组织结构部分 1.1 请介绍生产管理相关的组织架构管理范围和管理职能比如组织架构图组织中各职 能部门的职责范围各职能部门中各角色的职能范围 1.2 目前各生产线人员是否分班次人员...
  • 按语:曲健老师,82年生人,2004年参加工作。现任米么金服首席架构师。曾任职上 海社保、infosys、招商银行。右导和那些专业编辑不同之处在于往往于朋友圈或者...
  • 对于想要采用微服务架构的团队,首先要考虑如下几个前提条件: 现有软件架构是否已经服务化或者按照系统功能做了模块化切分。 团队的敏捷成熟度如何,是否有足够的 DevOps 经验。 开发团队是否有足够的架构设计能力...
  • 业务系统技术架构的方法论

    千次阅读 2019-03-18 18:30:37
    业务系统技术架构的方法论 业务类系统(通常称为To B 类产品),一般包括crm,供应链,物流等。系统架构设计非常具有挑战性。 面向用户的To C 类前台产品,无论产品经理还是用户都已经培养起了使用习惯,对...
  • 如何系统整理需求调研报告

    万次阅读 2018-05-29 01:21:19
    需求分析师/产品经理通过访谈、问卷调查、观察等技巧获取需求后,手头可能有客户提出的大量的、...本文只提供需求调研报告模板,使得需求更明确、更系统,也是之后工作(业务需求、功能需求)纲领性、可追溯文...
  • 该软件公司组织项目组完成了需求调研,现已进入到系统架构设计阶段。考虑到系统需求对架构设计决策的影响,项目组先列出了可能影响系统架构设计的部分需求如下: (a)用户界面支持用户的个性化定制; (...
  • 项目系统接口调研

    千次阅读 2013-11-15 17:51:09
    一:接口调研背景知识   1. 接口技术实现方式  (1)接口方式最高级一种是主动式,即通过直接对其它软件的数据库进行操作。这种方式因为涉及到对用户数据读写操作,对于对方软件而言,安全性是最大的问题,验证...
  • 软考系统架构设计师学习笔记

    万次阅读 2015-04-02 09:03:47
    第一章    1.1.1 系统架构师的概念 ... 现代信息系统架构”三要素... 负责 理解、管理 并最终确认和评估 非功能性系统需求,给出开发规范,搭建系统实现的核心架构,对整个软件架构、关键构建、接口 进行总体
  • 这些要求是由全国计算机专业技术资格考试办公室组织了全国相关企业、研究所、高校等许多专家,调研了很多相关企业的相应职业岗位,参考了先进国家的有关考试标准,逐步提炼,反复讨论形成的。一般的做法是先确定相应...
  • 2006年5月,我所在的公司承担了某省社会保险管理信息系统的开发工作,我在该项目中担任系统架构设计师职务,主要负责设计应用系统架构和网络安全体系架构。该系统以IC卡为信息载体,完成劳动和社会保险的主要业务...
  • 说明 某文化产业集团委托软件公司开发一套文化用品商城系统业务涉及文化用品销售定制竞拍和点评等板块以提升商城的信息化建设水平该软件公司组织项目组完成了需求调研现已进入到系统架构设计阶段考虑到系统
  • 信息安全系统架构的简述 信息安全的现状和威胁是什么样的 系统安全体系架构规划框架简介 系统安全体系架构规划方法是怎么进行的 网络安全体系架构设计有哪些,怎么用 数据库系统完整性设计原则、作用有哪些 1...
  • 撮合系统设计调研(2)

    千次阅读 2015-12-31 17:00:43
    交易系统的目标 1) 高可靠性和高性能系统 高可靠性保证了交易系统的工作是连续性无中断的,任何一条交易指令及其响应都是按序到达的,不丢失...系统在体系架构上支持分类清晰的交易、清算规则,实现对多种交易模式的支
  • 开源分布式文件系统CEPH调研

    千次阅读 2011-06-29 17:10:00
     Ceph是加州大学Santa Cruz分校的Sage Weil(DreamHost的联合创始人)专为博士论文设计的新一代自由软件分布式文件系统。自2007年毕业之后,Sage开始全职投入到Ceph开 发之中,使其能适用于生产环境。Ceph的主要...
  • 浅谈系统需求调研

    千次阅读 2013-01-06 11:50:29
    需求分析是至关重要的,对于每个系统而言,需求是生命线,是一切后续工作的源头,笔者在大量的项目实践中发现成功的项目往往在需求定义上相对比较清晰,双方的沟通很顺畅,而死搅难缠的项目往往在需求阶段就能发现...
  •  前言 当实施或评估一个sharepoint门户项目时需要收集整理需求调研问卷,这个问卷的质量其实很大程度上决定了需求调研的细致程度,获取正确合理的需求是任何软件项目成功核心因素。本文主要是实现企业门项目时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,285
精华内容 6,114
关键字:

系统调研组织架构