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

Tìm thấy 333 câu.

Câu 141 Data Management

A data engineering team needs to run daily, large-scale data processing jobs using their existing Apache Spark code. They want a managed environment on Google Cloud that minimizes infrastructure management while allowing them to use their familiar open-source frameworks.

Which service should they choose?

  1. A Dataflow
  2. B Cloud Data Fusion
  3. C BigQuery
  4. D Dataproc
Xem giải thích

Đáp án

D — Dataproc.

Vì sao đúng

Đề nêu ba điều: đã có sẵn mã Apache Spark, muốn môi trường được quản lý, giảm việc quản lý hạ tầng, và giữ nguyên framework mã nguồn mở quen thuộc. Dataproc là dịch vụ Hadoop/Spark được quản lý của Google Cloud.

⚠ Điểm mấu chốt — "mã Spark ĐÃ CÓ" quyết định câu trả lời:

Đội đã có mã Spark
        ↓
    Chọn Dataflow
        ↓
    ⚠ phải VIẾT LẠI toàn bộ bằng Apache Beam
    → tốn hàng tháng, rủi ro sai lệch

    Chọn Dataproc
        ↓
    → mã Spark chạy gần như NGUYÊN VẸN
    → chỉ đổi đường dẫn dữ liệu
      (HDFS → gs://)
        ↓
    Đây là mẫu "lift and shift" cho
    khối lượng công việc Hadoop/Spark

⚠ Dataproc quản lý những gì thay bạn:

- Dựng cụm trong khoảng 90 GIÂY
- Cài sẵn Spark, Hadoop, Hive, Pig
- Tích hợp sẵn với Cloud Storage,
  BigQuery, Cloud Logging
- Autoscaling
- Vá lỗi qua image version
        ↓
    ⚠ Bạn vẫn CÓ THỂ tuỳ biến sâu
      khi cần

⚠ Ba cách chạy — chọn theo nhu cầu:

DATAPROC SERVERLESS
    → job theo lô, không quản lý cụm
    → hợp nhất với "job hằng ngày"

WORKFLOW TEMPLATE + managed cluster
    → nhiều bước, cụm tự tạo và tự xoá

DATAPROC TRÊN COMPUTE ENGINE
    → cụm thường trực, tương tác,
      tuỳ biến sâu
        ↓
    ⚠ Cả ba đều là "Dataproc"
    → đáp án của đề vẫn đúng

Xem thêm câu #13042 và #13043 (cùng lô): chọn giữa cụm thường trực và Serverless — hai biến thể của chính Dataproc. Ba câu nhất quán. Và #13038 (cùng lô): tiêu chí chọn giữa Dataflow và Data Fusion — một bài toán khác.

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

  • A (Dataflow) — đây là phương án gần nhất về mặt "xử lý dữ liệu quy mô lớn không máy chủ", nhưng nó dùng Apache Beam, không phải Spark; đội sẽ phải viết lại toàn bộ mã.

  • B (Cloud Data Fusion) — công cụ kéo thả; mã Spark có sẵn không dùng lại được.

  • C (BigQuery) — kho dữ liệu SQL; không chạy được job Spark tuỳ ý (có Spark stored procedure, nhưng không phải cách chuyển một khối lượng công việc Spark hiện có).

Ghi nhớ

⚠ Chọn engine theo TÀI SẢN SẴN CÓ — bảng phải thuộc: | Đã có gì | Chọn | |---|---| | Mã Spark / Hadoop / Hive | Dataproc | | Chưa có gì, đội biết Java/Python | Dataflow | | Đội không lập trình | Cloud Data Fusion | | Dữ liệu đã ở BigQuery, đội giỏi SQL | BigQuery + Dataform | | Nguyên tắc | tận dụng thứ đã có trước khi viết lại |

Từ khoá nhận diện:

"đã có mã Spark/Hadoop" → Dataproc "framework mã nguồn mở quen thuộc" → Dataproc "không muốn quản lý cụm" → Dataproc Serverless "viết pipeline mới, cần luồng" → Dataflow "kéo thả" → Cloud Data Fusion

Chuyển Hadoop/Spark lên Dataproc — việc cần làm Việc
Đổi HDFS thành gs:// dùng Cloud Storage connector
Tách lưu trữ khỏi tính toán cụm xoá đi dữ liệu vẫn còn
Chuyển siêu dữ liệu Hive Dataproc Metastore
Đổi cách nộp job gcloud dataproc jobs submit
Xem lại cấu hình bộ nhớ loại máy trên đám mây khác on-prem
Thường mã nghiệp vụ gần như không đổi
Vì sao "tách lưu trữ khỏi tính toán" là thay đổi lớn nhất Nội dung
Hadoop truyền thống dữ liệu nằm trên HDFS của chính cụm
→ cụm phải sống mãi
Trên GCP dữ liệu ở Cloud Storage, cụm là tạm
→ tạo cụm khi cần, xoá khi xong
Kết quả tiết kiệm rất lớn so với cụm thường trực
Đây là thay đổi tư duy quan trọng nhất khi chuyển lên đám mây
Dataproc — các thành phần có sẵn Thành phần
Spark, Hadoop, Hive, Pig cài sẵn
Optional: Jupyter, Zeppelin, Presto, Flink, HBase --optional-components
Connector Cloud Storage, BigQuery, Bigtable, Pub/Sub
Dataproc Metastore Hive metastore được quản lý
Component Gateway truy cập giao diện web an toàn
Tiết kiệm chi phí Dataproc Cách
Cụm tạm cho mỗi job không có thời gian nhàn rỗi
Dataproc Serverless không có cụm nào cả
Spot VM cho secondary worker rẻ hơn nhiều
Autoscaling policy co giãn theo tải
--max-idle tự tắt khi rảnh
Sai lầm phổ biến nhất cụm thường trực bị bỏ quên

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Job chạy thế nào | gcloud dataproc jobs list --region=<r> | | Cụm có bị bỏ quên không | gcloud dataproc clusters list | | Chi phí bao nhiêu | billing export, lọc SKU Dataproc |

Và một thay đổi tư duy đáng nói rõ với đội khi chuyển Spark lên Dataproc: đừng mang cả HDFS lên theo. Lưu dữ liệu ở Cloud Storage và coi cụm là tài nguyên tạm thời là điều tạo ra phần lớn khoản tiết kiệm — còn dựng lại một cụm Hadoop thường trực trên đám mây thì gần như chỉ là chuyển hoá đơn từ nơi này sang nơi khác.

Câu 142 Data Management

A daily data pipeline consists of three steps:

(1) a Dataproc job processes raw data,

(2) the results are loaded into BigQuery, and

(3) the Dataproc cluster is deleted.

What should happen if the first step (the Dataproc job) fails?

  1. A The orchestration tool should stop the entire process and send an alert.
  2. B The pipeline should automatically retry the Dataproc job indefinitely until it succeeds.
  3. C The Dataproc cluster should be deleted immediately to save costs.
  4. D The BigQuery load job should run anyway to process whatever data is available.
Xem giải thích

Đáp án

A — Bộ điều phối phải DỪNG toàn bộ quy trình và gửi CẢNH BÁO.

Vì sao đúng

Khi bước đầu tiên thất bại, mọi bước sau đều dựa trên dữ liệu không tồn tại hoặc đã cũ. Chạy tiếp chỉ tạo ra kết quả sai một cách im lặng — điều tệ hơn nhiều so với một luồng dừng lại.

⚠ Điểm mấu chốt — "thà dừng còn hơn chạy sai":

Bước 1 (Dataproc) THẤT BẠI
        ↓
    Nếu bước 2 vẫn chạy
        ↓
    → nạp vào BigQuery dữ liệu CŨ,
      hoặc KHÔNG CÓ GÌ
        ↓
    ⚠ Báo cáo hôm nay hiển thị số của hôm qua
    ⚠ KHÔNG có lỗi nào báo ra
    ⚠ Có thể nhiều tuần sau mới ai đó phát hiện
        ↓
    → dừng và cảnh báo là hành vi ĐÚNG

⚠ Trong Airflow, đây chính là hành vi MẶC ĐỊNH:

xu_ly >> nap_bigquery >> xoa_cum
        ↓
    trigger_rule mặc định = ALL_SUCCESS
        ↓
    → bước sau chỉ chạy khi bước trước
      THÀNH CÔNG
    → bước 1 hỏng → bước 2 và 3
      chuyển sang trạng thái UPSTREAM_FAILED
        ↓
    + on_failure_callback hoặc email_on_failure
      → gửi cảnh báo

⚠ Nhưng bước DỌN DẸP là ngoại lệ đáng cân nhắc:

Bước 3 xoá cụm Dataproc
        ↓
    ⚠ Nếu cũng bị chặn khi bước 1 hỏng
    → CỤM NẰM KHÔNG VÀ TÍNH TIỀN
        ↓
    Cách xử lý đúng:
      xoa_cum có trigger_rule = ALL_DONE
        ↓
    → "chạy dù các bước trước thành công
      hay thất bại"
    → cụm luôn được dọn
        ↓
    ⚠ Nhưng bước NẠP vẫn phải bị chặn

⚠ Thử lại có giới hạn — không phải vô hạn:

retries = 3
retry_delay = 5 phút
retry_exponential_backoff = True
        ↓
    → chịu được lỗi tạm thời (mạng, quota)
    → hết số lần thì DỪNG và cảnh báo
        ↓
    ⚠ Thử lại VÔ HẠN che giấu lỗi thật
      và đốt tài nguyên

Xem thêm câu #13003 và #12996 (lô 135): cùng về phụ thuộc giữa các bước trong Cloud Composer. Câu này nói về hành vi khi một bước thất bại — mặt còn lại của cùng một cơ chế. Nhất quán.

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

  • B (tự thử lại VÔ HẠN cho tới khi thành công) — đây là phương án gần nhất vì thử lại là điều nên làm, nhưng vô hạn là sai: nó che giấu lỗi thật (lược đồ đổi, dữ liệu hỏng), đốt tài nguyên, và không ai được báo.

  • D (vẫn chạy job nạp BigQuery với dữ liệu có sẵn) — nạp dữ liệu không đầy đủ vào kho là cách tạo ra báo cáo sai mà không có tín hiệu nào.

  • C (xoá cụm ngay lập tức để tiết kiệm) — dọn dẹp là đúng nhưng chưa đủ: thiếu phần dừng luồng và cảnh báo, và xoá cụm ngay có thể mất log hữu ích cho việc chẩn đoán.

Ghi nhớ

⚠ Xử lý thất bại trong bộ điều phối — bảng phải thuộc: | Tình huống | Hành vi đúng | |---|---| | Bước xử lý chính hỏng | DỪNG luồng + CẢNH BÁO | | Lỗi tạm thời (mạng, quota) | thử lại CÓ GIỚI HẠN, có backoff | | Bước DỌN DẸP | chạy dù trước đó hỏng (ALL_DONE) | | Bước không quan trọng | có thể bỏ qua (trigger_rule phù hợp) | | Nguyên tắc | thà DỪNG còn hơn chạy sai im lặng |

Từ khoá nhận diện:

"bước trước hỏng thì làm gì" → dừng + cảnh báo "vẫn chạy tiếp với dữ liệu có sẵn" → luôn là phương án SAI "thử lại vô hạn" → luôn là phương án SAI "dọn dẹp tài nguyên" → trigger_rule = ALL_DONE "đợi N phút rồi chạy bước sau" → không phải phụ thuộc

trigger_rule trong Airflow — bảng cần nhớ Giá trị
all_success MẶC ĐỊNH — mọi bước trước phải thành công
all_done chạy dù trước đó thành công hay thất bại — cho dọn dẹp
all_failed chạy khi mọi bước trước hỏng — cho xử lý lỗi
one_success chỉ cần một bước trước thành công
none_failed không bước nào hỏng (cho phép skipped)
Với luồng trong đề all_success cho bước 2, all_done cho bước 3
Cấu hình thử lại hợp lý Tham số
retries = 2–3 chịu lỗi tạm thời
retry_delay vài phút
retry_exponential_backoff = True giãn dần
max_retry_delay trần thời gian chờ
execution_timeout tránh task treo mãi
Sau khi hết lần thử cảnh báo cho người trực
Cảnh báo nên đặt gì Loại
Task thất bại on_failure_callback, email, Slack
DAG chạy quá lâu SLA miss
Không chạy đúng giờ thiếu lần chạy
Tỉ lệ lỗi dữ liệu vượt ngưỡng kiểm tra chất lượng
Kênh email, PagerDuty, Slack, Pub/Sub
Vì sao "chạy sai im lặng" nguy hiểm hơn "thất bại" Lý do
Thất bại có người biết, có người sửa
Chạy trên dữ liệu cũ không ai biết trong nhiều tuần
Quyết định kinh doanh dựa trên số sai
Truy vết về sau rất khó xác định bắt đầu từ khi nào
Nguyên tắc fail loudly, không fail silently
Đảm bảo tài nguyên luôn được dọn Cách
trigger_rule = ALL_DONE cho bước xoá cụm
Managed cluster của Workflow Template tự xoá kể cả khi job hỏng
--max-idle trên cụm lưới an toàn
Rà soát cụm hằng tuần bắt trường hợp lọt lưới
Chi phí bỏ quên cụm nằm không tính tiền 24/7

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bước nào hỏng và vì sao | Airflow Graph view và log của task | | Cụm đã được dọn chưa | gcloud dataproc clusters list | | Cảnh báo có tới không | kiểm tra kênh thông báo |

Và một chi tiết thiết kế rất đáng làm đúng ngay từ đầu: bước dọn dẹp phải chạy kể cả khi các bước trước thất bại. Nếu không, một job Dataproc hỏng lúc nửa đêm sẽ để lại một cụm chạy không suốt cuối tuần — và hoá đơn đó thường lớn hơn nhiều so với chính công việc mà nó lẽ ra phải làm.

Câu 143 Data Analysis and Presentation

A data scientist is performing an exploratory analysis in a Python-based notebook environment. After processing their data, they need to generate a bar chart to compare sales across different regions.

Which of the following is a standard Python library specifically designed for creating such visualizations?

  1. A Matplotlib
  2. B Jupyter
  3. C Colab Enterprise
  4. D BigQuery
Xem giải thích

Đáp án

A — Matplotlib.

Vì sao đúng

Matplotlib là thư viện Python chuẩn để vẽ biểu đồ — và trong bốn phương án, nó là thứ duy nhất thực sự là một thư viện vẽ.

⚠ Điểm mấu chốt — phân biệt THƯ VIỆN với MÔI TRƯỜNG:

MATPLOTLIB
    → THƯ VIỆN Python để VẼ BIỂU ĐỒ   ✓

JUPYTER
    → MÔI TRƯỜNG notebook
    → nơi bạn CHẠY mã, không phải thứ vẽ

COLAB ENTERPRISE
    → DỊCH VỤ notebook được quản lý
    → cũng là môi trường

BIGQUERY
    → KHO DỮ LIỆU
    → nơi lấy dữ liệu ra

⚠ Vẽ biểu đồ cột so sánh doanh số theo vùng:

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 5))
plt.bar(df['vung'], df['doanh_so'])
plt.title('Doanh so theo vung')
plt.xlabel('Vung')
plt.ylabel('Doanh so')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
        ↓
    Hoặc gọn hơn qua pandas:
      df.plot.bar(x='vung', y='doanh_so')
    → pandas dùng matplotlib bên dưới

