Ngân hàng đề — Google Cloud Associate Cloud Engineer
Tìm thấy 449 câu.
- A Use the bq query command with the --estimate-cost flag
- B Use the bq query command with the --dry_run flag
- C Use the bq query command with the --cost flag
- D Use the bq query command with the --limit parameter and the --scan parameter
Xem giải thích
Đáp án
B — Dùng bq query với cờ --dry_run.
Vì sao đúng
BigQuery tính tiền theo lượng dữ liệu QUÉT, và dry run cho biết con số đó mà không chạy truy vấn.
⚠ Điểm mấu chốt:
bq query --dry_run --use_legacy_sql=false \
'SELECT ... FROM ...'
↓
BigQuery PHÂN TÍCH truy vấn
↓
Trả về số BYTE sẽ được quét
↓
→ KHÔNG chạy, KHÔNG tính tiền
→ so sánh được nhiều cách viết truy vấn
⚠ Từ số byte ra tiền:
Chi phí = (số byte / 2^40) × đơn giá mỗi TB
↓
→ so sánh trực tiếp hai cách viết
↓
Console BigQuery cũng hiện ước tính này
ở góc phải khi bạn gõ truy vấn
⚠ Và cách giảm dữ liệu quét — quan trọng hơn cả việc ước tính:
1. ĐỪNG DÙNG SELECT *
↓
BigQuery lưu theo CỘT
→ chỉ quét cột được nêu tên
2. PHÂN VÙNG theo ngày + lọc trong WHERE
3. PHÂN CỤM theo cột hay lọc
4. LIMIT KHÔNG giảm chi phí
↓
→ vẫn quét toàn bộ rồi mới cắt
Xem thêm câu #12466 và #12500 (lô 131): cùng một câu hỏi, cùng đáp án dry run. Chỉ khác chữ cái — lần lượt là A, C, và ở đây là B. Lưu ý nhỏ: đề này viết
--dry_run(gạch dưới) còn hai đề kia viết--dry-run(gạch ngang) —bqchấp nhận cả hai dạng, không mâu thuẫn. Khoá nhất quán.
Vì sao các phương án khác sai
-
A (
--estimate-cost) — đây là phương án gần nhất và nghe rất hợp lý, nhưng cờ này không tồn tại. -
C (
--cost) — cũng không tồn tại. -
D (
--limitvà--scan) — cả hai đều không phải cờ củabq query, vàLIMITtrong SQL cũng không giảm chi phí.
Ghi nhớ
⚠ Hai mô hình tính giá BigQuery — bảng phải thuộc: | Mô hình | Cách tính | |---|---| | On-demand | theo TB dữ liệu QUÉT — có mức miễn phí mỗi tháng | | Capacity (slot) | mua slot — chi phí cố định, đoán trước được | | Lưu trữ | active và long-term (không sửa 90 ngày → rẻ hơn ~50%) | | Chọn capacity khi | khối lượng truy vấn lớn và ổn định |
Từ khoá nhận diện:
"biết chi phí trước khi chạy" →
bq query --dry_run"giảm chi phí truy vấn" → partition, cluster, bỏSELECT *"trần cứng cho một truy vấn" →--maximum_bytes_billed"giới hạn chi tiêu hằng ngày" → custom quota "LIMITgiảm chi phí" → SAI, luôn luôn
| Tối ưu truy vấn — theo hiệu quả | Cách |
|---|---|
Bỏ SELECT * |
hiệu quả nhất và dễ nhất |
Partition + lọc trong WHERE |
giảm theo tỉ lệ ngày |
| Cluster theo cột hay lọc | |
require_partition_filter |
ép mọi truy vấn phải lọc |
| Preview bảng | xem dữ liệu MIỄN PHÍ |
| Materialized view | cho truy vấn tổng hợp lặp lại |
| Kiểm soát chi phí BigQuery | Cách |
|---|---|
--maximum_bytes_billed |
truy vấn vượt ngưỡng thì THẤT BẠI |
| Custom quota | trần dữ liệu quét mỗi ngày |
| Budget alert | qua Cloud Billing |
| Cache kết quả | truy vấn giống hệt trong 24 giờ miễn phí |
| Bảng tạm | CREATE TABLE AS SELECT cho kết quả trung gian |
Các cờ hữu ích của bq |
Việc |
|---|---|
--dry_run hoặc --dry-run |
ước tính dữ liệu quét |
--use_legacy_sql=false |
dùng SQL chuẩn — nên luôn khai |
--maximum_bytes_billed |
trần cứng |
--format=prettyjson |
đầu ra dễ đọc |
--location |
vị trí dataset |
--project_id |
project khác |
| Theo dõi ai đang tốn nhiều | Cách |
|---|---|
INFORMATION_SCHEMA.JOBS |
truy vấn lịch sử job bằng SQL |
| Nhóm theo | user_email, job_type, total_bytes_billed |
| Cloud Monitoring | chỉ số slot và bytes scanned |
| Billing export | phân tích chi phí theo project và label |
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ờ rất đáng đưa vào mọi script chạy truy vấn tự động: --maximum_bytes_billed. Nó biến một truy vấn viết sai — chẳng hạn quên mệnh đề lọc theo phân vùng — thành một lỗi rõ ràng ngay lập tức, thay vì một hoá đơn quét vài trăm terabyte mà bạn chỉ phát hiện vào cuối tháng.
- A Delete
- B Enable versioning
- C Set storage class
- D Move files
- E Copy files
Xem giải thích
Đáp án
A và C — XOÁ (Delete) và ĐẶT STORAGE CLASS (SetStorageClass).
Vì sao đúng
Object Lifecycle Management của Cloud Storage chỉ có đúng hai loại hành động, và đó là hai hành động này.
⚠ Điểm mấu chốt — chỉ hai hành động, không hơn:
Object Lifecycle Management
↓
ACTION chỉ có hai loại:
↓
Delete
→ xoá đối tượng, hoặc xoá phiên bản cũ
↓
SetStorageClass
→ chuyển sang Nearline, Coldline, Archive…
↓
→ KHÔNG có "move", "copy",
hay "enable versioning"
⚠ Các điều kiện kích hoạt luật:
age → tuổi đối tượng (ngày)
createdBefore → tạo trước một ngày cụ thể
matchesStorageClass → đang ở class nào
numNewerVersions → có bao nhiêu phiên bản mới hơn
daysSinceNoncurrentTime → bao lâu kể từ khi thành phiên bản cũ
isLive → là phiên bản hiện tại hay không
matchesPrefix / Suffix → theo tiền tố hoặc đuôi tên
↓
Nhiều điều kiện trong một luật
→ phải thoả TẤT CẢ
⚠ Một luật vòng đời điển hình:
Quá 30 ngày → SetStorageClass NEARLINE
Quá 90 ngày → SetStorageClass COLDLINE
Quá 365 ngày → SetStorageClass ARCHIVE
Quá 7 năm → Delete
↓
Với bucket bật versioning:
numNewerVersions > 3 → Delete
↓
→ dọn phiên bản cũ tự động
Vì sao các phương án khác sai
-
D (Move files) — đây là phương án gần nhất về trực giác vì "chuyển sang class khác" nghe giống "di chuyển", nhưng lifecycle không di chuyển tệp giữa các bucket. Nó chỉ đổi storage class tại chỗ.
-
E (Copy files) — không có hành động sao chép. Muốn nhân bản sang bucket khác thì dùng Storage Transfer Service hoặc bucket replication.
-
B (Enable versioning) — versioning là một cài đặt của BUCKET, bật một lần, không phải hành động vòng đời.
Ghi nhớ
⚠ Object Lifecycle Management — bảng phải thuộc: | Thành phần | Nội dung | |---|---| | Hai hành động | Delete và SetStorageClass | | Điều kiện | age, createdBefore, matchesStorageClass, numNewerVersions, isLive, daysSinceNoncurrentTime, matchesPrefix/Suffix | | Áp ở đâu | trên BUCKET, áp cho mọi đối tượng khớp | | Chi phí | KHÔNG tính phí thao tác cho việc chuyển class | | Tần suất chạy | Google đánh giá mỗi ngày một lần | | Khai bằng | tệp JSON, console, hoặc Terraform |
Từ khoá nhận diện:
"tự động chuyển class theo tuổi" → lifecycle
SetStorageClass"tự động xoá dữ liệu cũ" → lifecycleDelete"dọn phiên bản cũ" →numNewerVersionshoặcdaysSinceNoncurrentTime"sao chép sang bucket khác" → Storage Transfer Service, không phải lifecycle "không đoán được mẫu truy cập" → Autoclass
| Lifecycle ↔ Autoclass — chọn cái nào | Nội dung |
|---|---|
| Lifecycle | bạn đặt luật theo TUỔI — dự đoán trước được |
| Autoclass | Google tự chuyển theo TRUY CẬP THẬT |
| Lifecycle | miễn phí, nhưng có thể chuyển nhầm dữ liệu vẫn hay dùng |
| Autoclass | có phí quản lý nhỏ, không có phí truy xuất sớm |
| Dùng chung | không — Autoclass và lifecycle SetStorageClass loại trừ nhau |
| Bốn storage class — nhắc lại | Thời gian lưu tối thiểu |
|---|---|
| Standard | không có |
| Nearline | 30 ngày |
| Coldline | 90 ngày |
| Archive | 365 ngày |
| Bẫy | xoá sớm vẫn bị tính đủ tiền cho thời gian tối thiểu |
| Versioning + lifecycle — cặp rất hữu ích | Nội dung |
|---|---|
| Versioning | giữ phiên bản cũ khi ghi đè hoặc xoá |
| Rủi ro | phiên bản cũ tích tụ, tốn tiền lưu trữ |
| Giải pháp | lifecycle với numNewerVersions |
| Ví dụ | giữ 3 phiên bản gần nhất, xoá phần còn lại |
| Hoặc | daysSinceNoncurrentTime > 30 → Delete |
| Bẫy khi đặt luật vòng đời | Nội dung |
|---|---|
Luật Delete viết sai |
MẤT DỮ LIỆU vĩnh viễn |
| Nên làm | thử ở bucket kiểm thử trước |
| Bật versioning trước | có đường lùi nếu xoá nhầm |
| Kiểm tra | gcloud storage buckets describe xem lifecycle |
| Thời điểm áp | Google chạy mỗi ngày — không tức thì |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bucket có luật gì | gcloud storage buckets describe gs://<ten> → lifecycle | | Đối tượng đang ở class nào | gcloud storage objects describe gs://<ten>/<tep> | | Chi phí thay đổi ra sao | Billing report, lọc SKU của Cloud Storage |
Và một biện pháp an toàn nên áp dụng trước khi bật luật Delete trên một bucket production: bật versioning trước. Khi đó một luật viết sai sẽ chỉ tạo delete marker chứ không xoá hẳn dữ liệu, và bạn còn cơ hội khôi phục — thay vì phát hiện sai sót vào ngày hôm sau khi Google đã chạy luật và dữ liệu không còn ở đâu cả.
- A gcloud compute images create devimage1 --source-snapshot devsnapshot1
- B gcloud disk images create devimage1 --source-snapshot devsnapshot1
- C gcloud images create devimage1 --source-snapshot devsnapshot1
- D gcloud disk create devimage1 --source-snapshot devsnapshot1
Xem giải thích
Đáp án
A — gcloud compute images create devimage1 --source-snapshot devsnapshot1
Vì sao đúng
Cấu trúc lệnh gcloud là nhóm — nhóm con — động từ, và image thuộc nhóm compute.
⚠ Điểm mấu chốt — thứ tự của lệnh:
gcloud compute images create <ten> --source-snapshot <snapshot>
↑ ↑ ↑
nhóm nhóm con động từ
↓
→ "gcloud images create" thiếu nhóm compute
→ "gcloud disk images create" sai nhóm con
→ "gcloud disk create" tạo ĐĨA, không tạo image
⚠ Image tạo được từ nhiều nguồn:
--source-snapshot <snapshot> ← đề này
--source-disk <đĩa>
--source-image <image khác>
--source-uri gs://... (tệp .tar.gz)
↓
→ tất cả đều dùng
`gcloud compute images create`
⚠ Snapshot ↔ Image ↔ Machine image — phân biệt:
SNAPSHOT
↓
Bản sao lưu của MỘT đĩa
→ dùng để khôi phục, tạo đĩa mới
IMAGE
↓
KHUÔN để TẠO VM MỚI
→ dùng trong instance template của MIG
→ có image family để luôn lấy bản mới nhất
MACHINE IMAGE
↓
TOÀN BỘ VM: mọi đĩa, cấu hình, metadata
→ dùng để nhân bản nguyên một máy
Vì sao các phương án khác sai
-
C (
gcloud images create ...) — đây là phương án gần nhất và có đúng động từ và cờ, nhưng thiếu nhómcompute. Không có nhóm cấp cao nào tênimages. -
B (
gcloud disk images create ...) — sai nhóm con: không cógcloud disk, và nhóm con đúng làimagestrực tiếp dướicompute. -
D (
gcloud disk create ...) — tạo ĐĨA, không phải image, và cũng sai nhóm.
Ghi nhớ
⚠ Snapshot ↔ Image ↔ Machine image — bảng phải thuộc: | | Snapshot | Image | Machine image | |---|---|---|---| | Là gì | bản sao lưu một ĐĨA | khuôn tạo VM | toàn bộ VM | | Dùng cho | khôi phục, tạo đĩa | instance template, MIG | nhân bản một máy | | Phạm vi | toàn cầu | toàn cầu | toàn cầu | | Gồm nhiều đĩa | không | không | CÓ | | Tăng dần | có | không | có |
Từ khoá nhận diện:
"tạo khuôn để dựng VM mới" → image "sao lưu một đĩa" → snapshot "nhân bản nguyên một VM nhiều đĩa" → machine image "luôn lấy bản image mới nhất" → image family "gcloud images ..." → SAI — thiếu nhóm
compute
| Các lệnh về image | Việc |
|---|---|
gcloud compute images create <ten> --source-snapshot <sn> |
tạo từ snapshot |
gcloud compute images create <ten> --source-disk <dia> |
tạo từ đĩa |
gcloud compute images list |
liệt kê (thêm --filter để tìm) |
gcloud compute images describe <ten> |
chi tiết |
gcloud compute images deprecate |
đánh dấu image cũ là lỗi thời |
gcloud compute images delete |
xoá |
| Image family — rất hữu ích | Nội dung |
|---|---|
| Việc | nhóm nhiều phiên bản image dưới MỘT tên |
| Khai bằng | --family=<ten-family> khi tạo image |
| Dùng | --image-family=<ten> khi tạo VM hoặc template |
| Kết quả | luôn lấy image MỚI NHẤT chưa deprecated |
| Lợi ích | cập nhật image không phải sửa instance template |
| Lùi lại | deprecate image mới → family tự quay về bản trước |
| Quy trình dựng golden image | Bước |
|---|---|
| 1 | Tạo VM, cài đặt và cấu hình đầy đủ |
| 2 | Dọn dẹp — xoá khoá SSH, log, dữ liệu tạm |
| 3 | Dừng VM (hoặc dùng --force với đĩa đang gắn) |
| 4 | gcloud compute images create ... --source-disk |
| 5 | Gán vào image family |
| 6 | Cập nhật instance template dùng family đó |
| Tự động hoá | Cloud Build + Packer |
| Chia sẻ image giữa các project | Nội dung |
|---|---|
| Cấp quyền | roles/compute.imageUser cho project khác |
| Lệnh | gcloud compute images add-iam-policy-binding |
| Dùng trong | instance template ở project khác |
| Mẫu tổ chức | một project riêng chứa golden image cho cả công ty |
| Ép dùng image đã duyệt | Organization Policy compute.trustedImageProjects |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Image đã tạo xong chưa | gcloud compute images describe <ten> → status | | Family đang trỏ vào image nào | gcloud compute images describe-from-family <family> | | Image dựa trên nguồn nào | cùng lệnh describe, xem sourceSnapshot hoặc sourceDisk |
Và một cấu hình rất đáng dùng ngay từ image đầu tiên: gán image vào một image family. Khi đó instance template chỉ cần trỏ tới tên family, và mỗi lần bạn dựng image mới thì mọi máy tạo ra sau đó tự dùng bản mới — không phải sửa template, và lùi lại cũng chỉ là một lệnh deprecate.
- A --dead-letter-topic
- B --ack-deadline
- C --max-retry-delay
- D min-retry-delay
Xem giải thích
Đáp án
B — --ack-deadline
Vì sao đúng
Message bị gửi lặp lại gần như luôn có một nguyên nhân: người tiêu thụ xử lý LÂU HƠN thời hạn xác nhận, nên Pub/Sub tưởng nó thất bại và gửi lại.
⚠ Điểm mấu chốt — ack deadline là đồng hồ đếm ngược:
Pub/Sub gửi một message
↓
Bắt đầu đếm ACK DEADLINE (mặc định 10 giây)
↓
Người tiêu thụ xử lý xong → gửi ACK
↓
→ message được coi là đã xử lý, không gửi lại
Người tiêu thụ CHƯA ack khi hết hạn
↓
→ Pub/Sub cho rằng nó thất bại
→ GỬI LẠI message cho một consumer khác
↓
→ xử lý mất 30 giây mà deadline 10 giây
→ message bị gửi lại 3 lần
→ đúng hiện tượng trong đề
⚠ Hai cách sửa:
1. TĂNG ack deadline
↓
--ack-deadline=60 (tối đa 600 giây)
↓
→ phù hợp khi biết trước thời gian xử lý
2. GIA HẠN ĐỘNG (modifyAckDeadline)
↓
Client library tự động gia hạn
trong lúc còn đang xử lý
↓
→ cách tốt hơn khi thời gian xử lý biến động
→ hầu hết thư viện chính thức đã làm sẵn
⚠ Nhưng phải nhớ một điều nền tảng:
Pub/Sub đảm bảo giao ÍT NHẤT MỘT LẦN
↓
→ message CÓ THỂ tới hơn một lần
ngay cả khi ack deadline hoàn toàn đúng
↓
→ người tiêu thụ PHẢI IDEMPOTENT
↓
Muốn đúng một lần thật sự:
→ bật EXACTLY-ONCE DELIVERY
→ hoặc tự khử trùng lặp bằng message ID
Vì sao các phương án khác sai
-
A (
--dead-letter-topic) — đây là phương án gần nhất vì cũng liên quan tới message xử lý thất bại, nhưng dead letter topic là nơi chứa message đã thử lại quá số lần cho phép. Nó giới hạn số lần lặp, nhưng không sửa nguyên nhân khiến message bị gửi lại. -
C và D (
--max-retry-delay,--min-retry-delay) — đây là tham số của retry policy, quyết định chờ bao lâu giữa các lần thử lại, không quyết định có thử lại hay không.
Ghi nhớ
⚠ Pub/Sub — các tham số của subscription: | Tham số | Việc | |---|---| | --ack-deadline | thời gian chờ ack, mặc định 10 giây, tối đa 600 | | --message-retention-duration | giữ message bao lâu (10 phút – 31 ngày) | | --dead-letter-topic | nơi chứa message hỏng sau N lần thử | | --max-delivery-attempts | số lần thử trước khi vào dead letter | | --min-retry-delay / --max-retry-delay | khoảng chờ giữa các lần thử | | --enable-exactly-once-delivery | giao đúng một lần | | --enable-message-ordering | giữ thứ tự theo ordering key |
Từ khoá nhận diện:
"message bị gửi lặp lại" →
--ack-deadlinequá ngắn "message hỏng kẹt mãi trong hàng đợi" → dead letter topic "cần đúng một lần" → exactly-once delivery, hoặc idempotent "cần giữ thứ tự" → ordering key "tồn đọng tăng" →num_undelivered_messages
| Ba mức đảm bảo giao của Pub/Sub | Nội dung |
|---|---|
| At-least-once | mặc định — có thể trùng lặp |
| Exactly-once | bật riêng, trong một Region, có ràng buộc |
| Ordering | bật message ordering với ordering key |
| Hệ quả | luôn thiết kế consumer IDEMPOTENT |
| Khử trùng lặp | dùng message_id hoặc khoá nghiệp vụ |
| Chẩn đoán message bị lặp | Bước |
|---|---|
| 1 | Đo thời gian xử lý thực tế của consumer |
| 2 | So với --ack-deadline hiện tại |
| 3 | Kiểm tra client library có tự gia hạn deadline không |
| 4 | Xem chỉ số expired_ack_deadlines_count |
| 5 | Nếu xử lý lâu → tăng deadline hoặc tách việc ra hàng đợi khác |
| 6 | Bảo đảm consumer idempotent dù thế nào |
| Các chỉ số Pub/Sub nên đặt alert | Chỉ số |
|---|---|
num_undelivered_messages |
tồn đọng — consumer không theo kịp |
oldest_unacked_message_age |
tin nhắn cũ nhất chưa xử lý |
expired_ack_deadlines_count |
ack deadline hết hạn — dấu hiệu của đề này |
dead_letter_message_count |
message hỏng |
| Dùng để | co giãn worker theo độ sâu hàng đợi |
| Thiết kế consumer cho tốt | Nội dung |
|---|---|
| Idempotent | bắt buộc |
| Ack SAU khi xử lý xong | không ack trước |
| Việc lâu → tách ra | ack nhanh, đẩy việc sang hàng đợi khác |
| Dead letter topic | luôn nên cấu hình |
| Xử lý theo lô | tăng thông lượng |
| Theo dõi | dựng dashboard cho ba chỉ số ở trên |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ack deadline hiện tại | gcloud pubsub subscriptions describe <ten> | | Có bao nhiêu lần hết hạn | chỉ số expired_ack_deadlines_count | | Message có bị lặp không | ghi log message_id rồi đếm trùng |
Và một nguyên tắc nên áp dụng bất kể ack deadline được đặt đúng tới đâu: luôn viết consumer idempotent. Pub/Sub chỉ đảm bảo giao ít nhất một lần, nên một message trùng lặp có thể xuất hiện vì lý do hoàn toàn khác — mạng chập chờn, consumer khởi động lại — và một thiết kế phụ thuộc vào việc "mỗi message chỉ tới đúng một lần" sẽ hỏng vào lúc bạn ít mong đợi nhất.
- A Install a bash script that uses the sar -u command to get CPU utilization and write the value to syslog.
- B Install a bash script that uses the sar -u command to get CPU utilization and write the value to sysout.
- C Install the Cloud Monitoring agent on each server and monitor the load_15m metric.
- D Install the Prometheus agent on each server and monitor the load_15m metric.
Xem giải thích
Đáp án
C — Cài CLOUD MONITORING AGENT trên từng máy chủ và theo dõi chỉ số load_15m.
Vì sao đúng
Đề đòi ít công nhất, và Cloud Monitoring agent làm sẵn toàn bộ việc thu thập, truyền tải, lưu trữ và hiển thị.
⚠ Điểm mấu chốt — vì sao phải cần agent:
Cloud Monitoring mặc định thu chỉ số
từ phía HYPERVISOR
↓
Có sẵn: CPU utilization, network, disk I/O
↓
KHÔNG có sẵn:
- load average (1m, 5m, 15m)
- bộ nhớ đã dùng
- dung lượng đĩa đã dùng
- danh sách tiến trình
↓
→ những thứ này nằm BÊN TRONG hệ điều hành
→ phải cài AGENT mới lấy được
⚠ Và agent lo trọn gói phần còn lại:
Cloud Monitoring agent (Ops Agent)
↓
- Thu chỉ số theo chu kỳ
- Truyền lên Cloud Monitoring
- Lưu trữ, vẽ biểu đồ, đặt alert
↓
→ không phải viết script
→ không phải dựng nơi lưu trữ
→ không phải tự vẽ đồ thị
↓
Cài hàng loạt bằng:
Ops Agent policy, hoặc
startup script trong instance template
⚠ Vì sao viết script là cách tệ nhất:
Script chạy `sar -u` rồi ghi vào syslog
↓
- Phải tự triển khai lên từng máy
- Phải tự thu gom log về một chỗ
- Phải tự phân tích ra số liệu
- Phải tự vẽ biểu đồ và đặt cảnh báo
- Phải tự bảo trì khi máy đổi
↓
→ rất nhiều công cho việc đã có sẵn
Vì sao các phương án khác sai
-
D (cài Prometheus agent và theo dõi
load_15m) — đây là phương án gần nhất và Prometheus là công cụ rất tốt, nhưng nó đòi bạn dựng và vận hành cả một hệ thống Prometheus. (Google có Managed Service for Prometheus làm nhẹ việc này, nhưng với nhu cầu đơn giản trong đề thì Ops Agent vẫn ít công hơn.) -
A (script
sar -ughi vào syslog) — rất nhiều công: triển khai, thu gom, phân tích, vẽ đồ thị đều phải tự làm. -
B (script
sar -ughi ra sysout) — tệ hơn nữa:sysoutkhông phải nơi lưu trữ, dữ liệu sẽ biến mất.
Ghi nhớ
⚠ Chỉ số có sẵn ↔ chỉ số cần agent — bảng phải thuộc: | Có sẵn (hypervisor) | Cần agent | |---|---| | instance/cpu/utilization | load_1m, load_5m, load_15m | | instance/network/received_bytes_count | bộ nhớ đã dùng (memory/percent_used) | | instance/disk/read_bytes_count | dung lượng đĩa đã dùng (disk/percent_used) | | Uptime | swap, số tiến trình | | — | log của hệ điều hành và ứng dụng |
Từ khoá nhận diện:
"load average, bộ nhớ, dung lượng đĩa" → CẦN AGENT "CPU, mạng" → có sẵn, không cần agent "ít công nhất" → dịch vụ được quản lý, đừng viết script "đã có Prometheus" → Managed Service for Prometheus "máy tại chỗ cũng cần giám sát" → Ops Agent chạy được ngoài GCP
| Ops Agent — agent hợp nhất hiện hành | Nội dung |
|---|---|
| Việc | thu CẢ chỉ số LẪN log trong một agent |
| Thay thế | Monitoring agent và Logging agent kiểu cũ |
| Cấu hình | một tệp YAML duy nhất |
| Cài hàng loạt | Ops Agent policy qua VM Manager |
| Hỗ trợ | VM trên GCP, và cả máy TẠI CHỖ |
| Quyền | service account cần roles/monitoring.metricWriter và roles/logging.logWriter |
| Cài agent cho cả đội máy — ít công nhất | Cách |
|---|---|
| Ops Agent policy | tự cài và cập nhật cho VM khớp bộ lọc |
| Startup script trong instance template | máy mới tự có |
| Golden image | cài sẵn vào image |
| Kiểm tra | VM Manager → OS Inventory |
| Với máy tại chỗ | cài thủ công hoặc bằng công cụ cấu hình |
| Bộ Cloud Operations — nhắc lại | Thành phần |
|---|---|
| Cloud Monitoring | chỉ số, dashboard, alert, uptime check |
| Cloud Logging | thu thập và truy vấn log |
| Cloud Trace | vết truy tìm phân tán |
| Cloud Profiler | hồ sơ CPU và bộ nhớ |
| Error Reporting | gom và phân loại lỗi |
| Tên cũ | Stackdriver |
| Đánh giá VM có bị cấp phát thừa không | Chỉ số |
|---|---|
load_15m so với số vCPU |
load thấp hơn nhiều số vCPU → thừa |
memory/percent_used |
thấp kéo dài → thừa RAM |
cpu/utilization |
trung bình dưới 20% → cân nhắc giảm cỡ |
| Công cụ sẵn có | Recommender → machine type recommendations |
| Hành động | đổi loại máy, hoặc dùng custom machine type |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Agent có chạy không | sudo systemctl status google-cloud-ops-agent | | Chỉ số đã lên chưa | Metrics Explorer, tìm agent.googleapis.com | | Máy nào cấp phát thừa | Recommender trong console |
Và một công cụ có sẵn rất đáng dùng cho đúng mục đích trong đề: Recommender của Compute Engine. Sau khi Ops Agent thu đủ dữ liệu vài ngày, Google sẽ tự đưa ra gợi ý đổi loại máy cho từng VM kèm ước tính tiết kiệm — nhanh hơn nhiều so với việc tự đọc biểu đồ load_15m của hàng chục máy rồi tự quyết định.
To improve the security of your applications, you want to create several custom roles with limited permissions. What role would give you sufficient permission to create custom roles?
- A roles/iam.roles.create
- B roles/iam.roles.create.custom
- C roles/iam.serviceAccountUser
- D roles/iam.serviceAccountUser.create
Xem giải thích
Đáp án
A — roles/iam.roles.create
Vì sao đúng
Trong bốn lựa chọn, đây là phương án duy nhất nhắc tới đúng hành động tạo custom role; ba phương án còn lại đều không liên quan hoặc không tồn tại.
⚠ Điểm mấu chốt — quyền cần để tạo custom role:
Tạo một custom role đòi permission:
↓
iam.roles.create
↓
Kèm theo (để quản lý trọn vẹn):
iam.roles.get
iam.roles.list
iam.roles.update
iam.roles.delete
↓
Vai trò predefined chứa đủ chúng:
roles/iam.roleAdmin (cấp project)
roles/iam.organizationRoleAdmin (cấp tổ chức)
⚠ Ghi nhớ về chất lượng câu hỏi
Phương án đáp án viết roles/iam.roles.create — đây là một chuỗi TRỘN HAI ĐỊNH DẠNG:
iam.roles.createlà một PERMISSION (ba phần: dịch vụ, tài nguyên, hành động)roles/...là tiền tố của ROLE
Trong Google Cloud thật, không tồn tại vai trò nào tên roles/iam.roles.create. Vai trò đúng để tạo custom role là roles/iam.roleAdmin (ở cấp project) hoặc roles/iam.organizationRoleAdmin (ở cấp tổ chức).
Khoá đáp án không đổi vì trong bốn phương án, A là phương án duy nhất nêu đúng hành động cần thiết (iam.roles.create); ba phương án còn lại nói về service account hoặc là chuỗi bịa hoàn toàn. Khi gặp đề tương tự có đủ lựa chọn, hãy nhớ: roles/iam.roleAdmin là câu trả lời chuẩn.
⚠ Và custom role có vài ràng buộc cần biết:
Custom role tạo được ở
↓
Cấp PROJECT, hoặc cấp ORGANIZATION
→ KHÔNG tạo được ở cấp folder
↓
Chỉ chứa được permission mà
NGƯỜI TẠO đã có
↓
Bạn phải TỰ BẢO TRÌ khi Google
thêm permission mới cho dịch vụ
Vì sao các phương án khác sai
-
C (
roles/iam.serviceAccountUser) — đây là phương án gần nhất vì là một vai trò CÓ THẬT, nhưng nó cho phép dùng một service account (impersonate, gán vào tài nguyên), hoàn toàn không liên quan tới việc tạo custom role. -
B (
roles/iam.roles.create.custom) — chuỗi bịa, không phải định dạng hợp lệ của cả role lẫn permission. -
D (
roles/iam.serviceAccountUser.create) — cũng bịa: ghép một vai trò có thật với một hậu tố không tồn tại.
Ghi nhớ
⚠ Permission ↔ Role — bảng phải thuộc: | | Permission | Role | |---|---|---| | Định dạng | <dichvu>.<taiNguyen>.<hanhDong> | roles/<dichvu>.<ten> | | Ví dụ | iam.roles.create | roles/iam.roleAdmin | | Gán trực tiếp | KHÔNG | CÓ | | Bẫy | roles/ + chuỗi ba phần = luôn SAI | |
Từ khoá nhận diện:
"tạo custom role" →
roles/iam.roleAdmin"dùng một service account" →roles/iam.serviceAccountUser"tạo service account" →roles/iam.serviceAccountAdmin"gán vai trò cho người khác" →roles/resourcemanager.projectIamAdmin"quản lý toàn bộ IAM" →roles/iam.securityAdmin
| Các vai trò IAM quản trị hay ra thi | Việc |
|---|---|
roles/iam.roleAdmin |
tạo và quản CUSTOM ROLE ở cấp project |
roles/iam.organizationRoleAdmin |
custom role ở cấp tổ chức |
roles/iam.serviceAccountAdmin |
tạo, xoá service account |
roles/iam.serviceAccountUser |
DÙNG một service account |
roles/iam.serviceAccountTokenCreator |
impersonate service account |
roles/resourcemanager.projectIamAdmin |
gán vai trò trong project |
roles/iam.securityReviewer |
xem mọi chính sách, không sửa |
| Custom role — khi nào nên dùng | Nội dung |
|---|---|
| Dùng khi | predefined role vẫn QUÁ RỘNG |
| Tạo ở | project hoặc organization — KHÔNG ở folder |
| Ràng buộc | chỉ chứa permission mà người tạo đã có |
| Nhược điểm | bạn tự bảo trì khi Google thêm permission mới |
| Trạng thái | ALPHA, BETA, GA, DISABLED |
| Khuyến nghị | thử predefined trước, custom là cuối cùng |
| Ba loại vai trò — nhắc lại | Nội dung |
|---|---|
| Basic | owner / editor / viewer / browser — quá rộng |
| Predefined | theo dịch vụ, Google bảo trì — nên dùng |
| Custom | tự chọn permission — bạn tự bảo trì |
| Xem role gồm gì | gcloud iam roles describe <role> |
| Tìm role phù hợp | gcloud iam roles list --filter="..." |
| Công cụ giúp chọn đúng quyền | Việc |
|---|---|
| IAM Recommender | gợi ý thu hẹp vai trò theo 90 ngày dùng thật |
| Policy Analyzer | ai có quyền gì trên tài nguyên nào |
| Policy Troubleshooter | vì sao một người được hoặc không được làm gì |
| Role recommendations | đề xuất custom role dựa trên hành vi thật |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Custom role gồm gì | gcloud iam roles describe <ten> --project=<id> | | Có những custom role nào | gcloud iam roles list --project=<id> | | Vai trò predefined gồm gì | gcloud iam roles describe roles/iam.roleAdmin |
Và một cách tiếp cận nên theo trước khi tạo custom role: dùng IAM Recommender để xem Google gợi ý gì. Nó phân tích hành vi thật rồi đề xuất một bộ permission tối thiểu — thường sát hơn nhiều so với việc tự đoán, và tránh được cả việc thiếu quyền lẫn việc phải bảo trì một danh sách permission tự viết.
- A HTTP(S) Load Balancing
- B SSL Proxy
- C TCP Proxy
- D Network TCP/UDP Load Balancing
Xem giải thích
Đáp án
B — SSL PROXY Load Balancing.
Vì sao đúng
Ba manh mối: client BÊN NGOÀI, lưu lượng TCP có SSL, và muốn GIẢM TẢI xử lý SSL.
⚠ Điểm mấu chốt — "offload SSL" nghĩa là load balancer phải KẾT THÚC TLS:
SSL Proxy Load Balancing
↓
Load balancer KẾT THÚC kết nối TLS
↓
→ giải mã tại load balancer
→ backend nhận lưu lượng đã giải mã
(hoặc mã hoá lại nếu cấu hình)
↓
→ máy chủ backend KHÔNG phải
tốn CPU cho việc bắt tay TLS
→ đây chính là "offload SSL processing"
⚠ Và vì sao không phải HTTP(S) LB:
Đề nói "TCP traffic, including SSL"
↓
→ KHÔNG nói là HTTP
↓
HTTP(S) Load Balancing hoạt động ở TẦNG 7
→ cần hiểu giao thức HTTP
↓
Lưu lượng TCP có TLS nhưng KHÔNG PHẢI HTTP
(ví dụ: SMTPS, IMAPS, giao thức riêng)
↓
→ SSL Proxy là lựa chọn đúng
⚠ Bốn load balancer tầng 4 của GCP — phân biệt:
SSL PROXY (ngoài, toàn cầu) ← đề này
↓
Kết thúc TLS, cho TCP có mã hoá
TCP PROXY (ngoài, toàn cầu)
↓
Kết thúc TCP, KHÔNG xử lý TLS
External passthrough Network LB (ngoài, Region)
↓
KHÔNG kết thúc gì — giữ nguyên IP nguồn
Internal passthrough (TCP/UDP) LB (trong, Region)
↓
Nội bộ VPC, giữ nguyên IP nguồn
Vì sao các phương án khác sai
-
C (TCP Proxy) — đây là phương án gần nhất và cùng là proxy ngoài, toàn cầu, nhưng nó không xử lý TLS: nó chỉ kết thúc kết nối TCP và chuyển tiếp. Không thực hiện được việc giảm tải SSL mà đề yêu cầu.
-
A (HTTP(S) Load Balancing) — hoạt động ở tầng 7, cần lưu lượng là HTTP. Đề chỉ nói TCP có SSL.
-
D (Network TCP/UDP Load Balancing) — là passthrough: nó không kết thúc kết nối nên không giảm tải SSL được, và backend vẫn phải tự xử lý toàn bộ TLS.
Ghi nhớ
⚠ Các load balancer của Google Cloud — bảng phải thuộc: | Loại | Tầng | Trong/Ngoài | Kết thúc TLS | |---|---|---|---| | Global external HTTP(S) | 7 | ngoài | CÓ | | SSL Proxy | 4 | ngoài, toàn cầu | CÓ | | TCP Proxy | 4 | ngoài, toàn cầu | không | | External passthrough Network | 4 | ngoài, Region | không | | Internal passthrough (TCP/UDP) | 4 | trong, Region | không | | Internal HTTP(S) | 7 | trong, Region | có |
Từ khoá nhận diện:
"offload SSL, lưu lượng TCP không phải HTTP" → SSL Proxy "TCP không mã hoá, toàn cầu" → TCP Proxy "HTTP, định tuyến theo URL" → HTTP(S) LB "giữ nguyên IP nguồn client" → passthrough Network LB "lưu lượng trong VPC" → Internal LB
⚠ Passthrough ↔ Proxy — khác biệt cốt lõi: | | Passthrough | Proxy | |---|---|---| | Kết nối | giữ nguyên, không kết thúc | kết thúc rồi mở kết nối mới | | IP nguồn | GIỮ NGUYÊN của client | thay bằng IP của LB | | Giảm tải TLS | KHÔNG | CÓ (với SSL Proxy và HTTP(S)) | | Độ trễ | thấp hơn | cao hơn một chút | | Phạm vi | theo Region | toàn cầu (với proxy ngoài) |
| SSL Proxy — chi tiết cần biết | Nội dung |
|---|---|
| Phạm vi | TOÀN CẦU, IP anycast |
| Chứng chỉ | Google-managed hoặc self-managed |
| Cổng hỗ trợ | một danh sách cổng nhất định |
| Backend | instance group, NEG, và cả backend ngoài GCP |
| Tới backend | mã hoá lại (SSL) hoặc để trần (TCP) |
| Không hỗ trợ | UDP — dùng passthrough Network LB |
| Chọn load balancer theo ba câu hỏi | Câu hỏi |
|---|---|
| 1. Lưu lượng từ đâu? | internet → external; trong VPC → internal |
| 2. Có phải HTTP không? | có → tầng 7; không → tầng 4 |
| 3. Có cần kết thúc TLS không? | có → proxy; không → passthrough |
| Bổ sung | cần IP nguồn thật → passthrough |
| Bổ sung | cần CDN, WAF → Global external HTTP(S) LB |
| Chứng chỉ SSL trên Google Cloud | Nội dung |
|---|---|
| Google-managed | tự cấp và TỰ GIA HẠN — chỉ cần trỏ DNS |
| Self-managed | bạn tải lên, tự gia hạn |
| Certificate Manager | quản lý nhiều chứng chỉ ở quy mô lớn |
| Điều kiện Google-managed | bản ghi DNS phải trỏ tới IP của load balancer |
| SSL policy | chọn phiên bản TLS tối thiểu và bộ cipher |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | LB thuộc loại nào | gcloud compute target-ssl-proxies list | | Chứng chỉ trạng thái gì | gcloud compute ssl-certificates describe <ten> | | Backend có khoẻ không | gcloud compute backend-services get-health <ten> |
Và một cấu hình rất đáng đặt cùng lúc với SSL Proxy: SSL policy giới hạn phiên bản TLS tối thiểu. Mặc định load balancer chấp nhận cả các phiên bản TLS cũ, và một chính sách khai rõ TLS 1.2 trở lên là cách nhanh nhất để loại bỏ cả một nhóm điểm yếu mà không cần đụng tới ứng dụng phía sau.
- A Network TCP/UDP Load Balancing
- B SSL Proxy
- C TCP Proxy
- D Internal HTTP(S) Load Balancing
Xem giải thích
Đáp án
A — Network TCP/UDP Load Balancing.
Vì sao đúng
Đề có hai ràng buộc: lưu lượng TCP NỘI BỘ, và trong MỘT Region. Trong bốn lựa chọn, chỉ phương án A thuộc họ load balancer tầng 4 theo Region phù hợp.
⚠ Điểm mấu chốt — loại trừ ba phương án còn lại:
SSL Proxy và TCP Proxy (B và C)
↓
Là load balancer NGOẠI, TOÀN CẦU
→ phục vụ client từ internet
→ sai cả về "internal" lẫn "một Region"
Internal HTTP(S) Load Balancing (D)
↓
Đúng là NỘI BỘ và theo Region
→ nhưng hoạt động ở TẦNG 7 (HTTP)
→ đề nói rõ là lưu lượng TCP
↓
→ còn lại phương án A
⚠ Ghi nhớ về chất lượng câu hỏi
Tên phương án A là "Network TCP/UDP Load Balancing" — thiếu chữ "Internal". Trong tài liệu hiện hành của Google Cloud, hai loại này được đặt tên rõ ràng:
- External passthrough Network Load Balancer — cho client từ internet
- Internal passthrough Network Load Balancer (tên cũ: Internal TCP/UDP Load Balancing) — cho lưu lượng trong VPC
Đề gộp chúng dưới tên chung "Network TCP/UDP Load Balancing" của danh mục cũ, nên câu chữ có phần mơ hồ. Khoá đáp án vẫn là A vì đó là phương án duy nhất ở tầng 4 và thuộc họ passthrough theo Region — ba phương án còn lại sai rõ ràng về tầng hoặc về phạm vi.
Xem thêm câu #12536 (CÙNG LÔ): cùng bài toán — cân bằng tải TCP nội bộ trong VPC. Ở đó phương án được đặt tên đầy đủ là "Internal TCP/UDP Load Balancing" và khoá là D. Cùng một giải pháp, chỉ khác cách bộ đề đặt tên phương án — không mâu thuẫn. Khi làm bài, hãy nhận diện theo tầng (4 hay 7) và phạm vi (trong hay ngoài VPC), đừng chỉ dựa vào tên gọi.
Vì sao các phương án khác sai
-
D (Internal HTTP(S) Load Balancing) — đây là phương án gần nhất và đúng về phạm vi nội bộ, nhưng nó hoạt động ở TẦNG 7: cần lưu lượng là HTTP. Đề nói rõ là TCP.
-
B (SSL Proxy) — là load balancer NGOẠI, TOÀN CẦU, dành cho client từ internet với lưu lượng TLS.
-
C (TCP Proxy) — cũng là ngoại và toàn cầu, và kết thúc kết nối TCP (proxy) chứ không passthrough.
Ghi nhớ
⚠ Các load balancer của Google Cloud — bảng phải thuộc: | Loại | Tầng | Trong/Ngoài | Phạm vi | |---|---|---|---| | Global external HTTP(S) | 7 | ngoài | toàn cầu | | Internal HTTP(S) | 7 | trong | Region | | SSL Proxy / TCP Proxy | 4 | ngoài | toàn cầu | | External passthrough Network | 4 | ngoài | Region | | Internal passthrough (TCP/UDP) | 4 | trong | Region |
Từ khoá nhận diện:
"TCP nội bộ, một Region" → Internal passthrough Network LB (Internal TCP/UDP LB) "HTTP nội bộ, định tuyến URL" → Internal HTTP(S) LB "từ internet, web" → Global external HTTP(S) LB "từ internet, TCP có TLS, offload SSL" → SSL Proxy "giữ nguyên IP nguồn" → passthrough, không phải proxy
| Ba câu hỏi để chọn đúng load balancer | Câu hỏi |
|---|---|
| 1. Lưu lượng từ đâu? | internet → external; trong VPC → internal |
| 2. Có phải HTTP không? | có → tầng 7; không → tầng 4 |
| 3. Có cần kết thúc TLS không? | có → proxy; không → passthrough |
| Bổ sung | cần IP nguồn thật → passthrough |
| Bổ sung | cần CDN, WAF → Global external HTTP(S) LB |
| Internal passthrough Network LB — chi tiết | Nội dung |
|---|---|
| Phạm vi | theo REGION |
| Địa chỉ | IP RIÊNG trong subnet |
| Giao thức | TCP, UDP, và L3_DEFAULT |
| IP nguồn | GIỮ NGUYÊN của client |
| Global access | bật để client ở Region khác cũng gọi được |
| Backend | instance group hoặc zonal NEG |
| Health check | bắt buộc — dải 130.211.0.0/22, 35.191.0.0/16 |
| Passthrough ↔ Proxy — nhắc lại | Nội dung |
|---|---|
| Passthrough | không kết thúc kết nối, GIỮ IP nguồn |
| Proxy | kết thúc rồi mở kết nối mới, THAY IP nguồn |
| Proxy cho thêm | kết thúc TLS, sửa header, định tuyến tầng 7 |
| Passthrough cho | độ trễ thấp hơn, thấy IP thật của client |
| Kiến trúc nhiều tầng điển hình | Tầng |
|---|---|
| Người dùng internet | Global external HTTP(S) LB + Cloud Armor + CDN |
| Tầng web | MIG nhiều zone |
| Giữa web và app | Internal LB (HTTP(S) hoặc TCP/UDP tuỳ giao thức) |
| Tầng ứng dụng | MIG |
| Tầng dữ liệu | Cloud SQL với IP riêng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | LB thuộc loại nào | gcloud compute forwarding-rules describe <ten> → loadBalancingScheme | | Backend có khoẻ không | gcloud compute backend-services get-health <ten> --region=<region> | | Firewall đã mở dải probe chưa | gcloud compute firewall-rules list --filter="sourceRanges:130.211.0.0/22" |
Và một mẹo rất hữu ích khi gặp câu hỏi về load balancer trong đề thi: đừng nhớ theo tên gọi, hãy nhớ theo ba thuộc tính — tầng (4 hay 7), phạm vi (trong hay ngoài VPC), và cơ chế (passthrough hay proxy). Google đã đổi tên các sản phẩm này vài lần, nên tên trong đề và tên trong tài liệu hiện hành có thể khác nhau, nhưng ba thuộc tính đó thì không đổi.
- A Cloud Data Studio
- B Cloud Dataproc
- C Cloud Dataflow
- D Cloud Bigtable
Xem giải thích
Đáp án
B — Cloud Dataproc.
Vì sao đúng
Hai từ khoá: đã có cụm Spark, và muốn dùng dịch vụ được quản lý.
⚠ Điểm mấu chốt — Dataproc là Spark được quản lý:
Cloud Dataproc
↓
Cụm Spark, Hadoop, Hive, Pig, Presto
do Google quản lý
↓
→ mã Spark hiện có CHẠY GẦN NHƯ NGUYÊN VẸN
→ chỉ đổi đường dẫn hdfs:// thành gs://
↓
Google lo: dựng cụm, cấu hình, vá lỗi
↓
→ đường ngắn nhất từ cụm tại chỗ lên cloud
⚠ Và mô hình cụm phù du giúp tiết kiệm mạnh:
Cụm khởi tạo trong khoảng 90 giây
↓
Tạo cụm → chạy job → XOÁ cụm
↓
Dữ liệu để ở Cloud Storage, không ở HDFS
↓
→ chỉ trả tiền đúng thời gian chạy
↓
Hoặc dùng **Dataproc Serverless**
→ không tạo cụm nào cả
Xem thêm câu #12483 và #12491 (lô 131): cùng một câu hỏi, cùng đáp án Cloud Dataproc. Chỉ khác chữ cái — lần lượt là D, C, và ở đây là B. Khoá nhất quán ở cả ba câu.
Vì sao các phương án khác sai
-
C (Cloud Dataflow) — đây là phương án gần nhất và về lâu dài có thể là đích đến tốt hơn (serverless hoàn toàn), nhưng nó dùng Apache Beam, nghĩa là phải viết lại toàn bộ job Spark. Trái yêu cầu dùng dịch vụ được quản lý với ít công chuyển đổi.
-
D (Cloud Bigtable) — CSDL NoSQL, không phải nền tảng xử lý phân tán.
-
A (Cloud Data Studio) — công cụ trực quan hoá và báo cáo (nay là Looker Studio), không xử lý dữ liệu.
Ghi nhớ
⚠ Các dịch vụ xử lý dữ liệu của GCP — bảng phải thuộc: | Dịch vụ | Việc | |---|---| | Dataproc | Hadoop, Spark, Hive được quản lý — CHUYỂN mã có sẵn | | Dataflow | Apache Beam — luồng và lô, serverless, phải viết mã | | Data Fusion | ETL kéo thả, không cần mã | | BigQuery | kho dữ liệu, SQL, serverless | | Pub/Sub | hàng đợi tin nhắn | | Composer | điều phối luồng công việc (Airflow) | | Looker Studio | trực quan hoá và báo cáo (tên cũ: Data Studio) |
Từ khoá nhận diện:
"đã có Spark / Hadoop" → Dataproc "xây mới, serverless, luồng và lô" → Dataflow "ETL không viết mã" → Data Fusion "phân tích SQL" → BigQuery "báo cáo và dashboard" → Looker Studio
| Giảm chi phí Dataproc | Cách |
|---|---|
| Cụm phù du | tạo → chạy → xoá |
| Spot VM cho worker | giảm tới 80% — Spark chịu được mất node |
--max-idle |
tự xoá cụm nhàn rỗi |
| Cloud Storage thay HDFS | không nuôi đĩa của cụm |
| Autoscaling policy | thêm bớt worker theo hàng đợi YARN |
| Dataproc Serverless | không quản cụm nào |
| Chuyển cụm Spark lên Dataproc | Bước |
|---|---|
| 1 | Chuyển dữ liệu HDFS sang Cloud Storage (DistCp) |
| 2 | Sửa đường dẫn: hdfs:// → gs:// |
| 3 | Dùng connector Cloud Storage có sẵn trong Dataproc |
| 4 | Chạy thử job trên cụm Dataproc |
| 5 | Chuyển sang mô hình cụm phù du |
| 6 | Cân nhắc BigQuery cho phần phân tích SQL |
| Dataproc Serverless — lựa chọn hiện đại | Nội dung |
|---|---|
| Việc | chạy job Spark mà KHÔNG tạo cụm |
| Ưu điểm | không cấu hình node, không quản cụm |
| Tính tiền | theo tài nguyên job dùng |
| Phù hợp | job theo lô, không cần tuỳ biến sâu |
| Hạn chế | ít kiểm soát hơn cụm thường |
| Ba lựa chọn cho tải Spark trên GCP | Chọn khi |
|---|---|
| Dataproc (cụm) | cần tuỳ biến, có job chạy dài, dùng Hive/Presto |
| Dataproc Serverless | job Spark theo lô, muốn ít công nhất |
| Dataflow | xây mới, cần xử lý luồng, chấp nhận viết Beam |
| Xu hướng | Serverless cho job đơn giản, cụm cho môi trường phức tạp |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Job chạy thế nào | gcloud dataproc jobs list và describe | | Cụm còn sống không | gcloud dataproc clusters list | | Chi phí ra sao | Billing report, lọc Dataproc và Compute Engine |
Và một thay đổi tư duy quan trọng khi chuyển lên Dataproc: đừng lưu dữ liệu trên HDFS của cụm. Để dữ liệu ở Cloud Storage khiến cụm trở thành thứ xoá được bất cứ lúc nào — nền tảng của mô hình cụm phù du, nơi bạn ngừng trả tiền ngay khi job kết thúc thay vì nuôi một cụm nhàn rỗi suốt đêm.
- A Add tags with the gcloud container images add-tag command
- B Set the account parameter when creating the images
- C Set the billing account parameter when creating the image
- D Add configurations with the gcloud container images add-configuration command
Xem giải thích
Đáp án
A — Thêm TAG bằng lệnh gcloud container images add-tag.
Vì sao đúng
Trong thế giới container, tag là cách chuẩn để đặt nhãn và nhóm image.
⚠ Điểm mấu chốt — tag là nhãn gắn vào một digest:
Một image được định danh bằng DIGEST
sha256:a1b2c3...
↓
Digest là bất biến, nhưng khó đọc
↓
TAG là một cái tên trỏ tới digest đó
↓
Một image có thể mang NHIỀU TAG:
myapp:v1.2.3
myapp:production
myapp:latest
↓
→ nhóm được theo môi trường, phiên bản,
thành phần đã cài
⚠ Cú pháp lệnh:
gcloud container images add-tag \
<image>@sha256:<digest> \
<image>:<tag-moi>
↓
Hoặc từ tag có sẵn:
gcloud container images add-tag \
myapp:v1.2.3 myapp:production
↓
Xem tag hiện có:
gcloud container images list-tags <image>
⚠ Ghi nhớ về chất lượng câu hỏi
Đề nhắc tới Google Container Registry (GCR) với nhóm lệnh gcloud container images. Dịch vụ này đã ngừng phát triển và đang được thay thế bằng Artifact Registry; Google đã công bố lộ trình ngừng hoạt động của GCR.
Khoá đáp án không đổi — gcloud container images add-tag vẫn là lệnh đúng cho GCR, và trong bốn phương án chỉ nó tồn tại. Nhưng với dự án mới hôm nay, hãy dùng Artifact Registry với nhóm lệnh gcloud artifacts; việc gắn tag khi đó thường làm bằng chính docker tag và docker push, hoặc gcloud artifacts docker tags add.
Vì sao các phương án khác sai
-
D (
gcloud container images add-configuration) — đây là phương án gần nhất về hình thức vì cũng thuộc nhómcontainer images, nhưng động từadd-configurationkhông tồn tại. -
B (đặt tham số
accountkhi tạo image) —accountlà tài khoản Google dùng để chạy lệnh, không phải nhãn phân loại image. -
C (đặt tham số
billing accountkhi tạo image) — billing account quyết định ai trả tiền, hoàn toàn không liên quan tới việc nhóm image.
Ghi nhớ
⚠ Tag của container image — bảng phải thuộc: | Khái niệm | Nội dung | |---|---| | Digest | sha256:... — BẤT BIẾN, định danh thật của image | | Tag | cái tên trỏ tới một digest — ĐỔI ĐƯỢC | | Một image | mang được NHIỀU tag | | Bẫy | tag latest có thể trỏ image khác nhau theo thời gian | | Production | nên dùng DIGEST hoặc tag bất biến có phiên bản |
Từ khoá nhận diện:
"nhóm image theo môi trường, thành phần" → tag "bảo đảm image không đổi" → dùng DIGEST, hoặc bật immutable tag "Artifact Registry" →
gcloud artifacts"Container Registry / GCR" →gcloud container images— dịch vụ cũ "quét lỗ hổng image" → Artifact Analysis
| Container Registry ↔ Artifact Registry — nhắc lại | Nội dung |
|---|---|
| GCR | cũ, đang ngừng — chỉ Docker, quyền dựa vào bucket GCS |
| Artifact Registry | hiện hành — nhiều định dạng, IAM ở mức repository |
| Tên miền | gcr.io ↔ <location>-docker.pkg.dev |
| Định dạng | Docker ↔ Docker, Maven, npm, Python, Go, Apt, Yum, Helm |
| Chuyển đổi | gcloud artifacts docker upgrade migrate |
| Chiến lược đặt tag cho production | Nội dung |
|---|---|
| Tag theo phiên bản ngữ nghĩa | v1.2.3 — bất biến |
| Tag theo commit | sha-a1b2c3d — truy vết được về mã nguồn |
| Tag môi trường | production, staging — trỏ tới digest hiện hành |
latest |
tránh dùng trong production — không xác định |
| Immutable tag | bật để chặn ghi đè tag đã tồn tại |
| Triển khai | dùng DIGEST trong manifest Kubernetes cho chắc chắn |
| Bảo mật image container | Lớp |
|---|---|
| Artifact Analysis | quét lỗ hổng tự động khi push |
| Binary Authorization | chỉ cho image đã ký chạy trên GKE |
| Immutable tag | chặn ghi đè |
| IAM theo repository | reader / writer / repoAdmin |
| Cleanup policy | tự xoá image cũ |
| CMEK | mã hoá bằng khoá của bạn |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Image có những tag nào | gcloud container images list-tags <image> | | Tag trỏ tới digest nào | cùng lệnh, cột DIGEST | | Repository dùng cái nào | gcloud artifacts repositories list cho Artifact Registry |
Và một thói quen rất đáng có khi triển khai lên production: tham chiếu image bằng DIGEST, không bằng tag. Tag có thể bị đẩy đè và trỏ sang một image khác lúc nào không hay, còn digest thì bất biến — nên một manifest Kubernetes ghi digest sẽ luôn triển khai đúng thứ bạn đã kiểm thử, kể cả sáu tháng sau.