S'S ALGORITHM

概览

云的基础是虚拟化:服务器,存储,网络。服务器是远程计算机的逻辑分区。存储是物理硬盘的逻辑划分。网络则是虚拟私有云。

谷歌是唯一一个拥有全球私有基础设施的公司;他们的谷歌云基础设施没有任何一部分通过公共互联网。换句话说,谷歌的云基础设施完全建立在他们自己的私有网络上,而不是依赖于公共互联网的网络基础设施。

谷歌以其为其服务开发革命性技术而闻名,一旦他们有了更好的版本,旧版本就会向全世界开源。

TensorFlow就是这些技术之一。 TensorFlow 是 Google 的 AI 引擎,也是 Google 搜索的核心。现在最新的是kubeFlow!

安全的全球专用网络:Google Cloud 是一个大型专用网络;没有任何东西通过公共互联网传播。使用 Cloud CDN 时,来自源的流量会穿过此专有光纤网络,并通过最靠近客户的位置进行传送。大多数研究公司选择 GCP,因为没有网络连接到互联网。

Kubernetes 引擎的创建者:Kubernetes 是由 Google 设计和创建的容器编排工具,用于管理其基础设施。部署了数百万个容器来托管 Google 服务,而 Kubernetes 是这些容器的核心。 Google 开源了这项技术,并提供了 Google 管理的 Kubernetes 引擎作为服务。

收费方式按秒计费,新用户前三个月有300美刀信用额度。

人工智能和机器学习服务:毫无疑问,谷歌是数据之王。数据越多,模型在人工智能世界中产生的结果就越准确。谷歌的机器学习服务是最好的。 Google 提供了多种 ML 服务来训练模型并处理模型训练管道。Kubeflow现在是 ML 操作的趋势。同样,KubeFlow 基于 Google 内部方法将 TensorFlow 模型部署到 Kubernetes,称为 TensorFlow Extended。

超好的官方资源codelabs

ALL of them are APIs

所有的资源服务都是一种API。从API&Service中就可以查看所有的API。有些服务在创建项目的时候就已经激活,有些则需要在使用的时候手动激活。

API Explorer可以轻松从网页尝试调试API(就算没激活都可以试用,厉害)。一般来说如果 API 请求失败,要么是没设置账户,要么是该服务还没被你激活。

Cloud Operations:Monitoring,Dashboard,Metrics Explorer,Alerting,通过group可以整合资源管理,通过setting可以增加pj和account统一管理。其他还有logging,error report,trace服务。

计费 Billing

计费账户:可以为每个部门单位创建计费账户,或者别的什么单位。可以在项目Project上(三个点)设置它的计费账户。或者可以在新建项目的时候选择收费账户。这样就可以查看每个project的总费用。

操作需要的权限:(Billing Administrator role)或者 (Project Creator and Billing Account User)

Command:gcloud alpha/beta billing accounts list

注意:一开始的300美元积分,仅限第一个积分账户。最好把测试用的PJ都关联到第一个计费账户来使用。

预算和警报:预算和警报,是以计费账户为单位的。通过阈值在到达指定金额时,发送提醒邮件给我们,好让我们采取行动。

BillingExport:计费输出将费用数据输出到BigQuery。需要激活Bigquery Data transfer API。

如果你是发票结算账户,付款需要联系GCP销售团队,可以电汇或支票结算,每月将收到发票。

价格计算服务:Pricing Calculator:keyword:updated prices, latest prices, cost estimation

和谷歌云的交互方式

Security & Management

Resource Manager

整个GCP层级如下:组织(如果你的账户域名是组织类型比如google workspace账号的话)- 文件夹folder - 项目projects - 资源resource(gmail账号是无组织的)

Data Catalog

IAM

basic role,predefined role,custom role

IAM对GCS管理包括均一管理也就是只使用IAM,和细管理,也就是同时使用IAM和ACL的管理。

IAM包括四种账户:Google Account, Service Account, Google Groups, Cloud Identity Domain。

IAM Policy:用json方式写的权限控制方式,成员,角色,资源,以及按需条件。

VPCSC

数据加密多层防御

Cloud Operations suite

Monitoring

Logging

Trace

Profiler

Debugger

实时调试云应用程序,无需重新启动或停止

Error Reporting

自动收集和分析错误和异常

Compute

Comparsion

App Engine

Cloud Functions

GKE

Compute Engine

Auto Scaling

Google Kubernetes Engine/Cluster

Cloud Run

APP Engine

codelabs:https://codelabs.developers.google.com/codelabs/cloud-app-engine-python3#0

Storage

Comparsion

