Làm cách nào để kiểm tra và tối ưu hóa khi bạn không thể tái tạo môi trường?


17

Trước đây, tôi đã làm việc trong nhiều môi trường khác nhau. Ứng dụng máy tính để bàn, trò chơi, công cụ nhúng, dịch vụ web, công việc dòng lệnh, trang web, báo cáo cơ sở dữ liệu, v.v. Tất cả các môi trường này đều có chung một đặc điểm: bất kể độ phức tạp của chúng, bất kể kích thước của chúng, tôi luôn có thể có một tập hợp con hoặc lát ứng dụng trên máy của tôi hoặc trong môi trường dev để kiểm tra.

Hôm nay tôi không có. Hôm nay tôi thấy mình trong một môi trường mà trọng tâm chính là khả năng mở rộng. Tái tạo môi trường là rất tốn kém. Lấy một lát môi trường, trong khi hợp lý (một số phần cần phải được mô phỏng hoặc sử dụng trong chế độ một trường hợp mà chúng không được thực hiện), loại bỏ mục đích vì nó che khuất đồng thời và tải nó các cuộc gặp gỡ hệ thống thực sự. Ngay cả một hệ thống "thử nghiệm" nhỏ cũng có những sai sót. Mọi thứ sẽ hoạt động khác nhau khi bạn có 2 nút và khi bạn có 64 nút.

Cách tiếp cận thông thường của tôi để tối ưu hóa (đo lường, thử một cái gì đó, xác minh tính chính xác, đo lường sự khác biệt, lặp lại) không thực sự hiệu quả ở đây vì tôi không thể thực hiện các bước 2 và 3 một cách hiệu quả cho các phần của vấn đề (độ mạnh đồng thời và hiệu suất theo tải). Kịch bản này dường như không phải là duy nhất. Cách tiếp cận phổ biến để thực hiện loại nhiệm vụ này trong loại môi trường này là gì?

Có một số câu hỏi liên quan:

  • này câu hỏi đã làm với phần cứng (như máy phân tích quang phổ) là không có sẵn, có thể được (tương đối) dễ dàng mô phỏng.
  • này câu hỏi là về việc theo dõi xuống lỗi mà chỉ tồn tại trong môi trường sản xuất, đó là hữu ích - nhưng một loại khác nhau của hoạt động.

1
Câu trả lời ngắn: câu trả lời cho câu hỏi liên kết thứ hai cũng được áp dụng. Ghi nhật ký nhiều hơn không chỉ giúp gỡ lỗi, nó cũng sẽ giúp kiểm tra và tối ưu hóa. Bạn có thể phải ghi nhật ký những thứ khác nhau, đặc biệt là thời gian chạy và sử dụng tài nguyên.
Doc Brown

Bạn có thể ghép các bộ phận thời gian của môi trường sản xuất giữa sản xuất và thử nghiệm không?
Patrick

@DocBrown - chắc chắn, nhưng việc đăng nhập sẽ không giúp tôi biết liệu việc triển khai thay thế sẽ đúng hay hiệu quả hơn trong sản xuất cho đến khi nó thực sự được sản xuất - điều đó chắc chắn là quá muộn.
Telastyn

2
Reproducing the environment is prohibitively costly.- Một lỗi sản xuất show-stop có giá bao nhiêu? Còn 2 lỗi thì sao? Vào những thời điểm không thể đoán trước (rất có thể là khi bạn có phần lớn người dùng của mình tải hệ thống cùng một lúc). Cân nhắc rằng so với chi phí thiết lập một môi trường sinh sản tối thiểu - bạn có thể thấy rằng nó không quá đắt đỏ.
Jess Telford

Vì một số lý do, tôi có cảm giác rằng điều này chỉ có nghĩa là hệ thống được thiết kế tồi, có tổ chức. Nếu hệ thống được tổ chức tốt và mô-đun, thiết lập trường hợp thử nghiệm hoặc kịch bản tối ưu hóa sẽ không được prohibitively costly.
Được thông báo vào

Câu trả lời:


11

