Ngân hàng đề — Microsoft Azure Developer

Tìm thấy 409 câu.

Câu 81 Azure App Service
You have an App Service with several instances. You notice the setting ARR Affinity is enabled on the General Settings page. What does ARR Affinity do when enabled?
  1. A Optional command-line arguments for the script processor.
  2. B Ensure that the client is always routed to the same instance for the life of the session.
  3. C Keeps the app loaded even when there's no traffic.
  4. D Require client certificates in mutual authentication.
Xem giải thích

Đáp án

B — Bảo đảm client LUÔN được định tuyến tới CÙNG một instance trong suốt phiên làm việc.

Vì sao đúng

⚠ ARR Affinity dùng cookie để ghim phiên vào một instance:

⚠ Client gửi request đầu tiên
        ↓
⚠ App Service gán cookie ARRAffinity
        ↓
⚠ Mọi request sau đó
   ⚠ đi tới ĐÚNG instance đó
Vì sao có tính năng này Lý do
⚠ Ứng dụng cũ lưu session TRONG bộ nhớ instance
⚠ Chuyển sang instance khác là MẤT session
⚠ ARR Affinity giữ người dùng ở đúng chỗ

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

  • C (giữ app luôn được tải kể cả không có lưu lượng) — ⚠ đó là ALWAYS ON, thiết lập nằm ngay cạnh.

  • D (yêu cầu chứng chỉ client) — ⚠ đó là Client Certificates.

  • A (tham số dòng lệnh cho script processor) — ⚠ thiết lập khác trong cùng trang.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ ba phương án nhiễu ⚠ đều là thiết lập THẬT ở cùng trang General Settings — ⚠ đề kiểm tra bạn có phân biệt được chúng không.

Thiết lập Việc
⚠ ARR Affinity ⚠ giữ phiên ở cùng instance
⚠ Always On ⚠ không dỡ tải ứng dụng
⚠ Client Certificates ⚠ xác thực hai chiều
⚠ Platform settings ⚠ 32/64 bit, phiên bản
⚠ Cùng với #21482 ⚠ hai câu trong lô hỏi về hai thiết lập cạnh nhau

⚠ Vì sao nên TẮT ARR Affinity nếu có thể: | Lý do | Nội dung | |---|---| | ⚠ Tải phân bổ KHÔNG đều giữa các instance | | | ⚠ Instance bị khởi động lại là mất phiên | | | ⚠ Cản trở việc co giãn hiệu quả | | | ⚠ Điều kiện để tắt | ⚠ ứng dụng phải STATELESS, session lưu ở Redis hoặc CSDL | | ⚠ Đây là | ⚠ điều kiện tiên quyết để scale out hiệu quả — xem #21479 |

Từ khoá nhận diện:

"giữ client ở cùng instance" → ⚠ ARR Affinity "session affinity, sticky session" → ⚠ cùng khái niệm "giữ app luôn chạy" → ⚠ Always On "cookie ARRAffinity" → ⚠ dấu hiệu nhận biết trong trình duyệt

⚠ Khái niệm tương đương ở dịch vụ khác Dịch vụ
⚠ Application Gateway ⚠ cookie-based session affinity
⚠ Load Balancer ⚠ session persistence theo IP
⚠ Cùng vấn đề ⚠ cùng cách giải quyết đúng: lưu trạng thái ra ngoài
⚠ Đối chiếu ⚠ #19040 ở lô trước cũng nhắc cookie affinity
⚠ Lưu session ở đâu cho đúng Nơi
⚠ Azure Cache for Redis ⚠ phổ biến nhất
⚠ Azure SQL hoặc Cosmos DB
⚠ Cookie đã ký ở phía client ⚠ với dữ liệu nhỏ
⚠ Sau khi làm vậy ⚠ tắt được ARR Affinity, tải phân bổ đều

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ứng dụng có lưu session trong bộ nhớ không | | | ARR Affinity có đang bật không và có cần thiết không | | | Tải có phân bổ đều giữa các instance không | |

Và dấu hiệu cho thấy ứng dụng chưa sẵn sàng cho việc mở rộng ngang: nó vẫn cần ARR Affinity để hoạt động đúng. Chuyển session ra kho ngoài là bước đầu tiên để tắt được nó.

