Các cuộc gọi cơ sở dữ liệu đa dạng có thực sự quan trọng với một cuộc gọi mạng cho API web không?


16

Tại một trong những người sử dụng lao động của tôi, chúng tôi đã làm việc với API REST (nhưng nó cũng áp dụng cho SOAP). Máy khách, là giao diện người dùng ứng dụng, sẽ thực hiện các cuộc gọi qua web (LAN trong các triển khai sản xuất điển hình) tới API. API sẽ thực hiện các cuộc gọi đến cơ sở dữ liệu.

Một chủ đề được lặp lại trong các cuộc thảo luận của chúng tôi là hiệu suất: một số người trong nhóm tin rằng bạn không nên có nhiều cuộc gọi cơ sở dữ liệu (thường đọc) từ một lệnh gọi API vì hiệu suất; bạn nên tối ưu hóa chúng để mỗi lệnh gọi API chỉ có (chính xác) một cuộc gọi cơ sở dữ liệu.

Nhưng điều đó có thực sự quan trọng? Hãy xem xét rằng UI phải thực hiện một cuộc gọi mạng tới API; đó là khá lớn (thứ tự cường độ của mili giây). Cơ sở dữ liệu được tối ưu hóa để giữ mọi thứ trong bộ nhớ và thực hiện đọc rất, rất nhanh (ví dụ: SQL Server tải và giữ mọi thứ trong RAM và tiêu thụ gần như tất cả RAM miễn phí của bạn nếu có thể).

TLDR: Có thực sự đáng lo ngại về nhiều cuộc gọi cơ sở dữ liệu khi chúng tôi đã thực hiện một cuộc gọi mạng qua mạng LAN không? Nếu vậy, tại sao?

Để rõ ràng, tôi đang nói về thứ tự cường độ - Tôi biết rằng nó phụ thuộc vào chi tiết cụ thể (phần cứng máy, lựa chọn API và DB, v.v.) Nếu tôi có một cuộc gọi mất O (mili giây), thì việc tối ưu hóa cho DB các cuộc gọi có một thứ tự cường độ ít hơn, thực sự có vấn đề? Hoặc có nhiều vấn đề hơn thế này?

Chỉnh sửa: đối với hậu thế, tôi nghĩ thật vô lý khi đưa ra tuyên bố rằng chúng ta cần cải thiện hiệu suất bằng cách kết hợp các cuộc gọi cơ sở dữ liệu trong những trường hợp này - đặc biệt là thiếu hồ sơ. Tuy nhiên, đó không phải là quyết định của tôi cho dù chúng tôi có làm điều này hay không; Tôi muốn biết lý do căn bản đằng sau nghĩ rằng đây là một cách chính xác để tối ưu hóa các cuộc gọi API web.


Có cuộc gọi mạng nào khác giữa lớp API và cơ sở dữ liệu không?

4
Những bài kiểm tra thời gian của bạn cho thấy gì?
Dan Pichelman

@Sign Không có cuộc gọi mạng giữa API và DB. Họ được đảm bảo trên cùng một máy, theo những gì tôi hiểu.
tro999

@DanPichelman đó là những gì tôi cũng đang hỏi. Không ai có vẻ được thực hiện và thời gian thực hiện; chúng tôi chỉ nhận được yêu cầu "sửa hiệu suất trong X bằng cách kết hợp tất cả các cuộc gọi DB thành một cuộc gọi duy nhất."
tro999

Câu trả lời:


25

Nhưng điều đó có thực sự quan trọng? Hãy xem xét rằng UI phải thực hiện một cuộc gọi mạng tới API; đó là khá lớn (thứ tự cường độ của mili giây). Cơ sở dữ liệu được tối ưu hóa để giữ mọi thứ trong bộ nhớ và thực hiện đọc rất, rất nhanh (ví dụ: SQL Server tải và giữ mọi thứ trong RAM và tiêu thụ gần như tất cả RAM miễn phí của bạn nếu có thể).

Hợp lý