⚠ Hệ sinh thái vẽ biểu đồ của Python:

MATPLOTLIB
    → nền tảng, kiểm soát chi tiết nhất
    → hầu hết thư viện khác dựng trên nó

SEABORN
    → dựng TRÊN matplotlib
    → cú pháp gọn hơn, mặc định đẹp hơn
    → mạnh với biểu đồ thống kê

PLOTLY / BOKEH / ALTAIR
    → biểu đồ TƯƠNG TÁC
    → zoom, hover, lọc

PANDAS .plot()
    → vỏ bọc tiện lợi của matplotlib

Xem thêm câu #13029 và #13031 (lô 135): về môi trường notebook (Colab Enterprise) và lợi ích chạy lại notebook. Câu này về thư viện dùng BÊN TRONG notebook. Ba câu bổ sung nhau — môi trường, cách dùng, và công cụ.

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

  • B (Jupyter) — đây là phương án dễ nhầm nhất vì nó gắn liền với công việc này, nhưng Jupyter là MÔI TRƯỜNG notebook — nơi bạn viết và chạy mã, không phải thư viện vẽ.

  • C (Colab Enterprise) — dịch vụ notebook được quản lý của Google Cloud; cũng là môi trường.

  • D (BigQuery) — kho dữ liệu; nó là nơi bạn lấy dữ liệu, không phải nơi vẽ (dù giao diện có biểu đồ cơ bản).

