GCP学习笔记(三)——存储和安全

在GCP中,我们需要序列化数据使数据能够进行存储和转换。Avro时一种数据序列化方法,可以将数据转换为二进制。

非结构化数据通常存储在Cloud Storage中,结构化数据的存储方式可以由下图决定。

在这里插入图片描述

Transactional workload:需要快速插入或更新。80%写入,20%读
Analytics workload:偏向于读取整个数据集,用于决策或计划。20%写入,80%读

下面是一些存储方法的对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据仓库和数据湖的区别:

  • 数据湖是指原始未经组织的数据
  • 数据仓库是指结构化的、组织化的数据

一、Cloud Storage

Cloud Storage是用来存储非结构化数据的可管理服务。在创建项目后,可以创建buckets并向bucket上传数据或者从bucket下载数据。

Cloud Storage有四种存储类型,分别是

  • 标准存储(standard storage):用来存放经常存取的数据
  • Nearline Storage:存储不经常访问的数据,例如每个月存取一次、数据备份
  • Coldline Storage:存储不经常访问的数据,例如每三个月存取一次
  • Archive Storage:存储不经常访问的数据,例如每年存取一次、灾难恢复

Cloud Storage的特点:Persistance、Durable、Consistency、Avaliablity、High throughput。

Cloud Storage的核心是桶(bucket)和对象:

  • 桶是对象容器,桶具有全局命名空间,意味着不允许使用同名的桶。选择最接近的区域存放会减少延迟。Cloud Storage会存储桶的复制品防止数据丢失。
  • 对象存在于桶中。使用元数据来记录信息。

Cloud Storage的权限管理方法:

  • IAM :bucket level,对桶内所有对象提供相同的权限访问规则
  • ACL (access control list):bucket level或者object level
  • CMEK:使用KMS生成并管理密钥
  • CSEK:用户自己定义和管理密钥

二、Cloud Bigtable

Bigtable是一种高度可扩展的 NoSQL 数据库服务。Bigtable 是一种分布式数据库,适用于存储和处理大量结构化数据,例如时间序列数据、用户分析和财务数据。常见用例包括Gmail和Google maps.

Bigtable的整体架构如下图所示
在这里插入图片描述
客户端请求都是先经过前端服务器,然后再发送到 Bigtable 节点。集群中的每个节点会处理对该集群的一部分请求。通过向集群添加节点,不但可以增加集群能够同时处理的并发请求数量,而且还会提高集群的吞吐量上限。Bigtable 表被分成多个连续的片,这些片以 SSTable 格式存储在 Google 的文件系统 Colossus 上。

数据永远不会存储到 Bigtable 节点本身,存储到节点上的是数据的元数据,方便进行备份和故障恢复。

Bigtable的权限管理方法:

  • IAM :实例级别权限管理
  • 用户管理加密密钥(CMEK):在Cloud KMS中控制和管理的密钥来保护您的 Bigtable 实例。
  • 防火墙规则:限制对Bigtable实例的访问

Bigtable通过构建Row key(索引)来扫描、查找、排序数据。构建Row Key的方法可以是选择某一列,也可以是将多个列拼接起来。

Bigtable特点:

  • 可扩展性:Bigtable 可横向扩展以处理海量数据和高吞吐量工作负载。
  • 低延迟:为读写操作提供个位数毫秒延迟,适合实时应用。
  • 高可用性:Bigtable 自动跨多个数据中心复制数据,以实现容错和持久性。

Bigtable工具:

  • cbt:CBT是专门为Cloud Bigtable设计的命令行工具,为常见操作提供简化的界面
  • Hbase Shell:HBase shell 提供了更强大、更灵活的脚本环境,可以通过其兼容层与 Cloud Bigtable 一起使用。

