Lợi ích về hiệu suất
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Giới thiệu: nguyên nhân và cách giảm thiểu độ trễ DNS
Khi các trang web trở nên phức tạp hơn, việc tham chiếu tài nguyên từ nhiều miền, thì hoạt động tra cứu DNS có thể trở thành điểm tắc nghẽn đáng kể trong trải nghiệm duyệt web.
Bất cứ khi nào một ứng dụng cần truy vấn trình phân giải DNS qua mạng, độ trễ tạo ra có thể đáng kể, tuỳ thuộc vào mức độ gần và số máy chủ định danh mà trình phân giải phải truy vấn (hiếm khi có hơn 2 máy chủ).
Ví dụ: ảnh chụp màn hình sau đây cho thấy thời gian do công cụ đo lường hiệu suất web Page Speed (Tốc độ trang) báo cáo.
Mỗi thanh đại diện cho một tài nguyên được tham chiếu từ trang; các phân đoạn màu đen biểu thị hoạt động tra cứu DNS.
Trên trang này, 13 lượt tra cứu được thực hiện trong 11 giây đầu tiên mà trang được tải.
Mặc dù một số hoạt động tra cứu được thực hiện song song, ảnh chụp màn hình cho thấy người dùng cần có 5 lần tra cứu nối tiếp, chiếm vài giây trong tổng thời gian tải trang là 11 giây.