Câu 82 Cosmos DB
What is the concept of strong consistency with Cosmos DB?
  1. A Strong consistency means that, across the world, two applications might read a data item from a Cosmos DB container at the same time and get different results.
  2. B With strong consistency, you are committing to use Cosmos DB in only one way in the future and forgoing other data storage models and APIs.
  3. C Strong consistency means that, if two data writers were to try to update the data in a Cosmos DB container, the one who updated it last would win.
  4. D Strong consistency is that, across the world, readers are guaranteed to always get the most recent committed version of an item.
Xem giải thích

Đáp án

D — Nhất quán mạnh nghĩa là trên toàn thế giới, người đọc được BẢO ĐẢM luôn nhận được phiên bản đã commit MỚI NHẤT của một mục dữ liệu.

Vì sao đúng

⚠ Strong consistency là mức bảo đảm cao nhất:

⚠ Ghi ở vùng A
        ↓ ⚠ chưa xác nhận cho tới khi
⚠ Mọi bản sao đã đồng bộ
        ↓
⚠ Đọc ở BẤT KỲ vùng nào
   ⚠ đều thấy giá trị mới nhất
        ↓
⚠ Không bao giờ đọc được dữ liệu cũ
Cái giá Nội dung
⚠ Độ trễ GHI cao nhất ⚠ phải chờ đồng bộ
⚠ Tốn RU gấp đôi khi ĐỌC
⚠ KHÔNG dùng được với ghi đa vùng
⚠ Đánh đổi ⚠ hệ quả trực tiếp của định lý CAP

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

  • A (hai ứng dụng có thể đọc cùng lúc và thấy khác nhau) — ⚠ mô tả nhất quán YẾU, ngược với strong.

  • C (người ghi sau thắng) — ⚠ là chính sách giải quyết XUNG ĐỘT, không phải định nghĩa nhất quán.

  • B (cam kết chỉ dùng Cosmos DB một cách duy nhất) — ⚠ hoàn toàn không liên quan.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ là cặp với #21472 trong cùng lô.

Câu Hỏi gì Khoá
⚠ #21472 ⚠ ép nhất quán mạnh cho MỘT truy vấn ⚠ QueryRequestOptions.ConsistencyLevel
⚠ #21485 (câu này) ⚠ nhất quán mạnh NGHĨA LÀ gì ⚠ luôn đọc được bản mới nhất
⚠ Bổ sung nhau ⚠ một hỏi cách làm, một hỏi khái niệm

⚠ Năm mức nhất quán — bảng chốt: | Mức | Bảo đảm | |---|---| | ⚠ Strong | ⚠ luôn đọc bản mới nhất — mọi nơi | | ⚠ Bounded staleness | ⚠ chậm tối đa N phiên bản hoặc T giây | | ⚠ Session | ⚠ đọc được thứ CHÍNH BẠN vừa ghi — mặc định | | ⚠ Consistent prefix | ⚠ không đọc lộn thứ tự ghi | | ⚠ Eventual | ⚠ cuối cùng sẽ hội tụ, không hứa gì thêm |

Từ khoá nhận diện:

"luôn mới nhất, mọi nơi" → ⚠ Strong "chậm tối đa N giây" → ⚠ Bounded staleness "đọc được thứ mình vừa ghi" → ⚠ Session "cuối cùng sẽ giống nhau" → ⚠ Eventual

⚠ Định lý CAP — nền lý thuyết Nội dung
⚠ Consistency, Availability, Partition tolerance
⚠ Khi mạng chia cắt, chỉ giữ được HAI trong ba
⚠ Hệ phân tán buộc phải chịu chia cắt
⚠ Nên phải chọn ⚠ nhất quán hay sẵn sàng
⚠ Cosmos DB ⚠ cho bạn chọn qua năm mức, thay vì ép một lựa chọn
⚠ Chọn mức nào trong thực tế Chọn
⚠ Đa số ứng dụng web ⚠ Session là đủ và hợp lý nhất
⚠ Giao dịch tài chính, tồn kho ⚠ Strong cho truy vấn quan trọng
⚠ Đếm lượt xem, log ⚠ Eventual — rẻ và nhanh
⚠ Nguyên tắc ⚠ chọn mức mặc định vừa đủ, NÂNG ở chỗ cần

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Mức mặc định của tài khoản là gì | | | Có đang dùng Strong cho mọi thứ không | ⚠ rất tốn RU | | Có ghi đa vùng không | ⚠ thì Strong không dùng được |

Và điều làm Cosmos DB khác biệt so với phần lớn cơ sở dữ liệu phân tán khác: nó không ép bạn chọn một điểm cố định trên trục nhất quán, mà cho năm mức và cho phép nâng lên ở từng truy vấn cụ thể.