Về lý thuyết, bạn đúng. Tuy nhiên, có một vài sai sót với lý do này:

  1. Từ những gì bạn đã nêu, không rõ liệu bạn có thực sự kiểm tra / định hình ứng dụng của mình không. Nói cách khác, bạn có thực sự biết rằng mạng chuyển từ ứng dụng sang API là thành phần chậm nhất không? Bởi vì đó là trực quan, nên dễ dàng cho rằng nó là. Tuy nhiên, khi thảo luận về hiệu suất, bạn không bao giờ nên giả định. Tại nhà tuyển dụng của tôi, tôi là người dẫn đầu về hiệu suất. Khi tôi mới tham gia, mọi người cứ nói về CDN, sao chép, v.v. dựa trên trực giác về những điểm nghẽn phải là gì. Hóa ra, vấn đề hiệu năng lớn nhất của chúng tôi là các truy vấn cơ sở dữ liệu hoạt động kém.

  2. Bạn đang nói rằng vì cơ sở dữ liệu rất tốt trong việc truy xuất dữ liệu, nên cơ sở dữ liệu nhất thiết phải chạy ở hiệu suất cao nhất, đang được sử dụng tối ưu và không có gì có thể được thực hiện để cải thiện dữ liệu. Nói cách khác, cơ sở dữ liệu được thiết kế nhanh, vì vậy tôi không bao giờ phải lo lắng về nó. Một dòng suy nghĩ nguy hiểm khác. Điều đó giống như nói rằng một chiếc xe có nghĩa là di chuyển nhanh chóng, vì vậy tôi không cần phải thay dầu.

  3. Cách suy nghĩ này giả định một quá trình duy nhất tại một thời điểm, hoặc đặt một cách khác, không đồng thời. Nó giả định rằng một yêu cầu không thể ảnh hưởng đến hiệu suất của yêu cầu khác. Các tài nguyên được chia sẻ, chẳng hạn như I / O đĩa, băng thông mạng, nhóm kết nối, bộ nhớ, chu kỳ CPU, v.v. Do đó, việc giảm việc sử dụng tài nguyên dùng chung của một cuộc gọi cơ sở dữ liệu có thể ngăn không cho các yêu cầu khác chậm lại. Khi tôi mới gia nhập công ty hiện tại, ban quản lý tin rằng việc điều chỉnh truy vấn cơ sở dữ liệu 3 giây là một sự lãng phí thời gian. 3 giây là rất ít, tại sao phải lãng phí thời gian vào nó? Chúng ta sẽ không tốt hơn với CDN hay nén hay cái gì khác chứ? Nhưng nếu tôi có thể thực hiện truy vấn 3 giây trong 1 giây, hãy nói bằng cách thêm một chỉ mục, đó là chặn 2/3 ít hơn, 2/3 ít thời gian hơn để chiếm một luồng và quan trọng hơn là đọc dữ liệu từ đĩa ít hơn,

Học thuyết

Có một quan niệm phổ biến rằng hiệu suất phần mềm chỉ đơn giản là về tốc độ .

Từ quan điểm hoàn toàn tốc độ, bạn đã đúng. Một hệ thống chỉ nhanh như thành phần chậm nhất của nó. Nếu bạn đã lập hồ sơ mã của mình và thấy rằng Internet là thành phần chậm nhất, thì mọi thứ khác rõ ràng không phải là phần chậm nhất.

Tuy nhiên, với những điều trên, tôi hy vọng bạn có thể thấy sự tranh chấp tài nguyên, thiếu lập chỉ mục, mã viết kém, v.v. có thể tạo ra sự khác biệt đáng ngạc nhiên về hiệu suất.

Các giả định

Một điều cuối cùng. Bạn đã đề cập rằng một cuộc gọi cơ sở dữ liệu nên rẻ so với một cuộc gọi mạng từ ứng dụng đến API. Nhưng bạn cũng đã đề cập rằng ứng dụng và máy chủ API nằm trong cùng một mạng LAN. Do đó, không phải cả hai đều có thể so sánh như các cuộc gọi mạng? Nói cách khác, tại sao bạn lại cho rằng việc chuyển API là các lệnh có độ lớn chậm hơn so với chuyển cơ sở dữ liệu khi cả hai đều có cùng băng thông khả dụng? Tất nhiên các giao thức và cấu trúc dữ liệu là khác nhau, tôi hiểu điều đó, nhưng tôi tranh luận về giả định rằng chúng là các đơn đặt hàng có cường độ khác nhau.

Nơi nó nhận được murkey

Toàn bộ câu hỏi này là về các cuộc gọi cơ sở dữ liệu "nhiều" so với "đơn". Nhưng không rõ có bao nhiêu là nhiều. Vì những gì tôi đã nói ở trên, như một quy tắc chung, tôi khuyên bạn nên thực hiện càng ít cuộc gọi cơ sở dữ liệu khi cần thiết. Nhưng đó chỉ là một quy tắc của ngón tay cái.