Ghi nhớ

⚠ Phân biệt bốn tầng trong công việc phân tích — bảng phải thuộc: | Tầng | Ví dụ | |---|---| | Kho dữ liệu | BigQuery | | Môi trường thực thi | Jupyter, Colab Enterprise, Vertex AI Workbench | | Thư viện xử lý | pandas, numpy, scikit-learn | | Thư viện vẽ | matplotlib, seaborn, plotly | | Công cụ BI | Looker Studio, Looker |

Từ khoá nhận diện:

"thư viện Python vẽ biểu đồ" → matplotlib, seaborn, plotly "môi trường notebook" → Jupyter, Colab Enterprise "xử lý dữ liệu dạng bảng trong Python" → pandas "kho dữ liệu" → BigQuery "dashboard cho người dùng nghiệp vụ" → Looker Studio

Các thư viện Python cho phân tích dữ liệu Thư viện
pandas thao tác dữ liệu dạng bảng (DataFrame)
numpy tính toán số, mảng
matplotlib vẽ biểu đồ nền tảng
seaborn biểu đồ thống kê, đẹp sẵn
plotly biểu đồ tương tác
scikit-learn học máy cổ điển
bigframes pandas API chạy TRÊN BigQuery
Chọn thư viện vẽ theo mục đích Mục đích
Kiểm soát chi tiết từng thành phần matplotlib
Biểu đồ thống kê nhanh, đẹp seaborn
Người xem cần tương tác plotly, bokeh
Chia sẻ cho người không dùng notebook Looker Studio
Với khám phá nhanh df.plot() của pandas là đủ
Đọc BigQuery vào pandas trong notebook Cách
%%bigquery df magic command — gọn nhất
client.query(sql).to_dataframe() thư viện client
pandas_gbq.read_gbq() tiện cho người quen pandas
bigframes xử lý ở phía BigQuery, cú pháp pandas
⚠ to_dataframe() nạp vào RAM — cẩn thận với bảng lớn
Khi nào notebook KHÔNG phải nơi để vẽ Trường hợp
Nhiều người cần xem → Looker Studio
Cần cập nhật tự động và tương tác → công cụ BI
Người xem không muốn thấy mã → BI
Notebook hợp với khám phá, phân tích một lần, báo cáo cho chính mình
Ranh giới notebook là nơi PHÂN TÍCH, BI là nơi TRÌNH BÀY

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Biểu đồ có hiện không | plt.show(), hoặc để ô lệnh trả về figure | | Dữ liệu có đúng không | kiểm df.describe() trước khi vẽ | | Notebook chạy lại được không | Restart & Run All |

Và một thói quen nhỏ giúp tránh kết luận sai từ biểu đồ: nhìn df.describe() trước khi vẽ. Một giá trị ngoại lai duy nhất có thể làm mọi cột khác trong biểu đồ dẹt xuống thành đường thẳng — biểu đồ trông vẫn hợp lệ, chỉ là nó không còn nói lên điều gì về phần dữ liệu mà bạn quan tâm.

Câu 144 Data Pipeline Orchestration
Even though both Dataflow and Cloud Data Fusion can be used to move a CSV (Comma-Separated Values) file from Cloud Storage to a database, why might Dataflow be considered the more resource-efficient option for this simple task?
  1. A Only Dataflow can process CSV (Comma-Separated Values) files.
  2. B Dataflow pipelines are always faster to develop than Cloud Data Fusion pipelines.
  3. C Dataflow is a more direct processing engine, while Cloud Data Fusion has an additional abstraction layer that can add overhead.
  4. D Cloud Data Fusion cannot write data to databases.
Xem giải thích

Đáp án

C — Dataflow là engine xử lý TRỰC TIẾP hơn, còn Cloud Data Fusion có thêm một lớp trừu tượng làm tăng chi phí phụ trội.

Vì sao đúng

Cả hai đều chuyển được tệp CSV từ Cloud Storage vào CSDL. Khác biệt về hiệu quả nằm ở số tầng mà công việc phải đi qua.

⚠ Điểm mấu chốt — so kiến trúc hai dịch vụ:

DATAFLOW
    Mã Beam của bạn
        ↓
    Dataflow runner
        ↓
    Worker VM
        ↓
    → MỘT tầng duy nhất

CLOUD DATA FUSION
    Pipeline kéo thả
        ↓
    CDAP (nền tảng bên dưới)
        ↓
    Sinh ra job Spark
        ↓
    Chạy trên cụm DATAPROC
        ↓
    → BA tầng, cộng thêm INSTANCE
      Data Fusion chạy THƯỜNG TRỰC

⚠ Chi phí phụ trội cụ thể ở đâu:

1. INSTANCE DATA FUSION
    → chạy 24/7, tính tiền theo giờ
    → kể cả khi không pipeline nào chạy

2. CỤM DATAPROC
    → mỗi lần chạy phải dựng cụm
    → mất vài phút khởi động

3. LỚP CDAP
    → thêm một tầng dịch giữa
      pipeline và Spark
        ↓
    Với tác vụ ĐƠN GIẢN và NGẮN,
    ba khoản này chiếm phần lớn chi phí

⚠ Nhưng đừng kết luận Data Fusion "kém":

Giá trị của Data Fusion nằm ở
    KHÔNG CẦN LẬP TRÌNH
        ↓
    → nhà phân tích tự dựng pipeline
    → không phụ thuộc đội kỹ thuật
    → triển khai rất nhanh với
      nguồn có plugin sẵn
        ↓
    ⚠ Câu hỏi này chỉ so về HIỆU QUẢ
      TÀI NGUYÊN cho một tác vụ đơn giản

Xem thêm câu #13030 (lô 135): khoá Dataflow với cùng lý do — ít chi phí phụ trội cho xử lý thuần tuý. Và #13038 (cùng lô): nêu tiêu chí phân biệt chính là code-first hay low-code. Ba câu hoàn toàn nhất quán.

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

  • B (pipeline Dataflow luôn nhanh hơn để phát triển) — đây là phương án gần nhất về mặt "so sánh hai công cụ", nhưng ngược lại: với đội không lập trình, Data Fusion phát triển nhanh hơn nhiều.

  • A (chỉ Dataflow xử lý được CSV) — sai; cả hai đều đọc CSV.

  • D (Data Fusion không ghi được vào CSDL) — sai; nó có plugin cho nhiều loại CSDL.

Ghi nhớ

⚠ Dataflow ↔ Cloud Data Fusion — bảng phải thuộc: | | Dataflow | Cloud Data Fusion | |---|---|---| | Kiến trúc | engine trực tiếp | CDAP → Spark → Dataproc | | Chi phí nền | KHÔNG có | instance thường trực | | Cách xây | viết mã Beam | kéo thả | | Hiệu quả tài nguyên | cao hơn | thấp hơn với tác vụ nhỏ | | Tốc độ phát triển | chậm hơn (cần kỹ sư) | nhanh hơn (không cần mã) | | Người dùng | kỹ sư | nhà phân tích |

Từ khoá nhận diện:

"hiệu quả tài nguyên, ít phụ trội" → Dataflow "không cần lập trình, triển khai nhanh" → Cloud Data Fusion "code-first hay low-code" → tiêu chí phân biệt chính "chỉ có một công cụ làm được" → thường là phương án SAI "luôn nhanh hơn / luôn đắt hơn" → các mệnh đề tuyệt đối thường sai