Câu 83 ARM templates
Which Azure technology allows you to implement infrastructure as code?
  1. A Azure Automation Accounts
  2. B Visual Studio Enterprise Edition
  3. C GitHub Actions
  4. D ARM Templates
Xem giải thích

Đáp án

D — ARM Templates.

Vì sao đúng

⚠ ARM template là công nghệ hạ tầng dạng mã gốc của Azure: | Đặc điểm | Nội dung | |---|---| | ⚠ Mô tả hạ tầng bằng tệp JSON | | | ⚠ Đưa vào Git, review như mã | | | ⚠ Khai báo, idempotent | | | ⚠ Azure tự lo thứ tự tạo | | | ⚠ Bicep là cú pháp gọn hơn, biên dịch ra ARM | |

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

  • C (GitHub Actions) — ⚠ là công cụ CI/CD: ⚠ nó ⚠ CHẠY template, ⚠ nhưng bản thân không mô tả hạ tầng.

  • A (Azure Automation Accounts) — ⚠ chạy runbook để tự động hoá tác vụ vận hành, không phải IaC khai báo.

  • B (Visual Studio Enterprise) — ⚠ là IDE.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ đây là câu ⚠ thứ tư về ARM template qua hai lô.

Câu Hỏi gì Khoá
⚠ #19630 ⚠ định nghĩa bằng JSON, đưa vào Git ⚠ ARM template
⚠ #21439 ⚠ vì sao cú pháp khai báo tốt hơn ⚠ không phải lo thứ tự
⚠ #21473 ⚠ template lồng nhau ⚠ Microsoft.Resources/deployments
⚠ #21486 (câu này) ⚠ công nghệ nào là IaC ⚠ ARM Templates
⚠ Bốn câu ⚠ vẽ trọn chủ đề hạ tầng dạng mã

⚠ Các lựa chọn IaC cho Azure: | Công cụ | Đặc điểm | |---|---| | ⚠ ARM template (JSON) | ⚠ gốc, rườm rà | | ⚠ Bicep | ⚠ gọn hơn nhiều, khuyến nghị cho Azure | | ⚠ Terraform | ⚠ đa đám mây, cần state file | | ⚠ Pulumi | ⚠ viết bằng ngôn ngữ lập trình thật | | ⚠ CI/CD chạy chúng | ⚠ GitHub Actions, Azure DevOps |

Từ khoá nhận diện:

"hạ tầng dạng mã trên Azure" → ⚠ ARM template hoặc Bicep "đa đám mây" → ⚠ Terraform "chạy pipeline" → ⚠ GitHub Actions, Azure DevOps "runbook tự động hoá vận hành" → ⚠ Automation Account

⚠ Bicep so với ARM JSON So sánh
⚠ Ngắn hơn khoảng một nửa
⚠ Có kiểm tra kiểu và gợi ý trong VS Code
⚠ Module gọn hơn nhiều template lồng
⚠ Biên dịch ra chính ARM JSON
⚠ Không cần ⚠ state file như Terraform — Azure tự lưu trạng thái
⚠ Automation Account — dùng cho việc gì Việc
⚠ Chạy runbook PowerShell theo lịch
⚠ Tắt VM ngoài giờ làm việc
⚠ Quản lý cập nhật, cấu hình trạng thái mong muốn
⚠ Khác IaC ⚠ nó tự động hoá VẬN HÀNH, không mô tả hạ tầng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hạ tầng có được mô tả bằng mã không | | | Có nên chuyển từ ARM JSON sang Bicep không | | | Dev và prod có dùng chung template không | |

Và phân biệt cần rõ khi trả lời nhóm câu hỏi này: template là thứ MÔ TẢ hạ tầng, còn pipeline là thứ CHẠY nó. Cả hai đều cần, nhưng chúng trả lời hai câu hỏi khác nhau.

Câu 84 Non-relational data management

You are developing an application that stores user-uploaded documents in Azure Blob Storage. You want to implement a policy that automatically deletes blobs that have not been modified for over 30 days. Which feature of Azure Blob Storage would you use to achieve this requirement?

  1. A

    Azure Blob Soft Delete

  2. B

    Azure Blob Snapshots

  3. C

    Azure Blob Indexing

  4. D

    Azure Blob Lifecycle Management

Xem giải thích

Đáp án

D — Azure Blob Lifecycle Management

Vì sao đúng