Có 2 thành phần đối với độ trễ DNS:
- Độ trễ giữa ứng dụng (người dùng) và máy chủ phân giải DNS.
Trong hầu hết các trường hợp, điều này chủ yếu là do các hạn chế về thời gian khứ hồi (RTT) thông thường trong các hệ thống được kết nối mạng: khoảng cách địa lý giữa máy khách và máy chủ; tắc nghẽn mạng; mất gói dữ liệu và độ trễ truyền lại lâu (trung bình một giây); máy chủ quá tải, tấn công từ chối dịch vụ, v.v.
- Độ trễ giữa quá trình phân giải máy chủ và máy chủ định danh khác.
Nguồn gây ra độ trễ này chủ yếu là do các yếu tố sau gây ra:
- Bộ nhớ đệm bị thiếu.
Nếu không thể phân phát phản hồi từ bộ nhớ đệm của trình phân giải nhưng yêu cầu truy vấn đệ quy các máy chủ định danh khác, thì độ trễ mạng tăng thêm là đáng kể, đặc biệt nếu các máy chủ đáng tin cậy nằm ở xa về mặt địa lý.
- Chưa cấp phép.
Nếu trình phân giải DNS bị quá tải, các trình phân giải này phải xếp hàng các yêu cầu và phản hồi phân giải DNS, đồng thời có thể bắt đầu bỏ và truyền lại các gói.
- Lưu lượng truy cập độc hại.
Ngay cả khi dịch vụ DNS được cấp phép quá mức, lưu lượng truy cập DoS vẫn có thể đặt máy chủ quá mức.
Tương tự, các cuộc tấn công kiểu Kaminsky có thể liên quan đến trình phân giải tràn ngập với các truy vấn được đảm bảo bỏ qua bộ nhớ đệm và đòi hỏi phải gửi yêu cầu giải quyết đi.
Chúng tôi tin rằng hệ số thiếu bộ nhớ đệm là nguyên nhân chủ yếu gây ra độ trễ của DNS, và chúng tôi sẽ thảo luận thêm về vấn đề này ở bên dưới.
Số lần bỏ lỡ bộ nhớ đệm
Ngay cả khi trình phân giải có nhiều tài nguyên cục bộ, thì cũng khó có thể tránh được các độ trễ cơ bản liên quan đến việc kết nối với máy chủ định danh từ xa.
Nói cách khác, giả sử trình phân giải được cung cấp đủ tốt để các lượt truy cập vào bộ nhớ đệm không mất thời gian ở phía máy chủ, thì việc bỏ lỡ bộ nhớ đệm vẫn rất tốn kém về độ trễ.
Để xử lý trường hợp bỏ lỡ, trình phân giải phải giao tiếp với ít nhất một, nhưng thường là hai hoặc nhiều máy chủ định danh bên ngoài.
Khi vận hành trình thu thập dữ liệu web Googlebot, chúng tôi nhận thấy thời gian phân giải trung bình là 130 mili giây đối với các máy chủ định danh phản hồi.
Tuy nhiên, có toàn bộ 4-6% yêu cầu bị hết thời gian chờ do bị mất gói UDP và không thể truy cập vào máy chủ.
Nếu chúng tôi tính đến các lỗi như mất gói, máy chủ định danh bị chết, lỗi cấu hình DNS, v.v., thì thời gian phân giải hai đầu trung bình thực tế là 300-400 mili giây. Tuy nhiên, có sự chênh lệch lớn và nhiều thời gian phân giải.
Mặc dù tỷ lệ bỏ lỡ bộ nhớ đệm có thể khác nhau giữa các máy chủ DNS, nhưng cơ bản để tránh bỏ lỡ bộ nhớ đệm là rất khó, vì những lý do sau:
- Kích thước và sự tăng trưởng Internet.
Khá đơn giản, khi Internet phát triển, cả thông qua việc có thêm người dùng mới và trang web mới, hầu hết nội dung đều là nội dung ít được quan tâm.
Mặc dù một số trang web (và do đó là tên DNS) rất phổ biến, nhưng hầu hết chỉ có một vài người dùng quan tâm và hiếm khi được truy cập; vì vậy, phần lớn yêu cầu đều dẫn đến bỏ lỡ bộ nhớ đệm.
- Giá trị thời gian tồn tại (TTL) thấp.
Việc giá trị TTL DNS thấp hơn đồng nghĩa với việc các độ phân giải cần phải được tra cứu thường xuyên hơn.
- Tách biệt bộ nhớ đệm.
Máy chủ DNS thường được triển khai phía sau trình cân bằng tải để gán các truy vấn cho các máy khác nhau một cách ngẫu nhiên.
Điều này dẫn đến việc mỗi máy chủ riêng lẻ duy trì một bộ nhớ đệm riêng thay vì có thể sử dụng lại độ phân giải đã lưu vào bộ nhớ đệm từ một nhóm dùng chung.
Giải pháp giảm thiểu
Trong Google Public DNS, chúng tôi đã triển khai một số phương pháp để tăng tốc thời gian tra cứu
DNS.
Một số phương pháp trong số này khá chuẩn mực; một số phương pháp khác chỉ mang tính thử nghiệm:
- Cung cấp đầy đủ cho máy chủ để xử lý tải từ lưu lượng truy cập của máy khách, bao gồm cả lưu lượng truy cập độc hại.
- Ngăn chặn các cuộc tấn công từ chối dịch vụ và tấn công khuếch đại.
Mặc dù đây chủ yếu là vấn đề bảo mật và ảnh hưởng đến các trình phân giải đóng ít hơn các trình phân giải mở, nhưng việc ngăn chặn các cuộc tấn công DoS cũng có lợi về hiệu suất bằng cách loại bỏ gánh nặng bổ sung về lưu lượng truy cập đặt lên máy chủ DNS.
Để biết thông tin về các phương pháp chúng tôi đang sử dụng để giảm thiểu nguy cơ bị tấn công, hãy xem trang về các lợi ích về bảo mật.
- Cân bằng tải cho việc lưu vào bộ nhớ đệm dùng chung để cải thiện tỷ lệ truy cập vào bộ nhớ đệm tổng hợp trên cụm phân phát.
- Cung cấp phạm vi phủ sóng toàn cầu để mang đến sự gần gũi cho tất cả người dùng.
Cung cấp cụm phân phát đầy đủ
Việc lưu vào bộ nhớ đệm các trình phân giải DNS phải thực hiện nhiều thao tác tốn kém hơn so với máy chủ định danh đáng tin cậy, vì nhiều phản hồi không thể phân phát từ bộ nhớ; thay vào đó, các phản hồi này yêu cầu giao tiếp với các máy chủ định danh khác và do đó đòi hỏi nhiều dữ liệu đầu vào/đầu ra của mạng.
Hơn nữa, trình phân giải mở rất dễ bị nhiễm độc bộ nhớ đệm, làm tăng tỷ lệ bỏ lỡ bộ nhớ đệm (các cuộc tấn công như vậy gửi yêu cầu đối với các tên giả mạo không thể phân giải từ bộ nhớ đệm) cũng như các cuộc tấn công DoS làm tăng lưu lượng truy cập.
Nếu trình phân giải không được cung cấp đầy đủ và không thể bắt kịp tải, thì điều này có thể gây ảnh hưởng rất tiêu cực đến hiệu suất.
Các gói bị bỏ qua và cần được truyền lại, các yêu cầu máy chủ định danh phải được đưa vào hàng đợi, v.v.
Tất cả các yếu tố này đều góp phần làm chậm trễ.
Do đó, điều quan trọng là bạn phải cấp phép cho các trình phân giải DNS cho hoạt động đầu vào/đầu ra với khối lượng lớn.
Điều này bao gồm việc xử lý các cuộc tấn công DDoS có thể xảy ra, trong đó giải pháp hiệu quả duy nhất là cung cấp quá mức trên nhiều máy.
Tuy nhiên, đồng thời, bạn không nên giảm tỷ lệ truy cập vào bộ nhớ đệm khi thêm máy. Điều này đòi hỏi bạn phải triển khai một chính sách cân bằng tải hiệu quả mà chúng tôi thảo luận dưới đây.
Cân bằng tải cho bộ nhớ đệm dùng chung
Việc mở rộng quy mô cơ sở hạ tầng trình phân giải bằng cách thêm máy thực sự có thể phản tác dụng và giảm tỷ lệ truy cập vào bộ nhớ đệm nếu việc cân bằng tải không được thực hiện đúng cách.
Trong một quy trình triển khai thông thường, nhiều máy nằm phía sau một trình cân bằng tải giúp phân bổ lưu lượng truy cập đồng đều cho từng máy, bằng một thuật toán đơn giản như vòng tròn.
Kết quả là mỗi máy duy trì bộ nhớ đệm độc lập riêng để nội dung đã lưu vào bộ nhớ đệm được tách riêng giữa các máy.
Nếu mỗi truy vấn đến được phân phối đến một máy ngẫu nhiên, tuỳ thuộc vào tính chất của lưu lượng truy cập, thì tỷ lệ thiếu bộ nhớ đệm hiệu quả có thể tăng lên theo tỷ lệ.
Ví dụ: đối với những tên có TTL dài được truy vấn nhiều lần, tốc độ bỏ lỡ bộ nhớ đệm có thể tăng theo số lượng máy trong cụm.
(Đối với những tên có TTL rất ngắn, không được truy vấn thường xuyên hoặc dẫn đến phản hồi không thể lưu vào bộ nhớ đệm (0 TTL và lỗi), thì tỷ lệ bỏ lỡ bộ nhớ đệm không thực sự bị ảnh hưởng khi thêm máy.)
Để tăng tỷ lệ truy cập cho tên có thể lưu vào bộ nhớ đệm, điều quan trọng là bạn phải cân bằng tải
máy chủ để bộ nhớ đệm không bị phân mảnh.
Trong DNS Google Public, chúng tôi có hai cấp độ lưu vào bộ nhớ đệm.
Trong một nhóm máy, rất gần người dùng, một bộ nhớ đệm nhỏ cho mỗi máy chứa những tên phổ biến nhất.
Nếu không đáp ứng được một truy vấn từ bộ nhớ đệm này, thì truy vấn đó sẽ được gửi đến một nhóm máy khác có nhiệm vụ phân vùng bộ nhớ đệm theo tên.
Đối với bộ nhớ đệm cấp hai này, mọi truy vấn có cùng tên sẽ được gửi đến cùng một máy, trong đó tên sẽ được lưu vào bộ nhớ đệm hoặc không.
Phân phối cụm phân phát cho phạm vi địa lý rộng
Đối với các trình phân giải đã đóng, đây thực sự không phải là vấn đề.
Đối với các trình phân giải mở, máy chủ của bạn càng ở gần người dùng thì độ trễ ở phía máy khách càng giảm.
Ngoài ra, việc có đủ phạm vi địa lý có thể gián tiếp cải thiện độ trễ hai đầu, vì máy chủ định danh thường trả về kết quả được tối ưu hoá cho vị trí của trình phân giải DNS.
Nghĩa là, nếu một nhà cung cấp nội dung lưu trữ các trang web được đồng bộ hoá hai chiều trên khắp thế giới, thì máy chủ định danh của nhà cung cấp đó sẽ trả về địa chỉ IP gần nhất với trình phân giải DNS.
Google Public DNS được lưu trữ tại các trung tâm dữ liệu trên toàn thế giới và sử dụng định tuyến Anycast để đưa người dùng đến trung tâm dữ liệu gần nhất về mặt địa lý.
Ngoài ra, DNS Google Public hỗ trợ mạng con máy khách EDNS (ECS), một tiện ích giao thức DNS dành cho trình phân giải để chuyển tiếp vị trí ứng dụng đến máy chủ định danh. Tiện ích này có thể trả về phản hồi phân giải theo vị trí được tối ưu hoá cho địa chỉ IP máy khách thực tế, thay vì địa chỉ IP của trình phân giải.
Vui lòng đọc Câu hỏi thường gặp này để biết chi tiết.
Google Public DNS tự động phát hiện máy chủ định danh
hỗ trợ mạng con máy khách EDNS.
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-07-25 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-25 UTC."],[[["\u003cp\u003eDNS lookups significantly impact website loading speed, especially with resource-heavy pages referencing multiple domains.\u003c/p\u003e\n"],["\u003cp\u003eDNS latency stems from network factors between clients and resolvers and between resolvers and other name servers, with cache misses being a primary contributor.\u003c/p\u003e\n"],["\u003cp\u003eCache misses are difficult to avoid due to the Internet's vastness, short DNS record lifespans, and isolated caching systems across servers.\u003c/p\u003e\n"],["\u003cp\u003eGoogle Public DNS employs strategies like global server distribution, load balancing, and security measures to mitigate DNS latency and enhance performance.\u003c/p\u003e\n"]]],["DNS latency, a significant factor in web browsing speed, is primarily caused by client-resolver latency and resolver-name server latency. Cache misses, due to internet growth, low TTL values, and cache isolation, are a dominant factor. Mitigations include adequately provisioning servers to handle traffic, preventing DoS attacks, load-balancing for shared caching, and ensuring global server coverage. Google Public DNS uses techniques such as two-level caching and EDNS client subnet support to minimize lookup times.\n"],null,["# Performance Benefits\n\nIntroduction: causes and mitigations of DNS latency\n---------------------------------------------------\n\nAs web pages become more complex, referencing resources from numerous domains,\nDNS lookups can become a significant bottleneck in the browsing experience.\nWhenever a client needs to query a DNS resolver over the network, the latency\nintroduced can be significant, depending on the proximity and number of\nname servers the resolver has to query (more than 2 is rare, but it can happen).\nAs an example, the following screen shot shows the timings reported by the\n[Page Speed](/speed/pagespeed) web performance measurement tool.\nEach bar represents a resource referenced from the page; the black segments\nindicate DNS lookups.\nIn this page, 13 lookups are made in the first 11 seconds in which the page is\nloaded.\nAlthough several of the lookups are done in parallel, the screen shot shows that\n5 serial lookup times are required, accounting for several seconds of the total\n11 seconds page load time.\n\nThere are two components to DNS latency:\n\n- Latency between the client (user) and DNS resolving server. In most cases this is largely due to the usual round-trip time (RTT) constraints in networked systems: geographical distance between client and server machines; network congestion; packet loss and long retransmit delays (one second on average); overloaded servers, denial-of-service attacks and so on.\n- Latency between resolving servers and other name servers. This source of latency is caused primarily by the following factors:\n - Cache misses. If a response cannot be served from a resolver's cache, but requires recursively querying other name servers, the added network latency is considerable, especially if the authoritative servers are geographically remote.\n - Underprovisioning. If DNS resolvers are overloaded, they must queue DNS resolution requests and responses, and may begin dropping and retransmitting packets.\n - Malicious traffic. Even if a DNS service is overprovisioned, DoS traffic can place undue load on the servers. Similarly, Kaminsky-style attacks can involve flooding resolvers with queries that are guaranteed to bypass the cache and require outgoing requests for resolution.\n\nWe believe that the cache miss factor is the most dominant cause of DNS latency,\nand discuss it further below.\n\n### Cache misses\n\nEven if a resolver has abundant local resources, the fundamental delays\nassociated with talking to remote name servers are hard to avoid.\nIn other words, assuming the resolver is provisioned well enough so that cache\nhits take zero time on the server-side, cache misses remain very expensive in\nterms of latency.\nTo handle a miss, a resolver has to talk to at least one, but often two or more\nexternal name servers.\nOperating the Googlebot web crawler, we have observed an average resolution time\nof 130 ms for name servers that respond.\nHowever, a full 4-6% of requests simply time out, due to UDP packet loss and\nservers being unreachable.\nIf we take into account failures such as packet loss, dead name servers, DNS\nconfiguration errors, etc., the **actual** average end-to-end resolution time is\n300-400 ms.\nHowever, there is high variance and a long tail.\n\nThough the cache miss rate may vary among DNS servers, cache misses are\nfundamentally difficult to avoid, for the following reasons:\n\n- Internet size and growth. Quite simply, as the Internet grows, both through the addition of new users and of new sites, most content is of marginal interest. While a few sites (and consequently DNS names) are very popular, most are of interest to only a few users and are accessed rarely; so the majority of requests result in cache misses.\n- Low time-to-live (TTL) values. The trend towards lower DNS TTL values means that resolutions need more frequent lookups.\n- Cache isolation. DNS servers are typically deployed behind load balancers which assign queries to different machines at random. This results in each individual server maintaining a separate cache rather than being able to reuse cached resolutions from a shared pool.\n\n### Mitigations\n\nIn Google Public DNS, we have implemented several approaches to speeding up DNS\nlookup times.\nSome of these approaches are fairly standard; others are experimental:\n\n- [Provisioning servers adequately](#provision) to handle the load from client traffic, including malicious traffic.\n- Preventing DoS and amplification attacks. Although this is mostly a security issue, and affects closed resolvers less than open ones, preventing DoS attacks also has a benefit for performance by eliminating the extra traffic burden placed on DNS servers. For information on the approaches we are using to minimize the chance of attacks, see the page on [security benefits](/speed/public-dns/docs/security).\n- [Load-balancing for shared caching](#loadbalance), to improve the aggregated cache hit rate across the serving cluster.\n- [Providing global coverage](#geography) for proximity to all users.\n\nProvisioning serving clusters adequately\n----------------------------------------\n\nCaching DNS resolvers have to perform more expensive operations than\nauthoritative name servers, since many responses cannot be served from memory;\ninstead, they require communication with other name servers and thus demand a\nlot of network input/output.\nFurthermore, open resolvers are highly vulnerable to cache poisoning attempts,\nwhich increase the cache miss rate (such attacks specifically send requests for\nbogus names that can't be resolved from cache), and to DoS attacks, which add to\nthe traffic load.\nIf resolvers are not provisioned adequately and cannot keep up with the load,\nthis can have a very negative impact on performance.\nPackets get dropped and need to be retransmitted, name server requests have to\nbe queued, and so on.\nAll of these factors add to delays.\n\nTherefore, it's important for DNS resolvers to be provisioned for high-volume\ninput/output.\nThis includes handling possible DDoS attacks, for which the only effective\nsolution is to over-provision with many machines.\nAt the same time, however, it's important not to reduce the cache hit rate when\nyou add machines; this requires implementing an effective load-balancing policy,\nwhich we discuss below.\n\nLoad-balancing for shared caching\n---------------------------------\n\nScaling resolver infrastructure by adding machines can actually backfire and\n**reduce** the cache hit rate if load balancing is not done properly.\nIn a typical deployment, multiple machines sit behind a load balancer that\nequally distributes traffic to each machine, using a simple algorithm such as\nround robin.\nThe result of this is that each machine maintains its own independent cache,\nso that the cached content is isolated across machines.\nIf each incoming query is distributed to a random machine, depending on the\nnature of the traffic, the effective cache miss rate can be increased\nproportionally.\nFor example, for names with long TTLs that are queried repeatedly, the cache\nmiss rate can be increased by the number of machines in the cluster.\n(For names with very short TTLs, that are queried very infrequently, or that\nresult in uncacheable responses (0 TTL and errors), the cache miss rate is not\nreally affected by adding machines.)\n\nTo boost the hit rate for cacheable names, it's important to load-balance\nservers so that the cache is not fragmented.\nIn Google Public DNS, we have two levels of caching.\nIn one pool of machines, very close to the user, a small per-machine cache\ncontains the most popular names.\nIf a query cannot be satisfied from this cache, it is sent to another pool of\nmachines that partition the cache by names.\nFor this second level cache, all queries for the same name are sent to the same\nmachine, where the name is either cached or it isn't.\n\nDistributing serving clusters for wide geographical coverage\n------------------------------------------------------------\n\nFor closed resolvers, this is not really an issue.\nFor open resolvers, the closer your servers are located to your users,\nthe less latency they will see at the client end.\nIn addition, having sufficient geographical coverage can indirectly improve\nend-to-end latency, as name servers typically return results optimized for the\nDNS resolver's location.\nThat is, if a content provider hosts mirrored sites around the world, that\nprovider's name servers will return the IP address in closest proximity to the\nDNS resolver.\n\nGoogle Public DNS is hosted in data centers worldwide, and uses anycast routing\nto send users to the geographically closest data center.\n\nIn addition, Google Public DNS supports [EDNS client subnet (ECS)](https://tools.ietf.org/html/rfc7871), a DNS\nprotocol extension for resolvers to forward client location to name servers,\nwhich can return location-sensitive responses optimized for the actual client\nIP address, rather than the resolver's IP address.\nPlease read [this FAQ](/speed/public-dns/faq#cdn) for details.\nGoogle Public DNS [automatically detects name servers](//groups.google.com/forum/#!topic/public-dns-announce/67oxFjSLeUM)\nthat support EDNS Client Subnet."]]