Bigtable性能优化:

  • 通过CPU利用率优化节点数目
  • 将具有相似模式的数据集存储在同一个表中
  • 将相关的列放在同一个列族中。
  • 使用序列化结构存储列值
  • 使用HDD代替SSD
  • 设计合适的schema将读写操作均匀分布到个节点
  • 批处理和缓存请求以最小化往返并减少延迟。
  • 时序数据使用高/窄的表
  • Key Visualizer 会为表生成可视化报告,根据访问的行键详细说明使用情况并解决性能问题。

hotspotting问题:

  • field promotion(prefer):从列数据移到row key上
  • salting:row key额外添加一个元素

Bigtable的常见使用场景:

  • 大量(>1TB)结构化或半结构化数据
  • 高吞吐量或者变化迅速的例子,例如欺诈检测或推荐系统。
  • 时间序列数据分析,例如 IoT 传感器数据或日志数据。
  • 需要进行异步批处理或实时数据处理和分析的金融服务应用程序。
  • 以分布式方式处理大规模数据摄取和处理的应用程序。

三、Cloud SQL

Cloud SQL是一种关系型数据湖,支持MySQL, SQL Server和 PostgreSQL。 Cloud SQL实例对应一个虚拟机实例,该虚拟机包含数据库实例和软件容器来保证数据库运行。App Engine 创建使用 Cloud SQL 数据库的应用程序。

Cloud SQL权限管理:通过IAM来控制权限,通过VPC来访问私有IP

Cloud SQL性能优化:

  • 根据负载选择恰当的机器类型和存储大小
  • 启用自动存储增加
  • 通过只读副本处理查询、读取请求和分析流量,从而减少主实例的负载。

Cloud SQL的特点:

  • 高可用性:自动故障和转移
  • 高扩展性:垂直扩展您的实例以处理增加的工作负载,并通过添加只读副本来水平扩展以提高读取性能。
  • 安全性:它提供内置的安全功能,例如静态加密、传输中加密以及与 IAM 集成以实现访问控制。
  • 兼容性:Cloud SQL 支持 MySQL、 PostgreSQL 和 SQL Server 等流行的关系数据库引擎,可以轻松迁移现有应用程序。

Cloud SQL的常见使用场景:

  • 本地数据库例如MySQL 和PostgreSQL迁移到云端
  • 自动复制托管备份
  • 需要托管和可扩展的关系数据库后端的 Web 应用程序。

Cloud SQL监控指标:存储利用率、CPU利用率、读写操作等

四、Cloud Spanner

Cloud Spanner 是可水平扩展、全球分布且高度一致的关系数据库服务。 Cloud Spanner 旨在处理跨多个区域的大容量事务性工作负载。

Spanner 的结构
在这里插入图片描述
Cloud Spanner的权限控制:

  • IAM:项目、实例级别权限
  • 细粒度访问控制(fine-grained access control):结合了IAM的优势与传统的基于 SQL 角色的访问控制。 通过细粒度的访问控制,可以控制访问表、列和视图。
  • 用户加密密钥(CMEK):在云密钥管理服务 (KMS) 中控制和管理的密钥来保护 Spanner 数据库。

Cloud Spanner的性能优化

  • 利用 Cloud Spanner 的自动扩展功能来处理不同的工作负载。
  • 使用分布式事务和分区数据来实现高可扩展性和吞吐量。
  • 利用读写优化,例如使用索引选择和批处理写入。
  • 二级索引:添加二级索引可以更有效地查找该列中的数据,还可以帮助 Spanner 更高效地执行扫描,实现索引扫描而不是全表扫描。

Cloud Spanner的特点:

  • 全球可扩展性和一致性:Cloud Spanner 将数据分布在多个区域,在全球范围内提供低延迟访问和强一致性保证。
  • 关系模型:它支持 SQL 查询和模式,可以很容易地与现有的应用程序和工具集成。
  • 自动扩展:Cloud Spanner 可以根据工作负载需求动态调整其资源,无需人工干预即可实现无缝扩展。
  • 自动备份和复制:提供连续备份和复制,确保数据持久性和灾难恢复。
  • 强大的安全性:Cloud Spanner 与 IAM 集成以实现访问控制,并提供静态和传输中的加密。
  • interleaved tables:交错表是一种用于组织和关联数据的特殊表设计模式。在交错表模式下,父表和子表之间可以形成嵌套关系,子表的行可以"交错"存储在父表的行内。交错表可以减少查询开销,紧密关联数据,分布式事务支持。