Đây là lý do tại sao:

  1. Cơ sở dữ liệu rất tốt trong việc đọc dữ liệu. Chúng là công cụ lưu trữ. Tuy nhiên, logic kinh doanh của bạn sống trong ứng dụng của bạn. Nếu bạn thực hiện quy tắc rằng mọi cuộc gọi API đều dẫn đến chính xác một cuộc gọi cơ sở dữ liệu, thì logic nghiệp vụ của bạn có thể kết thúc trong cơ sở dữ liệu. Có lẽ đó là ok. Rất nhiều hệ thống làm điều đó. Nhưng một số thì không. Đó là về sự linh hoạt.
  2. Đôi khi để đạt được sự tách rời tốt, bạn muốn tách 2 cuộc gọi cơ sở dữ liệu. Ví dụ: có lẽ mọi yêu cầu HTTP được định tuyến thông qua bộ lọc bảo mật chung xác thực từ DB rằng người dùng có quyền truy cập đúng. Nếu họ làm như vậy, tiến hành thực hiện chức năng thích hợp cho URL đó. Chức năng đó có thể tương tác với cơ sở dữ liệu.
  3. Gọi cơ sở dữ liệu trong một vòng lặp. Đây là lý do tại sao tôi hỏi có bao nhiêu là nhiều. Trong ví dụ trên, bạn sẽ có 2 cuộc gọi cơ sở dữ liệu. 2 là tốt 3 có thể ổn. N không ổn. Nếu bạn gọi cơ sở dữ liệu trong một vòng lặp, thì bây giờ bạn đã thực hiện tuyến tính hiệu suất, điều đó có nghĩa là nó sẽ mất nhiều thời gian hơn trong đầu vào của vòng lặp. Vì vậy, nói một cách cụ thể rằng thời gian mạng API là chậm nhất hoàn toàn bỏ qua sự bất thường như 1% lưu lượng truy cập của bạn mất nhiều thời gian do vòng lặp chưa được phát hiện gọi cơ sở dữ liệu 10.000 lần.
  4. Đôi khi có những thứ ứng dụng của bạn tốt hơn, như một số tính toán phức tạp. Bạn có thể cần phải đọc một số dữ liệu từ cơ sở dữ liệu, thực hiện một số tính toán, sau đó dựa trên kết quả, chuyển tham số cho cuộc gọi cơ sở dữ liệu thứ hai (có thể để viết một số kết quả). Nếu bạn kết hợp chúng thành một cuộc gọi duy nhất (như một thủ tục được lưu trữ) chỉ với mục đích chỉ gọi cơ sở dữ liệu một lần, bạn đã buộc mình phải sử dụng cơ sở dữ liệu cho một cái gì đó mà máy chủ ứng dụng có thể tốt hơn.
  5. Cân bằng tải: Bạn có 1 cơ sở dữ liệu (có lẽ) và nhiều máy chủ ứng dụng cân bằng tải. Do đó, ứng dụng càng hoạt động nhiều và cơ sở dữ liệu càng ít thì càng dễ mở rộng quy mô vì việc thêm một máy chủ ứng dụng thường dễ dàng hơn so với sao chép cơ sở dữ liệu. Dựa trên dấu đầu dòng trước đó, có thể có ý nghĩa khi chạy truy vấn SQL, sau đó thực hiện tất cả các tính toán trong ứng dụng, được phân phối trên nhiều máy chủ và sau đó viết kết quả khi hoàn tất. Điều này có thể cung cấp thông lượng tốt hơn (ngay cả khi thời gian giao dịch tổng thể là như nhau).

TL; DR

TLDR: Có thực sự đáng lo ngại về nhiều cuộc gọi cơ sở dữ liệu khi chúng tôi đã thực hiện một cuộc gọi mạng qua mạng LAN không? Nếu vậy, tại sao?

Có, nhưng chỉ ở một mức độ nhất định. Bạn nên cố gắng giảm thiểu số lượng cuộc gọi cơ sở dữ liệu khi thực tế, nhưng đừng kết hợp các cuộc gọi không liên quan gì đến nhau chỉ vì mục đích kết hợp chúng. Ngoài ra, tránh gọi cơ sở dữ liệu trong một vòng lặp bằng mọi giá.