Google Cloud Storage

Bigtable

codelabs:https://codelabs.developers.google.com/codelabs/cloud-bigtable-intro-java#0

BigQuery

Cloud SQL

Cloud Spanner

Cloud Firestore/Firebase

Data Transfer

Storage transfer

BQ data transfer

Transfer appliance

和AWS的snow家族一样,是通过物理设备传送数据

Networking

VPC

Load Balancer

gcp_load_balancer

Cloud DNS

Data Pipeline

Dataproc

Composer

两个服务的区别和结合

目标和用途:

核心技术:

典型使用场景:

与其他 GCP 服务的集成:

一个使用流程的案例:

Event trigger

Cloud Functions

Cloud PubSub

Dataflow

是一个完全托管的流数据分析服务,可用于实时处理无限数据流。它基于Apache Beam编程模型,能够在多种执行环境中运行相同的数据处理代码,包括批处理和流式处理。

主要特点:

  1. 无服务器 - 完全托管服务,无需预置集群,自动扩展
  2. 统一模型 - 批处理和流式处理使用相同的编程模型
  3. 多语言 - 支持Java,Python,Go等多种语言
  4. 开箱即用 - 提供多种源和接收器连接器与Google产品集成
  5. 可扩展 - 每秒可处理数百万个记录
  6. 容错 - 具备自动重试和重新恢复能力
  7. 监控 - 提供丰富的监控和日志记录能力

Dataflow广泛应用于ETL、实时数据处理、数据集成、数据分析等场景。用户可以在托管集群环境或自己的私有集群上运行Dataflow管道。它与BigQuery、Cloud Storage、Cloud Pub/Sub等GCP产品紧密集成。总的来说,Dataflow提供了一种简单、统一且富有弹性的方式来处理大规模数据。

Dataflow vs. Cloud Composer:

developer

关于Network的一些解释


SSL offload(SSL 卸载)是一种网络安全技术,旨在减轻服务器负载和提高性能。在 SSL offload 中,SSL(安全套接层)和 TLS(传输层安全)的加密和解密操作从服务器转移到专门的硬件设备或者专用的 SSL 加速器中进行处理。

通常情况下,当客户端与服务器之间建立安全连接时,会使用 SSL/TLS 协议对通信进行加密。加密和解密操作对服务器的 CPU 和内存等资源造成了较大的负担,特别是在高负载情况下。为了减轻服务器的负载并提高性能,可以使用 SSL offload 技术。

SSL offload 的工作原理如下:

  1. 客户端发起连接请求时,请求通过负载均衡器或者专用的硬件设备(如 SSL 加速器)。
  2. 负载均衡器或者 SSL 加速器接收到连接请求后,会负责 SSL 握手过程中的密钥交换、加密和解密操作。
  3. 一旦安全连接建立完成,负载均衡器或者 SSL 加速器将未加密的请求转发到后端的服务器上。
  4. 后端的服务器只需要处理未加密的请求,不需要负责 SSL 握手和加解密操作,从而减轻了服务器的负载。

使用 SSL offload 技术的主要优势包括:

总的来说,SSL offload 技术是一种有效的网络安全技术,可以帮助提高服务器的性能和可用性,并简化 SSL/TLS 配置和管理。


SSL Proxy(SSL 代理)是一种网络设备或服务,用于在客户端和服务器之间拦截、检查和修改 SSL/TLS 加密通信流量。SSL Proxy 在传输层上建立连接,同时充当客户端和服务器之间的中间人,使得它能够对加密通信进行解密和重新加密,以便检查、修改或过滤通信内容。

SSL Proxy 的主要功能包括:

  1. 解密和重新加密:SSL Proxy 拦截经过其的 SSL/TLS 加密流量,将其解密以便检查通信内容,然后重新加密并转发给目标服务器或客户端。

  2. 内容过滤:SSL Proxy 可以检查加密通信的内容,过滤掉不安全或不符合策略的内容,如恶意软件、广告、敏感信息等。

  3. 访问控制:SSL Proxy 可以基于特定的访问策略对加密通信进行访问控制,包括阻止或允许特定的域名、URL、IP 地址等。

  4. 流量监控和分析:SSL Proxy 可以监控和分析 SSL/TLS 加密流量,以便了解网络流量的模式、趋势和性能,并提供报告和分析。

SSL Proxy 在网络安全和内容过滤方面具有重要作用,尤其是在企业网络中用于监控和控制员工访问互联网的行为,以及在安全网关和防火墙中用于检测和防范网络威胁。然而,使用 SSL Proxy 也可能引发隐私和安全方面的顾虑,因为它涉及到对加密通信进行解密和重新加密的操作,可能会暴露用户的敏感信息。因此,在部署 SSL Proxy 时需要谨慎考虑隐私和安全问题,并遵循适当的法律法规和隐私政策。


