Ngân hàng đề — Google Cloud Associate Cloud Engineer

Tìm thấy 449 câu.

Câu 81 BigQuery
A team providing business intelligence solutions to your company is migrating to GCP. They make extensive use of SQL and want to continue to use SQL. They currently use relational databases to store data. Data is loaded every night. When data is older than 3 years, it is no longer needed. They expect the database to grow to 100 GB within six months. Most of the operations on the database query a few columns but scan many rows. They also want to minimize database management overhead. What GCP service would you recommend they use?
  1. A Bigtable
  2. B BigQuery
  3. C Cloud Firestore
  4. D Cloud SQL
Xem giải thích

Đáp án

B — BigQuery.

Vì sao đúng

Đề cho rất nhiều manh mối, và mọi manh mối đều chỉ về BigQuery.

⚠ Đọc từng manh mối:

"business intelligence, dùng SQL nhiều"
        ↓
    → cần SQL chuẩn, kết nối được công cụ BI

"nạp dữ liệu MỖI ĐÊM"
        ↓
    → tải theo LÔ, không phải giao dịch thời gian thực

"truy vấn VÀI CỘT nhưng quét NHIỀU DÒNG"
        ↓
    → đây là dấu hiệu KINH ĐIỂN của tải phân tích
    → BigQuery lưu theo CỘT
      → chỉ đọc cột được nêu tên

"dữ liệu quá 3 năm thì không cần nữa"
        ↓
    → partition theo ngày + luật hết hạn phân vùng

"giảm công quản lý CSDL"
        ↓
    → serverless

⚠ Vì sao lưu theo cột lại quan trọng đến thế:

CSDL quan hệ lưu theo DÒNG
        ↓
    Đọc vài cột vẫn phải đọc cả dòng
    → quét nhiều dữ liệu vô ích

BigQuery lưu theo CỘT
        ↓
    Chỉ đọc đúng cột được nêu trong SELECT
        ↓
    → đọc 3 cột trong bảng 50 cột
      → quét khoảng 6% dữ liệu
    → và đây cũng là cơ sở tính tiền

⚠ Và "dữ liệu quá 3 năm không cần nữa" có giải pháp sẵn:

Bảng phân vùng theo ngày
        ↓
    Đặt partition expiration = 1095 ngày
        ↓
    → BigQuery TỰ XOÁ phân vùng quá hạn
    → không cần script dọn dẹp
        ↓
    Hoặc để dữ liệu cũ tự chuyển sang
    long-term storage (rẻ hơn ~50%)
      → tự động khi không sửa trong 90 ngày

Vì sao các phương án khác sai

  • D (Cloud SQL) — đây là phương án gần nhất vì đội đang dùng CSDL quan hệ, nhưng Cloud SQL là CSDL GIAO DỊCH lưu theo DÒNG: truy vấn quét hàng triệu dòng để tổng hợp sẽ rất chậm, và nó cũng cần nhiều công quản lý hơn (chọn cỡ máy, đĩa, chỉ mục).

  • A (Bigtable) — NoSQL, không có SQL đầy đủ, không kết nối được công cụ BI truyền thống.

  • C (Cloud Firestore) — NoSQL tài liệu cho ứng dụng web và di động, không phải kho phân tích.

Ghi nhớ

⚠ Nhận diện tải PHÂN TÍCH ↔ tải GIAO DỊCH — bảng phải thuộc: | Dấu hiệu | Loại tải | Dịch vụ | |---|---|---| | "quét nhiều dòng, vài cột" | PHÂN TÍCH (OLAP) | BigQuery | | "tổng hợp, báo cáo, BI" | PHÂN TÍCH | BigQuery | | "nạp theo lô hằng đêm" | phân tích | BigQuery | | "nhiều đọc ghi bản ghi nhỏ" | GIAO DỊCH (OLTP) | Cloud SQL / Spanner | | "cần khoá ngoại, giao dịch" | giao dịch | Cloud SQL | | "ghi rất nhiều, độ trễ mili giây" | NoSQL | Bigtable |

Từ khoá nhận diện:

"quét nhiều dòng, ít cột" → BigQuery (lưu theo cột) "SQL, BI, giảm công quản lý" → BigQuery "giao dịch, ràng buộc toàn vẹn" → Cloud SQL "dữ liệu cũ hết hạn" → partition expiration "chuỗi thời gian, ghi lớn" → Bigtable

BigQuery — phân vùng và hết hạn Nội dung
Partition theo ngày theo cột thời gian, hoặc thời điểm NẠP
_PARTITIONTIME cột giả cho bảng phân vùng theo thời điểm nạp
Partition expiration tự XOÁ phân vùng quá hạn
Require partition filter BẮT BUỘC truy vấn phải lọc theo phân vùng
Cluster sắp xếp trong phân vùng theo tối đa 4 cột
Kết hợp partition theo ngày + cluster theo cột lọc
Chi phí lưu trữ BigQuery Nội dung
Active storage dữ liệu sửa trong 90 ngày gần đây
Long-term storage không sửa quá 90 ngày → RẺ HƠN ~50%
Tự động không cần làm gì, BigQuery tự chuyển
Truy vấn giá như nhau ở cả hai loại
Xoá dữ liệu cũ partition expiration
Kiểm soát chi phí truy vấn Cách
Bỏ SELECT * hiệu quả nhất
Partition + lọc trong WHERE
require_partition_filter ép mọi truy vấn phải lọc
--maximum_bytes_billed trần cứng
--dry-run biết trước dữ liệu quét
Capacity pricing khi khối lượng lớn và ổn định
Chuyển kho dữ liệu quan hệ sang BigQuery Bước
1 Đánh giá lược đồ — BigQuery ưa bảng phẳng, nested/repeated
2 Chuyển dữ liệu lịch sử qua Cloud Storage
3 Dựng đường ống nạp hằng đêm (Data Transfer Service, Dataflow)
4 Thiết kế partition và cluster NGAY TỪ ĐẦU
5 Đặt partition expiration cho dữ liệu quá 3 năm
6 Kết nối công cụ BI qua JDBC/ODBC

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Truy vấn quét bao nhiêu | bq query --dry-run | | Bảng có partition không | bq show <dataset>.<bang> | | Ai tốn nhiều nhất | INFORMATION_SCHEMA.JOBS |

Và một cấu hình rất đáng bật cho bảng lớn có phân vùng: require_partition_filter. Nó khiến mọi truy vấn quên mệnh đề lọc theo ngày thất bại ngay lập tức thay vì âm thầm quét toàn bộ bảng — biến một sai sót tốn kém thành một thông báo lỗi rõ ràng mà người viết truy vấn nhận được trong vài giây.

Câu 82 BigQuery
A startup is deploying analytical services for Internet of Things (IoT) applications. The service will need to ingest large volumes of time series data in short periods of time. Users will query the data is a few different ways but those ways are known and fixed. What managed GCP database service would you recommend?
  1. A BigQuery
  2. B Bigtable
  3. C Cloud SQL
  4. D Cloud Spanner
Xem giải thích

Đáp án

B — Bigtable.

Vì sao đúng

Ba manh mối: dữ liệu CHUỖI THỜI GIAN, nạp khối lượng lớn trong thời gian ngắn, và cách truy vấn ĐÃ BIẾT VÀ CỐ ĐỊNH.

⚠ Điểm mấu chốt — manh mối thứ ba là quyết định:

"Người dùng truy vấn theo vài cách,
 nhưng những cách đó ĐÃ BIẾT và CỐ ĐỊNH"
        ↓
    Bigtable CHỈ có MỘT chỉ mục: ROW KEY
        ↓
    → truy vấn phải đi qua row key
    → không có chỉ mục phụ, không có SQL tuỳ ý
        ↓
    Biết trước cách truy vấn
        ↓
    → THIẾT KẾ ĐƯỢC row key cho đúng
    → đây chính là điều kiện để dùng Bigtable
        ↓
    Nếu truy vấn TUỲ Ý, không đoán trước
      → BigQuery mới phù hợp