Cloud Spanner的使用场景:

  • 具有低延迟要求和跨多个区域强一致性需求的全球应用程序。
  • 需要高可扩展性和性能的大规模事务性工作负载。
  • 数据隔离和安全性至关重要的应用程序。

五、Firestore

Firestore是灵活、可扩展且无服务器的 NoSQL 文档数据库。 它旨在实时跨多个客户端和平台存储和同步数据。 Firestore 提供灵活的数据模型、自动扩展和内置离线功能,使其非常适合构建响应迅速且可扩展的应用程序。

Firestore的权限控制:

  • IAM:实例级别权限控制
  • Firebase Authentication:对用户进行身份验证和授权。

Firestore的特点:

  • 实时数据同步:Firestore 提供跨客户端和平台的无缝实时更新,支持协作和响应式应用程序。
  • 可扩展性和自动扩展:它可以自动扩展以处理高读写负载,无需人工干预。
  • 离线支持:Firestore 提供内置的离线功能,即使在与网络断开连接的情况下,应用程序也能继续运行。
  • 与 Firebase 生态系统集成:Firestore 与身份验证、云功能和云存储等其他 Firebase 服务很好地集成,提供了一个全面的开发平台。

Firestore的性能优化:

  • 根据访问模式和查询设计数据结构和文档层次结构。
  • 对经常查询的属性使用索引属性以提高查询性能。
  • 利用子集合来组织相关数据并避免大型文档。
  • 使用批量写入在单个原子事务中执行多个操作。
  • 实施高效的数据获取策略,例如使用文档引用或分页。

Firestore的使用场景:

  • 离线优先的应用程序需要在连接恢复时离线运行并同步数据。
  • 需要跨多个设备进行实时数据同步的移动和 Web 应用程序。
  • 涉及多个用户同时更新共享数据的协作应用程序。
  • 具有复杂数据模型和层次关系的应用程序。

六、Cloud Datastore

Cloud Datastore是NoSQL文档数据库,它是一种高度可扩展且完全托管的数据库服务,允许以schema-less方式存储和查询结构化数据。 Datastore 提供 ACID 事务、自动可伸缩性和内置复制以实现高可用性。。每个project里只能有一个Datastore。

Datastore的一些使用场景:产品目录、移动APP用户信息、游戏保存状态、ACID。

Datastore和关系型数据库对比:
在这里插入图片描述
Cloud Datastore的权限控制:

  • IAM:实例级别权限控制
  • 细粒度控制:使用命名空间来隔离不同的组

Cloud Datastore的特点:

  • 可扩展性:Datastore 可自动扩展以处理大量数据和高吞吐量工作负载。
  • ACID 事务:它支持具有强一致性保证的多实体组事务。
  • 自动复制:Datastore 跨多个数据中心自动复制数据以实现高可用性和持久性。
  • 强大的查询功能:Datastore 提供强大的查询语言,支持筛选、排序和投影。

Cloud Datastore的性能优化:

  • 根据访问模式仔细设计实体层次结构和实体属性
  • 对经常查询的属性使用索引属性以提高查询性能。
  • 利用批处理操作减少往返次数并提高写入性能。
  • 利用查询游标有效地对大型结果集进行分页。
  • 考虑跨多个 Datastore 命名空间对数据进行分片以分配负载。

Cloud Datastore的使用场景:

  • 需要可扩展且灵活的数据存储解决方案的 Web 和移动应用程序。
  • 实时分析和事件跟踪,其中快速写入和低延迟查询很重要。
  • 需要高可用性和自动复制以确保数据持久性的应用程序。