Trên thực tế nó khó khăn, nhưng tôi chắc chắn trong nhiều tình huống có thể so sánh, nó chủ yếu là một vấn đề tổ chức. Cách tiếp cận khả thi duy nhất có lẽ là hỗn hợp các biện pháp kết hợp, không chỉ là "một viên đạn bạc". Một số điều bạn có thể thử:

  • ghi nhật ký: như tôi đã viết trong một bình luận, ghi nhật ký tài nguyên và thời gian quá mức (là một loại hồ sơ) có thể giúp bạn xác định các tắc nghẽn thực sự trong sản xuất. Điều này có thể không cho bạn biết nếu một triển khai thay thế sẽ hoạt động tốt hơn, nhưng chắc chắn nó sẽ giúp bạn tránh tối ưu hóa phần hoàn toàn sai trong ứng dụng của bạn.

  • kiểm tra những gì bạn có thể kiểm tra trước - kỹ lưỡng, với rất nhiều kế hoạch trả trước. Chắc chắn, mọi thứ sẽ hành xử khác nhau trong sản xuất, nhưng không phải tất cả mọi thứ. Tính chính xác của việc triển khai khác thường có thể được kiểm tra trước - nếu việc triển khai thực hiện tốt, là một câu hỏi khác. Nhưng kế hoạch có thể giúp rất nhiều. Hãy suy nghĩ kỹ về các vấn đề mà môi trường kiểm tra của bạn có thể giải quyết cho bạn, và vấn đề nào không. Hầu như luôn có những điều mà bạn tin vào cái nhìn đầu tiên "nó không thể được kiểm tra trước", nhưng nếu bạn nghĩ hai lần, thường có nhiều khả năng hơn.

  • Làm việc theo nhóm. Khi thử một cách tiếp cận hoặc ý tưởng mới, hãy thảo luận với ít nhất một người khác trong nhóm của bạn. Khi bạn thực hiện một thuật toán khác, hãy nhấn mạnh về kiểm tra mã và QA. Càng có nhiều lỗi và vấn đề bạn có thể tránh trước, bạn sẽ phải giải quyết các vấn đề ít nghiêm trọng hơn trong sản xuất.

  • Vì bạn không thể kiểm tra mọi thứ trước đó, mong đợi các vấn đề xuất hiện trong sản xuất. Do đó, hãy cố gắng chuẩn bị một chiến lược dự phòng thực sự tốt khi đưa mã mới vào sản xuất. Khi mã mới của bạn có nguy cơ ong chậm hơn so với giải pháp cũ hoặc nếu nó có nguy cơ bị sập, hãy đảm bảo bạn có thể thay đổi sang phiên bản trước đó càng sớm càng tốt. Nếu nó có nguy cơ phá hủy dữ liệu sản xuất, hãy đảm bảo bạn có một bản sao lưu / phục hồi tốt. Và hãy chắc chắn rằng bạn phát hiện ra những lỗi đó bằng cách thêm một số cơ chế xác nhận vào hệ thống của bạn.

  • giữ nhật ký dự án hoặc nhật ký giải pháp - nghiêm túc. Mỗi ngày bạn tìm ra điều gì đó mới mẻ về môi trường, hãy viết nó ra - những câu chuyện thành công cũng như những câu chuyện thất bại. Đừng làm thất bại hai lần.

Vì vậy, ý chính là - khi bạn không thể đi với lỗi và thử, lựa chọn tốt nhất của bạn là bảo thủ, lập kế hoạch trả trước cổ điển và các kỹ thuật QA.


6

Nếu bạn không thể tái tạo môi trường sống, thì thực tế khó chịu là bất cứ điều gì bạn làm, nó sẽ không được kiểm tra đầy đủ.

Vậy, bạn có thể làm gì?

Chà, bất cứ điều gì phải mở rộng quy mô, có thể là một quá trình, cụm máy chủ hoặc khối lượng cơ sở dữ liệu nên được kiểm tra với quy tắc không, một, vô hạn để trêu chọc nơi mà các tắc nghẽn / hạn chế tiềm năng là IO, CPU, tải CPU, inter - quá trình giao tiếp, v.v.

Một khi bạn có điều này, bạn sẽ có cảm giác về loại thử nghiệm nào bị ảnh hưởng. Nếu đó là thử nghiệm đơn vị, thì truyền thống này sẽ thuộc về nhà phát triển, nếu đó là thử nghiệm tích hợp / hệ thống thì có thể có các điểm tiếp xúc với các nhóm khác, những người có thể hỗ trợ chuyên môn bổ sung hoặc các công cụ vẫn tốt hơn.

Nói về các công cụ, nó không thực sự là tiền gửi của nhà phát triển để tải thử nghiệm một hệ thống vượt quá những gì có thể trong môi trường phát triển của họ. Điều này nên được đẩy lên bộ phận kiểm tra hoặc bên thứ 3 khác.

Con voi trong phòng tất nhiên là các hệ thống không phải lúc nào cũng mở rộng theo những cách có thể dự đoán được!

Ở kiếp trước, tôi là một DBA cho cơ sở dữ liệu ngân hàng với hàng tỷ hàng và được trang bị các kế hoạch thực hiện, chúng ta thường có thể dự đoán các truy vấn sẽ mất bao lâu trên một cơ sở dữ liệu nhàn rỗi với khối lượng đầu vào. Tuy nhiên, một khi các khối lượng này đạt đến một kích thước nhất định, kế hoạch thực hiện sẽ thay đổi và hiệu suất sẽ nhanh chóng suy giảm trừ khi truy vấn / cơ sở dữ liệu được điều chỉnh.


0

Tôi muốn đề xuất thí nghiệm.

Ghi nhật ký sẽ tìm thấy nút cổ chai. Sau đó, bạn có thể thử triển khai thay thế trên một số máy hoặc thậm chí trên tất cả các máy có xác suất nhất định hoặc trong một khoảng thời gian giới hạn. Sau đó so sánh các bản ghi một lần nữa để kiểm tra cải tiến.

Đó là cùng một chu trình đo lường thử nghiệm lý thuyết mà bạn đã từng sử dụng, nhưng tốn kém hơn để thiết lập - vì các giả thuyết phải được chạy trong sản xuất - và tùy thuộc vào khối lượng của bạn, việc nhận dữ liệu quan trọng từ sản xuất cũng có thể chậm.

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.