⚠ Và hai manh mối còn lại củng cố lựa chọn:

Chuỗi thời gian + ghi khối lượng lớn
        ↓
    Bigtable:
      - thông lượng ghi rất cao
      - độ trễ mili giây một chữ số
      - mở rộng bằng cách thêm node
      - thiết kế riêng cho chuỗi thời gian

⚠ Nhưng ROW KEY quyết định tất cả:

Row key bắt đầu bằng DẤU THỜI GIAN
        ↓
    → mọi lượt ghi dồn vào MỘT node
    → HOTSPOT, thông lượng sụp đổ
        ↓
Mẫu đúng cho IoT:
    <ma-cam-bien>#<dau-thoi-gian>
    hoặc thêm tiền tố băm để trải đều
        ↓
    Và row key phải hỗ trợ ĐÚNG các
    truy vấn đã biết trước

Xem thêm câu #12489 và #12506 (lô 131 và 132): cùng chủ đề Bigtable cho IoT và chuỗi thời gian. Khoá nhất quán.

Vì sao các phương án khác sai

  • A (BigQuery) — đây là phương án gần nhất vì cũng xử lý được dữ liệu rất lớn, nhưng BigQuery tối ưu cho truy vấn PHÂN TÍCH quét lớn, không cho ghi từng bản ghi ở độ trễ mili giây. (Mô hình phổ biến: Bigtable ghi và đọc nóng, BigQuery phân tích lịch sử.)

  • D (Cloud Spanner) — CSDL quan hệ có giao dịch, chi phí cao hơn nhiều, không tối ưu cho khối lượng ghi chuỗi thời gian.

  • C (Cloud SQL) — mở rộng theo chiều dọc, không chịu nổi khối lượng ghi mà đề mô tả.

Ghi nhớ

⚠ Chọn CSDL theo mẫu truy vấn — bảng phải thuộc: | Mẫu truy vấn | Dịch vụ | |---|---| | Đã biết, cố định, qua một khoá | Bigtable | | Tuỳ ý, tổng hợp, SQL | BigQuery | | Giao dịch quan hệ | Cloud SQL / Spanner | | Theo tài liệu, ứng dụng di động | Firestore | | Bẫy | Bigtable KHÔNG cho truy vấn tuỳ ý |

Từ khoá nhận diện:

"chuỗi thời gian, ghi lớn, truy vấn đã biết" → Bigtable "truy vấn tuỳ ý, phân tích" → BigQuery "HBase" → Bigtable "giao dịch, khoá ngoại" → Cloud SQL "cần cả hai" → Bigtable cho nóng, BigQuery cho lịch sử

Bigtable — bảng phải thuộc Nội dung
Loại NoSQL cột rộng, được quản lý
Chỉ mục CHỈ có ROW KEY
Độ trễ mili giây một chữ số
Mở rộng thêm node, thông lượng tăng tuyến tính
Không có giao dịch nhiều dòng, SQL đầy đủ, join, chỉ mục phụ
Tương thích HBase API
Thiết kế row key — quan trọng nhất Nguyên tắc
TRÁNH dấu thời gian ở ĐẦU → hotspot
TRÁNH ID tự tăng đều
NÊN <thuc-the>#<dau-thoi-gian>
NÊN thiết kế theo ĐÚNG các truy vấn đã biết
NÊN thêm tiền tố băm khi số thực thể ít
Kiểm tra Key Visualizer
Lưu ý row key KHÔNG đổi được sau khi có dữ liệu
Kiểu truy vấn Bigtable hỗ trợ Nội dung
Đọc một dòng theo row key chính xác
Đọc một DẢI dòng row key range scan — rất nhanh
Lọc theo cột hoặc phiên bản qua filter
KHÔNG hỗ trợ truy vấn theo giá trị cột bất kỳ
Hệ quả row key phải mã hoá sẵn cách truy vấn
Kiến trúc IoT đầy đủ trên GCP Luồng
1 Thiết bị → Pub/Sub
2 Dataflow xử lý và làm sạch
3 Bigtable — dữ liệu nóng, truy vấn độ trễ thấp
4 BigQuery — dữ liệu lịch sử, phân tích tuỳ ý
5 Looker — báo cáo
Lý do dùng cả hai hai mẫu truy vấn hoàn toàn khác nhau

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có hotspot không | Key Visualizer trong console | | Node đủ chưa | chỉ số CPU utilization — nên dưới 70% | | Độ trễ thực tế | chỉ số read/write latency |

Và một câu hỏi nên đặt ra trước khi chọn Bigtable: các truy vấn có thật sự cố định không. Bigtable rất mạnh khi bạn biết trước cách dữ liệu sẽ được đọc, nhưng nếu sáu tháng sau đội phân tích muốn hỏi một câu hoàn toàn khác, bạn sẽ phải thiết kế lại row key và nạp lại toàn bộ dữ liệu — trong khi BigQuery cho phép hỏi bất cứ điều gì bằng SQL mà không cần đụng tới dữ liệu đã lưu.

Câu 83 BigQuery
You are administering a project that uses BigQuery. You would like to list all the datasets in the project. What command would you use?
  1. A bq ls
  2. B bq dir
  3. C gsutil ls
  4. D gsutil dir
Xem giải thích

Đáp án

A — bq ls

Vì sao đúng

BigQuery có công cụ dòng lệnh riêng là bq, và động từ liệt kê là ls.

⚠ Điểm mấu chốt — mỗi dịch vụ có công cụ riêng:

bq       → BigQuery
gsutil   → Cloud Storage (cũ)
gcloud storage → Cloud Storage (mới)
gcloud   → hầu hết dịch vụ còn lại
kubectl  → bên trong cụm Kubernetes
        ↓
    → dùng gsutil cho BigQuery là luôn SAI

⚠ Các dạng của bq ls:

bq ls
        ↓
    Liệt kê DATASET trong project hiện tại

bq ls <dataset>
        ↓
    Liệt kê BẢNG và VIEW trong dataset đó

bq ls --project_id=<project>
        ↓
    Dataset của một project khác

bq ls -j
        ↓
    Liệt kê JOB gần đây

bq ls --transfer_config
        ↓
    Cấu hình Data Transfer Service

⚠ Và cấu trúc định danh của BigQuery:

project:dataset.table
        ↓
    Dấu HAI CHẤM giữa project và dataset
    Dấu CHẤM giữa dataset và table
        ↓
    Ví dụ: my-project:analytics.events
        ↓
    Trong SQL thì dùng dấu huyền:
      `my-project.analytics.events`
      → ở đây là dấu CHẤM cả hai chỗ

Vì sao các phương án khác sai

  • C (gsutil ls) — đây là phương án gần nhất và là lệnh có thật, nhưng gsutil chỉ làm việc với Cloud Storage, không quản lý BigQuery.

  • B (bq dir) — không có động từ dir trong bq. Đây là thói quen từ Windows.

  • D (gsutil dir) — sai cả công cụ lẫn động từ.

Ghi nhớ

⚠ Các công cụ dòng lệnh của Google Cloud — bảng phải thuộc: | Công cụ | Dịch vụ | |---|---| | gcloud | hầu hết dịch vụ — Compute, IAM, GKE, Cloud Run… | | bq | BigQuery | | gsutil | Cloud Storage (công cụ CŨ) | | gcloud storage | Cloud Storage (công cụ MỚI, nhanh hơn) | | kubectl | bên trong cụm Kubernetes | | bt (cbt) | Bigtable | | Đều nằm trong | Google Cloud SDK |

Từ khoá nhận diện:

"liệt kê dataset" → bq ls "chi tiết một dataset hoặc bảng" → bq show "chạy truy vấn" → bq query "nạp dữ liệu" → bq load "gsutil cho BigQuery" → luôn SAI

Các lệnh bq hay dùng Việc
bq ls liệt kê dataset
bq ls <dataset> liệt kê bảng trong dataset
bq show <dataset>.<bang> chi tiết: lược đồ, kích thước, partition
bq query --use_legacy_sql=false '<SQL>' chạy truy vấn
bq query --dry-run ước tính dữ liệu quét
bq load nạp dữ liệu từ Cloud Storage
bq extract xuất bảng ra Cloud Storage
bq mk tạo dataset hoặc bảng
bq rm xoá
bq cp sao chép bảng
Định danh trong BigQuery — dễ nhầm Nội dung
Trong bq CLI project:dataset.table — dấu hai chấm rồi dấu chấm
Trong SQL `project.dataset.table` — dấu chấm cả hai
Dataset ở project khác phải khai đầy đủ
Cùng project chỉ cần dataset.table
Cờ hữu ích của bq Việc
--use_legacy_sql=false dùng SQL chuẩn — nên luôn khai
--format=prettyjson đầu ra dễ đọc
--dry-run ước tính chi phí
--maximum_bytes_billed trần cứng
--location khai vị trí dataset (US, EU, asia-southeast1…)
--project_id project khác
Vị trí dataset — điểm hay vướng Nội dung
Khai lúc tạo KHÔNG đổi được sau đó
Ràng buộc truy vấn chỉ chạy được giữa dataset CÙNG vị trí
Nạp dữ liệu bucket Cloud Storage nên cùng vị trí
Chuyển vị trí phải xuất ra rồi nạp lại
Tuân thủ chọn vị trí theo yêu cầu chủ quyền dữ liệu

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có những dataset nào | bq ls | | Dataset nằm ở vị trí nào | bq show --format=prettyjson <dataset> | | Bảng lớn bao nhiêu | bq show <dataset>.<bang> → numBytes |

Và một cờ nên đưa vào thói quen với mọi lệnh bq query: --use_legacy_sql=false. Legacy SQL là phương ngữ cũ với cú pháp khác biệt đáng kể, và nhiều tính năng hiện đại của BigQuery không hoạt động với nó — khai rõ SQL chuẩn ngay từ đầu tránh được cả một lớp lỗi cú pháp khó hiểu.

Câu 84 BigQuery
You would like to display information about a dataset named primarydata in a project called analytics1. What command would you use?
  1. A bq ls --format=prettyjson analytics1:primarydata
  2. B bq show --format=prettyjson analytics1:primarydata
  3. C bq metadata --format=prettyjson analytics1:primarydata
  4. D bq ls --format=prettyjson analytics1//primarydata
Xem giải thích

Đáp án

B — bq show --format=prettyjson analytics1:primarydata

Vì sao đúng

Cần thông tin chi tiết của MỘT dataset, và trong bq thì động từ cho việc đó là show.

⚠ Điểm mấu chốt — ls ↔ show:

bq ls
        ↓
    LIỆT KÊ nhiều thứ
    → chỉ vài trường tóm tắt

bq show <định danh>
        ↓
    CHI TIẾT của MỘT thứ
    → lược đồ, kích thước, thời điểm tạo,
      vị trí, nhãn, quyền truy cập
        ↓
    → tương đương `describe` của gcloud

⚠ Và cú pháp định danh của BigQuery:

project:dataset
        ↓
    Dấu HAI CHẤM giữa project và dataset
        ↓
    analytics1:primarydata   ✓
    analytics1//primarydata  ✗
        ↓
    Với bảng:
      project:dataset.table
      → hai chấm rồi chấm

⚠ --format=prettyjson cho đầu ra dễ đọc:

--format=prettyjson
        ↓
    JSON có thụt lề, dễ đọc bằng mắt
        ↓
Các định dạng khác của bq:
    --format=pretty   → bảng đẹp (mặc định)
    --format=json     → JSON một dòng
    --format=csv      → CSV
    --format=sparse   → tối giản
        ↓
    → prettyjson hữu ích khi cần xem
      lược đồ đầy đủ hoặc đưa vào script