TCP Proxy(传输控制协议代理)是一种网络设备或服务,用于在传输层拦截、检查和转发 TCP 数据流量。TCP Proxy 充当客户端和服务器之间的中间人,允许它在建立 TCP 连接时拦截数据,检查数据内容,并根据特定的规则对数据进行处理或者转发给目标服务器。

TCP Proxy 的主要功能包括:

  1. 数据转发:TCP Proxy 可以将来自客户端的 TCP 请求转发给目标服务器,并将服务器的响应转发给客户端,使得客户端和服务器之间的通信能够顺利进行。

  2. 流量监控和分析:TCP Proxy 可以监控和分析 TCP 数据流量,包括连接建立、数据传输、连接关闭等过程,以便了解网络流量的模式、趋势和性能,并提供报告和分析。

  3. 访问控制:TCP Proxy 可以根据特定的访问策略对 TCP 数据流量进行访问控制,包括阻止或允许特定的 IP 地址、端口号、协议等。

  4. 负载均衡和高可用性:TCP Proxy 可以用于实现负载均衡和故障转移,将请求转发给多个目标服务器,并在服务器发生故障时自动切换到备用服务器。

  5. 安全防护:TCP Proxy 可以用于实现网络安全防护,包括防火墙、入侵检测和防护等功能,以保护网络免受网络攻击和恶意活动的威胁。

TCP Proxy 在网络通信和安全方面具有重要作用,尤其是在企业网络中用于监控和控制对外网络访问的行为,以及在负载均衡和高可用性方面用于优化网络性能。它可以帮助组织提高网络安全性、可用性和性能,并提供更好的用户体验。


SSL Proxy 和 TCP Proxy 在功能和应用方面有一些重要的区别:

  1. 协议支持
    • SSL Proxy 主要用于处理 SSL/TLS 加密的通信流量,它可以拦截、解密和重新加密 SSL/TLS 加密的数据流量。因此,SSL Proxy 通常用于检查和修改 HTTPS 流量、SMTPS 流量等使用 SSL/TLS 加密的通信。
    • TCP Proxy 则用于处理基于传输控制协议(TCP)的通信流量,它可以拦截和转发 TCP 数据流量,但通常不涉及对数据的解密和重新加密操作。TCP Proxy 主要用于 TCP 协议的代理、负载均衡、访问控制等。
  2. 加密处理
    • SSL Proxy 对 SSL/TLS 加密的通信进行解密和重新加密操作,以便检查、修改或过滤通信内容。它需要能够识别 SSL/TLS 握手并拥有相应的证书和私钥。
    • TCP Proxy 不涉及对加密通信进行解密和重新加密操作,它只是简单地转发 TCP 数据流量,因此不需要处理 SSL/TLS 加密。
  3. 应用场景
    • SSL Proxy 通常用于处理需要解密 SSL/TLS 加密的通信流量的场景,如防火墙、代理服务器、安全网关等。它可以用于检查和修改 HTTPS 流量、拦截恶意软件、过滤敏感信息等。
    • TCP Proxy 则用于处理 TCP 协议的通信流量的场景,如负载均衡、访问控制、入侵检测等。它通常用于转发 TCP 数据流量、实现高可用性、优化网络性能等。

总的来说,SSL Proxy 和 TCP Proxy 在处理的通信协议、加密处理方式和应用场景上有所不同。SSL Proxy 主要用于处理 SSL/TLS 加密的通信流量,并进行解密和重新加密操作,而 TCP Proxy 则用于处理基于 TCP 协议的通信流量,但不涉及对加密通信的解密操作。


“Preserve Client IP” 是一种网络技术,用于确保在经过代理或负载均衡器时,服务端能够获取到客户端的真实 IP 地址。在常规的网络通信中,客户端的 IP 地址可能会被代理或负载均衡器替换为其自身的 IP 地址,导致服务端无法获取到客户端的真实 IP 地址,而是获取到了代理或负载均衡器的 IP 地址。