3

Âm thanh như nhóm của bạn đang tối ưu hóa trước khi họ có lý do. Bạn đã đo thời gian để thực hiện các yêu cầu này? Cơ hội đang buộc mô hình này sẽ tạo ra hiệu suất kém hơn cho người dùng cuối vì các chuyến đi khứ hồi đến máy chủ web sẽ có độ trễ cao hơn nhiều so với thời gian kết nối từ máy chủ web đến cơ sở dữ liệu. Trên hết, hầu hết các trình duyệt web sẽ chỉ thực hiện 2 kết nối đồng thời đến một máy chủ web duy nhất, vì vậy đối với các trang phức tạp, bạn có thể sẽ gặp phải một nút cổ chai ở đó.

Dù bằng cách nào thì các quyết định tối ưu hóa không nên được đưa ra mà không có dữ liệu để sao lưu. Đo lường nó và tìm ra những gì là tốt nhất cho ứng dụng của bạn.


1
Đây là một nhận xét tốt về thực tiễn hoạt động kém của chúng tôi, nhưng không trả lời câu hỏi của tôi về việc các cuộc gọi DB có phải là điều đáng lo ngại khi tôi đã có một cuộc gọi mạng hay không.
tro999

1
Nói chung, tôi đã tìm thấy thực hiện nhiều cuộc gọi cơ sở dữ liệu để không phải là một vấn đề. Điều này chủ yếu là do tổng hợp kết nối và độ trễ nhỏ giữa DB và máy chủ web. Có một điểm mà việc thực hiện một loạt các cuộc gọi db khác nhau sẽ ảnh hưởng tiêu cực đến hiệu suất, nhưng tôi không có số khó cho bạn. Tất cả phụ thuộc vào môi trường và ứng dụng. Chỉ đo sẽ cung cấp cho bạn câu trả lời bạn tìm kiếm.
brianfeucht

Nó không (nhất thiết) phụ thuộc vào chi tiết cụ thể, bởi vì tôi đang nói về thứ tự cường độ.
tro999

Chỉ cần đoán sơ bộ (bạn cần đo): Thời gian trung bình để kết nối với DB từ Máy chủ Web: 2ms Thời gian trung bình để kết nối với Máy chủ Web từ Máy khách: 20ms Vì vậy, giả sử những số tôi rút ngẫu nhiên ra khỏi không khí là chính xác, bạn có thể thực hiện 10 cuộc gọi cơ sở dữ liệu trong thời gian cần thiết để thực hiện một cuộc gọi dịch vụ web. Giả sử rằng các truy vấn cơ sở dữ liệu mất cùng một lượng thời gian. Những con số trên cực kỳ phụ thuộc vào môi trường. Nếu máy khách thực hiện cuộc gọi dịch vụ web là cục bộ, nó có thể giảm số lượng đơn hàng đó.
brianfeucht

2

Chúng tôi không thể nói với bạn.

Chúng tôi không biết những truy vấn của bạn trông như thế nào. Chúng tôi không biết họ mất bao lâu để hoàn thành. Chúng tôi không biết có bao nhiêu chi phí liên quan đến mỗi yêu cầu đến máy chủ API của bạn. Chúng tôi không biết khách hàng của bạn phân tán về mặt địa lý như thế nào. Vân vân.

Nếu đây là một kịch bản yêu cầu tối ưu hóa và là một kịch bản trong đó bạn có thể quyết định nên phân tách hoặc tham gia các cuộc gọi với nhau, bạn cần phải chuẩn hóa cả hai cách : Quyết định những gì bạn đang tối ưu hóa (độ trễ UI, tải CPU máy chủ, tranh chấp, v.v.) và chọn một trong những mục tiêu đạt được mục tiêu tối ưu hóa tốt hơn.


Bên cạnh đó, chỉ một điều tôi có thể thêm tương đối chắc chắn là thế này:

Trong một yêu cầu, bạn nên thực hiện tất cả các truy vấn bạn cần thực hiện để tạo phản hồi.

Nói cách khác, nếu phản hồi không thể được tạo cho đến khi tất cả N truy vấn được thực hiện, việc tách chúng ra sẽ vô nghĩa. Nếu bạn có thể tạo kết quả có ý nghĩa, dù là trung gian hay hoàn thành, sau mỗi truy vấn, hãy bắt đầu đo điểm chuẩn.


1