Với tác vụ ĐƠN GIẢN — còn cách nhẹ hơn nữa Cách
bq load từ gs:// nạp thẳng CSV vào BigQuery — MIỄN PHÍ
LOAD DATA bằng SQL đưa được vào scheduled query
BigQuery Data Transfer Service nạp GCS theo LỊCH
Storage Transfer Service nếu chỉ chuyển tệp
Nguyên tắc đừng dựng engine cho việc mà một lệnh làm được
⚠ Với đích là CSDL (không phải BigQuery) vẫn cần engine hoặc DMS
Chi phí — so ba phương án cho cùng việc Phương án
bq load / gcloud storage gần như miễn phí
Dataflow trả theo tài nguyên job
Data Fusion cộng thêm chi phí instance 24/7
Với một tệp mỗi ngày chênh lệch rất lớn theo tỉ lệ
Với hàng nghìn pipeline chi phí nền Data Fusion được chia đều
Khi nào chi phí nền của Data Fusion là xứng đáng Trường hợp
Nhiều pipeline, nhiều nguồn khác nhau
Đội không lập trình tự vận hành tiết kiệm thời gian kỹ sư
Cần lineage và metadata tích hợp
Nguồn có plugin sẵn tiết kiệm hàng tuần phát triển
Không xứng đáng khi một vài pipeline đơn giản
Tối ưu Dataflow cho tác vụ đơn giản Cách
Dùng TEMPLATE dựng sẵn GCS → BigQuery, không cần viết mã
FlexRS Spot VM cho job lô chịu được trễ
Đọc Parquet/Avro thay vì CSV — nhanh hơn hẳn
--maxNumWorkers tránh co giãn quá tay
Với template Dataflow cũng "không cần lập trình"

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Chi phí thực tế hai phương án | billing export, so SKU | | Job tốn bao nhiêu tài nguyên | Dataflow Job metrics | | Instance Data Fusion có nhàn rỗi không | thời gian chạy so với thời gian có pipeline |

Và một lựa chọn thứ ba thường bị bỏ qua khi đề bài là "chuyển một tệp CSV": có cần engine nào không? Nếu đích là BigQuery, bq load làm đúng việc đó, miễn phí, và không có hạ tầng nào phải vận hành — engine chỉ thật sự cần khi có phép biến đổi mà SQL không làm được.

Câu 145 Data Preparation and Ingestion
What core technology enables Google Cloud's Dataflow service to process both streaming and batch data using a single, unified code base?
  1. A An automated data transfer mechanism for BigQuery.
  2. B The Apache Beam unified programming model.
  3. C A high-speed service for migrating large data volumes to Cloud Storage.
  4. D A visual, code-free interface for building ETL pipelines.
Xem giải thích

Đáp án

B — Mô hình lập trình thống nhất của Apache Beam.

Vì sao đúng

Dataflow là dịch vụ chạy pipeline Apache Beam, và chính mô hình Beam là thứ cho phép cùng một mã nguồn xử lý được cả dữ liệu luồng lẫn dữ liệu theo lô.

⚠ Điểm mấu chốt — Beam trừu tượng hoá sự khác biệt lô/luồng:

Trong Beam, dữ liệu là PCOLLECTION
        ↓
    PCollection HỮU HẠN   → dữ liệu lô
    PCollection VÔ HẠN    → dữ liệu luồng
        ↓
    ⚠ Các PHÉP BIẾN ĐỔI (PTransform)
      KHÔNG PHÂN BIỆT hai loại
        ↓
    → cùng một `ParDo`, `GroupByKey`,
      `Combine` dùng cho cả hai
    → chỉ khác ở NGUỒN ĐỌC

⚠ Cùng logic, hai nguồn:

// LUỒNG
PCollection<String> a = p.apply(
    PubsubIO.readStrings().fromTopic("..."));

// LÔ
PCollection<String> b = p.apply(
    TextIO.read().from("gs://..."));

// CÙNG phép biến đổi cho cả hai
a.apply(ParDo.of(new LamSach()));
b.apply(ParDo.of(new LamSach()));

⚠ Vì sao điều này quan trọng — vấn đề mà nó giải:

Kiến trúc Lambda cổ điển
        ↓
    Một hệ thống cho luồng (tốc độ)
    Một hệ thống cho lô (chính xác)
        ↓
    ⚠ HAI bộ mã, HAI logic
    ⚠ Sửa nghiệp vụ phải sửa cả hai
    ⚠ Quên một lần → HAI CON SỐ KHÁC NHAU
      cho cùng một chỉ số
        ↓
    Beam → MỘT bộ mã duy nhất

⚠ Beam là mã nguồn mở, chạy được nhiều nơi:

Cùng một pipeline Beam chạy trên:
    Dataflow      (Google Cloud)
    Apache Flink
    Apache Spark
    Direct Runner (máy cá nhân, để test)
        ↓
    ⚠ Giảm phụ thuộc vào một nhà cung cấp

Xem thêm câu #13033 (cùng lô): khoá Dataflow cho yêu cầu một pipeline thống nhất cho luồng và lô. Câu này hỏi CÔNG NGHỆ nào cho phép điều đó → Apache Beam. Hai câu bổ sung nhau hoàn hảo.

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

  • D (giao diện trực quan, không cần mã để dựng ETL) — đây là phương án gần nhất về mặt "mô tả một công nghệ dữ liệu", nhưng nó mô tả Cloud Data Fusion, không phải Dataflow — và giao diện kéo thả không liên quan gì tới việc thống nhất lô và luồng.

  • A (cơ chế chuyển dữ liệu tự động cho BigQuery) — mô tả BigQuery Data Transfer Service.

  • C (dịch vụ tốc độ cao chuyển dữ liệu lớn lên Cloud Storage) — mô tả Storage Transfer Service hoặc Transfer Appliance.

Ghi nhớ

⚠ Apache Beam — các khái niệm cốt lõi: | Khái niệm | Nội dung | |---|---| | Pipeline | toàn bộ luồng công việc | | PCollection | tập dữ liệu — HỮU HẠN (lô) hoặc VÔ HẠN (luồng) | | PTransform | phép biến đổi | | ParDo | biến đổi từng phần tử | | GroupByKey, Combine | gom nhóm, tổng hợp | | Window | chia luồng theo thời gian | | Watermark, Trigger | xử lý dữ liệu tới muộn | | Runner | nơi chạy: Dataflow, Flink, Spark |

Từ khoá nhận diện:

"thống nhất lô và luồng" → Apache Beam "kéo thả không cần mã" → Cloud Data Fusion "nạp theo lịch vào BigQuery" → Data Transfer Service "chuyển tệp lên GCS" → Storage Transfer Service "Spark, Hadoop" → Dataproc

Ba khái niệm về thời gian trong Beam Khái niệm
Event time thời điểm SỰ KIỆN XẢY RA
Processing time thời điểm hệ thống xử lý nó
Watermark ước lượng "dữ liệu tới event time T đã đủ"
Allowed lateness chấp nhận dữ liệu trễ bao lâu
Trigger khi nào PHÁT kết quả của cửa sổ
Chỉ có ý nghĩa với dữ liệu LUỒNG
Ba loại cửa sổ Loại
Fixed (tumbling) cố định, không chồng lấn
Sliding chồng lấn
Session theo khoảng lặng giữa các sự kiện
Global mặc định cho dữ liệu LÔ
Chọn theo câu hỏi nghiệp vụ
Vì sao Beam là mã nguồn mở lại quan trọng Lý do
Chạy được trên nhiều runner Dataflow, Flink, Spark
Kiểm thử cục bộ Direct Runner trên máy cá nhân
Không khoá vào một nhà cung cấp
Cộng đồng lớn nhiều I/O connector sẵn
Đổi lại Dataflow là runner được tối ưu nhất cho Beam
Beam ↔ Dataflow — đừng lẫn Nội dung
Apache Beam MÔ HÌNH LẬP TRÌNH và SDK
Dataflow DỊCH VỤ được quản lý chạy Beam
Beam là mã nguồn mở, của Apache
Dataflow là sản phẩm của Google Cloud
Câu hỏi thi thường hỏi "công nghệ nào bên dưới" → Beam

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Pipeline chạy chế độ nào | Dataflow console — Batch hay Streaming | | Logic có dùng chung không | rà soát mã — phép biến đổi có tách riêng không | | Kiểm thử cục bộ | chạy với Direct Runner |

Và một lợi ích thực tế của mô hình Beam mà chỉ thấy rõ khi cần sửa nghiệp vụ: một thay đổi, một chỗ sửa. Với hai hệ thống riêng cho lô và luồng, mỗi lần đổi cách tính là một lần phải nhớ đồng bộ cả hai — và lần quên đầu tiên tạo ra hai con số khác nhau cho cùng một chỉ số, thứ rất tốn thời gian để giải thích và sửa.

Câu 146 Data Management

A company has a large, time-series BigQuery table containing several years of transaction data. They've noticed that data older than 90 days is queried much less frequently. They want to reduce storage costs for this older data with the least amount of administrative effort. The data must remain available for querying directly in BigQuery.

Which action should they take?

  1. A Manually export all partitions older than 90 days to Cloud Storage Coldline.
  2. B Ensure the table is partitioned by date and take no further action.
  3. C Set a partition expiration policy of 90 days on the table.
  4. D Build a Dataflow job to rewrite older partitions into a compressed format.
Xem giải thích