Lifecycle management cho khai luật tự động theo tuổi của blob hoặc thời điểm truy cập cuối: chuyển xuống tầng lạnh hơn, đưa vào Archive, hoặc xoá hẳn. Luật chạy hằng ngày ở phía dịch vụ, nên không cần ai nhớ làm và không cần viết mã nào.

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

  • A. Soft Delete — làm điều ngược lại: giữ blob đã xoá thêm một thời gian để khôi phục. Nó là lưới an toàn, không phải cơ chế dọn dẹp.
  • B. Snapshot — chụp bản tại một thời điểm; càng dùng thì càng tốn thêm dung lượng.
  • C. Blob Indexing — gắn thẻ để tìm kiếm blob theo thuộc tính; nó giúp tìm chứ không xoá.
Câu 85 Non-relational data management
Generally speaking, regardless of which region, which is the lowest cost redundancy option for Blob Storage?
  1. A LRS
  2. B GZRS
  3. C GRS
  4. D ZRS
Xem giải thích

Đáp án

A — LRS (Locally Redundant Storage).

Vì sao đúng

⚠ LRS là mức nhân bản đơn giản nhất nên rẻ nhất: | Mức | Bản sao | Phạm vi | Giá | |---|---|---|---| | ⚠ LRS | ⚠ 3 | ⚠ một trung tâm dữ liệu | ⚠ RẺ NHẤT | | ⚠ ZRS | ⚠ 3 | ⚠ ba zone | ⚠ cao hơn | | ⚠ GRS | ⚠ 6 | ⚠ hai vùng | ⚠ cao hơn nữa | | ⚠ GZRS | ⚠ 6 | ⚠ zone + vùng | ⚠ cao nhất |

⚠ Càng nhiều bản sao, càng xa nhau
        ↓
⚠ Càng chịu được sự cố lớn
        ↓
⚠ Càng đắt

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

  • D (ZRS), C (GRS), B (GZRS) — ⚠ đều đắt hơn LRS.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ TRÙNG với #19596 ở lô 166.

Điểm #19596 #21488 (câu này)
⚠ Chứng chỉ ⚠ Data Fundamentals ⚠ Azure Developer
⚠ Vị trí đáp án ⚠ A ⚠ A — TÌNH CỜ giống
⚠ Thứ tự ba phương án còn lại ⚠ ZRS, GRS, GZRS ⚠ GZRS, GRS, ZRS
⚠ Lưu ý ⚠ lần này đáp án tình cờ cùng chữ cái, nhưng ĐỪNG dựa vào điều đó
⚠ Đây là câu trùng thứ NĂM ⚠ và cũng là cuối cùng của lô này

⚠ Tổng kết năm câu trùng của lô 168: | Câu | Trùng với | Chữ cái đổi | |---|---|---| | ⚠ #21435 (ZRS 3 bản) | ⚠ #19512 | ⚠ A → C | | ⚠ #21463 (Gremlin) | ⚠ #19602 | ⚠ C → B | | ⚠ #21469 (GRS 6 bản) | ⚠ #19562 | ⚠ D → B | | ⚠ #21475 (một API mỗi account) | ⚠ #19581 | ⚠ A → C | | ⚠ #21488 (LRS rẻ nhất) | ⚠ #19596 | ⚠ A → A | | ⚠ Kết luận | ⚠ bốn trong năm câu ĐỔI chữ cái — không thể học thuộc vị trí |

⚠ Mẹo nhớ bảng nhân bản: | Mẹo | Nội dung | |---|---| | ⚠ Không có chữ G | ⚠ 3 bản, một vùng | | ⚠ Có chữ G | ⚠ 6 bản, hai vùng | | ⚠ Có chữ Z | ⚠ trải qua availability zone | | ⚠ Có RA- | ⚠ đọc được ở vùng phụ |

Từ khoá nhận diện:

"rẻ nhất" → ⚠ LRS "chịu mất một zone" → ⚠ ZRS "chịu mất cả vùng" → ⚠ GRS trở lên "đọc ở vùng phụ" → ⚠ RA-

⚠ Khi nào LRS là đủ Khi nào
⚠ Môi trường dev và test
⚠ Dữ liệu dựng lại được từ nguồn
⚠ Đã có sao lưu độc lập
⚠ Ràng buộc pháp lý buộc dữ liệu ở một nơi

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Môi trường dev có đang dùng mức đắt hơn cần thiết không | | | Dữ liệu có tái tạo được không | | | Đã có soft delete và versioning chưa | |