Hai suy nghĩ:

Đầu tiên, với người tiêu dùng sử dụng API, anh ta đang thực hiện một cuộc gọi để hoàn thành một nhiệm vụ. Điều gì xảy ra sau khi máy chủ của bạn nhận được cuộc gọi để điền yêu cầu không nên quá cứng nhắc. Nếu một cuộc gọi từ người tiêu dùng yêu cầu 10 mục công việc phụ để kéo dữ liệu lại với nhau và trả lại, thì điều đó có thể được chấp nhận.

Thứ hai: Bạn có thấy một vấn đề hiệu suất cơ sở dữ liệu thực tế với quá trình trong câu hỏi? Kinh nghiệm của tôi đã chỉ ra rằng việc thường xuyên cố gắng đưa tất cả các khía cạnh của yêu cầu cơ sở dữ liệu vào một cuộc gọi có thể dẫn đến một cuộc gọi kém hiệu quả hơn là chỉ thực hiện ba hoặc bốn cuộc gọi cho dữ liệu. Cơ sở dữ liệu hiện đại rất hiệu quả trong kế hoạch lưu trữ và thực thi. Thông thường, khi bạn cố gắng làm quá nhiều, bạn sẽ thấy các quy trình với con trỏ (rất tệ cho hiệu suất vì dữ liệu được thực hiện theo từng hàng, không phải là một bộ) và mã dẫn đến một kế hoạch kém hiệu quả hơn so với khi bạn bị hỏng các cuộc gọi lên thành nhiều bước nhỏ dễ dàng.

Ngoài tổ chức mã đơn giản, tôi đồng ý rằng mỗi lệnh gọi API có thể gọi một thủ tục được lưu trữ (hoặc hàm db) mà lần lượt chịu trách nhiệm điền yêu cầu. Có thể có nhiều hơn một bước trong thủ tục.


Tôi đồng ý với bạn về việc đo lường hiệu suất, điều mà dường như không ai đang làm. Không có bằng chứng nào cho thấy điều này nhanh hơn, nhưng nó cứ tiếp tục. Hiệu suất xuất hiện như một vấn đề khi chúng ta có một số cuộc gọi có thể thực hiện, giả sử, 1000 DB SELECTs.
tro999

@ as999, trong khi bạn có thể đạt được tốc độ khi xem số lượng cuộc gọi db, thì nhiều khả năng nó được tìm thấy trong chiến lược lập chỉ mục, v.v. chứ không phải số lượng cuộc gọi. Như mọi người đã chỉ ra, hãy nhìn vào dữ liệu hiệu suất.
Richard

Richard, tôi đồng ý, và tôi thực sự biết điều đó. Câu hỏi của tôi là tại sao nhiều người tiếp tục đưa ra quan điểm rằng "nhiều cuộc gọi DB chậm" khi có một cuộc gọi mạng liên quan. Tôi thực sự không thấy làm thế nào nó có thể có ý nghĩa.
tro999

@ as999999 Xin lỗi, có lẽ bạn nên đi sâu hơn một chút về cuộc gọi mạng, vì điều đó có vẻ hiển nhiên, tôi cảm thấy có thêm một chút cho câu hỏi của bạn. Tôi cảm thấy chúng ta đang thiếu một cái gì đó trong câu hỏi của bạn. Bạn sẽ luôn phải chịu một số độ trễ mạng và mỗi cuộc gọi có khả năng tăng thêm "x" lần cho mỗi cuộc gọi (theo thuật ngữ đơn giản). Câu lệnh theo mệnh giá là đúng, nhiều cuộc gọi mạng sẽ chậm hơn một cuộc gọi mạng tới db. Đó là lý do tại sao tôi đề xuất một cuộc gọi đến một thủ tục được lưu trữ, sau đó, có thể thực hiện nhiều cuộc gọi tới db mà không cần nhiều cuộc gọi mạng.
Richard

1

Nếu cơ sở dữ liệu ở trên một máy chủ khác với dịch vụ REST của bạn, mỗi cuộc gọi cơ sở dữ liệu sẽ dẫn đến kết thúc vòng mạng và điều đó có thể ảnh hưởng đáng kể đến hiệu suất:

Tôi đã từng quan sát một cuộc gọi dịch vụ web duy nhất được dịch thành khoảng 500 truy vấn cơ sở dữ liệu - đây không phải là vấn đề khi cả dịch vụ web và cơ sở dữ liệu được đặt trên cùng một máy, nhưng chuyển thành thời gian phản hồi 6-7 giây khi chúng khác nhau máy móc.