Đáp án

B — Bảo đảm bảng được PHÂN VÙNG theo ngày, và KHÔNG cần làm gì thêm.

Vì sao đúng

Đề có hai ràng buộc quyết định: dữ liệu PHẢI truy vấn được NGAY trong BigQuery, và ưu tiên ÍT CÔNG QUẢN TRỊ NHẤT. BigQuery đã có sẵn cơ chế tự giảm giá cho dữ liệu cũ.

⚠ Điểm mấu chốt — long-term storage là TỰ ĐỘNG:

Phân vùng KHÔNG BỊ SỬA ĐỔI trong 90 ngày
        ↓
    BigQuery TỰ chuyển sang
    long-term storage
        ↓
    Giá lưu ≈ 50% active storage
        ↓
    ⚠ KHÔNG cần cấu hình
    ⚠ KHÔNG có thay đổi nào về hiệu năng
    ⚠ Dữ liệu VẪN truy vấn bình thường
        ↓
    → đúng "ít công quản trị nhất"

⚠ Vì sao PHÂN VÙNG là điều kiện then chốt:

Bảng KHÔNG phân vùng
        ↓
    Ghi thêm dữ liệu mới mỗi ngày
        ↓
    → "lần sửa cuối" luôn là HÔM NAY
    → TOÀN BỘ bảng không bao giờ
      đạt 90 ngày
        ↓
    ⚠ KHÔNG BAO GIỜ được giá long-term

Bảng CÓ phân vùng
        ↓
    → tính theo TỪNG PHÂN VÙNG
    → phân vùng cũ tự giảm giá
    → phân vùng hôm nay vẫn giá thường

⚠ ⚠ Điều dễ hiểu lầm nhất — TRUY VẤN không làm mất ưu đãi:

Đồng hồ 90 ngày đếm từ lần SỬA ĐỔI cuối
        ↓
    Sửa đổi = thêm, xoá, cập nhật, nạp

    ⚠ SELECT KHÔNG phải sửa đổi
    ⚠ Xuất dữ liệu KHÔNG phải sửa đổi
        ↓
    → dữ liệu cũ vẫn truy vấn thoải mái
      mà vẫn giữ giá rẻ

Xem thêm câu #13011 (lô 135): khoá xuất sang Cloud Storage Archive vì ở đó dữ liệu KHÔNG BAO GIỜ truy vấn nữa trong 6 năm. Câu này dữ liệu vẫn phải truy vấn được ngay trong BigQuery → để nguyên. Hai khoá khác nhau vì ràng buộc truy vấn khác nhau — hoàn toàn nhất quán. Và #13044 (cùng lô) nêu chính điều kiện tiên quyết: phải phân vùng.

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

  • C (đặt partition expiration 90 ngày) — đây là phương án gần nhất và cũng liên quan tới phân vùng, nhưng nó XOÁ dữ liệu cũ hơn 90 ngày — trái yêu cầu "dữ liệu phải còn truy vấn được".

  • A (xuất phân vùng cũ sang Cloud Storage Coldline) — dữ liệu rời khỏi BigQuery; muốn truy vấn phải qua external table, chậm hơn và tốn nhiều công quản trị hơn hẳn.

  • D (dựng job Dataflow ghi lại phân vùng cũ ở định dạng nén) — rất nhiều công, và BigQuery đã nén sẵn dữ liệu; không mang lại lợi ích gì.

Ghi nhớ

⚠ Giảm chi phí lưu trữ BigQuery — bảng phải thuộc: | Cách | Công quản trị | Dữ liệu còn truy vấn được? | |---|---|---| | Phân vùng + long-term storage | KHÔNG có — tự động | CÓ, bình thường | | Physical storage billing | thấp — đổi ở cấp dataset | CÓ | | Partition expiration | thấp | KHÔNG — bị xoá | | Xuất sang GCS Archive | cao | qua external table, chậm | | Rút ngắn time travel | thấp | có |

Từ khoá nhận diện:

"giảm chi phí, vẫn truy vấn được, ít công nhất" → phân vùng + long-term (tự động) "xoá hẳn sau N tháng" → partition expiration "không bao giờ truy vấn nữa" → xuất sang GCS Archive "quay lại dữ liệu vài ngày trước" → time travel "tính theo dung lượng nén" → physical storage billing

Long-term storage — điều cần thuộc Nội dung
Điều kiện 90 ngày liên tiếp KHÔNG SỬA ĐỔI
Giá ≈ 50% active storage
Tự động không cần cấu hình
Tính theo PHÂN VÙNG với bảng có phân vùng
Truy vấn KHÔNG reset chỉ sửa đổi mới reset
Không đổi hiệu năng truy vấn y hệt
10 GiB đầu mỗi tháng miễn phí
Physical storage billing — lựa chọn đáng cân nhắc Nội dung
Logical (mặc định cũ) tính theo dung lượng logic
Physical tính theo dung lượng ĐÃ NÉN
Thường rẻ hơn nhiều với dữ liệu nén tốt
Nhưng tính cả time travel và fail-safe
Đổi ở cấp DATASET
Cách quyết so số liệu thật trong INFORMATION_SCHEMA.TABLE_STORAGE
Những gì RESET đồng hồ 90 ngày Thao tác
INSERT, UPDATE, DELETE, MERGE có
bq load vào bảng có
Streaming insert có
SELECT KHÔNG
bq extract KHÔNG
Sao chép bảng đi nơi khác KHÔNG (bảng nguồn giữ nguyên)
Bức tranh tối ưu chi phí BigQuery đầy đủ Cách
Phân vùng + phân cụm giảm byte QUÉT và mở khoá long-term
Long-term storage tự động, giảm giá LƯU
Partition expiration dọn dữ liệu hết hạn
maximum_bytes_billed trần chi phí truy vấn
Materialized view / BI Engine giảm truy vấn lặp lại
Reservation (slot) chi phí đoán trước được

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bảng có phân vùng chưa | bq show <dataset>.<bảng> → Time Partitioning | | Bao nhiêu ở long-term | INFORMATION_SCHEMA.TABLE_STORAGE → LONG_TERM_LOGICAL_BYTES | | Physical hay logical rẻ hơn | so TOTAL_PHYSICAL_BYTES với TOTAL_LOGICAL_BYTES |

Và một câu trả lời thường đúng hơn người ta nghĩ trong các câu hỏi tối ưu chi phí BigQuery: không cần làm gì thêm. Cơ chế long-term storage đã xử lý đúng tình huống này một cách tự động — và mọi phương án đòi dựng job, xuất dữ liệu hay viết script đều đang thêm công việc để giải một vấn đề đã được giải sẵn.

Câu 147 Data Management

A company is designing a new application with three distinct data requirements:

1) a backend database to handle customer transactions and user profiles with high consistency,

2) a low-cost repository to store large, unstructured files like images and videos, and

3) a petabyte-scale system for running complex analytical queries on historical data.

Which combination of Google Cloud services correctly maps to these requirements?

  1. A 1: BigQuery, 2: Cloud Storage, 3: Cloud SQL
  2. B 1: Cloud Storage, 2: Cloud SQL, 3: BigQuery
  3. C 1: Cloud SQL, 2: Cloud Storage, 3: BigQuery
  4. D 1: Cloud SQL, 2: BigQuery, 3: Cloud Storage
Xem giải thích

Đáp án

C — 1: Cloud SQL, 2: Cloud Storage, 3: BigQuery.

Vì sao đúng

Ba yêu cầu trong đề là ba loại khối lượng công việc kinh điển, và mỗi loại có một dịch vụ chuyên trách.

⚠ Điểm mấu chốt — ánh xạ từng yêu cầu:

1) "giao dịch khách hàng, hồ sơ người dùng,
    NHẤT QUÁN CAO"
        ↓
    → CSDL GIAO DỊCH (OLTP)
    → CLOUD SQL

2) "tệp LỚN, PHI CẤU TRÚC: ảnh, video,
    chi phí thấp"
        ↓
    → KHO ĐỐI TƯỢNG
    → CLOUD STORAGE

3) "quy mô PETABYTE, truy vấn PHÂN TÍCH
    phức tạp trên dữ liệu lịch sử"
        ↓
    → KHO PHÂN TÍCH (OLAP)
    → BIGQUERY

⚠ OLTP ↔ OLAP — phân biệt cốt lõi:

OLTP (Cloud SQL, Spanner)
    → nhiều giao dịch NHỎ, nhanh
    → đọc/ghi vài dòng
    → nhất quán mạnh, có khoá
    → tối ưu cho GHI