Vì sao các phương án khác sai

  • A (bq ls --format=prettyjson analytics1:primarydata) — đây là phương án gần nhất và cú pháp định danh đúng, nhưng ls sẽ liệt kê các BẢNG bên trong dataset chứ không cho thông tin về chính dataset.

  • D (bq ls --format=prettyjson analytics1//primarydata) — sai cả hai: động từ ls, và dấu phân cách // không hợp lệ.

  • C (bq metadata ...) — không có động từ metadata trong bq.

Ghi nhớ

⚠ Các lệnh bq hay dùng — bảng phải thuộc: | Lệnh | Việc | |---|---| | bq ls | liệt kê dataset | | bq ls <dataset> | liệt kê bảng trong dataset | | bq show <dataset> | chi tiết một DATASET | | bq show <dataset>.<bang> | chi tiết một BẢNG — lược đồ, kích thước, partition | | bq show -j <job_id> | chi tiết một JOB — đọc lỗi ở đây | | bq query | chạy truy vấn | | bq load | nạp dữ liệu | | bq mk / bq rm | tạo / xoá |

Từ khoá nhận diện:

"chi tiết một dataset hoặc bảng" → bq show "liệt kê" → bq ls "vì sao job thất bại" → bq show -j <job_id> "ước tính chi phí" → bq query --dry-run "project//dataset" → sai — phải là project:dataset

Định danh BigQuery — nhắc lại Nội dung
Trong bq CLI project:dataset.table
Trong SQL `project.dataset.table`
Cùng project chỉ cần dataset.table
Bẫy : trong CLI, . trong SQL
bq show cho biết những gì Trường
Lược đồ (schema) tên cột, kiểu, mô tả
numBytes, numRows kích thước bảng — dùng để ước tính chi phí
timePartitioning bảng có phân vùng không, theo cột nào
clustering cột phân cụm
location vị trí dataset — không đổi được
expirationTime thời điểm hết hạn
access quyền truy cập dataset
Các định dạng đầu ra của bq Nội dung
--format=pretty bảng đẹp — mặc định
--format=prettyjson JSON thụt lề, dễ đọc
--format=json JSON một dòng — cho script
--format=csv CSV
--format=sparse tối giản
Gỡ lỗi job BigQuery Bước
1 bq ls -j — liệt kê job gần đây
2 bq show -j <job_id> — đọc errorResult và errors
3 Kiểm tra quyền: BigQuery và cả Cloud Storage
4 INFORMATION_SCHEMA.JOBS — truy vấn lịch sử job bằng SQL
5 Cloud Logging cho ngữ cảnh đầy đủ

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Dataset có những gì | bq show --format=prettyjson <dataset> | | Bảng lớn bao nhiêu | bq show <dataset>.<bang> → numBytes | | Vị trí dataset | cùng lệnh, trường location |

Và một trường rất đáng để mắt tới khi chạy bq show trên một dataset: location. Nó không đổi được sau khi tạo, và truy vấn chỉ chạy được giữa các dataset cùng vị trí — nên phát hiện sớm việc hai dataset nằm ở hai vùng khác nhau sẽ tiết kiệm rất nhiều thời gian so với việc gặp một lỗi khó hiểu giữa lúc viết truy vấn kết hợp.

Câu 85 BigQuery

The CFO of your company is concerned that BigQuery costs are growing too large. They ask for recommendations on how to reduce the cost of querying without reducing the utility of the service. Most of the queries are based on the time the data arrived. What would you recommend as one way to reduce the amount of data scanned?

  1. A Use ingestion time partitioned tables and specify _PARTITIONTIME filters when querying.
  2. B Use read replicas and query only the read replica not the primary, which is where data is written.
  3. C Use covering indexes to respond to queries using only the index without needing to seek additional blocks of data.
  4. D Use the LIMIT option in SELECT statements to prevent more than a fixed number of rows from being returned.
Xem giải thích

Đáp án

A — Dùng bảng PHÂN VÙNG THEO THỜI ĐIỂM NẠP (ingestion time partitioned table) và khai bộ lọc _PARTITIONTIME khi truy vấn.

Vì sao đúng

Đề cho một manh mối then chốt: phần lớn truy vấn dựa trên thời điểm dữ liệu đến. Đó chính là điều kiện lý tưởng cho phân vùng theo thời điểm nạp.

⚠ Điểm mấu chốt — phân vùng giới hạn lượng dữ liệu quét:

Bảng KHÔNG phân vùng
        ↓
    Mọi truy vấn quét TOÀN BỘ bảng
    → trả tiền cho toàn bộ, dù chỉ cần một ngày

Bảng PHÂN VÙNG theo thời điểm nạp
        ↓
    Dữ liệu chia thành từng phân vùng theo NGÀY
        ↓
    WHERE _PARTITIONTIME BETWEEN ... AND ...
        ↓
    → BigQuery CHỈ QUÉT các phân vùng khớp
    → chi phí giảm theo đúng tỉ lệ
        ↓
    Bảng 3 năm, truy vấn 1 ngày
      → quét khoảng 0,1% dữ liệu

⚠ Cột giả _PARTITIONTIME — điểm cần nhớ:

Bảng phân vùng theo THỜI ĐIỂM NẠP
        ↓
    BigQuery tự thêm cột giả:
      _PARTITIONTIME  (kiểu TIMESTAMP, theo UTC)
      _PARTITIONDATE  (kiểu DATE)
        ↓
    → dùng chúng trong WHERE để lọc phân vùng
        ↓
    Khác với phân vùng theo CỘT THỜI GIAN
    (cột thật trong dữ liệu)
      → khi đó lọc theo chính cột đó

⚠ Và một cấu hình rất nên bật kèm:

require_partition_filter = true
        ↓
    → mọi truy vấn KHÔNG lọc theo phân vùng
      sẽ THẤT BẠI ngay
        ↓
    → biến một sai sót tốn kém thành
      một lỗi rõ ràng trong vài giây
    → cách hiệu quả nhất để kiểm soát chi phí

Vì sao các phương án khác sai

  • D (dùng LIMIT để giới hạn số dòng trả về) — đây là phương án gần nhất và là hiểu nhầm phổ biến nhất về BigQuery: LIMIT KHÔNG giảm chi phí. BigQuery vẫn quét toàn bộ dữ liệu rồi mới cắt kết quả, và tính tiền theo lượng quét.

  • C (dùng covering index) — BigQuery KHÔNG có chỉ mục theo kiểu CSDL quan hệ. Nó dùng phân vùng và phân cụm để giới hạn dữ liệu quét.

  • B (dùng read replica, chỉ truy vấn replica) — BigQuery không có khái niệm read replica; nó là kho phân tích serverless, không phải CSDL giao dịch.

Ghi nhớ

⚠ Cách giảm chi phí truy vấn BigQuery — theo hiệu quả: | Cách | Hiệu quả | |---|---| | Bỏ SELECT * | rất cao — chỉ quét cột nêu tên | | Phân vùng + lọc theo phân vùng | rất cao — giảm theo tỉ lệ ngày | | Phân cụm theo cột hay lọc | cao | | require_partition_filter | ngăn sai sót từ gốc | | Materialized view | cho truy vấn tổng hợp lặp lại | | LIMIT | KHÔNG giảm chi phí | | Preview bảng | xem dữ liệu MIỄN PHÍ |

Từ khoá nhận diện:

"truy vấn theo thời gian dữ liệu đến" → ingestion time partition + _PARTITIONTIME "truy vấn theo một cột ngày trong dữ liệu" → partition theo CỘT đó "LIMIT giảm chi phí" → SAI, luôn luôn "chỉ mục" → BigQuery KHÔNG có chỉ mục "biết trước chi phí" → --dry-run

⚠ Ba kiểu phân vùng của BigQuery — bảng phải thuộc: | Kiểu | Lọc bằng | |---|---| | Theo thời điểm NẠP | _PARTITIONTIME hoặc _PARTITIONDATE | | Theo CỘT thời gian | chính cột đó (DATE, TIMESTAMP, DATETIME) | | Theo dải số nguyên | cột số nguyên | | Số phân vùng tối đa | 4.000 | | Kết hợp | partition + cluster là mẫu phổ biến nhất |

Partition ↔ Cluster — phân biệt Nội dung
Partition chia bảng thành các khối theo ngày hoặc số
Cluster sắp xếp dữ liệu TRONG phân vùng theo tối đa 4 cột
Partition giảm quét thấy rõ trong --dry-run
Cluster giảm quét --dry-run KHÔNG phản ánh hết
Dùng chung partition theo ngày + cluster theo cột lọc thường dùng
Các cấu hình kiểm soát chi phí Nội dung
require_partition_filter ép mọi truy vấn phải lọc phân vùng
--maximum_bytes_billed trần cứng cho một truy vấn
Custom quota trần dữ liệu quét mỗi ngày, theo project hoặc user
Partition expiration tự xoá dữ liệu quá hạn
Budget alert cảnh báo qua Cloud Billing
Cache kết quả truy vấn giống hệt trong 24 giờ miễn phí
Vì sao LIMIT không giúp gì Nội dung
BigQuery đọc dữ liệu TRƯỚC, cắt kết quả SAU
Tính tiền theo lượng dữ liệu ĐỌC, không theo số dòng trả về
Muốn xem thử dữ liệu dùng chức năng Preview của bảng — MIỄN PHÍ
Hoặc bq head
Ngoại lệ truy vấn trên bảng phân cụm có thể dừng sớm ở một số trường hợp
Chuyển bảng cũ sang bảng phân vùng Bước
1 Tạo bảng mới có --time_partitioning_type=DAY
2 CREATE TABLE ... PARTITION BY ... AS SELECT ... từ bảng cũ
3 Kiểm chứng số dòng và dữ liệu mẫu
4 Đổi tên hoặc cập nhật view và pipeline
5 Bật require_partition_filter
6 Đặt partition expiration nếu dữ liệu có hạn dùng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bảng có phân vùng không | bq show <dataset>.<bang> → timePartitioning | | Truy vấn quét bao nhiêu | bq query --dry-run | | Ai tốn nhiều nhất | INFORMATION_SCHEMA.JOBS |

Và một hiểu nhầm rất phổ biến đáng nói rõ với đội phát triển: LIMIT 10 không làm truy vấn rẻ hơn một đồng nào. BigQuery đọc toàn bộ dữ liệu cần thiết rồi mới cắt kết quả, nên một câu SELECT * FROM bang_lon LIMIT 10 vẫn quét cả bảng — muốn xem thử vài dòng thì hãy dùng chức năng Preview của bảng, hoàn toàn miễn phí.

Câu 86 Cloud Functions

A startup is developing an Internet of Things (IoT) service. When data is first ingested, some basic data quality checks are performed that ensure the format is correct. The data will be ingested using Pub/Sub. When new data arrives, it should automatically have the quality checks applied. The checks will always run for less than one second. What compute service would you use to apply the data quality checks?

  1. A Compute Engine
  2. B App Engine Standard
  3. C App Engine Flexible
  4. D Cloud Functions
Xem giải thích

Đáp án

D — Cloud Functions.

Vì sao đúng

Đề mô tả đúng mô hình của Cloud Functions: phản ứng với message Pub/Sub, xử lý dưới một giây, và tải không đều.

⚠ Điểm mấu chốt — Pub/Sub kích hoạt Cloud Function trực tiếp:

Dữ liệu IoT được nạp qua Pub/Sub
        ↓
    Cloud Function đăng ký trigger Pub/Sub
        ↓
    Mỗi message → một lần gọi hàm
        ↓
    Kiểm tra định dạng, dưới 1 giây, rồi kết thúc
        ↓
    → "tự động chạy khi có dữ liệu mới"
      → đúng yêu cầu đề

⚠ Và mô hình chi phí khớp với tải IoT:

Tải IoT thường không đều
        ↓
    Lúc nhiều message, lúc gần như không có
        ↓
    Cloud Functions co giãn về 0
        ↓
    → không có message → KHÔNG tốn tiền
    → nhiều message → chạy song song nhiều instance
        ↓
    Trả tiền theo: số lần gọi × thời gian chạy
    → tác vụ dưới 1 giây là rất rẻ

⚠ Nhưng phải cấu hình max-instances cẩn thận:

Đợt tăng đột biến từ hàng nghìn cảm biến
        ↓
    Cloud Functions có thể chạy
    hàng nghìn instance cùng lúc
        ↓
    → làm ngập hệ thống phía sau
      (CSDL, API bên thứ ba)
        ↓
    → đặt max-instances để giới hạn
    → và Pub/Sub sẽ đệm phần còn lại

Xem thêm câu #12486 (lô 131) và #12535 (cùng lô): cùng mô hình — Cloud Functions cho tác vụ ngắn phản ứng với sự kiện. Khoá nhất quán.

Vì sao các phương án khác sai

  • B (App Engine Standard) — đây là phương án gần nhất và cũng co về 0, nhưng nó hướng tới ứng dụng web phục vụ request HTTP. Để nhận message Pub/Sub thì phải dựng thêm một endpoint push, nhiều mảnh ghép hơn.

  • C (App Engine Flexible) — KHÔNG co về 0: luôn có ít nhất một instance, tốn tiền cả khi không có dữ liệu.

  • A (Compute Engine) — tự quản máy, chạy 24/7, và phải tự viết vòng lặp tiêu thụ message.

Ghi nhớ

⚠ Chọn dịch vụ theo mô hình kích hoạt — bảng phải thuộc: | Mô hình | Dịch vụ | |---|---| | Phản ứng với sự kiện, xử lý NGẮN | Cloud Functions | | Container, HTTP hoặc sự kiện, co về 0 | Cloud Run | | Ứng dụng web nhiều route | App Engine | | Xử lý luồng phức tạp, có cửa sổ thời gian | Dataflow | | Microservice phức tạp | GKE |

Từ khoá nhận diện:

"khi có message Pub/Sub, xử lý ngắn" → Cloud Functions "xử lý luồng có cửa sổ, gộp nhóm" → Dataflow "đã có container" → Cloud Run "tải lúc có lúc không" → dịch vụ co về 0 "App Engine Flexible" → KHÔNG co về 0

Cloud Functions với trigger Pub/Sub Nội dung
Đăng ký --trigger-topic=<topic>
Cơ chế Cloud Functions tạo push subscription
Ack tự động hàm kết thúc thành công → message được ack
Hàm lỗi message được gửi lại theo retry policy
Dead letter topic nên cấu hình cho message hỏng liên tục
Idempotent bắt buộc — message có thể tới hơn một lần
Cloud Functions ↔ Dataflow cho luồng dữ liệu Chọn cái nào
Cloud Functions xử lý TỪNG message độc lập, ngắn
Dataflow gộp nhóm, cửa sổ thời gian, join nhiều luồng
Cloud Functions đơn giản, rẻ ở khối lượng vừa
Dataflow mạnh hơn nhiều, xử lý được thứ tự và dữ liệu đến muộn
Đề này kiểm tra định dạng từng message → Cloud Functions
Giới hạn của Cloud Functions Nội dung
Thời gian chạy tối đa 9 phút (gen 1), 60 phút (gen 2, HTTP)
max-instances trần chi phí và trần tải xuống hệ thống phía sau
min-instances giữ instance ấm, giảm cold start
Đồng thời gen 2 xử lý nhiều request trên một instance
Bộ nhớ tới 32 GB (gen 2)
Thiết kế hàm xử lý message IoT Nội dung
Idempotent message có thể tới hơn một lần
Xử lý nhanh, không giữ trạng thái
max-instances bảo vệ CSDL phía sau
Dead letter topic message hỏng không kẹt mãi trong hàng đợi
Log có cấu trúc JSON, có severity và định danh thiết bị
Theo dõi oldest_unacked_message_age của subscription

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hàm có được gọi không | Cloud Logging, lọc theo tên hàm | | Có tồn đọng message không | num_undelivered_messages của subscription | | Có lỗi không | chỉ số error rate, và dead letter topic |

Và một cấu hình rất nên đặt cho hàm xử lý dữ liệu IoT: max-instances. Một đợt tăng đột biến từ hàng nghìn cảm biến có thể khiến Cloud Functions mở hàng nghìn instance cùng lúc và làm ngập cơ sở dữ liệu phía sau — trong khi đặt trần cho phép Pub/Sub làm đúng việc của nó là đệm lại phần vượt quá, thay vì đẩy toàn bộ áp lực xuống tầng dưới.

Câu 87 Cloud Storage
An IoT startup is uploading 2 TB of historical data to Cloud Storage. The data is in files with one file per day per sensor. There are thousands of files. The filenames are the date followed by sensor ID. The loads are not proceeding as quickly as expected. What might be the cause of the slower than expected upload?
  1. A The file names use the date as the first part of the filename so they may be creating hotspots when writing data to Cloud Storage.
  2. B The files are in CSV instead of Avro format.
  3. C The data in files is being encrypted before being persisted to storage.
  4. D The files are in gzip format instead of Avro format
Xem giải thích

Đáp án

A — Tên tệp dùng NGÀY làm phần ĐẦU, nên có thể tạo hotspot khi ghi vào Cloud Storage.

Vì sao đúng

Cloud Storage đánh chỉ mục đối tượng theo thứ tự từ điển của tên, nên tên có tiền tố tuần tự làm mọi lượt ghi dồn vào cùng một vùng.

⚠ Điểm mấu chốt — tiền tố tuần tự gây hotspot:

Tên tệp: 2026-09-02-sensor001
         2026-09-02-sensor002
         2026-09-02-sensor003
        ↓
    Tất cả có CÙNG TIỀN TỐ (ngày)
        ↓
    Cloud Storage sắp xếp theo thứ tự từ điển
        ↓
    → mọi lượt ghi dồn vào cùng một dải khoá
    → hạ tầng phía sau không chia tải được
        ↓
    → thông lượng ghi bị giới hạn
    → đúng hiện tượng "tải lên chậm hơn dự kiến"

⚠ Cách sửa — làm cho tiền tố PHÂN TÁN:

Đảo thứ tự:
    sensor001-2026-09-02
        ↓
    → tiền tố là mã cảm biến, phân tán tự nhiên

Thêm tiền tố BĂM:
    a3f2/2026-09-02-sensor001
        ↓
    → băm vài ký tự đầu của tên gốc
    → trải đều trên toàn dải khoá

Thêm số ngẫu nhiên:
    7/2026-09-02-sensor001

⚠ Ghi nhớ về chất lượng câu hỏi

Đây là kiến thức về thiết kế tên đối tượng vốn quan trọng ở giai đoạn trước. Cloud Storage đã cải thiện đáng kể khả năng tự phân chia dải khoá (auto-scaling), nên hiện tượng hotspot ngày nay ít nghiêm trọng hơn và thường tự giải quyết sau một thời gian ngắn khi hệ thống thích nghi với mẫu truy cập.

Khoá đáp án không đổi: trong bốn phương án, chỉ A nêu đúng một nguyên nhân có cơ sở kỹ thuật, và khuyến nghị của Google về việc tránh tiền tố tuần tự khi ghi ở tốc độ rất cao vẫn còn hiệu lực. Ba phương án còn lại nêu những yếu tố hoàn toàn không ảnh hưởng tới tốc độ tải lên.

Vì sao các phương án khác sai

  • B (tệp ở định dạng CSV thay vì Avro) — đây là phương án gần nhất vì định dạng tệp đúng là chuyện quan trọng, nhưng nó ảnh hưởng tới hiệu năng TRUY VẤN sau này, không ảnh hưởng tốc độ TẢI LÊN: Cloud Storage coi mọi tệp là byte thuần.

  • C (dữ liệu bị mã hoá trước khi lưu) — mã hoá là mặc định ở Cloud Storage, được thực hiện trong suốt và không làm chậm việc tải lên một cách đáng kể.

  • D (tệp ở định dạng gzip thay vì Avro) — cùng lý do như B; hơn nữa nén thường làm tệp NHỎ HƠN nên tải LÊN NHANH HƠN.

Ghi nhớ

⚠ Thiết kế tên đối tượng cho thông lượng cao — bảng đáng thuộc: | Nên | Tránh | |---|---| | Tiền tố phân tán (mã thực thể, băm) | tiền tố tuần tự (ngày, số tăng dần) | | sensor001/2026-09-02.json | 2026-09-02/sensor001.json | | a3f2/... (băm) | 00001, 00002, … | | Lý do | Cloud Storage đánh chỉ mục theo thứ tự từ điển | | Khi nào quan trọng | ghi ở tốc độ RẤT CAO (hàng nghìn/giây) |

Từ khoá nhận diện:

"tải lên chậm, tên tệp có tiền tố tuần tự" → hotspot "tải lên chậm từ XA" → Transfer Acceleration của AWS / upload gần Region hơn "chuyển hàng chục TB" → Storage Transfer Service, Transfer Appliance "nhiều tệp nhỏ" → gộp lại, hoặc tải song song "định dạng tệp" → ảnh hưởng truy vấn, không ảnh hưởng tải lên

Tăng tốc tải dữ liệu lên Cloud Storage Cách
Tải SONG SONG gcloud storage cp mặc định song song, gsutil -m
Composite upload chia tệp lớn thành phần, tải song song rồi ghép
Chọn Region gần nguồn giảm độ trễ
Storage Transfer Service dịch vụ được quản lý cho khối lượng lớn
Transfer Appliance hàng trăm TB — gửi thiết bị vật lý
Tránh rất nhiều tệp cực nhỏ — phí thao tác cộng dồn
Storage Transfer Service — cho khối lượng lớn Nội dung
Nguồn tại chỗ, AWS S3, Azure Blob, HTTP/HTTPS, bucket khác
Đặc điểm được quản lý, có lịch, có báo cáo, tự thử lại
Kiểm chứng so sánh checksum
Ưu điểm không phải tự viết script và tự xử lý lỗi
Với 2 TB phù hợp hơn nhiều so với chạy gcloud storage cp bằng tay
Định dạng tệp — ảnh hưởng ở đâu Nội dung
Tải LÊN không ảnh hưởng — chỉ kích thước mới ảnh hưởng
Truy vấn từ BigQuery Parquet và Avro nhanh hơn nhiều CSV
Nén giảm chi phí lưu và thời gian truyền
Với BigQuery Parquet, ORC, Avro đọc song song tốt hơn
CSV nén gzip KHÔNG chia nhỏ được → đọc chậm
Sau khi tải lên xong — nên làm gì Việc
Đặt Object Lifecycle chuyển sang Nearline hoặc Coldline theo tuổi
Bật versioning nếu cần chống xoá nhầm
Kiểm tra checksum gcloud storage hash
Đặt quyền IAM quyền tối thiểu
Nếu để phân tích cân nhắc chuyển sang Parquet

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tốc độ tải thực tế | đo bằng time với một mẫu nhỏ | | Bucket ở Region nào | gcloud storage buckets describe gs://<ten> | | Có lỗi thử lại nhiều không | bật log chi tiết của công cụ tải lên |

Và một khuyến nghị nên áp dụng cho khối lượng như trong đề: dùng Storage Transfer Service thay vì chạy lệnh copy bằng tay. Với hàng nghìn tệp và 2 TB dữ liệu, một dịch vụ được quản lý sẽ tự xử lý việc thử lại, tự kiểm chứng checksum và cho bạn một báo cáo rõ ràng về những tệp thất bại — thay vì một script chạy nửa chừng rồi dừng mà không ai biết đã tới đâu.

Câu 88 Database
You are working in Cloud Shell to diagnose a problem with a Cloud SQL server running MySQL. You would like to connect to the MySQL instance from the command line. What command would you use to connect to the database as root using the built-in client?
  1. A gcloud sql connect [INSTANCE ID] --user=root
  2. B mysql --host=[INSTANCE ID] --user=root
  3. C gsutil sql connect [INSTANCE ID] --user=root
  4. D gcloud mysql connect [INSTANCE IP] --user=root
Xem giải thích

Đáp án

A — gcloud sql connect [INSTANCE ID] --user=root

Vì sao đúng

gcloud sql connect là lệnh chuyên dụng để kết nối tới Cloud SQL bằng client dựng sẵn, và nó lo giúp bạn phần rắc rối nhất: cấp quyền mạng tạm thời.

⚠ Điểm mấu chốt — lệnh này làm ba việc cùng lúc:

gcloud sql connect <instance-id> --user=root
        ↓
    1. TẠM THỜI thêm IP của máy bạn
       vào danh sách được phép của instance
        ↓
    2. Khởi động client dựng sẵn
       (mysql, psql, hoặc sqlcmd)
        ↓
    3. Sau khi thoát, GỠ IP đó ra
        ↓
    → không phải tự cấu hình authorized networks
    → rất tiện khi chẩn đoán nhanh từ Cloud Shell

⚠ Vì sao gọi thẳng mysql không đủ:

mysql --host=<instance-id> --user=root
        ↓
    Vấn đề 1: `--host` cần ĐỊA CHỈ IP hoặc
              tên miền, không phải INSTANCE ID
        ↓
    Vấn đề 2: IP của Cloud Shell CHƯA nằm trong
              authorized networks
        ↓
    → kết nối bị từ chối
        ↓
    → phải tự thêm IP, hoặc dùng Cloud SQL Auth Proxy

⚠ Và cách chuẩn cho ứng dụng — Cloud SQL Auth Proxy:

Cloud SQL Auth Proxy
        ↓
    Tiến trình chạy cạnh ứng dụng
        ↓
    - Xác thực bằng IAM
    - Mã hoá kết nối tự động
    - KHÔNG cần mở IP công cộng
    - KHÔNG cần quản lý authorized networks
        ↓
    → cách khuyến nghị cho ứng dụng production
    → `gcloud sql connect` hợp cho thao tác THỦ CÔNG

Vì sao các phương án khác sai

  • B (mysql --host=[INSTANCE ID] --user=root) — đây là phương án gần nhất và là lệnh MySQL có thật, nhưng --host cần địa chỉ IP hoặc tên miền, không phải instance ID. Và IP của bạn chưa được cấp quyền.

  • C (gsutil sql connect ...) — sai công cụ: gsutil chỉ làm việc với Cloud Storage.

  • D (gcloud mysql connect ...) — không có nhóm lệnh gcloud mysql. Nhóm đúng là gcloud sql.

Ghi nhớ

⚠ Các cách kết nối tới Cloud SQL — bảng phải thuộc: | Cách | Dùng khi | |---|---| | gcloud sql connect | thao tác THỦ CÔNG, chẩn đoán nhanh | | Cloud SQL Auth Proxy | ứng dụng production — khuyến nghị | | Cloud SQL Language Connectors | thư viện cho Java, Python, Go, Node | | Private IP + VPC | an toàn nhất — không lộ ra internet | | Public IP + authorized networks | tránh — dễ cấu hình sai | | IAM database authentication | không cần mật khẩu |

Từ khoá nhận diện:

"kết nối nhanh từ Cloud Shell" → gcloud sql connect "ứng dụng kết nối an toàn" → Cloud SQL Auth Proxy, hoặc Private IP "không muốn quản mật khẩu" → IAM database authentication "gcloud mysql ..." → SAI — nhóm đúng là gcloud sql "không lộ CSDL ra internet" → Private IP + Organization Policy

Các lệnh gcloud sql hay dùng Việc
gcloud sql instances list liệt kê instance
gcloud sql instances describe <ten> chi tiết: HA, IP, phiên bản
gcloud sql connect <ten> --user=root kết nối thủ công
gcloud sql users list --instance=<ten> liệt kê người dùng CSDL
gcloud sql backups list --instance=<ten> liệt kê bản sao lưu
gcloud sql instances patch sửa cấu hình
gcloud sql databases create tạo database
Cloud SQL Auth Proxy — vì sao khuyến nghị Nội dung
Xác thực bằng IAM không cần authorized networks
Mã hoá tự động TLS mà không phải quản chứng chỉ
Không cần IP công cộng dùng được với Private IP
Cách chạy tiến trình cạnh ứng dụng, hoặc sidecar trong Kubernetes
Quyền cần roles/cloudsql.client
Thay thế mới hơn Language Connectors — nhúng thẳng vào ứng dụng
Bảo mật Cloud SQL — nhiều lớp Lớp
Private IP không lộ ra internet
Cloud SQL Auth Proxy xác thực IAM, mã hoá
IAM database authentication bỏ hẳn mật khẩu
CMEK mã hoá bằng khoá của bạn
Organization Policy sql.restrictPublicIp cấm IP công cộng toàn tổ chức
Sao lưu tự động + PITR
Cloud Shell — công cụ tiện cho chẩn đoán Nội dung
Có sẵn gcloud, bq, gsutil, kubectl, client MySQL và Postgres
Đã xác thực tự động với tài khoản đang đăng nhập
Miễn phí có giới hạn thời gian sử dụng hằng tuần
Lưu trữ 5 GB ở thư mục $HOME, giữ lại giữa các phiên
Phù hợp thao tác thủ công, chẩn đoán — không dùng cho production

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Instance có IP nào | gcloud sql instances describe <ten> → ipAddresses | | Ai được phép kết nối | cùng lệnh, xem authorizedNetworks | | Người dùng CSDL nào tồn tại | gcloud sql users list --instance=<ten> |

Và một lời khuyên về việc dùng gcloud sql connect trong môi trường doanh nghiệp: nó tạm thời mở authorized network cho IP của bạn. Rất tiện khi chẩn đoán, nhưng nếu tổ chức đã bật Organization Policy cấm IP công cộng cho Cloud SQL thì lệnh này sẽ không hoạt động — và khi đó cách đúng là dùng Cloud SQL Auth Proxy qua Private IP, thứ vốn nên là mặc định cho mọi kết nối production.

Câu 89 Networking
You are hosting a large amount of image and video content for an educational service. Learners from around the world use the service. You currently host content on servers in your own data center in North America. Learners in Asia, Africa, and Europe experience long latencies loading content. What GCP service could you use to ensure that all learners experience the same level of latency and the latency is kept low, especially for frequently accessed content?
  1. A Cloud Storage Nearline Storage Class
  2. B Cloud CDN
  3. C Cloud VPN
  4. D Persistent disks
Xem giải thích

Đáp án

B — Cloud CDN.

Vì sao đúng

Đề mô tả đúng bài toán CDN giải: nội dung tĩnh nặng (ảnh và video), người dùng ở khắp thế giới, độ trễ cao với người ở xa, và nội dung được truy cập lặp lại.

⚠ Điểm mấu chốt — CDN đưa nội dung tới gần người dùng:

Nội dung nằm ở trung tâm dữ liệu Bắc Mỹ
        ↓
    Người học ở châu Á, châu Phi, châu Âu
        ↓
    Mỗi tệp phải đi nửa vòng trái đất
    → độ trễ cao, video giật
        ↓
CLOUD CDN
        ↓
    Cache nội dung ở hơn 100 điểm hiện diện
    trên toàn cầu
        ↓
    Lần đầu: lấy từ origin
    Từ lần sau: phục vụ NGAY TẠI EDGE gần người dùng
        ↓
    → độ trễ giảm mạnh và ĐỒNG ĐỀU ở mọi nơi
    → đúng yêu cầu "cùng một mức độ trễ, và thấp"

⚠ Và Cloud CDN dùng được cả với origin ngoài Google Cloud:

Đề nói: nội dung đang ở trung tâm dữ liệu
        RIÊNG của công ty
        ↓
    Cloud CDN hỗ trợ EXTERNAL BACKEND
    (internet NEG)
        ↓
    → origin có thể là máy chủ tại chỗ
    → không cần chuyển toàn bộ nội dung
      lên Cloud Storage trước
        ↓
    Dù vậy, chuyển nội dung sang Cloud Storage
    thường là bước tiếp theo hợp lý

⚠ Cách bật — Cloud CDN gắn vào backend service:

Global external HTTP(S) Load Balancer
        ↓
    Backend service
        ↓
    Bật cờ --enable-cdn
        ↓
    → Cloud CDN KHÔNG phải dịch vụ độc lập
    → nó là một TÍNH NĂNG của backend service
        ↓
    Cache mode:
      CACHE_ALL_STATIC (mặc định)
      USE_ORIGIN_HEADERS
      FORCE_CACHE_ALL

Vì sao các phương án khác sai

  • A (Cloud Storage lớp Nearline) — đây là phương án gần nhất vì cũng liên quan tới lưu trữ nội dung, nhưng storage class chỉ ảnh hưởng CHI PHÍ LƯU TRỮ, không giảm độ trễ theo địa lý. (Và Nearline còn có phí đọc cao hơn — sai hướng cho nội dung được truy cập thường xuyên.)

  • C (Cloud VPN) — nối mạng riêng giữa hai điểm, dành cho lưu lượng nội bộ, không phục vụ người dùng cuối trên internet.

  • D (Persistent disks) — đĩa gắn vào VM, không liên quan tới phân phối nội dung toàn cầu.

Ghi nhớ

⚠ Cloud CDN — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Bật ở đâu | trên BACKEND SERVICE của Global external HTTP(S) LB | | Origin hỗ trợ | Cloud Storage, instance group, NEG, và backend NGOÀI GCP | | Cache mode | CACHE_ALL_STATIC, USE_ORIGIN_HEADERS, FORCE_CACHE_ALL | | Invalidation | xoá cache khi phát hành bản mới | | Signed URL / cookie | nội dung có kiểm soát truy cập | | Chi phí | dữ liệu ra từ CDN thường rẻ hơn từ origin |

Từ khoá nhận diện:

"người dùng toàn cầu, nội dung tĩnh chậm" → Cloud CDN "TCP/UDP không phải HTTP" → Cloud Load Balancing + Premium tier, hoặc Media CDN "video streaming quy mô lớn" → Media CDN "nối mạng riêng" → Cloud VPN hoặc Interconnect "giảm chi phí lưu trữ" → storage class, không phải CDN

Cloud CDN ↔ Media CDN Khác nhau
Cloud CDN web, ảnh, API, video quy mô vừa
Media CDN chuyên cho video streaming quy mô rất lớn
Media CDN dùng chính hạ tầng phân phối của YouTube
Chọn Media CDN khi thư viện video lớn, nhiều người xem đồng thời
Cả hai đều gắn với load balancer
Tăng tỉ lệ cache hit Cách
Đặt Cache-Control: max-age dài ở origin
Không chuyển tiếp cookie thừa mỗi biến thể là một mục cache riêng
Không chuyển tiếp query string theo dõi utm_source, fbclid
Tên tệp có mã băm video.a1b2c3.mp4 → TTL rất dài
Negative caching cache cả phản hồi lỗi trong thời gian ngắn
Theo dõi cache hit ratio trong Cloud Monitoring
Network Service Tier — ảnh hưởng độ trễ Nội dung
Premium tier lưu lượng đi trên MẠNG RIÊNG của Google càng xa càng tốt
Standard tier đi trên internet công cộng nhiều hơn — rẻ hơn
Với người dùng toàn cầu Premium tier tạo khác biệt rõ rệt
Global external HTTP(S) LB chỉ dùng được với Premium tier
Kiến trúc phân phối nội dung học tập toàn cầu Thành phần
Cloud Storage (multi-region) lưu ảnh và video
Global external HTTP(S) LB điểm vào toàn cầu
Cloud CDN cache tại edge
Cloud Armor chặn bot và lạm dụng
Signed URL nếu nội dung cần kiểm soát truy cập
Kết quả độ trễ thấp và đồng đều cho mọi khu vực

Ba việc kiểm chứng: | Việc | Cách | |---|---| | CDN đã bật chưa | gcloud compute backend-services describe <ten> → enableCDN | | Cache có hiệu quả không | chỉ số cache hit ratio trong Cloud Monitoring | | Phản hồi có từ cache không | xem header Age và X-Cache |

Và một chỉ số nên nhìn ngay sau khi bật Cloud CDN: tỉ lệ cache hit. Nếu nó thấp bất thường thì gần như luôn do origin đang gửi header Cache-Control quá ngắn, hoặc do cấu hình chuyển tiếp quá nhiều cookie và query string xuống origin — mỗi biến thể tạo một mục cache riêng, và CDN khi đó chỉ còn là một lớp trung chuyển tốn tiền thay vì thứ giúp người học ở xa xem video mượt hơn.

Câu 90 Networking
You have created a virtual private cloud (VPC) in auto mode, which automatically creates a subnet in each region. How is the CIDR block determined for each region?
  1. A You will specify non-overlapping CIDR blocks for each region.
  2. B Each region will automatically be assigned a set of predefined IP ranges that fit within the 10.128.0.0/9 CIDR block.
  3. C You will specify non-overlapping CIDR ranges for the set of regions you want a subnet created for.
  4. D Each region will be automatically assigned a range of external IP addresses.
Xem giải thích

Đáp án

B — Mỗi Region tự động được gán một dải IP định sẵn nằm trong khối 10.128.0.0/9.

Vì sao đúng

Đó chính là định nghĩa của auto mode VPC: Google tự tạo subnet ở mọi Region với dải IP đã quy định sẵn.

⚠ Điểm mấu chốt — auto mode dùng một khối cố định:

Tạo VPC ở chế độ AUTO MODE
        ↓
    Google tự tạo MỘT subnet ở MỌI Region
        ↓
    Dải IP lấy từ khối 10.128.0.0/9
        ↓
    Mỗi Region một dải /20 định sẵn
      ví dụ: us-central1  → 10.128.0.0/20
             europe-west1 → 10.132.0.0/20
        ↓
    → bạn KHÔNG chọn dải
    → Region mới của Google → tự thêm subnet

⚠ Và đây là lý do auto mode không hợp cho production:

Dải 10.128.0.0/9 là CỐ ĐỊNH
        ↓
    Muốn peer với VPC khác
      → rất dễ CHỒNG LẤN CIDR
        ↓
    Muốn nối với mạng tại chỗ
      → cũng có thể trùng dải
        ↓
    → không kiểm soát được quy hoạch IP
        ↓
    → CUSTOM MODE mới là lựa chọn cho production

⚠ Chuyển đổi một chiều:

AUTO MODE → CUSTOM MODE
        ↓
    Chuyển được
      gcloud compute networks update <ten>
        --switch-to-custom-subnet-mode
        ↓
CUSTOM MODE → AUTO MODE
        ↓
    KHÔNG chuyển được
        ↓
    → cân nhắc trước khi chuyển

Vì sao các phương án khác sai

  • C (bạn khai dải CIDR không chồng lấn cho tập Region muốn tạo subnet) — đây là phương án gần nhất và mô tả đúng CUSTOM MODE, không phải auto mode. Ở auto mode bạn không khai gì cả.

  • A (bạn khai dải CIDR không chồng lấn cho từng Region) — cùng lý do: đó là hành vi của custom mode.

  • D (mỗi Region được gán một dải địa chỉ NGOÀI) — sai loại địa chỉ: subnet dùng dải IP NỘI BỘ. Địa chỉ ngoài được cấp riêng cho từng tài nguyên khi cần.

Ghi nhớ

⚠ Auto mode ↔ Custom mode — bảng phải thuộc: | | Auto mode | Custom mode | |---|---|---| | Subnet ban đầu | một subnet ở MỌI Region | KHÔNG có subnet nào | | Dải IP | định sẵn trong 10.128.0.0/9 | bạn tự chọn | | Region mới của Google | tự thêm subnet | không | | Khuyến nghị | thử nghiệm | PRODUCTION | | Chuyển đổi | auto → custom ĐƯỢC | custom → auto KHÔNG | | Mạng default | là auto mode | |

Từ khoá nhận diện:

"auto mode, dải IP ở đâu ra" → 10.128.0.0/9, định sẵn theo Region "kiểm soát dải IP" → custom mode "VPC của GCP" → TOÀN CẦU, subnet theo REGION "chuẩn bị peer với VPC khác" → custom mode, quy hoạch IP cẩn thận "subnet hết địa chỉ" → mở rộng được, KHÔNG thu nhỏ được

Quy hoạch IP cho VPC — nguyên tắc Nội dung
Chừa dư chỗ subnet mở rộng được, không thu nhỏ
Không chồng lấn với mạng tại chỗ và VPC sẽ peer
Dải phụ cho GKE pod và service cần dải riêng, khá lớn
Ghi lại sơ đồ IP một nguồn sự thật duy nhất
Dải riêng RFC 1918 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
Tạo subnet ở custom mode Tham số
--range dải CIDR chính
--region Region của subnet
--secondary-range dải phụ cho pod và service của GKE
--enable-private-ip-google-access VM không có IP công cộng vẫn gọi API Google
--enable-flow-logs bật VPC Flow Logs
Mở rộng sau subnets expand-ip-range
Mạng default — nên biết Nội dung
Loại auto mode
Firewall có sẵn default-allow-internal, default-allow-ssh, default-allow-icmp, default-allow-rdp
Rủi ro luật SSH và RDP mở cho 0.0.0.0/0
Khuyến nghị production xoá mạng default, tự tạo custom mode VPC
Ép bằng Organization Policy compute.skipDefaultNetworkCreation
Khác biệt GCP ↔ AWS về mạng — nhắc lại Nội dung
VPC GCP TOÀN CẦU ↔ AWS theo Region
Subnet GCP theo REGION ↔ AWS theo AZ
Firewall GCP áp cho cả VPC ↔ AWS gắn vào ENI
Mở rộng subnet GCP mở rộng được ↔ AWS không đổi CIDR

Ba việc kiểm chứng: | Việc | Cách | |---|---| | VPC ở chế độ nào | gcloud compute networks describe <ten> → subnetMode | | Có những subnet nào | gcloud compute networks subnets list --network=<ten> | | Dải IP có chồng lấn không | so với sơ đồ IP của tổ chức |

Và một khuyến nghị nên áp dụng ngay từ project đầu tiên: xoá mạng default và tạo VPC ở chế độ custom mode. Mạng default rất tiện để thử nghiệm nhưng đi kèm luật firewall mở SSH và RDP cho toàn bộ internet, cùng một dải IP cố định mà bạn sẽ phải sống chung khi cần peering về sau.