- Added comprehensive course structure with 11 modules - Included theoretical content, practical examples, and tasks - Multi-language code examples (Java, Rust, Node.js, Python) - Detailed analysis of architectural approaches and trade-offs - Complete caching strategies documentation - Architecture examples from real-world systems (Twitter, Netflix, Uber) - Structured navigation and learning path - Ready for educational use
13 KiB
13 KiB
GCP (Google Cloud Platform)
Навигация
Основные сервисы GCP
1. Compute Services
Compute Engine
- Виртуальные машины в облаке
- Различные типы машин (e2, n2, c2, m2, etc.)
- Автомасштабирование с Managed Instance Groups
- Preemptible VMs для экономии
# GCP VM Instance
resources:
- name: my-vm
type: compute.v1.instance
properties:
zone: us-central1-a
machineType: zones/us-central1-a/machineTypes/e2-micro
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: projects/ubuntu-os-cloud/global/images/family/ubuntu-2004-lts
diskSizeGb: 20
networkInterfaces:
- network: global/networks/default
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
metadata:
items:
- key: startup-script
value: |
#!/bin/bash
apt-get update
apt-get install -y docker.io
systemctl start docker
systemctl enable docker
usermod -a -G docker $USER
docker run -d -p 80:80 nginx
tags:
items:
- web-server
Cloud Functions
- Serverless вычисления
- Поддержка различных языков
- Интеграция с другими GCP сервисами
// Cloud Function Example
const { Storage } = require('@google-cloud/storage');
const storage = new Storage();
exports.processOrder = async (req, res) => {
try {
const order = req.body;
// Валидация заказа
if (!order || !order.customerId || !order.items) {
res.status(400).json({ error: 'Invalid order data' });
return;
}
// Обработка заказа
const orderId = await processOrder(order);
// Сохранение в Cloud Storage
const bucket = storage.bucket('my-orders-bucket');
const file = bucket.file(`orders/${orderId}.json`);
await file.save(JSON.stringify(order));
// Отправка уведомления через Pub/Sub
const { PubSub } = require('@google-cloud/pubsub');
const pubsub = new PubSub();
const topic = pubsub.topic('order-notifications');
await topic.publishMessage({
data: Buffer.from(JSON.stringify({
orderId: orderId,
status: 'processed',
timestamp: new Date().toISOString()
}))
});
res.status(200).json({
orderId: orderId,
status: 'processed'
});
} catch (error) {
console.error('Error processing order:', error);
res.status(500).json({ error: 'Internal server error' });
}
};
async function processOrder(order) {
// Логика обработки заказа
return `ORD-${order.customerId}-${Date.now()}`;
}
App Engine
- Платформа для веб-приложений
- Автоматическое масштабирование
- Поддержка различных языков
# app.yaml
runtime: nodejs18
service: my-service
instance_class: F2
automatic_scaling:
min_instances: 1
max_instances: 10
target_cpu_utilization: 0.6
env_variables:
NODE_ENV: production
DATABASE_URL: "postgresql://user:password@/dbname?host=/cloudsql/project:region:instance"
handlers:
- url: /.*
script: auto
secure: always
2. Storage Services
Cloud Storage
- Объектное хранилище для файлов
- Различные классы хранения (Standard, Nearline, Coldline, Archive)
- Интеграция с CDN
# GCP Cloud Storage Bucket
resources:
- name: my-bucket
type: storage.v1.bucket
properties:
location: US
storageClass: STANDARD
versioning:
enabled: true
lifecycle:
rule:
- action:
type: SetStorageClass
storageClass: NEARLINE
condition:
age: 30
- action:
type: SetStorageClass
storageClass: COLDLINE
condition:
age: 90
- action:
type: Delete
condition:
age: 365
cors:
- origin: ["https://example.com"]
method: ["GET", "POST"]
responseHeader: ["Content-Type"]
maxAgeSeconds: 3600
Persistent Disk
- Блочное хранилище для VM
- Различные типы (SSD, HDD)
- Автоматические снимки
# Persistent Disk
resources:
- name: my-disk
type: compute.v1.disk
properties:
zone: us-central1-a
sizeGb: 100
type: zones/us-central1-a/diskTypes/pd-ssd
sourceImage: projects/ubuntu-os-cloud/global/images/family/ubuntu-2004-lts
3. Database Services
Cloud SQL
- Управляемые реляционные БД
- Поддержка MySQL, PostgreSQL, SQL Server
- Автоматические бэкапы и патчи
# GCP Cloud SQL
resources:
- name: my-database
type: sqladmin.v1beta4.instance
properties:
name: my-database
region: us-central1
settings:
tier: db-f1-micro
dataDiskType: PD_SSD
dataDiskSizeGb: 20
backupConfiguration:
enabled: true
startTime: "03:00"
binaryLogEnabled: true
ipConfiguration:
ipv4Enabled: true
authorizedNetworks:
- value: "0.0.0.0/0"
name: "all"
locationPreference:
zone: us-central1-a
maintenanceWindow:
day: 7
hour: 3
databaseVersion: POSTGRES_13
rootPassword: !Ref DatabasePassword
Firestore
- NoSQL база данных
- Автоматическое масштабирование
- Offline поддержка
# Firestore Database
resources:
- name: my-firestore
type: firestore.googleapis.com/Database
properties:
locationId: us-central1
type: FIRESTORE_NATIVE
concurrencyMode: OPTIMISTIC
BigQuery
- Data warehouse для аналитики
- Columnar storage
- SQL queries
# BigQuery Dataset
resources:
- name: my-dataset
type: bigquery.v2.dataset
properties:
datasetReference:
datasetId: my_dataset
location: US
description: My BigQuery dataset
4. Networking Services
Virtual Private Cloud (VPC)
- Изолированная виртуальная сеть
- Подсети и маршрутизация
- Интеграция с on-premises
# VPC Network
resources:
- name: my-vpc
type: compute.v1.network
properties:
autoCreateSubnetworks: false
routingConfig:
routingMode: REGIONAL
- name: my-subnet
type: compute.v1.subnetwork
properties:
network: !Ref my-vpc
ipCidrRange: 10.0.0.0/24
region: us-central1
privateIpGoogleAccess: true
Cloud Load Balancing
- Распределение нагрузки
- Health checks
- SSL termination
# HTTP Load Balancer
resources:
- name: my-load-balancer
type: compute.v1.urlMap
properties:
name: my-load-balancer
defaultService: !Ref backend-service
hostRules:
- hosts: ["example.com"]
pathMatcher: path-matcher
pathMatchers:
- name: path-matcher
defaultService: !Ref backend-service
pathRules:
- paths: ["/api/*"]
service: !Ref api-backend-service
- name: backend-service
type: compute.v1.backendService
properties:
name: backend-service
backends:
- group: !Ref instance-group
healthChecks:
- !Ref health-check
loadBalancingScheme: EXTERNAL
protocol: HTTP
portName: http
5. Security Services
Cloud Identity and Access Management (IAM)
- Управление пользователями и доступом
- Роли и политики
- Service accounts
# IAM Service Account
resources:
- name: my-service-account
type: iam.v1.serviceAccount
properties:
accountId: my-service-account
displayName: My Service Account
description: Service account for my application
- name: my-service-account-key
type: iam.v1.serviceAccountKey
properties:
name: !Ref my-service-account
keyAlgorithm: KEY_ALG_RSA_1024
privateKeyType: TYPE_GOOGLE_CREDENTIALS_FILE
Secret Manager
- Управление секретами
- Шифрование данных
- Аудит доступа
# Secret Manager Secret
resources:
- name: my-secret
type: secretmanager.v1.secret
properties:
secretId: my-secret
replication:
automatic: {}
6. Monitoring and Logging
Cloud Monitoring
- Мониторинг ресурсов и приложений
- Логи и метрики
- Алерты и автоматические действия
# Monitoring Alert Policy
resources:
- name: my-alert-policy
type: monitoring.v3.alertPolicy
properties:
displayName: High CPU Usage
conditions:
- displayName: CPU usage is high
conditionThreshold:
filter: 'resource.type="gce_instance" AND metric.type="compute.googleapis.com/instance/cpu/utilization"'
comparison: COMPARISON_GREATER_THAN
thresholdValue: 0.8
duration: 300s
alertStrategy:
autoClose: 604800s
enabled: true
notificationChannels:
- !Ref notification-channel
Cloud Logging
- Централизованное логирование
- Структурированные логи
- Интеграция с мониторингом
7. Application Services
Cloud Endpoints
- Управление API
- Аутентификация и авторизация
- Rate limiting
# Cloud Endpoints Service
resources:
- name: my-endpoints-service
type: endpoints.googleapis.com/Service
properties:
serviceName: my-api.endpoints.my-project.cloud.goog
openapi: |
swagger: "2.0"
info:
title: My API
version: "1.0.0"
paths:
/api/v1/orders:
post:
summary: Create order
operationId: createOrder
parameters:
- name: order
in: body
required: true
schema:
$ref: "#/definitions/Order"
responses:
200:
description: Order created
schema:
$ref: "#/definitions/OrderResponse"
definitions:
Order:
type: object
properties:
customerId:
type: string
items:
type: array
items:
type: string
OrderResponse:
type: object
properties:
orderId:
type: string
status:
type: string
Pub/Sub
- Очереди сообщений
- Topics и Subscriptions
- Dead letter topics
# Pub/Sub Topic
resources:
- name: my-topic
type: pubsub.v1.topic
properties:
name: my-topic
messageRetentionDuration: 604800s
- name: my-subscription
type: pubsub.v1.subscription
properties:
name: my-subscription
topic: !Ref my-topic
ackDeadlineSeconds: 60
messageRetentionDuration: 604800s
deadLetterPolicy:
deadLetterTopic: !Ref dead-letter-topic
maxDeliveryAttempts: 5
Лучшие практики GCP
1. Project Organization
- Используйте проекты для изоляции ресурсов
- Применяйте labels для категоризации
- Используйте folders для иерархии
2. Security
- Используйте IAM для управления доступом
- Включайте шифрование для всех данных
- Настройте VPC firewall rules
- Используйте Private Google Access
3. Monitoring
- Настройте Cloud Monitoring алерты
- Используйте Cloud Logging для централизованного логирования
- Мониторьте затраты с помощью Billing API
- Настройте автоматическое масштабирование
4. Backup and Recovery
- Включите автоматические снимки дисков
- Используйте Cloud Storage для долгосрочного хранения
- Тестируйте процедуры восстановления
- Документируйте disaster recovery планы
5. Networking
- Используйте приватные подсети для баз данных
- Настройте Cloud NAT для исходящего трафика
- Используйте Private Google Access для сервисов
- Настройте firewall rules с минимальными правами