Ngân hàng đề — Google Cloud Professional Cloud Developer
Tìm thấy 358 câu.
Which technique should you choose?
- A Smoke tests
- B Observability uptime checks
- C Cloud Load Balancing - heath checks
- D Managed instance group - heath checks
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả một ứng dụng đã triển khai sản xuất (production) trên các máy ảo Compute Engine được quản lý bởi Managed Instance Group (MIG). Lưu lượng truy cập (traffic) được định tuyến qua HTTP(s) Load Balancer. Hiện tại, người dùng không thể truy cập ứng dụng, và bạn cần triển khai một kỹ thuật giám sát (monitoring technique) để cảnh báo (alert) ngay khi ứng dụng không khả dụng (unavailable).
Mục tiêu chính: Tìm phương pháp giám sát tự động, đáng tin cậy để phát hiện tình trạng ứng dụng down từ góc nhìn end-user (người dùng cuối), không chỉ từ hạ tầng. Đây là tình huống phổ biến trong GCP, nơi health checks cơ bản có thể không đủ để kiểm tra tính khả dụng thực tế của ứng dụng (ví dụ: app trả về HTTP 200 nhưng logic bên trong lỗi).
📘 Tài liệu tham khảo:
- Google Cloud Observability - Uptime checks (cập nhật 2024-2026).
- Compute Engine MIG documentation.
- HTTP(s) Load Balancing health checks.
✅ Đáp án đúng: Observability uptime checks
Lý do lựa chọn 🛠️:
Uptime checks trong Google Cloud Observability (trước đây là Cloud Monitoring) là kỹ thuật tối ưu để giám sát tính khả dụng của ứng dụng từ nhiều vị trí địa lý toàn cầu (public endpoints). Nó mô phỏng yêu cầu HTTP/HTTPS thực tế từ end-user, kiểm tra response time, status code, và nội dung trang (ví dụ: kiểm tra endpoint /healthz trả về "OK"). Khi ứng dụng down, nó tự động gửi alert qua Notification Channels (email, Slack, PagerDuty).
✅ Phù hợp hoàn hảo vì:
- Không phụ thuộc vào load balancer hoặc MIG health checks (chỉ kiểm tra instance/port cơ bản).
- Hỗ trợ SLA monitoring (99.9% uptime).
- Cập nhật mới nhất (2026): Tích hợp AI insights trong Observability để dự đoán downtime.
📋 Giải thích tất cả các phương án
-
Smoke tests ❌
Sai vì: Smoke tests chỉ là kiểm tra cơ bản thủ công hoặc CI/CD pipeline (ví dụ: deploy sau kiểm tra tính năng chính). Không phải monitoring liên tục, không tự động alert real-time khi production down. Phù hợp dev/testing, không phải production alerting. -
Observability uptime checks ✅
Đúng vì: Như giải thích trên, đây là giám sát end-to-end từ public vantage points, alert ngay lập tức khi app unavailable. Linh hoạt config URL, timeout, và thresholds. Lựa chọn chuẩn GCP best practice cho availability monitoring. -
Cloud Load Balancing - heath checks ❌
Sai vì: Health checks của Load Balancer chỉ kiểm tra backend instances (TCP/HTTP port mở, response nhanh). Nếu tất cả instances unhealthy, LB ngừng route traffic – nhưng không alert chủ động về app logic (ví dụ: app crash nhưng port 80 vẫn mở). Chỉ quản lý traffic, không phải end-user monitoring. (Lưu ý: "heath" là lỗi chính tả của "health"). -
Managed instance group - heath checks ❌
Sai vì: MIG health checks tương tự LB health checks, dùng để tự động recreate/repair unhealthy instances. Tập trung vào hạ tầng VM (disk, memory), không kiểm tra ứng dụng end-to-end. Không gửi alert về app unavailable từ user perspective. (Lưu ý: "heath" là lỗi chính tả của "health").
JSON API as the demand escalates. You want to decrease the failed responses from the Cloud Storage API.
What should you do?
- A Distribute the uploads across a large number of individual storage buckets.
- B Use the XML API instead of the JSON API for interfacing with Cloud Storage.
- C Pass the HTTP response codes back to clients that are invoking the uploads from your application.
- D Limit the upload rate from your application clients so that the dormant bucket's peak request rate is reached more gradually.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi mô tả tình huống load testing (kiểm tra tải) cho một ứng dụng server. Trong 30 giây đầu tiên, một Cloud Storage bucket trước đó không hoạt động (dormant) đột ngột nhận 2000 write requests/giây và 7500 read requests/giây. Kết quả là ứng dụng nhận lỗi 5xx (server error) và 429 (Too Many Requests) gián đoạn từ Cloud Storage JSON API khi tải tăng cao.
Mục tiêu: Giảm số lượng phản hồi lỗi từ Cloud Storage API.
🛠️ Ngữ cảnh kỹ thuật (cập nhật đến 2026): Google Cloud Storage áp dụng request rate limits động cho bucket dormant. Bucket không hoạt động lâu có peak RPS thấp ban đầu (thường ~500-1000 RPS tùy loại), và cần warm-up dần dần để đạt giới hạn cao hơn (lên đến 5000+ RPS sau khi scale). Đột ngột high RPS gây throttling (429) hoặc overloaded (5xx). Giải pháp tập trung vào tăng tải từ từ để bucket tự động scale resources.
📘 Tài liệu tham khảo:
- Cloud Storage quotas & limits (Google Cloud Docs, cập nhật 2025).
- Troubleshoot request rate limits (khuyến nghị ramp-up load cho dormant buckets).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Limit the upload rate from your application clients so that the dormant bucket's peak request rate is reached more gradually.
Lý do:
🧩 Bucket dormant có giới hạn RPS thấp ban đầu do cơ chế auto-scaling của Cloud Storage. Tăng tải đột ngột gây throttling ngay lập tức. Bằng cách giới hạn tốc độ upload từ client ứng dụng (ví dụ: dùng rate limiter như exponential backoff hoặc gradual ramp-up từ 100 RPS lên peak), bucket sẽ warm-up dần, kích hoạt scale resources, giảm lỗi 429/5xx. Đây là best practice chính thức từ Google Cloud để xử lý tình huống này.
📋 Giải thích tất cả các phương án
-
❌ [SAI] Distribute the uploads across a large number of individual storage buckets.
Phương án này không hiệu quả vì mỗi bucket riêng lẻ vẫn bị giới hạn RPS nếu dormant. Phân tán chỉ tăng tổng throughput nếu tất cả bucket đã warm-up, nhưng ở đây vấn đề là đột ngột high RPS trên bucket dormant, không giải quyết root cause (throttling per bucket). Chi phí quản lý cao và không khuyến khích cho single-app workload. -
❌ [SAI] Use the XML API instead of the JSON API for interfacing with Cloud Storage.
XML API và JSON API có cùng rate limits (không khác biệt về RPS quota). Chuyển API chỉ thay đổi format request/response, không ảnh hưởng throttling hoặc scale-up của bucket. Đây là red herring (lừa hướng), vì docs xác nhận limits áp dụng thống nhất cho mọi API. -
❌ [SAI] Pass the HTTP response codes back to clients that are invoking the uploads from your application.
Phương án chỉ truyền lỗi về client (như retry logic), không giảm số lượng failed responses từ Storage API. Nó xử lý symptom (client-side retry) chứ không fix cause (high RPS đột ngột), dẫn đến loop lỗi nếu không rate-limit gốc. -
✅ [ĐÚNG] Limit the upload rate from your application clients so that the dormant bucket's peak request rate is reached more gradually.
Như giải thích trên: Rate limiting client-side (ví dụ: dùng libraries như Google Cloud Client Library với throttling) cho phép bucket tự warm-up, đạt peak RPS cao hơn sau 1-5 phút. Giảm >90% lỗi 429/5xx theo case studies Google Cloud.
🛠️ Khuyến nghị thực tế: Implement bằng Client Libraries (Node.js/Python) với throttle hoặc tools như Locust/JMeter cho ramp-up curve. Test với Cloud Storage Transfer Service nếu cần batch upload lớn.
What should you do?
- A Move the data to a Cloud Storage bucket, and mount the bucket on the filesystem using Cloud Storage FUSE.
- B Move the data to a Cloud Storage bucket, and copy the data to the boot disk of the instance via a startup script.
- C Move the data to a Compute Engine persistent disk, and attach the disk in read-only mode to multiple Compute Engine virtual machine instances.
- D Move the data to a Compute Engine persistent disk, take a snapshot, create multiple disks from the snapshot, and attach each disk to its own instance.
Xem giải thích
🧩 Phân tích chi tiết câu hỏi
✅ Nội dung câu hỏi:
Câu hỏi tập trung vào tình huống trên Google Cloud Platform (GCP) (không phải AWS như đề cập nhầm, vì liên quan đến Compute Engine, managed instance group - MIG). Ứng dụng của bạn được quản lý bởi một managed instance group (MIG), nghĩa là nhóm các VM tự động scale, quản lý bởi autoscaler. Bạn cần chia sẻ một bộ dữ liệu lớn chỉ đọc (read-only) giữa tất cả các instance trong MIG. Các yêu cầu chính:
- Mỗi instance khởi động nhanh chóng (quick start).
- Truy cập dữ liệu qua filesystem với độ trễ rất thấp (very low latency).
- Tối ưu hóa chi phí tổng thể (minimize total cost).
🛠️ Thách thức chính: Dữ liệu lớn cần chia sẻ read-only, không copy duplicate (tốn kém), phải native filesystem (không phải object storage), low latency như local disk, và phù hợp MIG (attach dễ dàng khi scale up/down).
📘 Kiến thức cập nhật GCP 2026: Theo tài liệu GCP mới nhất (Compute Engine PD docs, MIG best practices - cập nhật Q1/2026), Persistent Disk (PD) hỗ trợ multi-attach read-only lên đến 100+ VM/instance, latency <1ms (SSD), boot time <1 phút khi attach. Không thay đổi lớn từ 2023-2026.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Move the data to a Compute Engine persistent disk, and attach the disk in read-only mode to multiple Compute Engine virtual machine instances.
Lý do chi tiết 🏆:
- Chia sẻ read-only hiệu quả: PD Balanced/SSD hỗ trợ attach read-only cho nhiều VM cùng lúc (multi-attach), dữ liệu shared real-time mà không duplicate storage → tiết kiệm chi phí (chỉ trả 1 PD).
- Khởi động nhanh: Attach PD chỉ mất giây, MIG tự động attach khi scale → boot <1 phút.
- Low latency filesystem: PD mount như local disk (ext4/NVMe), latency ~0.1-1ms, POSIX compliant.
- Tối ưu cost: Không copy data, chi phí PD rẻ (~$0.04/GB/tháng SSD), phù hợp MIG scale lớn.
Nguồn: GCP Compute Engine Disks - Multi-writer/Read-only attach & MIG Persistent Disk Sharing.
🔍 Giải thích tất cả các phương án (đúng/sai)
-
❌ [SAI] Move the data to a Cloud Storage bucket, and mount the bucket on the filesystem using Cloud Storage FUSE.
Lý do sai: Cloud Storage FUSE (gcsfuse) mount như filesystem nhưng không phải native → latency cao (20-100ms+), throughput kém với dữ liệu lớn/read-heavy, không phù hợp "very low latency". Start chậm do sync metadata. Cost cao nếu traffic lớn (egress fees). Không lý tưởng cho MIG shared FS. -
❌ [SAI] Move the data to a Cloud Storage bucket, and copy the data to the boot disk of the instance via a startup script.
Lý do sai: Không chia sẻ (mỗi instance copy riêng → duplicate storage, tốn cost x số instance). Startup script copy dữ liệu lớn → boot chậm (phút đến giờ). Boot disk root không scale tốt, không read-only shared. Vi phạm "quick start" & "minimize cost". -
✅ [ĐÚNG] Move the data to a Compute Engine persistent disk, and attach the disk in read-only mode to multiple Compute Engine virtual machine instances.
Lý do đúng: Như phân tích trên → hoàn hảo match tất cả yêu cầu: shared read-only, low latency FS, quick boot, low cost. MIG template hỗ trợ attach PD tự động. -
❌ [SAI] Move the data to a Compute Engine persistent disk, take a snapshot, create multiple disks from the snapshot, and attach each disk to its own instance.
Lý do sai: Snapshot tạo disk riêng biệt (duplicate data → cost x số instance, ví dụ 10 instances = 10x storage). Không "shared real-time" (update PD gốc không sync). Boot chậm hơn do create disk từ snapshot (~1-2 phút/disk). Không tối ưu cost & không true read-only shared.
💡 Lời khuyên thực tế: Trong MIG, dùng MIG template với PD read-only attach để autoscaling mượt. Test với gcloud compute instances attach-disk --read-only. Nguồn bổ sung: GCP MIG Best Practices 2026.
Private Cloud (VPC). You want clients to be able to get the IP address of the service.
What should you do?
- A Reserve a static external IP address and assign it to an HTTP(S) load balancing service's forwarding rule. Clients should use this IP address to connect to the service.
- B Reserve a static external IP address and assign it to an HTTP(S) load balancing service's forwarding rule. Then, define an A record in Cloud DNS. Clients should use the name of the A record to connect to the service.
- C Ensure that clients use Compute Engine internal DNS by connecting to the instance name with the url https://[INSTANCE_NAME].[ZONE].c. [PROJECT_ID].internal/.
- D Ensure that clients use Compute Engine internal DNS by connecting to the instance name with the url https://[API_NAME]/[API_VERSION]/.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi tập trung vào việc phát triển một HTTP API được host trên Compute Engine VM instance trong Google Cloud Platform (GCP). API này cần được gọi bởi nhiều clients cùng trong một Virtual Private Cloud (VPC). Yêu cầu chính là clients có thể lấy được địa chỉ IP của service một cách dễ dàng và an toàn.
🔍 Chi tiết vấn đề:
- VM nằm trong VPC nội bộ, nên ưu tiên sử dụng internal networking thay vì external IP để tránh lộ ra internet.
- Clients cần IP address (internal IP) để kết nối trực tiếp hoặc resolve từ tên miền nội bộ.
- Không cần load balancer phức tạp vì chỉ intra-VPC traffic, và phải tận dụng các tính năng native của GCP như internal DNS để resolve tên instance thành IP nội bộ.
- Kiến thức cập nhật đến 2026: GCP Internal DNS (private DNS zones) vẫn hỗ trợ resolve tên VM qua format
[INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal, tự động map đến internal IP của instance trong cùng VPC (xem docs GCP Compute Engine Internal DNS).
📘 Tài liệu tham khảo:
- Compute Engine Internal DNS (cập nhật 2024-2026).
- VPC Internal IP Resolution.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Ensure that clients use Compute Engine internal DNS by connecting to the instance name with the url https://[INSTANCE_NAME].[ZONE].c. [PROJECT_ID].internal/.
Lý do 🛠️:
- Đây là cách native và an toàn nhất cho intra-VPC communication trong GCP. Internal DNS tự động resolve tên miền đầy đủ (
[INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal) thành internal IP của VM. - Clients chỉ cần dùng URL này để connect HTTPS → DNS sẽ cung cấp IP ngay lập tức (qua
nslookuphoặc connect trực tiếp). - Không cần external IP hay load balancer, tiết kiệm chi phí và bảo mật cao (traffic không rời VPC).
- Hỗ trợ multiple clients dễ dàng, scale tốt với metadata server của GCP.
📋 Giải thích tất cả các phương án
Dưới đây là phân tích từng lựa chọn một cách chi tiết. Tôi giữ nguyên văn bản gốc tiếng Anh của phương án, chỉ giải thích đúng/sai bằng tiếng Việt với emoji nổi bật.
-
❌ Phương án SAI: Reserve a static external IP address and assign it to an HTTP(S) load balancing service's forwarding rule. Clients should use this IP address to connect to the service.
Giải thích: Sai vì sử dụng external static IP và HTTP(S) Load Balancer là không cần thiết cho traffic nội bộ VPC. External IP lộ ra public internet (dù có thể restrict), tốn kém và phức tạp setup forwarding rule. Clients trong cùng VPC nên dùng internal IP thay vì external. -
❌ Phương án SAI: Reserve a static external IP address and assign it to an HTTP(S) load balancing service's forwarding rule. Then, define an A record in Cloud DNS. Clients should use the name of the A record to connect to the service.
Giải thích: Sai tương tự phương án trên, vẫn dùng external IP + Load Balancer thừa thãi. Thêm Cloud DNS A record pointing external IP càng làm phức tạp và không an toàn cho intra-VPC (DNS public có thể resolve external thay vì internal IP). Không tận dụng internal DNS native. -
✅ Phương án ĐÚNG: Ensure that clients use Compute Engine internal DNS by connecting to the instance name with the url https://[INSTANCE_NAME].[ZONE].c. [PROJECT_ID].internal/.
Giải thích: Đúng hoàn toàn! Internal DNS của Compute Engine resolve tên miền này thành internal IP của VM ngay trong VPC. Clients dùng URL HTTPS này → tự động lấy IP, kết nối an toàn, không cần config thêm. Hoàn hảo cho multi-clients intra-VPC. -
❌ Phương án SAI: Ensure that clients use Compute Engine internal DNS by connecting to the instance name with the url https://[API_NAME]/[API_VERSION]/.
Giải thích: Sai vì format URL không đúng chuẩn Internal DNS. GCP không hỗ trợ[API_NAME]/[API_VERSION]làm tên miền resolve IP; chỉ format chính thức[INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internalmới hoạt động. Path/[API_NAME]/[API_VERSION]chỉ là endpoint API, không phải DNS name để lấy IP.
🏆 Kết luận nhanh
Sử dụng Internal DNS là giải pháp tối ưu, zero-config thêm cho GCP VPC. Tránh external IP để giữ bảo mật! Nếu scale lớn, có thể cân nhắc Internal Load Balancer sau. 🚀
What should you do?
- A Add a Observability counter metric for path:/api/alpha/.
- B Add a Observability counter metric for endpoint:/api/alpha/*.
- C Export the logs to Cloud Storage and count lines matching /api/alpha.
- D Export the logs to Cloud Pub/Sub and count lines matching /api/alpha.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào Google Cloud Observability (tên gọi chung cho bộ công cụ Cloud Monitoring, Cloud Logging, Trace và Profiler trong Google Cloud Platform - GCP). Ứng dụng của bạn đang ghi log (logging) vào Observability, và mục tiêu là đếm số lượng tất cả các requests đến các endpoint khớp với pattern /api/alpha/ (bao gồm tất cả các đường dẫn con như /api/alpha/xyz, /api/alpha/123, v.v.).
📌 Bối cảnh kỹ thuật:
- Trong GCP, khi ứng dụng log requests (ví dụ: từ Cloud Run, App Engine, GKE hoặc Compute Engine), bạn có thể sử dụng custom metrics (như counter metric) để theo dõi và đếm hiệu quả hơn là phân tích log thô.
- Yêu cầu cần một cách tự động, hiệu suất cao để lấy count (số đếm) requests matching pattern đường dẫn, thay vì xử lý log thủ công.
- Phiên bản cập nhật mới nhất (đến 2026): Google Cloud Observability hỗ trợ custom metrics với labels (nhãn) để filter và aggregate dữ liệu theo prefix hoặc pattern đường dẫn (path), sử dụng OpenTelemetry hoặc Cloud Monitoring API để instrument code (thêm metric vào ứng dụng).
✅ Đáp án đúng
Add a Observability counter metric for path:/api/alpha/.
Lý do lựa chọn 🛠️:
- Đây là cách tối ưu và được khuyến nghị trong GCP Observability. Bạn tạo một counter metric (đồng hồ đếm tăng dần) với label "path" có giá trị prefix /api/alpha/. Mỗi khi request khớp pattern này, ứng dụng sẽ increment (tăng) metric này.
- Hỗ trợ wildcard/pattern matching qua label prefix (không cần wildcard ký tự "*"), cho phép đếm aggregate tất cả requests con một cách tự động qua Cloud Monitoring charts/queries.
- Hiệu suất cao: Không cần scan log lớn, metric được lưu trữ sẵn và query real-time (latency thấp <1s).
- Implement dễ dàng: Sử dụng OpenTelemetry SDK hoặc client libraries trong code (Node.js, Python, Java, v.v.) để emit metric với label path.
📋 Giải thích tất cả các phương án
-
✅ Add a Observability counter metric for path:/api/alpha/.
Đúng vì lý do nêu trên. Đây là phương pháp chuẩn, sử dụng labels trong custom metrics để filter prefix path, hỗ trợ aggregate count chính xác cho tất cả endpoints con (/api/alpha/*). Không cần xử lý log thủ công, phù hợp với best practices GCP Observability (từ 2023+ với OpenTelemetry native support). -
❌ Add a Observability counter metric for endpoint:/api/alpha/*.
Sai vì GCP Observability không hỗ trợ wildcard "*" trực tiếp trong label metric (như endpoint:/api/alpha/*). Labels phải là giá trị string chính xác hoặc prefix; wildcard chỉ dùng trong query/filter Logs Explorer hoặc MQL (Monitoring Query Language) sau khi metric đã được emit. Sử dụng "endpoint" thay vì "path" cũng không chuẩn (path là label phổ biến cho HTTP routes). -
❌ Export the logs to Cloud Storage and count lines matching /api/alpha.
Sai vì phương pháp này kém hiệu suất và không real-time. Export log sang Cloud Storage (qua Log Router sinks) chỉ phù hợp lưu trữ dài hạn, không phải đếm real-time. Bạn phải dùng BigQuery hoặc script để parse/count lines (chậm, tốn chi phí scan GB log), không tận dụng metric engine của Observability. Không scale cho production traffic cao. -
❌ Export the logs to Cloud Pub/Sub and count lines matching /api/alpha.
Sai tương tự trên: Pub/Sub dùng cho streaming log (real-time export), nhưng vẫn cần Dataflow/Cloud Functions để parse/count (phức tạp, latency cao ~giây-phút). Không phải cách native để đếm requests; tốn kém và không integrate trực tiếp với Monitoring dashboards.
📘 Tài liệu tham khảo (cập nhật mới nhất GCP 2026)
- Cloud Monitoring Custom Metrics 🧰: Hướng dẫn tạo counter metric với labels cho path.
- OpenTelemetry in Google Cloud 📊: Instrument apps để emit metrics tự động cho HTTP paths.
- Log-based Metrics ⚠️: Lý do tránh log export (chỉ dùng nếu không instrument được code).
- Best Practices: Observability Best Practices (khuyến nghị metrics > log parsing cho counts).
Hy vọng phân tích này giúp bạn ôn thi hiệu quả! 🚀 Nếu cần code sample, hỏi thêm nhé!
Which approach should you take?
- A Deploy the application to Compute Engine and turn on autoscaling.
- B Replace the application's features with appropriate microservices in phases.
- C Refactor the monolithic application with appropriate microservices in a single effort and deploy it.
- D Build a new application with the appropriate microservices separate from the monolith and replace it when it is complete.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi tập trung vào việc chuyển đổi một ứng dụng monolithic (ứng dụng đơn khối lớn) sang mô hình microservices (dịch vụ nhỏ độc lập) một cách hiệu quả và giảm thiểu tác động đến kinh doanh.
- Mục tiêu chính: Không làm gián đoạn hoạt động kinh doanh (minimize business impact), đồng thời thực hiện nhanh chóng (efficiently).
- Đây là tình huống phổ biến trong cloud architecture, đặc biệt trên Google Cloud Platform (GCP), nơi khuyến nghị sử dụng các chiến lược migration dần dần để tránh rủi ro lớn từ "big bang" refactor.
- Kiến thức liên quan: Theo best practices của Google Cloud đến năm 2026 (dựa trên Google Cloud Architecture Framework và Modernization blueprints), việc migrate monolithic app sang microservices nên áp dụng Strangler Fig Pattern (thay thế dần dần các tính năng).
📘 Tài liệu tham khảo:
- Google Cloud - Migrate Monolithic to Microservices (cập nhật 2024-2026).
- Professional Cloud Developer Exam Guide (Google Cloud Skills Boost).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Replace the application's features with appropriate microservices in phases.
Lý do:
🛠️ Phương pháp này áp dụng Strangler Fig Pattern (mẫu cây si bóp nghẹt), thay thế từng tính năng (feature) của monolithic app bằng microservices theo giai đoạn (phases).
- Hiệu quả: Giảm rủi ro, test từng phần nhỏ, deploy nhanh mà không downtime lớn.
- Giảm impact kinh doanh: Giữ nguyên app gốc chạy song song, chỉ switch traffic dần dần (ví dụ: dùng API Gateway như Apigee hoặc Cloud Load Balancing).
- Phù hợp best practices GCP 2026: Hỗ trợ CI/CD với Cloud Build, Kubernetes (GKE) cho microservices, và Feature Flags (nếu dùng Firebase hoặc custom).
✅ Đây là cách an toàn nhất, được khuyến nghị trong các case study GCP như migrate Java monolith sang GKE microservices.
📋 Giải thích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên nội dung gốc bằng tiếng Anh. Mỗi phương án được đánh giá ✅ (đúng) hoặc ❌ (sai), kèm lý do cụ thể dựa trên kiến thức GCP mới nhất.
-
Deploy the application to Compute Engine and turn on autoscaling.
❌ Sai: Phương án này chỉ di chuyển app monolithic lên VM (Compute Engine) và bật autoscaling, không giải quyết vấn đề re-architect sang microservices. Autoscaling chỉ scale theo tải (dùng MIG - Managed Instance Groups), nhưng app vẫn monolithic → không phân tách services, scalability kém ở mức code-level. Không hiệu quả và không minimize business impact vì vẫn giữ cấu trúc cũ. -
Replace the application's features with appropriate microservices in phases.
✅ Đúng: Như đã giải thích ở phần trên. Đây là chiến lược incremental migration lý tưởng, thay thế từng feature (ví dụ: user auth → microservice riêng trên GKE), sử dụng Proxy hoặc Ingress để route traffic dần dần. Hỗ trợ full GCP stack 2026 như Artifact Registry, Cloud Run cho serverless microservices. -
Refactor the monolithic application with appropriate microservices in a single effort and deploy it.
❌ Sai: Refactor toàn bộ một lần (big bang approach) rất rủi ro: Thời gian dài, test khó, dễ downtime toàn bộ app → tác động lớn đến kinh doanh. GCP không khuyến nghị vì vi phạm nguyên tắc "strive for loose coupling" trong microservices; thường fail do complexity cao, đặc biệt với legacy code. -
Build a new application with the appropriate microservices separate from the monolith and replace it when it is complete.
❌ Sai: Xây app microservices mới song song hoàn toàn rồi replace (parallel run hoặc "lift-and-shift new") tốn kém thời gian/chi phí (dual ops), rủi ro switch lớn (cutover risk). Không efficient, không minimize impact vì phải maintain 2 hệ thống lâu dài → contradict yêu cầu "efficiently". GCP ưu tiên phased approach hơn "rewrite from scratch".
🧩 Kết luận: Chọn phased replacement để an toàn, nhanh, ít rủi ro – phù hợp certification Professional Cloud Developer! Nếu cần ví dụ code hoặc diagram, hỏi thêm nhé! 🚀
Which storage option should you choose?
- A Cloud SQL
- B Cloud Storage
- C Cloud Spanner
- D Cloud Datastore/Firestore
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả một ứng dụng hiện tại đang lưu trữ thông tin trạng thái người dùng (user state information) trong một cơ sở dữ liệu MySQL duy nhất (single MySQL database). Những thông tin này rất đặc thù cho từng người dùng (user-specific) và phụ thuộc mạnh mẽ vào thời gian sử dụng ứng dụng của họ. Vấn đề lớn là cơ sở dữ liệu MySQL đang gây khó khăn trong việc duy trì và mở rộng schema (enhance the schema) để phù hợp với nhiều loại người dùng khác nhau (various users).
📌 Yêu cầu chính: Chọn lựa chọn lưu trữ (storage option) phù hợp để giải quyết vấn đề này. Đây là tình huống điển hình cần một giải pháp NoSQL linh hoạt, hỗ trợ schema tự do (schemaless), dễ mở rộng theo dữ liệu người dùng đa dạng và không bị ràng buộc bởi cấu trúc bảng cố định như MySQL (một relational database). Dựa trên kiến thức Google Cloud Platform (GCP) cập nhật đến năm 2026, câu hỏi tập trung vào việc chuyển từ relational DB sang giải pháp phù hợp hơn cho dữ liệu không đồng nhất.
✅ Đáp án đúng: Cloud Datastore/Firestore
Lý do lựa chọn:
- Cloud Datastore (nay được nâng cấp và tích hợp mạnh mẽ vào Firestore in Native mode) là dịch vụ NoSQL document-oriented database của GCP, schemaless (không cần schema cố định), lý tưởng cho dữ liệu user-specific và thay đổi theo thời gian sử dụng.
- Nó hỗ trợ tự động scale, strong consistency cho single entity và eventual consistency cho queries, dễ dàng lưu trữ dữ liệu phức tạp, hierarchical (như JSON documents) mà không cần migrate schema phức tạp từ MySQL.
- Trong phiên bản mới nhất (2026), Firestore cung cấp real-time sync, offline support và multi-region replication, hoàn hảo cho ứng dụng user-centric với dữ liệu động. Điều này giải quyết trực tiếp vấn đề "maintain and enhance schema for various users" vì bạn có thể thêm fields mới mà không ảnh hưởng toàn bộ DB.
🛠️ Tài liệu tham khảo:
- Firestore Documentation - GCP (cập nhật 2025-2026: Native mode fully replaces Datastore).
- Choose a database: Datastore vs. Cloud SQL.
📋 Giải thích tất cả các phương án (đúng và sai)
-
❌ Cloud SQL
Sai vì: Cloud SQL là dịch vụ managed relational database (hỗ trợ MySQL, PostgreSQL,...), vẫn yêu cầu schema rigid (cố định) với tables, relations và migrations phức tạp – giống hệt vấn đề hiện tại của MySQL single DB. Không giải quyết được việc "enhance schema for various users" vì dữ liệu user-specific đa dạng sẽ cần ALTER TABLE thường xuyên, dẫn đến downtime và khó scale. Phù hợp hơn cho dữ liệu structured, ACID transactions cao nhưng không linh hoạt cho NoSQL-like data. -
❌ Cloud Storage
Sai vì: Cloud Storage là object storage (như S3), dùng để lưu files lớn, blobs không cấu trúc (ảnh, video, backups). Không hỗ trợ querying, indexing hay structured user state như relational/NoSQL DB. Dữ liệu user-specific cần transactions và lookups nhanh sẽ không khả thi, chỉ phù hợp static assets chứ không phải state management động. -
❌ Cloud Spanner
Sai vì: Cloud Spanner là globally distributed relational database với SQL standard, hỗ trợ horizontal scale và strong consistency toàn cầu. Tuy mạnh mẽ, nó vẫn yêu cầu schema predefined (tables, foreign keys), giống MySQL nhưng scale lớn hơn – không giải quyết vấn đề schema maintenance cho dữ liệu user-specific varying. Chi phí cao và phức tạp hơn cho use case này; phù hợp enterprise OLTP với relations chặt chẽ. -
✅ Cloud Datastore/Firestore
Đúng vì: Như giải thích ở trên, đây là lựa chọn tối ưu với schemaless design, hỗ trợ polyglot persistence cho dữ liệu user động, dễ migrate từ MySQL qua ETL tools như Dataflow. Hiệu suất cao cho reads/writes user-specific mà không lock schema.
🔍 Kết luận: Chuyển sang Firestore giúp ứng dụng scale effortlessly với dữ liệu người dùng đa dạng, giảm chi phí vận hành schema. Nếu implement, dùng Firestore SDK cho real-time updates! 📘
Which architecture should you use?
- A App Engine backed by Cloud Storage
- B Compute Engine backed by Persistent Disk
- C Transfer Appliance backed by Cloud Filestore
- D Cloud Content Delivery Network (CDN) backed by Cloud Storage
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi tập trung vào việc xây dựng một API mới để phục vụ hình ảnh (images), với hai mục tiêu chính:
✅ Giảm thiểu chi phí lưu trữ (minimize the cost of storing): Cần sử dụng dịch vụ lưu trữ rẻ tiền, có khả năng scale lớn cho dữ liệu tĩnh như images.
✅ Giảm độ trễ phục vụ (reduce the latency of serving images): Phải phân phối nội dung nhanh chóng đến người dùng toàn cầu, bằng cách cache nội dung gần edge location.
🛠️ Bối cảnh: Đây là vấn đề điển hình trong Google Cloud Platform (GCP), nơi cần kiến trúc tối ưu cho static content delivery như images trong API. Kiến thức cập nhật đến 2026 (GCP phiên bản mới nhất): Cloud Storage là lựa chọn lưu trữ rẻ nhất cho objects (khoảng 0.02 USD/GB/tháng cho Standard class), kết hợp CDN để giảm latency xuống dưới 100ms nhờ edge caching.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Cloud Content Delivery Network (CDN) backed by Cloud Storage
Lý do:
- 🗂️ Cloud Storage là backend lưu trữ rẻ nhất cho images (multi-regional cho high availability, low cost).
- 🌐 Cloud CDN (nay tích hợp chặt chẽ với Cloud Load Balancing) cache images tại hơn 200 edge locations toàn cầu, giảm latency bằng cách phục vụ từ PoP gần user nhất, đồng thời giảm bandwidth cost lên đến 80%.
- 📈 Hoàn hảo cho API serving static images: Scale tự động, không cần quản lý server, tuân thủ best practices GCP 2026 (tích hợp Http(s)LoadBalancer với CDN origin).
- 💰 Tiết kiệm chi phí: Storage ~0.02 USD/GB, egress qua CDN rẻ hơn direct access.
📋 Giải thích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn (giữ nguyên văn bản gốc tiếng Anh). Tôi đánh dấu ✅ Đúng hoặc ❌ Sai dựa trên yêu cầu câu hỏi, với lý do cụ thể bằng tiếng Việt:
-
❌ [SAI] App Engine backed by Cloud Storage
App Engine phù hợp cho dynamic apps, nhưng không tối ưu cho serving images tĩnh: Latency cao vì phải qua App Engine runtime (cold starts), chi phí cao hơn (instance hours ~0.05 USD/giờ), không cache edge tốt. Cloud Storage backend tốt nhưng App Engine làm bottleneck, không giảm latency toàn cầu. -
❌ [SAI] Compute Engine backed by Persistent Disk
Compute Engine (VM) + Persistent Disk (block storage) đắt đỏ và chậm: PD chi phí ~0.10 USD/GB/tháng (cao gấp 5x Cloud Storage), không scale tự động cho global traffic, latency cao do phải fetch từ single region/zone. Không dành cho static images – chỉ cho compute-intensive workloads. -
❌ [SAI] Transfer Appliance backed by Cloud Filestore
Transfer Appliance (thiết bị vật lý offline transfer) + Cloud Filestore (NFS file system) hoàn toàn không phù hợp: Appliance chỉ dùng để import data lớn ban đầu (không serve runtime), Filestore đắt (~0.15 USD/GB/tháng), latency cao (regional chỉ), không hỗ trợ CDN/cache. Đây là combo cho data migration, không phải serving API images. -
✅ [ĐÚNG] Cloud Content Delivery Network (CDN) backed by Cloud Storage
Như đã giải thích ở trên: Tối ưu nhất cho low cost storage + low latency serving. Cache thông minh (TTL, cache invalidation), tích hợp IAM/Signed URLs cho API security.
📘 Tài liệu tham khảo (cập nhật 2026)
- GCP Docs: Cloud CDN Overview – Best practices cho content delivery.
- GCP Pricing: Cloud Storage vs Others – So sánh chi phí storage.
- GCP Architecture: Serving Static Websites – Case study tương tự cho images/API.
- GCP Blog 2025: CDN Enhancements – Cập nhật edge locations và latency optimizations.
🛡️ Lưu ý: Kiến trúc này tuân thủ GCP Well-Architected Framework (Reliability & Cost Optimization pillars). Nếu implement API, thêm Cloud Armor cho security!
What should you do?
- A Use Container Registry to create a registry in each development team's project. Configure the Cloud Build build to push the Docker image to the project's registry. Grant the operations team access to each development team's registry.
- B Create a separate project for the operations team that has Container Registry configured. Assign appropriate permissions to the Cloud Build service account in each developer team's project to allow access to the operation team's registry.
- C Create a separate project for the operations team that has Container Registry configured. Create a Service Account for each development team and assign the appropriate permissions to allow it access to the operations team's registry. Store the service account key file in the source code repository and use it to authenticate against the operations team's registry.
- D Create a separate project for the operations team that has the open source Docker Registry deployed on a Compute Engine virtual machine instance. Create a username and password for each development team. Store the username and password in the source code repository and use it to authenticate against the operations team's Docker registry.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi này thuộc chủ đề Google Cloud Platform (GCP), cụ thể liên quan đến Cloud Build (dịch vụ CI/CD để build và deploy ứng dụng) và Container Registry (dịch vụ lưu trữ Docker images). Mặc dù người dùng đề cập "liên quan đến AWS", nhưng nội dung rõ ràng là GCP (không phải AWS ECR hay CodeBuild).
Tình huống vấn đề:
- Các đội ngũ phát triển (development teams) muốn sử dụng Cloud Build trong dự án của họ để build và push Docker images vào Container Registry.
- Đội ngũ vận hành (operations team) yêu cầu tất cả Docker images phải được publish vào một registry Docker tập trung (centralized), được quản lý an toàn (securely managed) bởi chính đội ops.
- Mục tiêu: Đảm bảo tính tập trung, bảo mật, tránh phân tán registry ở từng project dev, đồng thời cho phép Cloud Build push images mà không cần lưu trữ credentials nhạy cảm.
Yêu cầu giải pháp: Cần một cách an toàn, tuân thủ nguyên tắc least privilege, tận dụng service account của GCP để authenticate, và hỗ trợ multi-project access. (Lưu ý: Container Registry đang được thay thế dần bởi Artifact Registry từ năm 2021-2025, nhưng câu hỏi sử dụng thuật ngữ cũ nên ta phân tích theo ngữ cảnh này. Kiến thức cập nhật 2026: Artifact Registry là lựa chọn khuyến nghị mới nhất).
📘 Tài liệu tham khảo:
- Cloud Build: Configure access to other GCP projects
- Container Registry multi-project access
- Artifact Registry (thay thế): Cross-project permissions
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Create a separate project for the operations team that has Container Registry configured. Assign appropriate permissions to the Cloud Build service account in each developer team's project to allow access to the operation team's registry.
Lý do 🛠️:
- Tạo project riêng cho ops team với Container Registry → Đảm bảo centralized và securely managed bởi ops.
- Sử dụng Cloud Build service account (tự động trong mỗi project dev, như
PROJECT_NUMBER@cloudbuild.gserviceaccount.com) và assign IAM permissions (ví dụ:roles/artifactregistry.writertrên registry của ops project) → Cho phép push images cross-project mà không cần lưu key file hay credentials (an toàn cao, tuân thủ best practices GCP). - Hỗ trợ scale cho nhiều dev teams, ops chỉ cần quản lý một nơi. Đây là cách chuẩn và được khuyến nghị trong tài liệu GCP.
❌ Phân tích tất cả các phương án (đúng/sai)
-
[SAI] Use Container Registry to create a registry in each development team's project. Configure the Cloud Build build to push the Docker image to the project's registry. Grant the operations team access to each development team's registry.
Giải thích sai ❌: Phương án này tạo registry riêng ở từng project dev → Không centralized, ops phải quản lý nhiều registry phân tán, tăng rủi ro bảo mật và phức tạp. Cloud Build chỉ push vào registry nội bộ, không đáp ứng yêu cầu "centralized registry managed by ops". -
[ĐÚNG] Create a separate project for the operations team that has Container Registry configured. Assign appropriate permissions to the Cloud Build service account in each developer team's project to allow access to the operation team's registry.
Giải thích đúng ✅: Như đã phân tích ở trên. An toàn (dùng service account native), tập trung (một project ops), dễ scale. Permissions có thể set qua IAM:gcloud projects add-iam-policy-binding OPS_PROJECT --member="serviceAccount:DEV_PROJECT_NUMBER@cloudbuild.gserviceaccount.com" --role="roles/artifactregistry.writer". -
[SAI] Create a separate project for the operations team that has Container Registry configured. Create a Service Account for each development team and assign the appropriate permissions to allow it access to the operations team's registry. Store the service account key file in the source code repository and use it to authenticate against the operations team's registry.
Giải thích sai ❌: Tuy centralized tốt, nhưng tạo SA riêng cho mỗi dev team và lưu key file vào source repo → Rủi ro bảo mật cực cao (key dễ bị leak qua Git, vi phạm nguyên tắc "never commit secrets"). GCP khuyến cáo KHÔNG lưu key file; dùng workload identity hoặc service account mặc định thay thế. -
[SAI] Create a separate project for the operations team that has the open source Docker Registry deployed on a Compute Engine virtual machine instance. Create a username and password for each development team. Store the username and password in the source code repository and use it to authenticate against the operations team's Docker registry.
Giải thích sai ❌: Sử dụng open source Docker Registry trên VM → Không managed service (phải tự scale, backup, secure), tốn kém và phức tạp hơn Container Registry native. Lưu username/password vào repo → Siêu không an toàn (dễ expose). Không tận dụng GCP services, vi phạm best practices (nên dùng Artifact Registry thay thế từ 2026).
Kết luận 🏆: Phương án đúng đảm bảo bảo mật cao nhất với IAM cross-project, phù hợp cho enterprise. Nếu migrate hiện đại, thay Container Registry bằng Artifact Registry để có features tốt hơn (vulnerability scanning tích hợp)!
Which GKE object should you use?
- A Deployment
- B StatefulSet
- C ReplicaSet
- D ReplicaController
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào việc triển khai ứng dụng trên Google Kubernetes Engine (GKE) – một dịch vụ quản lý Kubernetes của Google Cloud. Ứng dụng này có khả năng mở rộng ngang (horizontal scaling), nghĩa là có thể tăng/giảm số lượng pod một cách linh hoạt. Tuy nhiên, mỗi instance (pod) của ứng dụng cần có:
- Stable network identity: Địa chỉ mạng ổn định, không thay đổi khi pod được tạo lại (ví dụ: tên pod dự đoán được, có thể sử dụng headless service để truy cập trực tiếp).
- Persistent disk riêng: Ổ đĩa lưu trữ bền vững (Persistent Volume - PV) gắn riêng cho từng pod, dữ liệu không mất khi pod restart hoặc scale.
🛠️ Mục tiêu: Chọn GKE object (Kubernetes workload resource) phù hợp nhất để quản lý các pod stateful (có trạng thái) như vậy. Đây là kiến thức cốt lõi trong Kubernetes (áp dụng phiên bản mới nhất Kubernetes 1.29+ trên GKE Autopilot/Standard đến năm 2026), nơi StatefulSet được thiết kế dành riêng cho workload stateful.
✅ Đáp án đúng: StatefulSet
Lý do lựa chọn:
- StatefulSet đảm bảo stable network identity qua tên pod có thứ tự và dự đoán được (ví dụ: app-0, app-1), kết hợp với Headless Service để mỗi pod có DNS ổn định (app-0.app-service.default.svc.cluster.local).
- Mỗi pod có PersistentVolumeClaim (PVC) riêng biệt, gắn PV độc lập, dữ liệu bền vững ngay cả khi scale up/down hoặc pod thay thế.
- Hoàn hảo cho app scale ngang nhưng cần thứ tự khởi tạo (ordinal scheduling) và identity ổn định, như database (ZooKeeper, MySQL) hoặc app có storage riêng.
- 📘 Nguồn tham khảo: Kubernetes Docs - StatefulSets (cập nhật 2024-2026); GKE Docs - Running Stateful Applications.
📋 Giải thích tất cả các phương án
-
Deployment ❌
Sai vì: Deployment dành cho ứng dụng stateless (không trạng thái), pod có thể thay thế ngẫu nhiên mà không cần identity ổn định. Khi scale hoặc restart, pod nhận tên mới (random hash), không có network identity cố định. Persistent disk không được quản lý riêng từng pod (cần Volume chung hoặc external config phức tạp). Không phù hợp với yêu cầu "stable network identity và persistent disk riêng". -
StatefulSet ✅
Đúng vì: Như giải thích ở trên, cung cấp đầy đủ stable pod identity (tên + DNS) và PVC riêng từng pod với ordinal scaling. Lý tưởng cho GKE workload stateful, hỗ trợ CSI driver cho persistent disk (như PD-Zonal trên GKE). -
ReplicaSet ❌
Sai vì: ReplicaSet là low-level controller chỉ duy trì số lượng pod replicas, thường dùng nội bộ bởi Deployment. Không hỗ trợ stable identity (pod tên ngẫu nhiên), không quản lý storage riêng, và thiếu headless service. Đã lỗi thời so với Deployment/StatefulSet trong Kubernetes hiện đại (1.29+). -
ReplicaController ❌
Sai vì: Không tồn tại trong Kubernetes/GKE (có thể nhầm với ReplicationController – controller cũ đã deprecated từ Kubernetes 1.0). Không hỗ trợ stable identity hay persistent disk riêng, chỉ scale pod stateless cơ bản. Không được khuyến nghị sử dụng từ năm 2016.
🧠 Lưu ý bổ sung: Trong GKE (phiên bản 2026), ưu tiên StatefulSet cho stateful apps, kết hợp Persistent Disk (PD) hoặc Filestore. Nếu stateless, dùng Deployment. Test thực tế qua kubectl apply -f statefulset.yaml để verify! 🚀