精华内容
下载资源
问答
  • 谷歌云的七大优势

    2021-10-09 18:10:29
    为什么众多服务商选择了谷歌云服务?谷歌云的优势在哪?本文从7个方面阐述谷歌云平台及其产品优势。

    根据Canalys的统计数据,2021年第二季度谷歌云业务占比排名全球第三,占比8%,成为全球第三云服务提供商,相比2020年第二季度谷歌云营收同比增速53.9%。而21年6月,有消息称苹果成谷歌云存储最大企业客户,今年将为谷歌云服务花费约 3 亿美元。而在苹果购买谷歌云服务后,谷歌云的前5大客户分别为:苹果、字节跳动、Spotify、Twitter、Snapchat。在公布了第二季度财报后,谷歌母公司Alphabet的股价上升3%,而股价分析师也上调了对Alphabet的股价指导。

    为什么众多企业纷纷选择了谷歌云(GCP)呢?

    1. 价格

    在ToB业务中,价格永远是第一要素,Google 以分钟为单位计费(最低收费为 10 分钟),因此只需为使用的计算时间付费,而且谷歌云在客户作出使用承诺后,可提供了相应的折扣,用的越多则价格越低。

    以下是某网站的GCP和AWS价格对比,相同的服务器和数据库,相同的使用量,谷歌云的价格为AWS价格的77%。虽然在实际的使用过程中,需求有所不同,但是总体而言,谷歌云的定价会比AWS低20%-30%。

    价格对比

    2. 独家私有全球光纤+分层网络

    2016 年 6 月 29 日,Google 宣布投资FASTER Cable System,该系统使 Google 可以访问美国和日本之间 60Tbps 的电缆总带宽中的 10Tbps(每秒太比特)。他们将其用于 Google Cloud 和 Google App 客户。这条 9,000 公里的跨太平洋电缆是有史以来最大容量的海底电缆,在美国俄勒冈州和日本有两个登陆点。谷歌也是唯一可以使用俄勒冈州和日本之间的一对 100Gb/sx 100 波长光传输线的六个成员之一。

    2018 年 7 月 17 日,谷歌宣布了其第一条私有跨大西洋海底电缆,也被称为“杜南”。这条电缆从美国弗吉尼亚海滩穿过大西洋到达法国大西洋沿岸。

    目前Google已于全球投资18条海底电缆、27个云计算区域(Cloud Region)、以及82个云计算可用区。使用自家的海底电缆使得谷歌云无需经过其他Pop节点,节省了在各个节点的时间,提高了速度和稳定性。

    不仅如此,Google Cloud Platform 推出了单独的高级层和标准层网络。这使它们成为第一个提供分层云网络的主要公共云。高级层通过 Google 精心配置、低延迟、高度可靠的全球网络传输流量。冗余是关键,这就是为什么 Google 网络上的任意两个位置之间至少有三个独立路径(N+2 冗余)的原因,这有助于确保即使在发生中断的情况下,流量也能在两个位置之间继续流动。

    标准层提供的网络质量可与其他主要公共云相媲美。它通过传输 (ISP) 网络而不是 Google 的网络将 GCP 的出站流量传送到互联网。

    3. 虚拟机实时迁移

    与其他云服务商相比,Google 提供了主机之间虚拟机的实时迁移这也是谷歌云区别于AWS、Azure的一个优势,这使企业可以 24*7 全天候启动和运行,而不会影响性能。谷歌早在 2014 年就推出了这项服务。

    在 GCP 虚拟机服务的情况下,软件或硬件更新(需要保持高水平的安全性和稳定性)不会对服务性能产生负面影响。GCP 确保在主机之间迁移实例——如果机器 1 需要维护和重启,给定的功能服务迁移到机器 2。这样,谷歌能够履行其 SLA(服务级别协议)规定的义务,以便谷歌计算引擎确保单个实例 99.95% 的可用性和不同区域中多个实例的 99.99% 可用性

    4.冗余备份

    谷歌云存储是为99.9999999%的耐久性而设计的,有4种不同的存储类型:冷线存储(COLDLINE)、近线存储(NEARLINE)、标准存储(STANDARD)和Archive存储。它以冗余方式存储数据,通过自动校验来确保数据的完整性。谷歌多使用多区域存储,它也是地理冗余的,这意味着云存储在桶的多区域位置内至少有两个区域冗余地存储你的数据。由于涉及到谷歌云主机,这确保你永远不会丢失你的数据,即使是在发生灾难的情况下。

    关于四种存储方式,点此查看。

    5.安全性

    谷歌的全球规模的技术基础设施旨在提供,从谷歌的数据中心到其运营流程。尽管谷歌是世界上最大的硬件制造商之一,但它并不出售其服务器;这些服务器只为内部使用而建造,确保谷歌对建造过程保持完全控制。

    除了对其平台、客户和数据中心之间传输的所有数据进行加密外,GCP还默认对GCP服务中所有静止的数据进行加密。此外,GCP使开发人员能够在应用层对云应用程序进行加密,以实现最高级别的数据安全。

    谷歌云从不访问客户的数据,除非这样做是履行合同义务的绝对必要,例如在解决技术或安全问题时。GCP的内部技术控制要求任何访问客户内容的员工提供有效的商业理由,而且谷歌会定期进行审计,以确保这些访问控制得到遵守。

    6.大数据和人工智能

    讲到大数据和人工智能,Google绝对是佼佼者,也是目前谷歌主打的谷歌云优势。

    当大数据时代来临之前,Google的搜寻引擎就已经在拥有来自世界各地使用者的大量浏览网页行为资料,并且Google自建的机房、资料储存跟资料分析方法,也不断从这些犹如矿脉的资料当中,透过强大的运算资源及资料科学专业,取出真正的具有商业价值的资讯。

    拥有将近二十年的大数据资料处理经验,Google标榜:使用者在GCP中,也同时能享有与Google相同人工智能、机器学习服务。不管是安排资料处理流程的Cloud Dataflow,或是云端资料仓储(data warehouse)还能下SQL指令的BigQuery,都是非常方便上手以及规划数据分析工作负载的服务,都是协助企业转型的好选择。

    人工智能(AI)工具的选择上,Google也有针对不同程度的使用者提供相对应的服务。比方说:从简单可以直接拿来侦测图像内容的CloudVision API,亦或是自行部署机器学习模型的AI 平台、AutoML;又或是提供各种机器学习演算法给开发者撰写程式的Tensorflow,都能让使用者依照各自需求建立自己的AI流程,让本来复杂的程序变得更简单。

    7.容器化管理和多云服务

    大家应该早就听过Kubernetes这个服务名称,它最早是一个由Google开发的一个容器(container)调度管理平台,因Docker的微服务技术兴起,现在许多游戏产业、互联网的服务都是经过容器化的设置,将服务直接部署在云端。因此,GCP整合了Kubernetes的服务,称作GKE(Google Kubernetes Engine),让开发人员可以专注在程序的设计上,底层程序的代管还有资源部署,Google可以帮你架设,如果要更改配置(configuration)用简单的指令和设定就能完成。

    根据 Flexera 的 2021 年云状况报告,92% 的企业拥有多云战略,而 80% 的企业拥有混合云战略。金融服务公司通常更喜欢混合环境,因为合规要求要求在本地托管某些工作负载。针对企业的多云、混合云的需求,谷歌推出了Anthos,Anthos是以Kubernetes为核心的混合云/多云管理平台。通过使用Anthos,Google Cloud 客户可以在其本地数据中心和云之间选择一系列混合连接选项,适用于任何位置、预算或带宽要求,以及专用互连和合作伙伴互连。

    以上就是我们归纳出的谷歌云服务七个不得不用的理由,相信通过本篇文章的介绍,读者已经对谷歌云跃跃欲试。当然,个人认为谷歌云还有其他的优势,例如:支援多种开源软体(Open Source)在云端上使用,对开发者来说十分方便且友善,能在搬迁环境时减少更改程序负担的优点。

    Cloud Ace

    展开全文
  • 谷歌云GCP

    千次阅读 2021-01-31 11:15:38
    其中谷歌云的实验操作平台是:https://www.qwiklabs.com/,获得的谷歌云Coursera认证(该认证包括Qwiklabs平台的实验)如下: 2020/3/26-2020/4/1 Essential Google Cloud Infrastructure: Core Services

    感谢公司赞助了Google Cloud Platform(GCP) Coursera课程:https://www.coursera.org/,包括云基础设施,应用开发,数据湖和数据仓库相关知识。

    其中谷歌云的实验操作平台是:https://www.qwiklabs.com/,获得的谷歌云Coursera认证(该认证包括Qwiklabs平台的实验)如下:

    2020/3/26-2020/4/1Essential Google Cloud Infrastructure: Core ServicesCertificated
    2020/4/2-2020/4/5Essential Google Cloud Infrastructure: FoundationCertificated
    2020/4/6-2020/4/11Essential Google Cloud Infrastructure: Core ServicesCertificated
    2020/4/12-2020/4/16Elastic Google Cloud Infrastructure: Scaling and AutomationCertificated
    2020/4/17-2020/4/21Reliable Google Cloud Infrastructure: Design and ProcessCertificated
    2020/4/22-2020/4/26Getting Started With Application DevelopmentCertificated
    2020/4/24-2020/5/10Modernizing Data Lakes and Data Warehouses with GCPCertificated
     Building Batch Data Pipelines on GCP 

       也推荐 John J. Geewax 写的《Google Cloud Platform in Action》这本书作为参考阅读

     

     

    目录

    什么是云计算

    云计算特点

    云计算分类

    Region and Zone

    IAM   

    VPC Network

    GCP服务

    Computing

    Google Kubernetes Engine (GKE) 

    Cloud Storage

    Data & Analytics

    Cloud SQL

    Cloud Spanner

    DataStore

    Bigtable

    BigQuery

    Dataproc

    Cloud Pub/Sub

    Datalab

    Comparing

    Cloud Composer & Apache Airflow

    Data Catalog

    Google Data Studio

    Monitoring

    Logging

    Machine Learning

    Cloud Build

    Cloud Run & Cloud Functions & App Engine

    Management Tool

    Pricing


       谷歌云首页:https://cloud.google.com/ 

       首先,GCP是Google Cloud Platform,谷歌云平台的缩写,GCP主要包括 Compute,Storage,Big Data ,Machine Learning (AI) 四大类服务,其他还有Networking,Pricing,SDK,Management Tool,IoT,Mobile 等分类。

     

    什么是云计算

    云计算特点

    • 按需自助服务
    • 无处不在的网络访问
    • 与位置无关的资源池
    • 快速弹性
    • 按使用交费

    云计算分类

    按照云计算的服务模式,大体可以分为:IaaS、PaaS、SaaS三层

    • IaaS: Infrastructure as a Servic

    基础设施即服务,通过网络向用户提供IT基础设施能力的服务(计算,存储,网络等)。

    • PaaS: Platform as a Service

    平台即服务,指的是在云计算基础设施之上,为用户提供应用软件部署和运行环境的服务。

    • SaaS: Software as a Service

    软件即服务,是指基于网络提供软件服务的软件应用模式。

    用盖房子打个比方:IaaS就好比只提供一片土地,用户买下之后,所有的工作还得用户自己去做,PaaS就好比在这片土地上给用户建好了楼,用户入住之前只需要自己装修一下,而SaaS不仅帮用户把楼建好,还装修好,用户买下即可拎包入住。

    按照云计算的目标用户,分为公有云、私有云、混合云和行业云(专有云)

    • 公有云:一般由云计算服务商构建,面向公众、企业提供公共服务,由云计算服务商运营
    • 私有云:由企业自身构建,为内部使用的云服务
    • 混合云:当企业既有私有云又采用公有云服务时,这两种云之间形成内外数据和应用的互动
    • 行业云:由利益相关、业务相近的组织掌控和使用,例如某省各级政府机关和事业单位共同利用政务专有云进行日常办公及服务大众。

    Region and Zone

    地域与分区。每个地域下有不同的分区,同一地域内的网络延迟通常在5毫秒以下。为了容灾,可以把我们的应用分布在多个地域。

    IAM   

    Identity and Access Management,即身份识别和访问管理。

    它包括三个部分:

    Who:
           可以通过google account, google group, service account定义。

    Can do what: 可以通过 IAM role 定义,它是一个 permissions 的集合。

    有三种类型的角色:

    • Primitive role

    • Predefined role

    • Custom role: can only be defined in organization or project, but not in folders

    On which resource

    GCP资源架构:

    polices can define in organization, folder, project, they are inherited in the hierarchy.

    Projects are the main way you organise your gcp resources.

    每个 Project 有:

    • Project ID: 不可变的 (assigned by you)

    • Project Name: 可变的 (assigned by you)

    • Project number: 不可变的 (assigned by GCP)

    Policies defined in organisation level can be inherited to all children.

    GCP use least privilege in managing any kind of compute infrastructure.

    The policies implemented at a higher level in this hierarchy can’t take away access that’s granted at a lower level
            Eg: if you grant Editor role to Organisation and Viewer role to the folder, then the folder is granted the Editor role.

    Projects can have different owners and users - they are built separately and managed separately.

    When using GCP, it handles most of the lower security layer, the upper layers remain the customer’s responsibility

    VPC Network

    Virtual Private Cloud: it connects your GCP resources to each other and to the internet.

    In the example below, us-east1-b and us-east1-c are on the same subnet but in different zones

    VPCs have routing tables, you can define firewall rules in terms of tags on compute engine.

    VPC Peering: establish a peering relationship between projects
    Shared VPC: you can use IAM to control

    GCP服务

    1. GCP四大类服务如下:

    2. 有四种方式与 GCP 交互:

    • GCP console

    https://cloud.google.com/console

    • Cloud Shell and Cloud SDK

    包括: gcloud, gsutil (Cloud Storage), bq (BigQuery) 等。

    如上图所示,点击用户头像旁的激活 Cloud Shell 图标, 会在 web 控制台下方出现 shell 命令行。

    可以点击“打开编辑器”:

    点击“打开终端”按钮即可回到命令行界面。

    本地的话,在https://cloud.google.com/sdk/docs/install下载官方Google Cloud SDK程序,Windows需要配置bin路径到PATH,其他系统也需要配置环境变量。

    初始化SDK:gloud init

           gcloud config list

           gcloud info

           gcloud compute instances list

           gcloud components list

           gcloud components update

           gcloud auth list

           export GOOGLE_APPLICATION_CREDENTIALS等。

    • API

    APIs Explorer is an interface tool that let you easily try GCP APIs using a browser

           https://developers.google.com/apis-explorer

    3. Cloud MarketPlace (Cloud Launcher)

    可以在 GCP 上很快部署软件包,比如LAMP (Linux+Apache+MySQL+PHP) 应用。

    搭建了 LAMP (Linux + Apache + MySQL + PHP) 的博客案例,最终效果图如下:

       

    Computing

    谷歌提供的云计算服务中,归类如下:

    Compute Engine属于IaaS,Kubernetes Engine属于Hybrid,App Engine属于PaaS,Cloud Functions属于Serverless。

    Google Kubernetes Engine (GKE) 

    容器编排,可以管理和扩展应用等。Pod 是 Kubernetes 中最小的可部署单元。

    In GCP, node is VM running in Compute Engine. The smallest deployable unit in Kubernetes. It has 1 container often, but it could have multiple containers, where the containers
    will share the networking and have the same disk storage volume.

    Demo及常用命令可查看官方文档 Deploying a containerized web application: https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app

    • 构建 (build) 和标记 (tag) Docker 映像:
    docker build -t gcr.io/${PROJECT_ID}/hello-app:v1 .

    运行 docker images 命令以验证构建是否成功:

    docker images
    • 本地运行容器(可选)
    1. 使用本地 Docker 引擎测试容器映像:

    docker run --rm -p 8080:8080 gcr.io/${PROJECT_ID}/hello-app:v1
    • 将 Docker 映像推送到 Container Registry

       必须将容器映像上传到 Registry,以便 GKE 集群可以下载并运行该容器映像。在 Google Cloud 中,Container Registry 默认处于启用状态。

    1. 为您正在使用的 Google Cloud 项目启用 Container Registry API

      gcloud services enable containerregistry.googleapis.com
      
    2. 配置 Docker 命令行工具以向 Container Registry 进行身份验证:

      gcloud auth configure-docker
      
    3. 将刚刚构建的 Docker 映像推送到 Container Registry:

      docker push gcr.io/${PROJECT_ID}/hello-app:v1
    • 创建 GKE 集群
    1. 创建名为 hello-cluster 的集群:

      • 标准集群:

        gcloud container clusters create hello-cluster
        
      • Autopilot 集群:

        gcloud container clusters create-auto hello-cluster
        
    2. 创建 GKE 集群并进行运行状况检查需要几分钟的时间。

    3. 该命令运行完后,请运行以下命令以查看集群的三个工作器虚拟机实例:

      gcloud compute instances list
    • 将应用部署到 GKE

    可以将构建的 Docker 映像部署到 GKE 集群。

    1. 为 hello-app Docker 映像创建 Kubernetes 部署。

      kubectl create deployment hello-app --image=gcr.io/${PROJECT_ID}/hello-app:v1

      以前老版本是 kubectl run

    2. 将部署副本的基准数量设置为 3。

      kubectl scale deployment hello-app --replicas=3
    3. 为您的部署创建一个 HorizontalPodAutoscaler 资源。

      kubectl autoscale deployment hello-app --cpu-percent=80 --min=1 --max=5
      
    4. 如需查看已创建的 Pod,请运行以下命令:

      kubectl get pods
      
      输出:
      NAME                         READY   STATUS    RESTARTS   AGE
      hello-app-784d7569bc-hgmpx   1/1     Running   0          10s
      hello-app-784d7569bc-jfkz5   1/1     Running   0          10s
      hello-app-784d7569bc-mnrrl   1/1     Running   0          15s
    • 部署应用
    1. 使用 kubectl expose 命令为 hello-app 部署生成 Kubernetes 服务。

      kubectl expose deployment hello-app --name=hello-app-service --type=LoadBalancer --port 80 --target-port 8080
      
      此处,--port 标志指定在负载平衡器上配置的端口号,--target-port 标志指定hello-app容器正在侦听的端口号。
    2. 运行以下命令以获取 hello-app-service 的服务详情。

      kubectl get service
      
    3. 将 EXTERNAL_IP 地址复制到剪贴板(例如:203.0.113.0)。

      注意:预配负载平衡器可能需要几分钟的时间。 在预配负载平衡器之前,您可能会看到 <pending> IP 地址。

    现在,hello-app Pod 已通过 Kubernetes 服务公开发布到互联网,您可以打开新的浏览器标签页,然后导航到先前复制到剪贴板中的服务 IP 地址。您会看到一条 Hello, World! 消息以及一个 Hostname 字段。Hostname 对应于向浏览器传送 HTTP 请求的三个 hello-app Pod 中的一个。

    • 部署新版本应用

    在本部分中,您将通过构建新的 Docker 映像并将其部署到 GKE 集群,来将 hello-app 升级到新版本。

    GKE 的滚动更新功能让您可以在不停机的情况下更新部署。在滚动更新期间,GKE 集群将逐步将现有 hello-app Pod 替换为包含新版本的 Docker 映像的 Pod。在更新期间,负载平衡器服务仅将流量路由到可用的 Pod。

    1. 返回到 Cloud Shell,现在您已在其中克隆了 hello 应用源代码和 Dockerfile。 更新项目里的文件为新版本 2.0.0

    2. 构建并标记新的 hello-app Docker 映像。

      docker build -t gcr.io/${PROJECT_ID}/hello-app:v2 .
      
    3. 将映像推送到 Container Registry。

      docker push gcr.io/${PROJECT_ID}/hello-app:v2
      

    现在,您可以更新 hello-app Kubernetes 部署来使用新的 Docker 映像。

    1. 通过更新映像,对现有部署进行滚动更新:

      kubectl set image deployment/hello-app hello-app=gcr.io/${PROJECT_ID}/hello-app:v2
      
    2. 运行 v1 映像的 Pod 停止运行后,系统会启动运行 v2 映像的新 Pod

      watch kubectl get pods
      
      输出:
      NAME                        READY   STATUS    RESTARTS   AGE
      hello-app-89dc45f48-5bzqp   1/1     Running   0          2m42s
      hello-app-89dc45f48-scm66   1/1     Running   0          2m40s
      
    3. 在单独的标签页中,再次导航到 hello-app-service 外部 IP。您现在应该看到 Version 被设置为 2.0.0.

    清理

    为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

    1. 删除 Service:此步骤将取消并释放为 Service 创建的 Cloud Load Balancer:

      kubectl delete service hello-app-service
    2. 删除集群:此步骤将删除构成集群的资源,如计算实例、磁盘和网络资源:

      gcloud container clusters delete hello-cluster
    3. 删除容器映像:此操作会删除推送到 Container Registry 的 Docker 映像。

       gcloud container images delete gcr.io/${PROJECT_ID}/hello-app:v1  --force-delete-tags --quiet
       gcloud container images delete gcr.io/${PROJECT_ID}/hello-app:v2  --force-delete-tags --quiet
      

    以下是我的一个小试验:

    在 VM instances里可以看到:

    结果如下:

    Cloud Storage

    对象存储,有 unique key 可以访问对应对象。在 Cloud Storage 中,每个对象都有一个 URL,并且该 URL 不可变。 

    Cloud Storage 保留修改历史,存储对象历史,我们可以查看版本列表,还原或者删除。

    Cloud Storage 提供生命周期管理,比如你可以删除 5 天以前的对象。

    用途:

    • serving website content

    • storing data for archival and disaster recovery

    • distributing large data objects to your end users via direct download

    For most case, IAM is sufficient, but if you need finer control, you can create ACLs (access control lists).

    每个访问控制列表包括:

    • a user or group

    • a permission

    Cloud Storage 有不同的存储类型: Multi-Regional, Regional, Nearline, Coldline

    3 Ways to bring data into Cloud Storage:

    • Online Transfer

    • Storage Transfer Service

    • Transfer Appliance

    Data & Analytics

    Cloud SQL

    RDBMS,目前支持 MySQL,PostgreSQL 和 SQL Server 关系型数据库。数据大小最大是 10 TB,如果数据量大于10 TB,建议选择 Cloud Spanner

    Cloud Spanner

    horizontally scalable RDBMS

    什么时候使用?

    • A relational database that need strong transactional consistency (ACID)
    • Wide scale
    • Higher workload than Cloud SQL

    Spanner vs Cloud SQL

    Spanner 对 MySQL/PostgreSQL/SQL Server 不兼容

    Spanner architecture

    • Nodes handle computation, each node serves up to 2 TB of storage
    • Storage is replicated across zones, compute and storage are separated
    • Replication is automatic

    DataStore

    • NoSQL
      • Flexible structure/relationship
    • No Ops
      • No provisioning of instances
      • Compute layer is abstracted away
    • Scalable
      • Multi-regions access
      • Sharding/replication automatic
    • 每个项目只能有 1 个 Datastore

      什么时候使用 Datastore

    • 应用需要扩展

    • ACID 事务,eg: transferring funds

    用例:产品目录 - 实时库存;User profiles - 手机应用;游戏存储状态。

    什么时候不使用 Datastore

    • 需要分析 (full SQL semantics),最好使用 Big Query/Cloud Spanner
    • 需要读写能力 (每秒10M+ read/writes),最好使用 Bigtable
    • 不需要 ACID时,最好使用 Bigtable
    • 需要迁移比如MySQL时,最好使用 Cloud SQL
    • 要求延迟性比较小,最好使用内存数据库,比如 Redis

    Relational Database vs Datastore

    Entities can be hierarchical

    查询和索引

    查询

    • retrieve entity from datastore
    • query methods
      • programmatic
      • web console
      • GQL (Google Query Language)

    索引

    • queries get results from indexes

    • index type
      • Built-in: Allows single property queries
      • Composite: use index.yaml

    注意事项:避免过度使用index

    • solutions:

      • 使用 index.yaml 缩小 index 范围
      • 不需要 索引时,不使用 index properties 

    数据一致性

    Performance vs Accuracy

    • Strongly Consistent
      • Parallel processes with orders guaranteed
      • Use case: financial transaction
    • Eventually Consistent
      • Parallel processes not with orders guaranteed
      • 用例:人口普查 (顺序不重要)

    以下是 Entity 详情示例:

           可以看到程序返回的JSON结构是:

                   

    结果如下:

    Bigtable

    NoSQL. 读写都支持高吞吐性. 低延迟。Google Analytics, Gmail 等主要产品都使用了Bigtable。

    Bigtable的层次结构,涉及实例,集群和节点,而每个实例的数据模型涉及表,行,列族和列限定符。

    表的设计如图所示:

    Row key is only indexed item.

    It offers similar API as HBase,我们都知道 HBase 是在 Google Bigtable 2006年发表的论文里的设计后开源出来的

    区别:

    • Bigtable can scale and manage fast and easily (Bigtable 能够更轻松地扩展到更大数量的节点,从而可以处理给定实例的更多整体吞吐量。HBase 的设计需要一个主节点来处理故障转移和其他管理操作,这意味着随着您添加越来越多的节点(成千上万个)来处理越来越多的请求,主节点将成为性能瓶颈)

    • Bigtable encrypts data in-flight and at rest

    • Bigtable can be controlled access with IAM

    Bigtable infrastructure

    • Front-end server pool serves requests to nodes
    • Compute and Storage are separate, No data is stored on the node except for metadata to direct requests to the correct tablet
    • Tables are shards into tablets. They are stored on Colossus, google’s filesystem. as storage is separate from compute node,
      replication and recovery of node data is very fast, as only metadata/pointers need to be updated
    • Tablets are a way of referencing chunks of data that live on a particular node. The cool thing about tablets is that they can be split, combined, and moved around to other nodes to keep access to data spread evenly across the available capacity.  

    首次开始写入数据时,Bigtable集群可能会将大多数数据放在单个节点上。

    启动时,Bigtable可能会将数据放在单个节点上。

    随着更多 Tablet 在单个节点上积累,集群可能会将其中一些 Tablet 重新放置到另一个节点上,以更平衡的方式重新分配数据:

    随着时间的推移写入的数据越来越多,某些 Tablet 的访问频率可能会比其他平板电脑更高。如下图所示,三个 Tablet 负责整个系统中所有读取查询的35%。

    在这样的场景中,几个 hot Tablet 位于一个节点上,Bigtable 通过将一些访问频率较低的 Tablet 转移到其他容量更大的节点来重新平衡集群,以确保三个节点中的每个节点都能看到三分之一的总流量

    它也可能是一个单一的 Tablet 变得 too hot(它被写入或过于频繁地读取)。将 Tablet 原样移动到另一个节点并不能解决问题。相反,Bigtable的可 split 分裂这个 Tablet ,然后重新平衡:

    最重要的事情是谨慎选择行键 rowkey,这样它们就不会将流量集中在一个地方。

    上手练习:

    界面操作:

    Cloud Console 控制台左侧导航栏导航到Bigtable,创建实例

    填写 Instance ID 等相关信息后:

    以 Node.js 方式时,在编写一些代码以与Cloud Bigtable进行交互之前,您需要通过运行 npm install @google-cloud/bigtable@0.9.1 来安装客户端。

    客户端安装后,您可以通过列出实例和集群来对其进行测试,如下所示:

    const bigtable = require('@google-cloud/bigtable')({
      projectId: 'your-project-id'
    });
    
    const instance = bigtable.instance('test-instance');       
    
    instance.createTable('todo', {                             
      families: ['completed']                                  
    }).then((data) => 
      const table = data[0];
      console.log('Created table', table.id);
    });

    命令行操作:

    install cbt in Google Cloud SDK

    gcloud components update
    gcloud components install cbt

    set env variable

    1
    
    echo -e "project=[PROJECT_ID]\ninstance=[INSTANCE_ID]">~/.cbtrc
    

    create table

    1
    
    cbt createtable my-table
    

    list table

    1
    
    cbt ls
    

    add column family

    1
    
    cbt createfamily my-table cf1
    

    list column family

    1
    
    cbt ls my-table
    

    add value to row1, column family cf1, column qualifier c1

    1
    
    cbt set my-table r1 cf1:c1=testvalue
    

    read table

    1
    
    cbt read my-table
    

    delete table

    1
    
    cbt deletetable my-table
    

    BigQuery

    数据仓库,接近实时的 PB 级数据库的分析

    How BigQuery works

    • 列式存储
    • 不更新现有记录
    • 无事务性

    Structure

    • Dataset: contains tables/views
    • Table: collections of columns
    • Job: long running action/query

    IAM

    • can control by project, dataset, view
    • cannot control at table level

    命令行模式:

    BigQuery案例

    Find correlation between rain and bicycle rentals

    How about joining the bicycle rentals data against weather data to learn whether there are fewer bicycle rentals on rainy days?

    采用GCP提供的数据集:

    数据导入成功后,在SQL输入框中写以下SQL:

    WITH bicycle_rentals AS (

      SELECT

        COUNT(starttime) as num_trips,

        EXTRACT(DATE from starttime) as trip_date

      FROM `bigquery-public-data.new_york_citibike.citibike_trips`

      GROUP BY trip_date

    ),

    rainy_days AS

    (

    SELECT

      date,

      (MAX(prcp) > 5) AS rainy

    FROM (

      SELECT

        wx.date AS date,

        IF (wx.element = 'PRCP', wx.value/10, NULL) AS prcp

      FROM

        `bigquery-public-data.ghcn_d.ghcnd_2015` AS wx

      WHERE

        wx.id = 'USW00094728'

    )

    GROUP BY

      date

    )

    SELECT

      ROUND(AVG(bk.num_trips)) AS num_trips,

      wx.rainy

    FROM bicycle_rentals AS bk

    JOIN rainy_days AS wx

    ON wx.date = bk.trip_date

    GROUP BY wx.rainy

    执行结果是:

    Dataproc

    • Fully managed: managed way to run Hadoop, Spark/Hive/Pig on GCP
    • Fast and Scalable: Quickly scale clusters up and down even when jobs are running (90 seconds or less on average)
    • Open source ecosystem: Easily migrate on-premises Hadoop/Spark jobs to the cloud (it's possible to move existing projects or ETL pipelines without redeveloping any code)
    • Cost effective: Cloud Dataproc is priced at $0.01 per virtual CPU per cluster per hour on top of any other GCP resources you use. And save money with preemptible instances (short-lived if you don't need them)
    • Versioning: image versioning allows you to switch between different versions of Apache Spark, Apache Hadoop and other tools. 
    • Integrated: It's integrated, it has built-in integration with Cloud Storage, BigQuery and Cloud Big Table to ensure data will never be lost. 

      This together with StackDriver Logging and StackDriver Monitoring provides a complete data platform,

    Cloud Dataproc has two ways to customize clusters, optional components and initialization actions. Pre-configured optional components can be selected when deployed via the console or the command line and include Anaconda Jupyter notebook, Zeppelin notebook, Presto and Zookeeper.

    Setup(Create a cluster): 

    • console
    • gcloud command/YAML file
    • Deployment Manager template
    • Cloud SDK REST API

    Configure: 

    For configuration the cluster can be set up as a single VM, which is usually to keep costs down for development and experimentation. Standard is with a single master node and high availability has three master nodes. You can choose between a region and a zone or select the global region and allow the service to choose the zone for you. The cluster defaults to a global endpoint but defining a regional endpoint may offer increased isolation and in certain cases lower latency. The master node is where the HDFS name node runs as well as the yarn node and job drivers. HDFS replication defaults to to in Cloud Dataproc. Optional components from the Hadoop ecosystem include Anaconda, which is your Python distribution in package manager, Web H CAD, Jupyter Notebook and Zeppelin Notebook as well. Cluster properties are runtime values that can be used by configuration files for more dynamic startup options. And user labels can be used to tag your cluster for your own solutions or your reporting purposes. The master node, worker nodes and preemptible worker nodes if enabled have separate VM options such as vCPU, memory and storage. Preemptible nodes include yarn node manager, but they don't run HDFS. There are a minimum number of worker nodes. The default is two, the maximum number of worker knows is determined by a quota and the number of SS Divs attached to each worker. You can also specify initialization actions such as an initialization script that we saw earlier. It can further customize your worker nodes on startup. And metadata can be defined, so the VM share state information between each other. This may be the first time you saw a preemptible nodes as an option for your cluster. 

    Optimize:

    the main reason to use preemptible VMs or PVMs is to lower costs for fault-tolerant workloads. PVMs can be pulled from service at any time within 24 hours. But if your workload in your cluster architecture is a healthy mix of VMs and PVMs, you may be able to withstand the interruption and get a great discount in the cost of running your job. Custom machine types allow you to specify the balance of memory and CPU to tune the VM to the load, so you're not wasting resources. A custom image can be used to pre-install software. So it takes less time for the customized node become operational, then if you install the software boot time using an initialization script. You can get a persistent SSD boot disk for faster cluster startup. 

    Dataproc performance optimization

    • Keep your data close to your cluster
      • Place Dataproc cluster in same region as storage bucket
    • Larger persistent disk = better performance
      • Using SSD over HDD
    • Allocate more VMs
      • Use preemptible VM to save on costs

    Utilize: (how do you submit a job to Cloud Dataproc for processing? )

    • console
    • gcloud command
    • Orchestration services: Cloud Dataproc Workflow Templates; Cloud Composer
    • REST API

    Monitoring:

    Using StackDriver. Or you can also build a custom dashboard with graphs and set up monitoring of alert policies to send emails for example, where you can notify if incidents happen. 

    Any details from HDFS, YARN, metrics about a particular job or overall metrics for the cluster like CPU utilization, disk and network usage can all be monitored and alerted on with StackDriver.

    Cloud Dataproc Initialization Actions

    可参照:https://github.com/GoogleCloudDataproc/initialization-actions

    There are a lot of pre-built startup scripts that you can leverage for common Hadoop cluster set of tasks like Flink, Jupyter and more. 

    use initializeion actions to add other software to cluster at startup

    gcloud dataproc clusters create <CLUSTER_NAME> --initialication-actions gs://$MY_BUCKET/hbase/hbase.sh --num-masters 3 --num-workers 2

    It's pretty easy to adapt existing Hadoop code to use GCS instead of HDFS. It's just a matter of changing the prefix for this storage from hdfs// to gs//.

    Converting from HDFS to Google Cloud Storage

    • Copy data to GCS
      • Install connector or copy manually
    • Update file prefix in scripts
      • From hdfs:// to gs://
    • Use Dataproc and run against/output to GCS

    创建Dataproc集群:

    Cluster Name输入sparktodp,选择Image Type and Version,勾上Enable Gateway,Optional Components勾上Jupyter Notebook:

    点击Notebook:

    点击 "OPEN JUPYTERLAB" 打开Jupyter,运行01_spark.ipynb(Run All,或者一步步一个个Cell来),先把数据读到HDFS里,可以看到:

    读数据:

    Spark 分析:

    一种就是调用DataFrame:

    另一种就是使用Spark SQL:

    执行结果:

    最后可以通过matplotlib画图,把上面的attack_stats结果展示出来:

    Replace HDFS by Google Cloud Storage

    Load csv to BigQuery

    bq mk sparktobq
    BUCKET='cloud-training-demos-ml'  # CHANGE
    bq --location=US load --autodetect --source_format=CSV sparktobq.kdd_cup_raw gs://$BUCKET/kddcup.data_10_percent.gz

    Using Cloud Functions, launch analysis every time there is a new file in the bucket. (serverless)

    %%bash
    wget http://kdd.ics.uci.edu/databases/kddcup99/kddcup.data_10_percent.gz
    gunzip kddcup.data_10_percent.gz
    BUCKET='cloud-training-demos-ml'  # CHANGE
    gsutil cp kdd* gs://$BUCKET/
    bq mk sparktobq
    %%writefile main.py
    
    from google.cloud import bigquery
    import google.cloud.storage as gcs
    import tempfile
    import os
    
    def create_report(BUCKET, gcsfilename, tmpdir):
        """
        Creates report in gs://BUCKET/ based on contents in gcsfilename (gs://bucket/some/dir/filename)
        """
        # connect to BigQuery
        client = bigquery.Client()
        destination_table = 'sparktobq.kdd_cup'
        
        # Specify table schema. Autodetect is not a good idea for production code
        job_config = bigquery.LoadJobConfig()
        schema = [
            bigquery.SchemaField("duration", "INT64"),
        ]
        for name in ['protocol_type', 'service', 'flag']:
            schema.append(bigquery.SchemaField(name, "STRING"))
        for name in 'src_bytes,dst_bytes,wrong_fragment,urgent,hot,num_failed_logins'.split(','):
            schema.append(bigquery.SchemaField(name, "INT64"))
        schema.append(bigquery.SchemaField("unused_10", "STRING"))
        schema.append(bigquery.SchemaField("num_compromised", "INT64"))
        schema.append(bigquery.SchemaField("unused_12", "STRING"))
        for name in 'su_attempted,num_root,num_file_creations'.split(','):
            schema.append(bigquery.SchemaField(name, "INT64")) 
        for fieldno in range(16, 41):
            schema.append(bigquery.SchemaField("unused_{}".format(fieldno), "STRING"))
        schema.append(bigquery.SchemaField("label", "STRING"))
        job_config.schema = schema
    
        # Load CSV data into BigQuery, replacing any rows that were there before
        job_config.create_disposition = bigquery.CreateDisposition.CREATE_IF_NEEDED
        job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
        job_config.skip_leading_rows = 0
        job_config.source_format = bigquery.SourceFormat.CSV
        load_job = client.load_table_from_uri(gcsfilename, destination_table, job_config=job_config)
        print("Starting LOAD job {} for {}".format(load_job.job_id, gcsfilename))
        load_job.result()  # Waits for table load to complete.
        print("Finished LOAD job {}".format(load_job.job_id))
        
        # connections by protocol
        sql = """
            SELECT COUNT(*) AS count
            FROM sparktobq.kdd_cup
            GROUP BY protocol_type
            ORDER by count ASC    
        """
        connections_by_protocol = client.query(sql).to_dataframe()
        connections_by_protocol.to_csv(os.path.join(tmpdir,"connections_by_protocol.csv"))
        print("Finished analyzing connections")
        
        # attacks plot
        sql = """
                                SELECT 
                                 protocol_type, 
                                 CASE label
                                   WHEN 'normal.' THEN 'no attack'
                                   ELSE 'attack'
                                 END AS state,
                                 COUNT(*) as total_freq,
                                 ROUND(AVG(src_bytes), 2) as mean_src_bytes,
                                 ROUND(AVG(dst_bytes), 2) as mean_dst_bytes,
                                 ROUND(AVG(duration), 2) as mean_duration,
                                 SUM(num_failed_logins) as total_failed_logins,
                                 SUM(num_compromised) as total_compromised,
                                 SUM(num_file_creations) as total_file_creations,
                                 SUM(su_attempted) as total_root_attempts,
                                 SUM(num_root) as total_root_acceses
                               FROM sparktobq.kdd_cup
                               GROUP BY protocol_type, state
                               ORDER BY 3 DESC
        """
        attack_stats = client.query(sql).to_dataframe()
        ax = attack_stats.plot.bar(x='protocol_type', subplots=True, figsize=(10,25))
        ax[0].get_figure().savefig(os.path.join(tmpdir,'report.png'));
        print("Finished analyzing attacks")
        
        bucket = gcs.Client().get_bucket(BUCKET)
        for blob in bucket.list_blobs(prefix='sparktobq/'):
            blob.delete()
        for fname in ['report.png', 'connections_by_protocol.csv']:
            bucket.blob('sparktobq/{}'.format(fname)).upload_from_filename(os.path.join(tmpdir,fname))
        print("Uploaded report based on {} to {}".format(gcsfilename, BUCKET))
    
    
    def bigquery_analysis_cf(data, context):
        # check that trigger is for a file of interest
        bucket = data['bucket']
        name = data['name']
        if ('kddcup' in name) and not ('gz' in name):
            filename = 'gs://{}/{}'.format(bucket, data['name'])
            print(bucket, filename)
            with tempfile.TemporaryDirectory() as tmpdir:
                create_report(bucket, filename, tmpdir)
    # test that the function works
    import main as bq
    
    BUCKET='cloud-training-demos-ml' # CHANGE
    try:
        bq.create_report(BUCKET, 'gs://{}/kddcup.data_10_percent'.format(BUCKET), "/tmp")
    except Exception as e:
        print(e.errors)
    gcloud functions deploy bigquery_analysis_cf --runtime python37 --trigger-resource $BUCKET --trigger-event google.storage.object.finalize

    Verify that the Cloud Function is being run. You can do this from the Cloud Functions part of the GCP Console.

    Once the function is complete (in about 30 seconds), see if the output folder contains the report:

    gsutil ls gs://$BUCKET/sparktobq

    Dataflow

    is managed data pipelines

    • Processes data using Compute Engine

      • Clusters are sized for you

      • Automated scaling

    • Write code for batch and streaming

    • Auto scaling, No-Ops, Stream and Batch Processing

    • Built on Apache Beam

    • Pipelines are regional-based

    Why use Cloud Dataflow?

    • ETL

    • Data analytics: batch or streaming

    • Orchestration: create pipelines that coordinate services, including external services

    • Integrates with GCP services

    Data Processing

    Solution:
    Apache Beam + Cloud Dataflow

    Data Transformation

    Cloud Dataproc vs Cloud Dataflow

    Key Terms

    • Element : single entry of data (eg. table row)

    • PCollection: Distributed data set, input and output

    • Transform: Data processing in pipeline

    • ParDo: Type of Transform

    Cloud Pub/Sub

    is scalable, reliable messaging

    • Supports many-to-many asynchronous messaging

    • Push/pull to topics

    • Support for offline consumers

    • At least once delivery policy

    • Global scale messaging buffer/coupler

    • No-ops

    • Decouples senders and receivers

    • Equivalent to Kafka

    • At-least-once delivery

    Pub/Sub overview

    • Topic: publisher sends messages to topic

    • Messages are stored in message store until they are delivered and acknowledged by subscribers

    • Pub/Sub forwards messages from a topic to subscribers. messages can be pushed by Pub/Sub to subscriber or pulled by subscribers from Pub/Sub

    • Subscriber receives pending messages from subscription and acknowledge to Pub/Sub

    • After message is acknowledged by the subscriber, it is removed from the subscription’s queue of messages.

    Push and Pull

    • Push = lower latency, more real-time

    • Push subscribers must be Webhook endpoints that accept POST over HTTPS

    • Pull ideal for large volume of messages - batch delivery

    Demo: how to publish and receive messages in PubSub with Java

    1. create topic

      1
      
      gcloud pubsub topics create my-topic
      
    2. create subscription to this topic

      1
      
      gcloud pubsub subscriptions create my-sub --topic my-topic
      
    3. git clone project into cloud shell

      1
      
      git clone https://github.com/googleapis/java-pubsub.git
      
    4. go into the sample

      1
      
      cd samples/snippets/
      
    5. modify PublisherExample.java and SubscribeAsyncExample.java to put the right project id, topic id and subscription id

    6. compile project

      1
      
      mvn clean install -DskipTests
      
    7. run subscriber

      1
      
      mvn exec:java -Dexec.mainClass="pubsub.SubscribeAsyncExample"
      
    8. run publisher in another screen and observe subscriber

      1
      
      mvn exec:java -Dexec.mainClass="pubsub.PublisherExample"
      

    Datalab

    interactive data exploration (Notebook)

    Built on Jupyter (formerly IPython)

    Easily deploy models to BigQuery. You can visualize data with Google Charts or map plot line

    Comparing

    Relational database: “Consistency and Reliability over Performance”

    Non-Relational Database: “Performance over Consistency”

    How to choose the right storage

     


     

    Cloud Composer & Apache Airflow

    Orchestrating work between GCP services with Cloud Composer

    使用谷歌云上的Cloud Composer,就可以不用自己装Airflow,只需要关注workflow。

    Cloud Composer用GCS(Google Cloud Storage)存储Apache Airflow DAGs,可以在我们的环境里新增,更新,删除DAGs。

    The DAGs folder is simply a GCS bucket where you will load your pipeline code. a GCS bucket that is automatically created for when you launch your Cloud Composer Instance. 

    通过Cloud Functions去event trigger,或者通过schedule去周期性执行

    Monitoring and Logging等都可以点击对应的Job详情查看Job的运行情况和细节。

     

    Airflow官网:https://airflow.incubator.apache.org/

    Airflow是开源的:https://github.com/apache/airflow

    Airflow官方文档:https://airflow.incubator.apache.org/docs/apache-airflow/stable/index.html

    Cloud Composer 是基于 Apache Airflow 构建的全代管式工作流编排服务。

    端到端地集成多种 Google Cloud 产品,包括 BigQuery、Dataflow、Dataproc、Datastore、Cloud Storage、Pub/Sub 和 AI Platform,让用户可以灵活自由地全方位编排流水线(data pipeline),编写、安排(schedule)和监控(monitor)工作流(workflow)。

    What is a Workflow?

    • a sequence of tasks
    • started on a schedule or triggered by an event
    • frequently used to handle big data processing pipelines

    安装及使用 Airflow:

    pip3 install apache-airflow
    airflow db init
    airflow webserver -p 8080
    airflow users create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin

    访问 http://localhost:8080/,输入username和password均为admin即可登录成功:

    Graph View:

    example_bash_operator:

    #
    # Licensed to the Apache Software Foundation (ASF) under one
    # or more contributor license agreements.  See the NOTICE file
    # distributed with this work for additional information
    # regarding copyright ownership.  The ASF licenses this file
    # to you under the Apache License, Version 2.0 (the
    # "License"); you may not use this file except in compliance
    # with the License.  You may obtain a copy of the License at
    #
    #   http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing,
    # software distributed under the License is distributed on an
    # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    # KIND, either express or implied.  See the License for the
    # specific language governing permissions and limitations
    # under the License.
    
    """Example DAG demonstrating the usage of the BashOperator."""
    
    from datetime import timedelta
    
    from airflow import DAG
    from airflow.operators.bash import BashOperator
    from airflow.operators.dummy import DummyOperator
    from airflow.utils.dates import days_ago
    
    args = {
        'owner': 'airflow',
    }
    
    dag = DAG(
        dag_id='example_bash_operator',
        default_args=args,
        schedule_interval='0 0 * * *',
        start_date=days_ago(2),
        dagrun_timeout=timedelta(minutes=60),
        tags=['example', 'example2'],
        params={"example_key": "example_value"},
    )
    
    run_this_last = DummyOperator(
        task_id='run_this_last',
        dag=dag,
    )
    
    # [START howto_operator_bash]
    run_this = BashOperator(
        task_id='run_after_loop',
        bash_command='echo 1',
        dag=dag,
    )
    # [END howto_operator_bash]
    
    run_this >> run_this_last
    
    for i in range(3):
        task = BashOperator(
            task_id='runme_' + str(i),
            bash_command='echo "{{ task_instance_key_str }}" && sleep 1',
            dag=dag,
        )
        task >> run_this
    
    # [START howto_operator_bash_template]
    also_run_this = BashOperator(
        task_id='also_run_this',
        bash_command='echo "run_id={{ run_id }} | dag_run={{ dag_run }}"',
        dag=dag,
    )
    # [END howto_operator_bash_template]
    also_run_this >> run_this_last
    
    if __name__ == "__main__":
        dag.cli()

    Trigger DAG 后可以 View Logs。

    或者通过 docker 装 airflow:

    docker-compose.yml

    version: '3'
    services:
      postgres:
        image: postgres:9.6
        environment:
          - POSTGRES_USER=airflow
          - POSTGRES_PASSWORD=airflow
          - POSTGRES_DB=airflow
        ports:
          - "5432:5432"
    
      webserver:
        image: puckel/docker-airflow:1.10.1
        build:
          context: https://github.com/puckel/docker-airflow.git#1.10.1
          dockerfile: Dockerfile
          args:
            AIRFLOW_DEPS: gcp_api,s3
            PYTHON_DEPS: sqlalchemy==1.2.0
        restart: always
        depends_on:
          - postgres
        environment:
          - LOAD_EX=n
          - EXECUTOR=Local
          - FERNET_KEY=jsDPRErfv8Z_eVTnGfF8ywd19j4pyqE3NpdUBA_oRTo=
        volumes:
          - ./examples/intro-example/dags:/usr/local/airflow/dags
          # Uncomment to include custom plugins
          # - ./plugins:/usr/local/airflow/plugins
        ports:
          - "8080:8080"
        command: webserver
        healthcheck:
          test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
          interval: 30s
          timeout: 30s
          retries: 3

    docker-compose up

    即可在http://localhost:8080/看到 airflow web ui

    docker-compose logs

    docker-compose down

    或者通过下面这种Dockerfile:

    # Base Image
    FROM python:3.7-slim-buster
    
    # Arguments that can be set with docker build
    ARG AIRFLOW_VERSION=1.10.1
    ARG AIRFLOW_HOME=/usr/local/airflow
    
    # Export the environment variable AIRFLOW_HOME where airflow will be installed
    ENV AIRFLOW_HOME=${AIRFLOW_HOME}
    
    ENV AIRFLOW_GPL_UNIDECODE=1
    
    # Install dependencies and tools
    RUN apt-get update -yqq && \
        apt-get upgrade -yqq && \
        apt-get install -yqq --no-install-recommends \ 
        wget \
        libczmq-dev \
        curl \
        libssl-dev \
        git \
        inetutils-telnet \
        bind9utils freetds-dev \
        libkrb5-dev \
        libsasl2-dev \
        libffi-dev libpq-dev \
        freetds-bin build-essential \
        default-libmysqlclient-dev \
        apt-utils \
        rsync \
        zip \
        unzip \
        gcc \
        locales \
        procps \
        && apt-get clean
    
    # Load custom configuration
    COPY ./airflow.cfg ${AIRFLOW_HOME}/airflow.cfg
    
    # Upgrade pip
    # Create airflow user 
    # Install apache airflow with subpackages
    RUN pip install --upgrade pip && \
        useradd -ms /bin/bash -d ${AIRFLOW_HOME} airflow && \
        pip install apache-airflow==${AIRFLOW_VERSION} --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.1/constraints-3.7.txt"
    
    # Copy the entrypoint.sh from host to container (at path AIRFLOW_HOME)
    COPY ./entrypoint.sh /entrypoint.sh
    
    # Set the entrypoint.sh file to be executable
    RUN chmod +x ./entrypoint.sh
    
    # Set the owner of the files in AIRFLOW_HOME to the user airflow
    RUN chown -R airflow: ${AIRFLOW_HOME}
    
    # Set the username to use
    USER airflow
    
    # Set workdir (it's like a cd inside the container)
    WORKDIR ${AIRFLOW_HOME}
    
    # Create the dags folder which will contain the DAGs
    RUN mkdir dags
    
    # Expose the webserver port
    EXPOSE 8080
    
    # Execute the entrypoint.sh
    ENTRYPOINT [ "/entrypoint.sh" ]

    entrypoint.sh:

    #!/usr/bin/env bash
    
    # Initiliaze the metadata database
    airflow initdb
    
    # Run the scheduler in background
    airflow scheduler &> /dev/null &
    
    # Run the web server in foreground (for docker logs)
    exec airflow webserver

    然后 Build the Airflow image

    docker build --tag airflow .

    Run the Airflow container

    docker run --name my_airflow -it -d -p 8080:8080 airflow

    Verify that your Airflow container is running and healthy:

    docker ps

    Check out the logs:

    docker logs my_airflow

    mount /xxx目录下python文件写成的DAG到AIRFLOW_HOME目录下的dags目录:

    docker run --name my_airflow -it -d -p 8080:8080 --mount type=bind,source=/xxx/my_dag.py,target=/usr/local/airflow/dags/my_dag.py airflow

    进入验证my_dag在dags目录下:

    docker exec -it my_airflow ls /usr/local/airflow/dags

    exec into the container to access the shell.

    docker exec -it my_airflow bash

    Next, make sure the DAG was parsed correctly:

    python dags/my_dag.py
    

    选择Airflow和Python版本,点击创建,即可成功创建env。

     

    还可以安装Python依赖:

    接下来,我们就可以参照上面的 example_bash_operator 写 DAG:

    跟 BigQuery 集成可以用 bigquery_operator,并且在 Web UI 上设置 Connection,从而操作 BigQuery 里的 Dataset,在 task 里可以写 sql 或者指明 sql 文件。

    Airflow 还有另一个比较常用的是 Variables,它就是 key-value 键值对。

    推荐以下 Airflow 中文文档:

    https://www.kancloud.cn/luponu/airflow-doc-zh/889656

    及以下 Youtube视频:

    Airflow tutorial 1: Introduction to Apache Airflow

    Airflow tutorial 2: Set up airflow environment with docker

    Airflow tutorial 3: Set up airflow environment using Google Cloud Composer

    Airflow tutorial 4: Writing your first pipeline

    Airflow tutorial 5: Airflow concept

    Airflow tutorial 6: Build a data pipeline using Google Bigquery

    Airflow tutorial 7: Airflow variables

    Data Catalog

    元数据管理

    (1) System: BIGQUERY

    Type: Dataset, Table

    Resource URL: link to BigQuery URL

    Tags

    Schema and column tags: Name, Type (NUMBERIC, STRING, etc) , Mode (eg: NULLABLE), Column tags, Policy tags, Description list

    (2) System: CLOUD_PUBSUB

    Resource URL: link to Cloud Pub/Sub URL

    Tags

    Cloud Pub/Sub里的详情有Topics,Subscriptions(Delivery type: Pull等),View Message,Publish message request count/sec图表,Publish message operation count/sec图表等。

    (3)GCS

    Entry group, Entries, Bucket, Type: FILESET, etc

    Google Data Studio

    连接数据源,BI report可视化报表,可以share report,也可以查看shared with me/owned by me的report

    Monitoring

    Incident, Dashboards, Alerting等

    Logging

    Logs explorer, Logs Dashboard, Logs Storage retention period等

    Machine Learning

    • TensorFlow

    • Cloud ML

    • Machine Learning APIs

    Why use CLoud Machine Learning Platform?

    • For structured data

      • Classification and regression

      • Recommendation

      • Anomaly detection

    • For unstructured data

      • Image and video analytics

      • Text analytics

    • Gain insight from images

    • Detect inappropriate content

    • Analyze sentiment

    • Extract text

    Cloud Natural Language API

    • can return text in real time

    • Highly accurate, even in noisy environments

    • Access from any device

    Cloud Translation API

    • Translate strings

    • Programmatically detect a document’s language

    • Support for dozen’s languages

    Cloud Video Intelligence API

    • Annotate the contents of video

    • Detect scene changes

    • Flag inappropriate content

    • Support for a variety of video formats

    Cloud Build

    Run Infrastructure as a code. Let you orchestrate build steps that run as container images and automate Terraform workflow.

    可参照https://github.com/agmsb/googlecloudbuild-terraform

    Cloud Build 可以从各种代码库或云存储空间导入源代码,根据您的规范执行构建,并生成诸如 Docker 容器或 Java 归档的软件工件。

    可以通过 Google Cloud Console、gcloud 命令行工具或 Cloud Build 的 REST API 使用 Cloud Build。

    在 Cloud Console 中,您可以通过构建记录页面查看 Cloud Build 构建结果,并通过构建触发器进行自动构建

    您可以使用 gcloud 工具创建和管理构建,并可以运行命令来执行提交构建列出构建取消构建等任务。

    您可以使用 Cloud Build REST API 请求构建。

    与其他 Cloud Platform API 一样,您必须使用 OAuth2 授予访问权限。获得访问授权后,您可以使用 API 启动新构建、查看构建状态和详情、列出每个项目的构建并取消当前正在进行的构建。

    构建配置和构建步骤

    可以编写构建配置,向 Cloud Build 提供有关执行什么任务的说明。可以将构建配置为提取依赖项,运行单元测试、静态分析和集成测试,并使用 docker、gradle、maven、bazel 和 gulp 等构建工具创建软件工件。

    Cloud Build 将构建作为一系列构建步骤执行,其中的每个构建步骤都在 Docker 容器中运行。执行构建步骤类似于在脚本中执行命令。

    您可以使用 Cloud Build 和 Cloud Build 社区提供的构建步骤,也可以编写自己的自定义构建步骤:

    每个构建步骤都通过其连接到本地 Docker 网络(名为 cloudbuild)的容器运行。这使构建步骤可以相互通信并共享数据。

    您可以在 Cloud Build 中使用标准 Docker Hub 映像,例如 Ubuntu 和 Gradle

    构建的工作原理

    以下步骤描述了一般而言的 Cloud Build 构建生命周期:

    1. 准备应用代码及任何所需资源。
    2. 创建 YAML 或 JSON 格式的构建配置文件,其中包含 Cloud Build 的说明。
    3. 将构建提交到 Cloud Build。
    4. Cloud Build 根据您提供的构建配置执行构建。
    5. 如果适用,构建的所有映像都将推送到 Container Registry。Container Registry 可在 Google Cloud 上提供安全、私密的 Docker 映像存储空间。

    程序运行结果:

    Cloud Run & Cloud Functions & App Engine

    以下是Java code部署的场景例子,更多场景可以查看其他官方文档:

    使用 App Engine:https://cloud.google.com/appengine/docs/flexible/java/quickstart

    使用 Compute Engine:https://cloud.google.com/java/getting-started/getting-started-on-compute-engine

    使用 Jib 构建 Java 容器:https://cloud.google.com/java/getting-started/jib

    https://cloud.tencent.com/developer/news/612944

    Management Tool

    Deployment Manager

    输入以下命令即可看到创建my-vm成功:

    my-vm详情如下:

    Pricing

    Budget and Alerts

    基于 GCP project上的 billing 账户,可以定义在 50%,90% 和 100% 时触发 alerts,可导出账单详情,在 Report 上可看出支出详情。Quotas 可用来预防过度消费资源,有速率分额限制和分配数量限制,比如 Kubernetes services 可设定分额为每 100 秒最多 1000 个调用,每个 project 最多 5 个 VPN。

    展开全文
  • 当地时间 9 日,Google Cloud Next 2019 大会开幕,谷歌云的开放姿态更加清晰,宣布与七家开源企业建立战略合作伙伴关系。面对云巨头——“3A”(亚马逊 AWS、阿里云、微软 Azure)的夹击,谷歌单打独斗是无力的,...

    在云业务领域,谷歌不甘做一个在夹缝中求生存的弱者。当地时间 9 日,Google Cloud Next 2019 大会开幕,谷歌云的开放姿态更加清晰,宣布与七家开源企业建立战略合作伙伴关系。面对云巨头——“3A”(亚马逊 AWS、阿里云、微软 Azure)的夹击,谷歌单打独斗是无力的,“打团战”的赢面可能更大。
     会上,谷歌公布了新伙伴的身份,Confluent,DataStax,Elastic,InfluxData,MongoDB,Neo4j 和 Redis Labs,他们共同的特点是同为领先的开源技术公司。这是谷歌为自己找到的新后盾。

      “让客户轻松地以云原生方式使用开源技术。”谷歌将自己在云业务方面的目标浓缩为一句话。根据谷歌的想法,通过与这些开源技术公司合作,谷歌可以向客户提供商业支持、综合计费和统一的管理工具。

      谷歌的开放不只是拥抱新伙伴,还试图与竞争对手握手。在此次 2019 大会上,基于谷歌云服务的多云管理平台 Anthos 也是重头戏之一。据了解,Anthos 只是一个托管平台,将在第三方云上运行,第三方云就包括最大的竞争对手亚马逊 AWS 和微软 Azure。

      慷慨的背后,是谷歌云业务如今身处的尴尬境地。研究机构 Gartner 的数据显示,在全球云市场中,亚马逊 AWS 如日中天,以 51.8% 的市场份额独占鳌头,其次则是微软 Azure 的 13.3% 及阿里云的 4.6%。谷歌云的市场份额仅为 3.3%。

      虽然,全球超过 90% 的搜索都是由谷歌的云基础架构驱动的,但这并未对谷歌云业务的发展有所助力。数据显示,2018 年三季度,谷歌的其他业务营收为 46.4 亿美元,仅比上一季度增长约 2.4 亿美元。这部分业务中包含 Nest 硬件产品、Google Play、G Suite 和谷歌云平台(GCP)。相比之下,亚马逊 AWS 云服务正在野蛮生长。AWS 2018 年的整体营收为 257 亿美元,同比增长 47%;利润同比增长 69% 至 73.22 亿美元,占亚马逊总利润的 62.5%。

      巨大的落差下,谷歌想要报团取暖也在情理之中。只不过,谷歌的开放更像是一种“自损以伤敌”的无奈策略。Anthos 可以在第三方云上运行,这一方式虽然可能会帮助其迅速提高份额,但这种开放策略同时也会变相为对手增加客户,尤其是 AWS 和 Azure。

      但至少谷歌的开放态度已经赢得了“民心”。亚马逊 AWS 就因为一味地使用开源项目商业化,而不回馈开源社区而饱受诟病。“这些云服务供应商就像吸血鬼!”InfluxData 的联合创始人兼 CEO Paul Dix 接受采访时称,不断搜集开源代码,以此赚取收入,却不一定会给公开的项目带来回报。本周二后,Dix 就为谷歌的这一举措叫好。

      事实上,谷歌对于云市场的野心从未停歇。去年最后一个季度,云服务部门新增了 4000 多名员工,在所有部门中增长幅度最大。谷歌还盯上了尚未被抢食的云游戏领域,在 2019 年全球游戏开发者大会上,谷歌推出一项全新的流媒体游戏服务平台 Stadia,开始颠覆现有的游戏方式。
    谷歌云“团战”亚马逊、AWS、阿里云、微软 Azure等谷歌云“团战”亚马逊、AWS、阿里云、微软 Azure等

    转载于:https://www.cnblogs.com/elsa-66/p/10823404.html

    展开全文
  • 那么,如何借助谷歌云强大的产品生态在海外市场搭建更好的游戏环境呢? 今天我们先来看一下谷歌云的基础产品与架构在游戏场景中的一些独特优势。 谷歌在游戏场景下的通用业务架构 ...

    图片

     

    根据 Sensor Tower 商店情报平台数据显示,2021年2月中国手游发行商在全球 App Store 和 Google Play 的收入排名中,共34个中国厂商入围全球手游发行商收入榜TOP100,合计吸金超过22.4亿美元,占全球 TOP 100手游发行商收入的40.2%,战绩彪炳。

    那么,如何借助谷歌云强大的产品生态在海外市场搭建更好的游戏环境呢?

     

    今天我们先来看一下谷歌云的基础产品与架构在游戏场景中的一些独特优势。

     

    谷歌在游戏场景下的通用业务架构

     

     

    图片

     

     

    通常来说,一款新产品上线之后,玩家会通过网络进行下载,下载完成之后还会通过网络来进行游戏平台的访问以及游戏对战等操作,在这个过程中,会产生大量的数据,包括:玩家身份、游戏社交、商城订单、游戏对战以及游戏运行中一些日志数据等,对于这些沉淀下来的数据,我们需要进行大数据分析以帮助进一步的业务逻辑优化等。

     

     

    在这整个业务架构中,我们可以把整个游戏场景的业务提炼为五大核心需求:

    网络质量大数据分析安全保护游戏辅助功能资源弹性扩展

     

    首先是基础的网络质量,由于现在的游戏基本都是全球范围内进行发布的,所有玩家的产品下载、链接及互动,都是基于全球网络质量的。

    在安全保护方面,当已经具备了可靠的网络质量,如果没有很好的进行网络层面的安全防护,在游戏运行的过程中始终会存在被攻击的风险,进而影响游戏的对外服务。

     

    此外,资源的弹性扩展。不管是游戏还是应用,在产品上线的时候,我们很难准确的预估上线之后用户的使用情况,随着玩家数量的不断上升,我们需要一个强大的弹性扩展能力来支持上层业务,在满足所有下层网络计算存储的基础能力之后,还需要大数据的分析能力、AI 等来提升整体服务的可靠性。

     

    谷歌云基础网络架构                 

     

    图片

     

    从上图中,我们可以看到谷歌云目前已经上线的服务中心区域共有24个,每个区域都有三个可用区来支撑数据中心服务,此外还有7个区域正在筹建中,很快也会上线。

     

    谷歌云还有140多个网络边缘节点,以加速扩大对全球整个范围之后的网络覆盖。上图中,还可以看到很多蓝色的连线,这就是我们常说的网络互连,由谷歌自建的海底光缆实现,通过这些自建光缆,谷歌将其全球的24个区域进行联通,提供了“全球一张网”的整体网络服务。

     

    "全球一张网"的独特优势 

     

    优质层级的网络服务

    视频链接:https://v.qq.com/x/page/b3236m0co8d.html

    通过上面的短视频,我们可以看到相比较传统的网络服务(画面下方,用户在访问云端资源时,会经过大量运营商的网络边界跳转与路由,整个网络质量延迟和丢包率存在很大的不稳定性和不确定性),谷歌云默认提供的优质层级网络结构(画面上方)中,用户可以通过运营商就近接入谷歌提供的全球140多个 POP 节点,进入节点之后,所有的流量会进入谷歌的内部网络。由谷歌的内部骨干网络提供的默认连接,其性能是传统网络的1.4倍。

     

    全球VPC

    图片

    传统的 VPC 是有地域隔离的,如上图所示,如果一个运营方在新加波和东京分别部署一个服务,那么两个区域之间一定会产生两个 VPC,且两个 VPC 之间默认存在网络隔离,无法进行访问,必须通过对等连接或其他网关之类的配置,才能打通两边 VPC 的网络连接。

    但是在谷歌云上,由于全球一张网的服务,包括其自有的全球海底光缆的默认互联,其中的 VPC 是默认互联、互通的,且全球VPC 可以覆盖所有的 Region,所有的 Region 均默认打通。所以当我们在游戏里面部署游戏对战时,游戏结束后数据同步到集中式平台时可以通过 VPC 默认的网络互通能力进行连通,而无需再做额外的配置。

     

    全球负载均衡

    图片

    传统的负载均衡产品都会部署在可用区或者数据中心,用户在访问负载均衡产品到后端时,必须通过运营商的公网进行连接, 但是在谷歌上,它的负载均衡产品不是附属在数据中心中的,而是全球的负载均衡产品,是部署在POP节点之内去进行负载均衡的。

    当我们的用户去访问自带产品的时候,会就近的接入到 POP 节点。然后通过 POP节点转发到后端服务器上。从前文我们可以知道,负载均衡节点跟谷歌后端服务器之间全部是由谷歌内部的骨干网去提供服务的,所以能够提供很低的延迟、很高的稳定性。

     

    Google Cloud Single Anycast Virtual IP (VIP)

     

    谷歌云如何能在全球范围内实现统一的出口?

    图片

    谷歌云的 Cloud Load Balancing 服务,虽然部署在全球一百多个节点之内,但是通过利用 Anycast 技术,在各个区域的 POP节点之内都会公布一个相同的 IP (如上图中的 200.1.1 ),无论哪个区域的玩家对这个 IP 进行访问,都会就近接入到 POP 节点之内,再由 POP 节点通过 BGP 路由算法将客户的访问请求转发到最近的后端。这样做还有一个好处,可以缓解网络层面的 DDos 攻击。

     

    图片

     

    说到 DDoS 攻击,先看一下2019年全球DDoS攻击的一些数据。参考上图从一些行业来看,排在第一位的其实还是游戏行业,有将近全球36%的DDoS攻击都在游戏行业发生。此外,大概有87%的这种DDoS攻击都是小于50GB的的流量,在整个过程中都是小规模的流量攻击所产生的。

    从黑客的攻击目的可以知道,他们会先发送一些小规模的试探性攻击,如果发现对应的运营商没有防控能力,再提出一些勒索的要求,或者一些其他的请求来达到目的。

    在谷歌云上,Cloud Load Balancing 具有默认内置的抗 DDoS 能力。在谷歌的全球网络中,还会部署一个中央 DDoS 服务检测,检测全球范围内,所有数据中心所受到的DDoS攻击,然后同步到中央部署中。所有前端业务入口进来的一些流量都会经过谷歌的 DDoS 服务的检测,如果遇到被系统认为是威胁 DDoS 攻击的流量,会通过配置前端 Load Balancing 来限制这些流量进入的数据中心。

    从谷歌内部的防御情况来看,通过 POP 节点,已经将进入的流量进行了限制与缓解,从整个平台来看,黑客的一些攻击根本无法到达谷歌后端真的的业务服务器,这就是我们所说的谷歌云的抗 DDoS 功能。

    此外,Cloud Load Balancing 最大的特点是该功能是完全免费的。

    以上为今天我们所介绍的谷歌云全球一张网在基础架构中的一些独特优势,下一篇文章,我们将通过案例来跟大家聊一聊谷歌云所提供的灵活可扩展的游戏解决方案

     

     


     

    想获取更多谷歌云相关资讯及干货内容?

    赶紧关注我们吧!

    直接联系:

    📱:18651688484

    📫:cloud@webeye.com

    展开全文
  • 戳蓝字“CSDN云计算”关注我们哦!技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!译者:风车云马在国内,“...
  • 于是,这期Episode 097整理回顾了为什么过去十年亚马逊能成功,也分析了近几年谷歌云平台的崛起,以及二者在竞争事态上的区别。 2006年3月14日,亚马逊发布了S3,Simple Storage Service,可理解为个人和企业的一...
  • 在云计算发展了十年,进入到扩大规模的阶段时,谷歌云这种工程师文化依然优先考虑产品的自动化能力和快速易用特点,而不是与商业买家和用户进行沟通对话,有可能会导致产品与客户需求严重脱节。 虽然Diane Greene...
  • (Google Cloud已有中文版) 进入2019年,谷歌云的消息不断。而对于中国市场来说,2019年3...自去年11月谷歌云新任CEO Thomas Kurian宣布上任以来,业界都在观察这位谷歌云的新老板会采取什么样的行动,以提升谷歌云...
  • 云技术“三巨头”亚马逊、微软Azure和谷歌云的机器学习即服务各自有哪些特点?这是一次公正客观的对比。不吹不黑,读完即知。对于大多数公司来说,机器学习是一项复杂而伤神的工作,花销大、对人才要求高。机器学习...
  • 据The Information报道,近期谷歌云服务部门在会议的时候制定了一个雄心勃勃的目标,即在2023年之前击败其竞争对手微软Azure和亚马逊云服务AWS。 目前谷歌云平台排名第三,其市场份额和增长率均低于AWS和Azure。蛰伏...
  • 物联网(IoT)的11大云平台:AWS、Azure、谷歌云、Oracle、 2018-11-06 14:02 云技术 关键词:物联网AzureGoogleSalesforce云计算 导读:现在,我们将介绍用于物联网(IoT)开发的最为顶级,最为推荐的平台。让我们...
  • 阿里云、华为云、谷歌云都已入局,盘点13家云计算厂商的RPA13家云计算厂商进入RPA行业,人人可用的自动化时代正在开启在RPA行业,云计算厂商RPA的声量并不算大,但它们却是一股后劲十...
  • 据悉,AWS、谷歌云、UCloud、Azure、IBM Cloud、腾讯云等云商均已推出基于 AMD EYPC CPU 型的云主机,属于云厂商中的先行者。 为了便于用户直观比较不同云商的 AMD 云主机的性能差异,2020 年 5 月初,CIO 时代学院...
  • AI 科技评论按:谷歌云机器学习平台(Google Cloud AI)自从上线以来就以预训练的、可以直接调用的高效...今天,在谷歌云首席科学家李飞飞和谷歌云研发负责人李佳合著的这篇谷歌云博客中,她们就正式宣告了谷歌云 Au
  • 谷歌云消息服务(GCM)是免费提供给用户的,它帮助你把服务端的数据推送到客户端。它可能是一个轻量级的消息,通知有新的数据上传的服务器(例如,朋友上传了一个电影),或者可能是一个包含了4KB的有效载荷数据的...
  • 谷歌云第二章节总结

    2021-11-10 15:21:57
    GFS采用廉价的商业机器构建分布式系统,同时将GFS的设计与Google应用的特点紧密结合。 GFS将容错的任务交给文件系统完成,利用软件的方法解决系统可靠性问题,使存储的成本成倍下降。 GFS将服务器故障视为正常现象,...
  • 谷歌云消息服务(GCM)是免费提供给用户的,它帮助你把服务端的数据推送到客户端。它可能是一个轻量级的消息,通知有新的数据上传的服务器(例如,朋友上传了一个电影),或者可能是一个包含了4KB的有效载荷数据的...
  • 据悉,AWS、谷歌云、UCloud、Azure、IBM Cloud、腾讯云等云商均已推出基于AMD EYPC CPU型的云主机,属于云厂商中的先行者。为了便于用户直观比较不同云商的AMD云主机的性能差异,2020年5月初,CIO时代学院发起了针对...
  • 木瓜移动作为谷歌云大中华区官方指定合作伙伴一直致力于帮助国内众多优秀的游戏品牌出海护航。虽然铺天盖地的亮眼捷报预示着游戏出海已经站在了新的高度,然而,出海并不是轻而易举就能通关。除了让游戏厂商损失惨重...
  • 谷歌云数据分析引擎BigQuery现已导入比特币数据。该团队的官方博客称,我们希望提供更透明的数据,使用户可以更深入的了解加密货币系统如何运作,以及如何最好地利用它们以造福社会。 【Facebook 的前产品总监:现在...
  • 这在很大程度上取决于用例特点,例如事务处理、分析处理、内存数据库等等·····当然我们在选择时还需考虑其他的因素。 本篇文章涵盖了 Google Cloud 跨关系数据库(SQL)和非关系数据库(NoSQL)的不同选项,并...
  • Google云平台技术架构

    2016-05-16 23:32:00
    特点: 1、适合大规模海量数据,PB级数据; 2、 分布式 、并发 数据处理 ,效率极高; 3、易于扩展,支持动态伸缩; 4、适用于廉价设备; 5、适合于读操作,不适合写操作。 6、不适用于传统 关系型数据库...
  • google云计算体系架构详解,详细介绍google云计算的各个组件,以及实现细节
  • Dynamo 对外主打的特点是水平扩展能力和通过多副本实现(3副本)的高可用,另外在 API 的设计上可以支持最终一致性读取和强一致性读取,最终一致性读取能提升读的吞吐量。 但是请注意,DynamoDB 虽然有强一致读,...
  • 盘点技术史:流量运营(PC 时代)

    千次阅读 2020-07-24 18:58:13
    我的顾客有一些什么特点?为什么今天的销售额比昨天少了很多? 前言: -更多关于数智化转型、数据中台内容请加入阿里云数据中台交流群—数智俱乐部和关注官方微信公总号(文末扫描二维码或点此加入) -阿里云数据...
  • Google Cloud API设计指南

    2020-12-29 18:34:06
    一、基于资源的设计 本设计指南的目标是帮助开发者设计简单、一致且易用的网络 API。... RPC API 通常根据接口和方法设计。随着时间的推移,接口和方法越来越多,最终结果可能是形成一个庞大而混乱的 API 接口,因为...
  • 基于模型的类型,采用排队模型估计下一时间段的队列长度,不适合云数据中心的在线实时负载预测 集成学习类型,使用前两类方法建立多个学习器 文章方法: 云数据中心的特点导致常常有突发事件导致的请求峰值,常规...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 865
精华内容 346
关键字:

谷歌云的特点:

友情链接: byyl.rar