为了解决这个问题,可以使用 “Preserve Client IP” 技术来确保服务端能够获取到客户端的真实 IP 地址。这通常涉及到在代理或负载均衡器上进行配置,以便将客户端的真实 IP 地址传递给服务端。具体实现方式包括:

  1. 传递 HTTP 标头:代理或负载均衡器可以将客户端的真实 IP 地址作为 HTTP 请求的一个标头字段(如 X-Forwarded-For)传递给服务端。服务端可以从这个标头字段中获取客户端的真实 IP 地址。

  2. 设置自定义标头:有些代理或负载均衡器支持设置自定义的标头字段来传递客户端的真实 IP 地址。服务端需要根据代理或负载均衡器的配置来获取这个自定义的标头字段。

  3. 使用代理协议:有些代理或负载均衡器支持一些特定的代理协议,这些协议可以在通信中包含客户端的真实 IP 地址。服务端需要根据代理协议来解析客户端的真实 IP 地址。

通过使用 “Preserve Client IP” 技术,服务端就可以获得客户端的真实 IP 地址,从而进行相关的访问控制、日志记录、统计分析等操作,而不是获取到代理或负载均衡器的 IP 地址。这对于需要了解客户端的真实来源和行为的应用场景非常重要。

SDK

三种方法安装,docker,非docker,服务台的CloudShell。

# docker install
docker pull gcr.io/google.com/cloudsdktool/cloud-sdk:latest
docker run --rm gcr.io/google.com/cloudsdktool/cloud-sdk:latest gcloud version
# docker config
docker run -ti --name gcloud-config gcr.io/google.com/cloudsdktool/cloud-sdk gcloud auth login
docker run --rm --volumes-from gcloud-config gcr.io/google.com/cloudsdktool/cloud-sdk gcloud config list
# not docker config
gcloud init

SDK中所有的组建:使用gcloud components list可以列出来。知道了组件甚至可以猜出命令行。组件如下:

更新命令:gcloud components update

安装新的组件的推介方法:sudo apt-get install google-cloud-sdk-minikube

命令构成:

gcloud + release level (optional:alpha/beta) + component + entity + operation + positional args + flags

For example: gcloud + compute + instances + create + example-instance-1 + --zone=us-central1-a

登陆:gcloud auth login

配置:使用命令设置默认项目gcloud config set project <project ID>

当您登录 gcloud CLI 时,命令gcloud config list显示了当前配置,但是,我们可以有多个配置,gcloud config configurations list并将列出所有可用的配置。

要创建新配置,请使用gcloud config configurations create <name>命令。

撤销当前设置的PJgcloud config unset project

激活默认的配置gcloud config configurations activate default

附录gcloud

gcloud命令:

yourusername@myinstance:~#

- 使用自定义的启动脚本创建GCE
```bash
$ gcloud compute instances create nginx \
         --metadata-from-file startup-script=startup.sh

如果是windowsGCE需要用RDP客户端,这对于Linux就是ssh。

# create sql instance
gcloud sql instances create [instance-name]
# create database in the instance
gcloud sql databases create [database-name] --instance [instance-name]
# connect to CloudSQL / need activate CloudSQL Admin API
gcloud sql connect [project name] --user=root --quiet
# or user mysql client
mysql -h [IP-of-instance] -u [user] -p
# delete the instance
gcloud sql instances delete [instance-name]
gcloud spanner instances list
gcloud spanner databases list --instance [INSTANCE-ID]
gcloud spanner instances delete [Instance-ID]
CREATE OR REPLACE TABLE `stackoverflow.questions_2018_clustered`
PARTITION BY
  DATE(creation_date)
CLUSTER BY
  tags AS
SELECT
  id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags
FROM
  `bigquery-public-data.stackoverflow.posts_questions`
WHERE
  creation_date BETWEEN '2018-01-01' AND '2019-01-01';
# create
gsutil mb gs://<bucketname>
# list
gsutil ls
# upload
gsutil mv ./demo.txt gs://[bucketname]
gsutil cp ./demo.txt gs://[bucketname]
# multithread upload
gsutil -m mv . gs://cloudstoragelab/
# upload bigfile by chunks
gsutil -o GSUTIL:parallel_composite_upload_component_size=10M mv [bigfile] gs://[bucketname]
# enable api
gcloud services enable container.googleapis.com
# create cluster
gcloud container clusters create fancy-cluster --num-nodes 3
# create container
# enable cloud build api
gcloud services enable cloudbuild.googleapis.com
# create image
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
# deploy container to gke
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0
# delete pod
kubectl delete pod/<POD_NAME>
# check the status of pod service and deployment
kubectl get all
# espose the service
kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080
# get the service info of cluster ip, external ip and ports
kubectl get service
# scale the deployment to 3
kubectl scale deployment monolith --replicas=3
# rebuild application image with a new version!
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
# deploy the new version without downtime
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

codeslabs:https://codelabs.developers.google.com/codelabs/cloud-deploy-website-on-gke#0