Và bài học lớn nhất mà năm câu trùng lặp của lô này dạy được: bốn trong năm câu có đáp án ở chữ cái KHÁC so với lần xuất hiện trước. Ghi nhớ nội dung là cách duy nhất, và cũng là cách hiệu quả nhất.

Câu 86 Azure App Service

You are deploying a web application to Azure App Service and want to ensure that the application can roll back to a previous version quickly in case of a deployment failure. Which of the following features should you use to achieve this?

  1. A

    Always On

  2. B

    Deployment Slots

  3. C

    Auto Heal

  4. D

    Application Insights

Xem giải thích

Đáp án

B — Deployment Slots

Vì sao đúng

Deployment slot cho phép triển khai phiên bản mới lên một slot dàn dựng riêng, kiểm thử ở đó, rồi hoán đổi (swap) với slot production. Hoán đổi là thao tác đổi định tuyến nên diễn ra gần như tức thì và không mất kết nối.

Điểm quan trọng nhất với câu hỏi này: quay lui cũng chỉ là hoán đổi ngược lại. Phiên bản cũ vẫn nằm nguyên trong slot kia, nên khôi phục tính bằng giây chứ không phải triển khai lại.

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

  • C. Auto Heal — tự khởi động lại ứng dụng khi gặp điều kiện xấu; nó không đưa về phiên bản cũ.
  • A. Always On — giữ ứng dụng không bị ngủ, giải bài toán khởi động lạnh.
  • D. Application Insights — giúp phát hiện sự cố sau khi phát hành, nhưng không phải cơ chế quay lui.
Câu 87 Azure Functions
How many triggers can an Azure Function have?
  1. A Any number
  2. B 32 maximum
  3. C Exactly one
  4. D 0 or 1
Xem giải thích

Đáp án

C — Đúng MỘT.

Vì sao đúng

⚠ Trigger là thứ KHỞI ĐỘNG hàm, nên bắt buộc phải có đúng một: | Loại binding | Số lượng | |---|---| | ⚠ Trigger | ⚠ ĐÚNG 1 — bắt buộc | | ⚠ Input binding | ⚠ 0 tới nhiều | | ⚠ Output binding | ⚠ 0 tới nhiều |

⚠ Không có trigger
   ⚠ → không có gì gọi hàm
⚠ Hai trigger
   ⚠ → nền tảng không biết dùng cái nào
        ↓
⚠ Đúng một là ràng buộc bắt buộc

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

  • A (bao nhiêu cũng được) và D (0 hoặc 1) — ⚠ là quy tắc của INPUT BINDING, không phải trigger.

  • B (tối đa 32) — ⚠ con số bịa.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ là cặp ĐỐI XỨNG với #21406 ở lô trước.

Câu Hỏi gì Khoá
⚠ #21406 ⚠ bao nhiêu INPUT binding ⚠ bao nhiêu cũng được, kể cả 0
⚠ #21490 (câu này) ⚠ bao nhiêu TRIGGER ⚠ đúng một
⚠ Cặp đối xứng ⚠ dùng chung bộ phương án, hoán đổi khoá
⚠ Cùng với #21470 ⚠ ba câu về binding của Functions
⚠ Bài học ⚠ đọc kỹ đề hỏi TRIGGER hay BINDING

⚠ Bảng quy tắc — chốt lại: | Loại | Số lượng | Bắt buộc | |---|---|---| | ⚠ Trigger | ⚠ 1 | ⚠ CÓ | | ⚠ Input | ⚠ 0 tới n | ⚠ không | | ⚠ Output | ⚠ 0 tới n | ⚠ không |

Từ khoá nhận diện:

"trigger" → ⚠ đúng một, bắt buộc "input binding" → ⚠ bao nhiêu cũng được "direction" → ⚠ in, out, inout "function.json" → ⚠ nơi khai binding

⚠ Nếu cần nhiều nguồn kích hoạt Cách
⚠ Viết NHIỀU hàm, mỗi hàm một trigger
⚠ Chúng cùng gọi một hàm logic dùng chung
⚠ Hoặc dùng Event Grid làm điểm tập trung
⚠ Thiết kế tốt ⚠ giữ hàm nhỏ, tách logic nghiệp vụ ra lớp riêng
⚠ Vì sao nên tách logic khỏi hàm Lý do
⚠ KIỂM THỬ được mà không cần Azure
⚠ Tái dùng cho nhiều trigger
⚠ Chuyển sang nền tảng khác dễ hơn
⚠ Hàm chỉ nên ⚠ nhận đầu vào, gọi logic, trả kết quả

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hàm có đúng một trigger chưa | | | Logic nghiệp vụ có tách khỏi hàm không | ⚠ để kiểm thử được | | Đề đang hỏi trigger hay binding | |