OLAP (BigQuery)
    → ít truy vấn, mỗi truy vấn QUÉT RẤT NHIỀU
    → tổng hợp hàng tỉ dòng
    → lưu theo CỘT
    → tối ưu cho ĐỌC PHÂN TÍCH
        ↓
    ⚠ Dùng nhầm chỗ là sai kiến trúc căn bản

⚠ Vì sao không nhét ảnh vào CSDL:

Lưu ảnh dạng BLOB trong Cloud SQL
        ↓
    ⚠ Giá lưu ĐẮT HƠN GCS nhiều lần
    ⚠ Phình CSDL → sao lưu chậm
    ⚠ Không phục vụ trực tiếp cho trình duyệt
    ⚠ Không dùng được CDN
        ↓
    → luôn lưu TỆP trong kho đối tượng,
      CSDL chỉ giữ ĐƯỜNG DẪN

Xem thêm câu #12940 (lô 134): cùng bài toán ánh xạ dữ liệu có cấu trúc và phi cấu trúc → BigQuery + Cloud Storage. Hai câu nhất quán.

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

  • D (1: Cloud SQL, 2: BigQuery, 3: Cloud Storage) — đây là phương án gần nhất vì vế đầu đúng, nhưng nó đảo hai vế sau: BigQuery không phải nơi lưu ảnh và video, còn Cloud Storage không phải nơi chạy truy vấn phân tích phức tạp.

  • A (1: BigQuery cho giao dịch) — BigQuery không phải CSDL giao dịch: không hợp với đọc ghi từng dòng liên tục.

  • B (1: Cloud Storage cho giao dịch) — kho đối tượng không phải CSDL.

Ghi nhớ

⚠ Ánh xạ khối lượng công việc → dịch vụ — bảng phải thuộc: | Nhu cầu | Dịch vụ | |---|---| | Giao dịch, nhất quán cao, một Region | Cloud SQL | | Giao dịch, NHIỀU REGION, nhất quán mạnh | Cloud Spanner | | Tệp phi cấu trúc: ảnh, video, sao lưu | Cloud Storage | | Phân tích quy mô petabyte | BigQuery | | NoSQL tài liệu, ứng dụng di động | Firestore | | NoSQL ghi cực lớn, chuỗi thời gian | Bigtable | | Bộ nhớ đệm | Memorystore |

Từ khoá nhận diện:

"giao dịch, hồ sơ người dùng, nhất quán" → Cloud SQL "ảnh, video, tệp lớn, chi phí thấp" → Cloud Storage "petabyte, truy vấn phân tích" → BigQuery "toàn cầu + nhất quán mạnh" → Cloud Spanner "lưu ảnh trong CSDL" → luôn là phương án SAI

Ba tầng của một ứng dụng điển hình Tầng
Tầng giao dịch Cloud SQL — ứng dụng đọc ghi
Tầng tệp Cloud Storage — CSDL chỉ giữ đường dẫn
Tầng phân tích BigQuery — báo cáo, mô hình
Đồng bộ giữa tầng 1 và 3 Datastream (CDC)
Phục vụ tệp cho người dùng Cloud CDN trước bucket
Vì sao tách OLTP và OLAP Lý do
Truy vấn phân tích rất nặng quét toàn bảng, join lớn
Ảnh hưởng ứng dụng khoá, tranh chấp tài nguyên
Mô hình dữ liệu khác nhau chuẩn hoá ↔ phi chuẩn hoá
Quy mô khác nhau CSDL giao dịch không mở rộng để quét
Cách nối Datastream, hoặc federated query
Chi phí — vì sao mỗi loại có nơi riêng Nội dung
Cloud Storage rẻ nhất cho dung lượng lớn
BigQuery rẻ cho lưu, tính tiền theo byte QUÉT
Cloud SQL đắt nhất cho mỗi GB — trả cho instance
Vì vậy đừng lưu ảnh hay dữ liệu lịch sử trong Cloud SQL
Nguyên tắc dữ liệu ở đúng nơi rẻ nhất còn phù hợp
Khi nào cần Spanner thay Cloud SQL Dấu hiệu
Người dùng ở NHIỀU REGION cần nhất quán mạnh
Vượt trần ghi của một node
Cần SLA 99,999%
Nếu không có dấu hiệu nào Cloud SQL rẻ hơn nhiều
Thứ tự cân nhắc Cloud SQL → AlloyDB → Spanner

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cloud SQL có bị dùng để phân tích không | xem truy vấn chậm trong log | | Ảnh có nằm trong CSDL không | kiểm tra cột BLOB | | Chi phí chia theo dịch vụ | billing export, nhóm theo SKU |

Và một dấu hiệu sai kiến trúc rất dễ nhận ra khi rà soát một hệ thống đang chạy: truy vấn báo cáo chạy thẳng trên CSDL giao dịch. Nó thường bắt đầu bằng một câu "chỉ một báo cáo nhỏ thôi", rồi lớn dần cho tới khi ứng dụng khách hàng chậm đi vào mỗi sáng thứ Hai — và cách chữa luôn là tách sang một kho phân tích riêng.

Câu 148 Data Management

A web development team wants to deploy a new application as quickly as possible. They want to focus entirely on writing application code and managing their data and do not want to be responsible for managing the underlying operating systems, server hardware, or networking.

Which cloud service model provides a managed environment for developing, testing, and deploying applications that meets these requirements?

  1. A

    Platform as a Service (PaaS)

  2. B

    Infrastructure as a Service (IaaS)

  3. C

    Software as a Service (SaaS)

  4. D

    Data Center as a Service (DCaaS)

Xem giải thích

Đáp án

A — Platform as a Service (PaaS — nền tảng như một dịch vụ).

Vì sao đúng

Đề nêu rõ ranh giới trách nhiệm: đội chỉ muốn viết mã ứng dụng và quản lý dữ liệu, KHÔNG chịu trách nhiệm về hệ điều hành, phần cứng máy chủ hay mạng. Đó chính là định nghĩa của PaaS.

⚠ Điểm mấu chốt — ba mô hình chia trách nhiệm khác nhau:

IaaS — Infrastructure as a Service
    Nhà cung cấp: phần cứng, ảo hoá, mạng
    BẠN: hệ điều hành, runtime, ứng dụng,
         dữ liệu, vá lỗi
        ↓
    Ví dụ: Compute Engine

PaaS — Platform as a Service       ← đề này
    Nhà cung cấp: + hệ điều hành, runtime,
                   mở rộng, vá lỗi
    BẠN: ỨNG DỤNG và DỮ LIỆU
        ↓
    Ví dụ: App Engine, Cloud Run

SaaS — Software as a Service
    Nhà cung cấp: TẤT CẢ
    BẠN: chỉ dùng phần mềm
        ↓
    Ví dụ: Google Workspace, Looker Studio

⚠ Mẹo nhớ — "bạn quản lý tới đâu":

IaaS  → bạn quản lý từ HỆ ĐIỀU HÀNH trở lên
PaaS  → bạn quản lý từ ỨNG DỤNG trở lên
SaaS  → bạn không quản lý gì cả
        ↓
    ⚠ Đề nói "chỉ viết mã và quản lý dữ liệu"
    → đúng ranh giới của PaaS

⚠ PaaS trên Google Cloud:

APP ENGINE
    → PaaS cổ điển nhất
    → Standard: ngôn ngữ định sẵn, co về 0
    → Flexible: container, linh hoạt hơn

CLOUD RUN
    → PaaS hiện đại, dựa trên CONTAINER
    → co về 0, trả theo request
    → bất kỳ ngôn ngữ nào

CLOUD RUN FUNCTIONS
    → FaaS — mức trừu tượng cao hơn nữa

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

  • B (IaaS) — đây là phương án gần nhất trong ba mô hình chuẩn, nhưng với IaaS bạn VẪN phải quản lý hệ điều hành: vá lỗi, cấu hình, giám sát — đúng thứ đề nói không muốn.

  • C (SaaS) — là phần mềm dùng sẵn; đội không viết được ứng dụng riêng trên đó.

  • D (Data Center as a Service) — không phải mô hình chuẩn trong bộ ba IaaS/PaaS/SaaS.

Ghi nhớ