Cloud Datastore的报错分析:

  • UNAVALIABLE, DEADLINE_EXCEEDED:指数级别重连
  • INTERNAL:尝试不超过一次
  • 其他:不要尝试重连

七、安全

1. Data Loss Prevention

2. Stackdriver

Stackdriver用来存储、监控、分析和告警日志数据。

Stackdriver的子产品和其用途包括:

  • Stackdriver Debugger:实时检测应用状态而无需停止应用
  • Stackdriver Error reporting:收集和分析应用的报错
  • Stackdriver Audit Logging:分析日志数据、查看数据权限
  • Stackdriver Monitoring:实时监控资源的性能和健康状态
  • Stackdriver Trace:分析应用的延迟和性能

3. IAM

IAM包含三种成员类型:

  • service account:非人类用户,例如应用
  • google account:对于单个用户
  • google group:对于多个用户

八、网络概述

Google Cloud Platform (GCP) 提供强大且可扩展的网络基础设施来支持各种云服务和应用程序。 GCP 网络旨在提供高性能、安全性和可靠性。 以下是 GCP 网络的关键组件和功能的概述:

  • 虚拟私有云 (VPC):VPC 是 GCP 内逻辑隔离的全球网络,允许您创建和管理虚拟机实例、容器和其他资源。 每个VPC都与一个IP地址范围相关联,并且可以进一步划分为子网。
  • 子网:子网是 VPC 的细分,使您能够隔离网络资源。 您可以指定子网的 IP 地址范围并使用防火墙规则控制子网之间的流量。
  • 防火墙规则:GCP 提供网络级防火墙规则,允许您控制进出资源的入站和出站流量。 防火墙规则可以在 VPC 级别或子网级别定义,并且可以基于 IP 地址、协议和端口。
  • 负载均衡:GCP 提供多种负载均衡选项来跨资源分配流量。 其中包括 HTTP(S) 负载平衡、SSL 代理负载平衡、TCP 代理负载平衡和网络负载平衡。 负载均衡器自动扩展和分配流量,以确保高可用性和性能。
  • Cloud Router:Cloud Router 是一项完全托管的服务,可在您的 VPC 网络内以及 VPC 网络与本地网络之间提供动态路由。 它同时支持 BGP(边界网关协议)和静态路由。
  • Cloud VPN:Cloud VPN 使您能够在 VPC 网络与本地或其他外部网络之间建立加密的 IPsec 隧道。 它为远程办公室、数据中心和其他网络资源提供安全连接,更适用于低速传输。
  • 云互连(Cloud Interconnect):云互连在本地网络和 GCP 之间提供专用且低延迟的连接。 与 VPN 相比,它提供更高的带宽和更可靠的连接。 云互连支持专用互连和合作伙伴互连等选项。
    • 合作伙伴互连(Partner Interconnect):合作伙伴互连允许您使用受支持的服务提供商连接到 GCP。 它使您能够通过合作伙伴的网络在本地网络和 GCP 网络边缘之间建立直接物理连接。 与 VPN 连接相比,此连接提供更高的带宽和更低的延迟。
    • 专用互连(Dedicated Interconnect):专用互连允许您在本地网络和 GCP 网络边缘之间建立直接物理连接。 通过专用互连,您可以拥有专用于您的组织的私人连接。 此选项适合大规模工作负载或当您需要对网络连接进行更多控制时。
  • Cloud DNS:Cloud DNS 是 GCP 提供的可扩展且可靠的域名系统 (DNS) 服务。 它允许您管理域名并将其解析为相应的 IP 地址。
  • 全局负载均衡:GCP 的全局负载均衡 (GLB) 跨多个区域分配传入流量,以确保高可用性并最大限度地减少延迟。 它会自动将用户定向到最近且资源状况良好的可用区域。
  • Cloud CDN:Cloud CDN(内容分发网络)是一种分布式边缘缓存服务,可以缓存内容并将内容分发到更接近最终用户的位置。 它通过减少延迟和卸载源服务器的流量来帮助提高性能。