Và cách tổ chức mã Azure Functions giúp việc kiểm thử dễ hơn hẳn: hàm chỉ là lớp vỏ mỏng gọi vào logic nghiệp vụ nằm ở lớp riêng. Khi đó bạn kiểm thử được toàn bộ nghiệp vụ mà không cần chạy Azure.

Câu 88 Azure Redis Cache

Which Azure Architecture pattern is specifically designed to increase application performance using a cache service?

  1. A Cache-aside pattern
  2. B Sharding pattern
  3. C Sidecar pattern
  4. D Static content hosting pattern
Xem giải thích

Đáp án

A — Cache-aside pattern.

Vì sao đúng

⚠ Cache-aside là mẫu kinh điển để tăng tốc bằng cache:

⚠ Ứng dụng cần dữ liệu
        ↓
⚠ 1. Hỏi CACHE trước
        ↓ ⚠ có (cache hit)
⚠    → trả về ngay
        ↓ ⚠ không có (cache miss)
⚠ 2. Đọc từ CSDL
⚠ 3. GHI vào cache
⚠ 4. Trả về cho người gọi
Đặc điểm Nội dung
⚠ Ứng dụng TỰ quản lý cache ⚠ lazy loading
⚠ Chỉ nạp thứ thật sự được yêu cầu
⚠ Cache trống thì vẫn chạy đúng
⚠ Khi cập nhật: XOÁ khoá khỏi cache ⚠ an toàn hơn là ghi đè

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

  • D (Static content hosting) — ⚠ đưa nội dung tĩnh ra CDN hoặc blob: ⚠ cũng tăng hiệu năng nhưng ⚠ không dùng dịch vụ cache.

  • B (Sharding) — ⚠ chia dữ liệu qua nhiều kho để mở rộng.

  • C (Sidecar) — ⚠ mẫu container: ⚠ chạy tiến trình phụ cạnh ứng dụng chính.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ khép lại chùm bốn câu về Redis và cache trong hai lô.

Câu Hỏi gì Khoá
⚠ #21434 ⚠ vượt giới hạn bộ nhớ ⚠ Redis Cluster
⚠ #21437 ⚠ xoá khoá chủ động ⚠ đặt TTL
⚠ #21453 ⚠ vì sao Redis nhanh ⚠ lưu trong bộ nhớ
⚠ #21491 (câu này) ⚠ mẫu kiến trúc dùng cache ⚠ cache-aside
⚠ Bốn câu ⚠ từ cơ chế tới mẫu thiết kế

⚠ Bốn mẫu cache — phân biệt: | Mẫu | Nội dung | |---|---| | ⚠ Cache-aside | ⚠ ứng dụng tự nạp khi miss — phổ biến nhất | | ⚠ Read-through | ⚠ cache tự nạp từ CSDL | | ⚠ Write-through | ⚠ ghi vào cache và CSDL cùng lúc | | ⚠ Write-behind | ⚠ ghi cache trước, CSDL sau — rủi ro mất dữ liệu |

Từ khoá nhận diện:

"hỏi cache trước, miss thì đọc CSDL" → ⚠ cache-aside "chia dữ liệu qua nhiều kho" → ⚠ sharding "container phụ chạy cạnh ứng dụng" → ⚠ sidecar "đưa ảnh và CSS ra CDN" → ⚠ static content hosting

⚠ Vấn đề cần xử lý với cache-aside Vấn đề
⚠ Dữ liệu CŨ trong cache ⚠ giải bằng TTL và xoá khi cập nhật
⚠ Cache stampede ⚠ nhiều request cùng miss một lúc
⚠ Nạp lại tốn kém sau khi cache trống
⚠ Giảm thiểu ⚠ TTL ngẫu nhiên hoá, khoá khi nạp lại
⚠ Các mẫu kiến trúc đám mây khác đáng biết Mẫu
⚠ Retry ⚠ thử lại với backoff khi lỗi tạm thời
⚠ Circuit breaker ⚠ ngừng gọi dịch vụ đang hỏng
⚠ Throttling ⚠ giới hạn tần suất
⚠ Queue-based load leveling ⚠ dùng hàng đợi hấp thụ tải đột biến
⚠ Competing consumers ⚠ nhiều worker cùng đọc một hàng đợi

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cache có TTL không | | | Cập nhật dữ liệu có xoá khoá cache tương ứng không | | | Ứng dụng có chạy đúng khi cache trống không | ⚠ nguyên tắc quan trọng nhất |