⚠ Ba mô hình dịch vụ đám mây — bảng phải thuộc: | Mô hình | Bạn quản lý | Ví dụ trên GCP | |---|---|---| | IaaS | hệ điều hành, runtime, ứng dụng, dữ liệu | Compute Engine | | PaaS | ứng dụng và dữ liệu | App Engine, Cloud Run | | SaaS | chỉ dữ liệu và cấu hình | Google Workspace, Looker Studio | | FaaS | chỉ hàm | Cloud Run functions | | Mẹo nhớ | càng lên cao, bạn quản lý càng ít |

Từ khoá nhận diện:

"chỉ viết mã, không quản hệ điều hành" → PaaS "cần kiểm soát hệ điều hành, cài phần mềm riêng" → IaaS "dùng phần mềm có sẵn" → SaaS "chỉ một hàm theo sự kiện" → FaaS "container được quản lý" → Cloud Run — PaaS/CaaS

Ánh xạ dịch vụ GCP vào mô hình Dịch vụ
Compute Engine IaaS
GKE CaaS — giữa IaaS và PaaS
GKE Autopilot gần PaaS hơn
Cloud Run PaaS / CaaS
App Engine PaaS
Cloud Run functions FaaS
BigQuery, Cloud SQL dịch vụ được quản lý (DBaaS)
Google Workspace SaaS
Đánh đổi khi lên mức trừu tượng cao hơn Đánh đổi
Ít việc vận hành hơn ưu điểm chính
Ít kiểm soát hơn không cài được phần mềm hệ thống
Ràng buộc runtime phiên bản ngôn ngữ, thư viện
Có thể khoá vào nền tảng container giảm rủi ro này
Nguyên tắc chọn mức TRỪU TƯỢNG CAO NHẤT còn đáp ứng được
Trách nhiệm chung về bảo mật Nội dung
Google lo bảo mật CỦA đám mây — hạ tầng, phần cứng, mạng vật lý
Bạn lo bảo mật TRONG đám mây — IAM, dữ liệu, cấu hình
Với IaaS bạn lo thêm vá hệ điều hành
Với PaaS Google vá hệ điều hành và runtime
Dữ liệu và IAM LUÔN là trách nhiệm của bạn ở mọi mô hình
Chọn Cloud Run hay App Engine Chọn
Đã có container Cloud Run
Cần ngôn ngữ ngoài danh sách chuẩn Cloud Run
Ứng dụng web truyền thống, ngôn ngữ phổ biến App Engine Standard
Cần co về 0 và trả theo request cả hai đều được
Khuyến nghị hiện nay Cloud Run cho dự án mới

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ai chịu trách nhiệm vá lỗi | đọc tài liệu trách nhiệm chung của dịch vụ | | Ứng dụng có bị khoá nền tảng không | đóng gói bằng container để giảm rủi ro | | Chi phí thực tế | Pricing Calculator với lưu lượng dự kiến |

Và một nguyên tắc đáng giữ khi chọn giữa các mức trừu tượng: chọn mức cao nhất còn đáp ứng được yêu cầu. Mỗi bậc đi xuống — từ Cloud Run về GKE, từ GKE về Compute Engine — đổi lấy thêm quyền kiểm soát bằng thêm việc phải làm mỗi tuần, và cái giá đó thường lớn hơn nhiều so với vẻ ngoài của nó.

Câu 149 Data Preparation and Ingestion

What key technical feature of the Database Migration Service (DMS) allows it to synchronize the source and destination databases continuously, thereby enabling a migration with near-zero downtime?

  1. A Visual, code-free pipeline builder
  2. B Integration with BigQuery for real-time analytics
  3. C Automatic schema conversion for data warehousing
  4. D Change Data Capture (CDC)
Xem giải thích

Đáp án

D — Change Data Capture (CDC — bắt thay đổi dữ liệu).

Vì sao đúng

CDC là cơ chế đọc nhật ký giao dịch của CSDL nguồn và phát lại các thay đổi lên đích một cách liên tục — chính là thứ cho phép di chuyển với thời gian ngừng gần như bằng không.

⚠ Điểm mấu chốt — CDC đọc NHẬT KÝ, không truy vấn bảng:

Mọi CSDL đều ghi NHẬT KÝ GIAO DỊCH
    MySQL      → binlog
    PostgreSQL → WAL
    Oracle     → redo log
    SQL Server → transaction log
        ↓
    CDC ĐỌC TUẦN TỰ nhật ký đó
        ↓
    → biết chính xác dòng nào vừa
      thêm/sửa/xoá, theo đúng thứ tự
        ↓
    ⚠ Gần như KHÔNG tạo tải truy vấn
      lên CSDL nguồn

⚠ Ba giai đoạn của di chuyển gần như không ngừng:

1. FULL DUMP
    → sao chép toàn bộ dữ liệu hiện có
    → nguồn VẪN PHỤC VỤ bình thường

2. CDC
    → bắt kịp và bám theo mọi thay đổi
    → theo dõi REPLICATION LAG
        ↓
    ⚠ Đây là giai đoạn CDC làm việc

3. CUTOVER — khi lag ≈ 0
    → dừng ghi vài phút
    → đợi lag về 0
    → thăng cấp đích
        ↓
    Thời gian ngừng: VÀI PHÚT

⚠ Vì sao CDC nhẹ hơn hẳn cách truy vấn:

Cách truy vấn định kỳ
    SELECT * FROM don_hang
    WHERE cap_nhat > '<lần trước>'
        ↓
    ⚠ quét bảng, dùng CPU và I/O của nguồn
    ⚠ bỏ sót bản ghi bị XOÁ
    ⚠ cần cột dấu thời gian đáng tin

CDC
        ↓
    → đọc tệp nhật ký tuần tự
    → BẮT ĐƯỢC CẢ THAO TÁC XOÁ
    → không cần cột dấu thời gian

Xem thêm câu #12986 (lô 135): về khái niệm online migration — CDC chính là cơ chế làm nên nó. Và #13002, #13040 (cùng lô và lô 135): chọn DMS cho chính bài toán này. Bốn câu mô tả cùng một chủ đề từ bốn góc — hoàn toàn nhất quán.

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

  • C (tự động chuyển đổi lược đồ cho kho dữ liệu) — đây là phương án gần nhất về mặt "một tính năng của DMS", và DMS có chuyển đổi lược đồ trong di chuyển không đồng nhất, nhưng đó không phải thứ tạo ra khả năng đồng bộ liên tục.

  • A (trình dựng pipeline trực quan không cần mã) — mô tả Cloud Data Fusion, không phải DMS.

  • B (tích hợp với BigQuery cho phân tích thời gian thực) — mô tả Datastream; đích của DMS là Cloud SQL / AlloyDB.

Ghi nhớ

⚠ CDC — điều cần thuộc: | Điểm | Nội dung | |---|---| | Cơ chế | đọc NHẬT KÝ GIAO DỊCH của CSDL | | Tải lên nguồn | rất nhẹ — không truy vấn bảng | | Bắt được thao tác XOÁ | khác hẳn cách truy vấn theo dấu thời gian | | Giữ đúng thứ tự | theo nhật ký | | Cho phép | di chuyển gần như không ngừng | | Dịch vụ dùng CDC | DMS, Datastream |

Từ khoá nhận diện:

"đồng bộ liên tục, thời gian ngừng gần bằng 0" → CDC "CSDL → Cloud SQL" → DMS (dùng CDC) "CSDL → BigQuery gần thời gian thực" → Datastream (dùng CDC) "kéo thả không cần mã" → Cloud Data Fusion "chuyển đổi lược đồ" → một tính năng phụ, không phải cơ chế đồng bộ