Rõ ràng, 500 roundtrips vào cơ sở dữ liệu là khá cực đoan. Tôi không chắc yêu cầu về hiệu suất của bạn là gì, nhưng theo nguyên tắc thông thường, tôi sẽ nói rằng nếu bạn ở dưới khoảng 10 truy vấn cơ sở dữ liệu trên mỗi cuộc gọi REST, bạn sẽ không gặp phải một cú đánh hiệu suất đáng kể.


1

Chúng tôi có một vài ứng dụng rất, rất trò chuyện. Có một cuộc gọi cơ sở dữ liệu cho mọi. Độc thân. Ít. Điều. Phục vụ dữ liệu tham chiếu nhiều lần và nhiều lần là một phần chính của khối lượng công việc trên hệ thống. Tất cả việc lập lịch trình cho các luồng công nhân, thu thập và thả khóa, lập kế hoạch kiểm tra bộ đệm, v.v. thậm chí còn bổ sung ngay cả khi không có IO thực tế trên đĩa. Tỷ lệ tham gia cao hơn vì các giao dịch phải giữ các khóa trên nhiều cuộc gọi DB và do đó thông lượng thấp hơn nhiều so với khả năng. Những đội đó hiện đang xem xét phải mua máy chủ DB mới, rất đắt tiền vì điều này.

Vì vậy, mặc dù phần lớn thời gian đã trôi qua trong cấu hình hiện tại của hệ thống của bạn được thực hiện bằng các lệnh gọi API REST, bỏ qua hiệu suất ở cấp DB sẽ lưu trữ các vấn đề trong tương lai.


0

Đường dẫn tối ưu hóa được trình bày đơn giản là cách sai để nhìn vào mọi thứ.

Các lệnh gọi API phải là nguyên tử. Nói cách khác, tôi sẽ có thể thực hiện 1 lệnh gọi API web để thực hiện hành động tôi muốn. Cho dù đó là để lấy dữ liệu, cập nhật một bản ghi hoặc bất cứ điều gì. KHÔNG BAO GIỜ nên thực hiện nhiều hơn 1 cuộc gọi để gây ra hành động. Và cố gắng tận dụng các giao dịch qua nhiều cuộc gọi nên bị xa lánh như bệnh dịch.

Đôi khi một hành động duy nhất khá phức tạp. Ví dụ: tìm nạp dữ liệu được kết hợp từ nhiều nguồn: một lần nữa, đây sẽ là một cuộc gọi. Hoặc toàn bộ điều hoạt động hoặc toàn bộ điều thất bại.

Bây giờ, nói rằng một lệnh gọi API duy nhất chỉ nên thực hiện một truy vấn DB là một chút sai lầm. Như bạn đã chỉ ra, chi phí chung để thực hiện cuộc gọi trên mạng thường là các đơn đặt hàng lớn hơn về mặt thời gian.

Tôi phần nào có thể hiểu tuyên bố của họ rằng một truy vấn duy nhất có thể chạy nhanh hơn nhiều truy vấn; nhưng điều này mang lại một ấn tượng sai lầm vì nó bỏ qua tổng tải DB và mạng. Chỉ bằng cách định hình các cách khác nhau để kéo dữ liệu ra khỏi DB, bạn mới có thể tìm ra vấn đề thực sự là gì. Tôi chắc rằng mọi người đều có một câu chuyện trong đó một truy vấn cụ thể được thực hiện thường xuyên hơn 100 lần so với dự kiến ​​sẽ giết chết hệ thống cho đến khi một chỉ mục thích hợp được đưa ra ...

Cuối cùng, bạn sẽ không thể thuyết phục họ chỉ bằng cách nói chuyện. Thiết lập một trường hợp thử nghiệm cho cả hai phương pháp và hồ sơ chúng. Hãy chú ý đến tổng thời gian để có được dữ liệu bạn cần, lượng lưu lượng mạng được tạo, số lượng và thời gian của các cuộc gọi cơ sở dữ liệu, v.v. Hãy tiếp cận toàn diện - có nghĩa là bạn nhìn vào toàn bộ hệ thống - và bạn sẽ kết thúc với rất nhiều dữ liệu để ăn quạ hoặc chỉ cho họ con đường vàng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.