Và nguyên tắc bất di bất dịch của mẫu cache-aside, cũng là điều phân biệt một hệ thống có cache tốt với một hệ thống phụ thuộc cache: ứng dụng phải hoạt động đúng khi cache hoàn toàn trống rỗng.

Câu 89 Azure Redis Cache
Which type of data can most benefit from being stored in a caching system like Azure Redis Cache?
  1. A Data that remains relatively static
  2. B Data that is constantly changing
  3. C Data that is written and never read (like a log file)
  4. D Data that is called once in a session and never needed again (like a user password)
Xem giải thích

Đáp án

A — Dữ liệu tương đối TĨNH.

Vì sao đúng

⚠ Cache có lợi khi tỉ lệ ĐỌC trên GHI cao:

⚠ Dữ liệu tĩnh
   ⚠ ghi một lần, đọc hàng nghìn lần
        ↓
⚠ Nạp vào cache một lần
⚠ Phục vụ rất nhiều lượt đọc
        ↓
⚠ Tỉ lệ trúng cache CAO
Dữ liệu hợp với cache Ví dụ
⚠ Danh mục sản phẩm
⚠ Bảng tra cứu: tỉnh thành, mã ngành
⚠ Cấu hình ứng dụng
⚠ Kết quả truy vấn tốn kém
⚠ Nội dung trang được xem nhiều

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

  • B (dữ liệu thay đổi liên tục) — ⚠ NGƯỢC: ⚠ cache liên tục bị vô hiệu, ⚠ tỉ lệ trúng thấp, ⚠ tốn công đồng bộ mà không được lợi.

  • C (ghi mà không bao giờ đọc, như log) — ⚠ cache vô nghĩa: ⚠ không có ai đọc lại.

  • D (dùng một lần rồi thôi, như mật khẩu) — ⚠ cache cũng vô nghĩa: ⚠ không tái sử dụng.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ mở đầu chùm về cache và nối tiếp #21437, #21453, #21491 ở lô trước.

Câu Hỏi gì Khoá
⚠ #21437 ⚠ xoá khoá chủ động ⚠ đặt TTL
⚠ #21453 ⚠ vì sao Redis nhanh ⚠ lưu trong bộ nhớ
⚠ #21491 ⚠ mẫu kiến trúc dùng cache ⚠ cache-aside
⚠ #21492 (câu này) ⚠ dữ liệu nào hợp với cache ⚠ tương đối tĩnh
⚠ Bốn câu ⚠ vẽ trọn chủ đề cache qua hai lô

⚠ Ba tiêu chí đánh giá dữ liệu có nên cache: | Tiêu chí | Nội dung | |---|---| | ⚠ Tỉ lệ ĐỌC / GHI | ⚠ càng cao càng đáng cache | | ⚠ Chi phí tạo ra dữ liệu | ⚠ truy vấn nặng thì đáng cache | | ⚠ Mức chấp nhận dữ liệu cũ | ⚠ phải chấp nhận được vài giây tới vài phút | | ⚠ Cả ba đều thoả | ⚠ cache mang lại lợi ích rõ rệt |

Từ khoá nhận diện:

"tĩnh, đọc nhiều ghi ít" → ⚠ hợp cache "thay đổi liên tục" → ⚠ không hợp cache "ghi mà không đọc" → ⚠ không hợp cache "dùng một lần" → ⚠ không hợp cache

⚠ Chỉ số quan trọng nhất của cache Chỉ số
⚠ Cache hit ratio ⚠ tỉ lệ trúng cache
⚠ Dưới 80% thì nên xem lại
⚠ Có thể do: TTL quá ngắn, cache quá nhỏ, dữ liệu đổi nhanh
⚠ Nếu tỉ lệ trúng thấp ⚠ cache đang tốn tiền mà không giúp gì
⚠ Dữ liệu tuyệt đối KHÔNG nên cache Dữ liệu
⚠ Mật khẩu và token nhạy cảm
⚠ Dữ liệu cá nhân không được phép lưu thêm nơi
⚠ Số dư tài khoản cần chính xác tuyệt đối
⚠ Nhớ ⚠ cache là một nơi lưu trữ nữa, và cũng cần được bảo vệ

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tỉ lệ trúng cache là bao nhiêu | ⚠ dưới 80% thì xem lại | | Dữ liệu này đọc gấp bao nhiêu lần ghi | | | Có dữ liệu nhạy cảm nào đang nằm trong cache không | |