Điều kiện phía nguồn để bật CDC CSDL
MySQL log_bin=ON, binlog_format=ROW, binlog_row_image=FULL
PostgreSQL wal_level=logical, đủ replication slot
Oracle ARCHIVELOG mode, supplemental logging
SQL Server bật CDC ở cấp CSDL và bảng
Chung tài khoản có quyền đọc nhật ký
⚠ Chung MỌI BẢNG PHẢI CÓ KHOÁ CHÍNH
Vì sao khoá chính lại bắt buộc Lý do
CDC cần xác định DÒNG NÀO vừa thay đổi
Không có khoá chính không biết áp thay đổi vào dòng nào ở đích
Bảng lịch sử cũ thường thiếu khoá chính
Cách xử lý thêm khoá, hoặc chuyển bảng đó riêng theo lô
Nên kiểm ngay ở giai đoạn khảo sát
Theo dõi giai đoạn CDC Chỉ số
Replication lag quan trọng nhất — quyết định lúc cắt chuyển
Kích thước nhật ký chưa xử lý nguồn có giữ đủ binlog không
Lỗi áp thay đổi lược đồ lệch, ràng buộc
Tải trên nguồn xác nhận thật sự nhẹ
Cảnh báo lag vượt ngưỡng
Bẫy hay gặp với CDC Bẫy
Nguồn xoá binlog quá sớm mất thay đổi — tăng thời gian giữ
DDL trên nguồn giữa chừng đổi lược đồ có thể làm hỏng luồng
Bảng không khoá chính phải xử lý riêng
Giao dịch rất lớn có thể gây đỉnh lag
Phòng ngừa đóng băng thay đổi lược đồ trong giai đoạn di chuyển

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lag hiện tại bao nhiêu | DMS console → replication delay | | Nguồn đã bật nhật ký chưa | kiểm tra cấu hình CSDL nguồn | | Dữ liệu đã khớp chưa | so COUNT(*) và checksum từng bảng |

Và một quy tắc nên thoả thuận với đội phát triển trước khi bắt đầu giai đoạn CDC: đóng băng mọi thay đổi lược đồ cho tới khi cắt chuyển xong. Một lệnh ALTER TABLE chạy giữa chừng có thể làm luồng nhân bản dừng lại hoặc áp sai dữ liệu — và phát hiện điều đó vào đêm cắt chuyển là tình huống không ai muốn gặp.

Câu 150 Data Management

A company's internal compliance policy mandates that all data within a specific BigQuery dataset must be encrypted at rest using an encryption key that the company's security team manages in Cloud KMS (Key Management Service). If a user has access to query the tables, they should see all data in its decrypted form without writing special SQL (Structured Query Language) functions.

Which data protection mechanism meets this requirement?

  1. A Dynamic Data Masking
  2. B AEAD (Authenticated Encryption with Associated Data) functions
  3. C CMEK (Customer-Managed Encryption Keys)
  4. D Authorized Views
Xem giải thích

Đáp án

C — CMEK (Customer-Managed Encryption Keys — khoá mã hoá do khách hàng quản lý).

Vì sao đúng

Đề nêu hai điều: khoá mã hoá do đội bảo mật của công ty quản lý trong Cloud KMS, và người dùng có quyền truy vấn thì thấy dữ liệu đã giải mã, KHÔNG phải viết hàm SQL đặc biệt. Chỉ CMEK thoả cả hai.

⚠ Điểm mấu chốt — CMEK mã hoá ĐĨA, hoàn toàn TRONG SUỐT:

CMEK
        ↓
    Thay khoá mặc định của Google
    bằng khoá của BẠN trong Cloud KMS
        ↓
    BigQuery tự giải mã khi đọc
        ↓
    ⚠ Người dùng truy vấn BÌNH THƯỜNG
    ⚠ KHÔNG gọi hàm nào
    ⚠ KHÔNG biết có CMEK hay không
        ↓
    → đúng yêu cầu "thấy dữ liệu giải mã,
      không cần SQL đặc biệt"

⚠ Cấu hình:

# 1. Tạo key ring và key trong Cloud KMS
gcloud kms keyrings create vong-khoa \
  --location=asia-southeast1
gcloud kms keys create khoa-bq \
  --keyring=vong-khoa --location=asia-southeast1 \
  --purpose=encryption --rotation-period=90d

# 2. Cấp quyền cho SERVICE AGENT của BigQuery
#    roles/cloudkms.cryptoKeyEncrypterDecrypter

# 3. Đặt khoá mặc định cho dataset
bq update --destination_kms_key=... du_an:dataset

⚠ Sức mạnh thật sự của CMEK — công tắc ngắt:

Vô hiệu hoá hoặc huỷ khoá trong KMS
        ↓
    ⚠ Dữ liệu KHÔNG GIẢI MÃ ĐƯỢC NỮA
        ↓
    → đây là "công tắc ngắt" cho dữ liệu
    → chính là thứ mà yêu cầu tuân thủ
      thường muốn có
        ↓
    ⚠ Cũng là rủi ro: mất khoá = mất dữ liệu

Xem thêm câu #13065 (cùng lô): khoá CSEK vì ở đó khoá phải nằm HOÀN TOÀN NGOÀI Google Cloud. #13037 (cùng lô): khoá AEAD vì dữ liệu phải là bản mã trong bảng và phải gọi hàm. #12984 (lô 135): khoá GMEK vì không muốn cấu hình gì. Bốn câu, bốn mức kiểm soát khoá — hoàn toàn nhất quán.

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

  • B (hàm AEAD) — đây là phương án gần nhất về mức bảo vệ, nhưng nó đòi gọi hàm giải mã tường minh trong SQL — đúng thứ đề nói không được có. Và nó mã hoá một cột, không phải cả dataset.

  • A (Dynamic Data Masking) — CHE giá trị với người không đủ quyền; đề muốn người có quyền thấy dữ liệu bình thường và vấn đề là quản lý KHOÁ, không phải che.

  • D (Authorized View) — kiểm soát ai thấy kết quả gì, không liên quan tới khoá mã hoá.

Ghi nhớ

⚠ Bốn mức quản lý khoá — bảng phải thuộc: | Mức | Ai tạo và giữ khoá | Người dùng cần làm gì | |---|---|---| | GMEK | Google | không gì — mặc định | | CMEK | BẠN, trong Cloud KMS | không gì — trong suốt | | CSEK | BẠN, bên ngoài GCP | gửi khoá theo từng yêu cầu | | Cloud EKM | hệ thống ngoài Google Cloud | trong suốt, khoá ở ngoài | | AEAD | bạn, keyset trong SQL | PHẢI gọi hàm giải mã |

Từ khoá nhận diện:

"tự quản khoá bằng Cloud KMS, trong suốt với người dùng" → CMEK "khoá phải nằm ngoài Google Cloud" → CSEK hoặc Cloud EKM "phải gọi hàm giải mã" → AEAD "không cần cấu hình gì" → GMEK "che giá trị theo vai trò" → dynamic data masking

CMEK — điều cần nhớ Nội dung
Khoá trong Cloud KMS bạn tạo, xoay, thu hồi
⚠ Location của khoá phải tương thích với vùng dữ liệu
Service agent cần quyền roles/cloudkms.cryptoKeyEncrypterDecrypter
Trong suốt người dùng không phải làm gì
Xoay khoá dữ liệu CŨ vẫn dùng phiên bản cũ
Huỷ khoá có thời gian chờ 30 ngày
Xoay khoá — điều hay hiểu nhầm Nội dung
Xoay tạo phiên bản mới cho dữ liệu MỚI
Dữ liệu CŨ vẫn dùng phiên bản cũ không tự mã hoá lại
Muốn mã hoá lại phải ghi lại dữ liệu
Vì vậy KHÔNG xoá phiên bản cũ vội
Khuyến nghị tuân thủ chu kỳ 90 ngày
Rủi ro vận hành của CMEK Rủi ro
Xoá khoá = mất dữ liệu VĨNH VIỄN
Thiếu quyền cho service agent job thất bại
Khoá ở location không tương thích không tạo được tài nguyên
Quota của KMS pipeline lớn có thể chạm trần
Vì vậy tách người quản KHOÁ khỏi người quản DỮ LIỆU
Dịch vụ nào hỗ trợ CMEK Dịch vụ
BigQuery ở cấp dataset hoặc bảng
Cloud Storage khoá mặc định của bucket
Compute Engine đĩa và snapshot
Cloud SQL, Spanner, Dataflow, Dataproc đều hỗ trợ
Pub/Sub topic
Kiểm tra tài liệu từng dịch vụ — mức hỗ trợ khác nhau

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Dataset dùng khoá nào | bq show --format=prettyjson <dataset> → defaultEncryptionConfiguration | | Khoá xoay bao lâu một lần | gcloud kms keys describe → rotationPeriod | | Ai truy cập được khoá | gcloud kms keys get-iam-policy |

Và một nguyên tắc tổ chức phải đi kèm CMEK để nó thật sự có giá trị: tách bạch người quản khoá khỏi người quản dữ liệu. Sức mạnh của CMEK nằm ở chỗ vô hiệu hoá khoá là khoá luôn dữ liệu — nhưng nếu cùng một người vừa quản khoá vừa quản dataset, cơ chế ấy không thêm lớp bảo vệ nào, mà chỉ thêm một cách để mất dữ liệu do nhầm lẫn.