Và chỉ số duy nhất cho biết một cache có đáng tồn tại hay không: tỉ lệ trúng cache. Nếu nó thấp, bạn đang trả tiền cho một tầng trung gian chỉ làm hệ thống phức tạp thêm.

Câu 90 Azure App Service
You have five applications installed on a single App Service Plan. Each application has two deployment slots - production and staging. You have scaled the plan out to three instances. How many VMs are running to support this?
  1. A Three
  2. B Ten
  3. C One
  4. D Five
Xem giải thích

Đáp án

A — Ba.

Vì sao đúng

⚠ Số máy ảo do App Service Plan quyết định, KHÔNG phụ thuộc số app hay số slot:

⚠ App Service Plan
   ⚠ scale out = 3 instance
        ↓
⚠ BA máy ảo
        ↓
⚠ Trên đó chạy:
   ⚠ 5 ứng dụng
   ⚠ mỗi ứng dụng 2 slot
   ⚠ = 10 "site"
        ↓
⚠ Tất cả DÙNG CHUNG ba máy ảo đó
Quy tắc cốt lõi Nội dung
⚠ Số VM = số instance của PLAN
⚠ App và slot dùng CHUNG tài nguyên plan
⚠ Trả tiền cho PLAN, không phải cho từng app
⚠ Deployment slot ⚠ cũng chạy trên chính plan đó

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

  • B (mười) — ⚠ bẫy chính: ⚠ nhân 5 app × 2 slot; ⚠ nhưng slot ⚠ không tạo thêm máy ảo.

  • D (năm) — ⚠ nhầm số app thành số VM.

  • C (một) — ⚠ bỏ qua việc đã scale out lên ba.

Ghi nhớ

⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ kiểm tra hiểu biết ở #21448 và #21479 theo cách rất thực tế.

Câu Hỏi gì Khoá
⚠ #21448 ⚠ App Service Plan là gì ⚠ tập tài nguyên tính toán
⚠ #21479 ⚠ scale out làm gì ⚠ tăng số instance
⚠ #21493 (câu này) ⚠ bao nhiêu VM đang chạy ⚠ ba — theo plan
⚠ Kết nối ⚠ hiểu hai câu kia thì tính được câu này

⚠ Hệ quả về chi phí — điểm rất quan trọng: | Hệ quả | Nội dung | |---|---| | ⚠ Thêm app vào plan có sẵn: KHÔNG tốn thêm | ⚠ về chi phí hạ tầng | | ⚠ Thêm slot: KHÔNG tốn thêm | | | ⚠ Tăng instance: TỐN thêm | | | ⚠ Nâng bậc plan: TỐN thêm | | | ⚠ Đây là | ⚠ cách tiết kiệm quan trọng nhất của App Service |

Từ khoá nhận diện:

"bao nhiêu VM" → ⚠ theo số instance của PLAN "thêm app có tốn thêm không" → ⚠ không, nếu dùng chung plan "deployment slot có tốn thêm không" → ⚠ không "scale out" → ⚠ tăng số instance, có tốn thêm

⚠ Mặt trái của việc dùng chung plan Mặt trái
⚠ Mọi app CHIA NHAU CPU và RAM
⚠ Một app ngốn tài nguyên làm chậm app khác
⚠ Nâng bậc plan ảnh hưởng mọi app
⚠ Nên tách plan riêng cho ⚠ app quan trọng nhất hoặc app có tải rất khác biệt
⚠ Slot cũng tiêu tốn tài nguyên Lưu ý
⚠ Slot staging đang chạy VẪN dùng CPU và RAM
⚠ Nhiều slot chạy cùng lúc gây áp lực lên plan
⚠ Nên ⚠ dừng slot không dùng, hoặc giới hạn số slot

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có bao nhiêu app và slot trên cùng một plan | | | Plan có đủ tài nguyên cho tất cả không | | | App quan trọng có nên tách plan riêng không | |

Và cách tiết kiệm chi phí App Service hiệu quả nhất, xuất phát trực tiếp từ cách tính tiền: gom nhiều ứng dụng nhỏ vào chung một plan. Bạn trả tiền cho hạ tầng, không phải cho số lượng ứng dụng.