Hiểu vấn đề khi mọi thứ vỡ trong sản xuất


24

Kịch bản:

  • Bạn đẩy đến sản xuất
  • Sự thúc đẩy đã phá vỡ nhiều thứ
  • Bản dựng đó không phá vỡ qa hay dev
  • Là một nhà phát triển, bạn không có quyền truy cập prod.
  • Có rất nhiều áp lực từ phía trên để có được những thứ làm việc nhanh nhẹn.

Cụ thể:

  • Ứng dụng PHP / MVC được điều khiển API trong Zend.
  • Đã triển khai đến một vài máy chủ.

Câu hỏi của tôi:

Trong khi điều tra, hãy nói rằng tôi có linh cảm rằng có điều gì đó không ổn. Nhưng, tôi không biết chắc chắn. Và, tất nhiên, tôi không thể kiểm tra mọi thứ trong sản xuất. Nếu tôi có một sửa chữa được đề xuất dựa trên linh cảm đó, liệu có nên khôn ngoan khi thử và áp dụng nó và xem nó có hoạt động không, trước khi hiểu vấn đề là gì?


24
Nếu nó không phá vỡ DEV hoặc QA, nhưng đã phá vỡ sản xuất, thì đó thường là vấn đề cấu hình.
Mike L.

4
Mặc dù cá nhân bạn có thể không có quyền truy cập vào sản xuất, bạn nên có một thành viên của nhóm điều hành có thể là mắt và tay của bạn để khắc phục sự cố.
shufler

3
Bạn đã loại trừ các vấn đề cấu hình, ví dụ như quyền truy cập cơ sở dữ liệu hoặc quyền truy cập mạng có thể được sử dụng trong phiên bản mới?
JB King

7
@MikeL. Hoặc dữ liệu bị hỏng không tồn tại trong dev hoặc QA.
maple_shaft

3
@shufler - Ở Mỹ, Đạo luật Sarbanes Mạnh Oxley (còn gọi là SOX) yêu cầu các nhà phát triển không có quyền truy cập vào sản xuất trong các công ty giao dịch công khai. Một số công ty có chính sách nội bộ của riêng họ giới hạn truy cập. Chúng thường có hiệu lực sau khi một nhà phát triển hạ toàn bộ hệ thống dựa trên linh cảm.
jfrankcarr

Câu trả lời:


33

Lấy càng nhiều thông tin về vấn đề càng tốt (logfiles, v.v.) và sau đó đưa các máy chủ sản xuất về trạng thái hoạt động. Đó là một nỗi đau từ quan điểm của nhà phát triển tất nhiên, nhưng rất có thể là một cho trước.

Tiếp theo, hãy thử và xem liệu bạn có thể tái tạo vấn đề trong môi trường phát triển hay không. Nếu bạn có thể, sau đó sửa nó và thử phát hành lại.

Nếu bạn không thể tái tạo nó, hãy xem liệu bạn có thể thêm chẩn đoán và phát hành cho một máy chủ trong một thời gian ngắn để có thêm thông tin về sự cố không.

Nếu điều đó là không thể thì hãy xem xét kỹ hơn sự khác biệt giữa môi trường sản xuất và môi trường dev / qa và cố gắng tạo môi trường dev gần hơn với sản xuất.


4

Làm thế nào cũng làm bạn hiểu được vấn đề? Rủi ro mà linh cảm của bạn sẽ làm mọi thứ tồi tệ hơn là gì? Có thể quay lại và tái tạo vấn đề trong các vùng DEV / QA không? Bạn có thể làm gì để đồng bộ hóa vùng DEV / QA của mình để đến gần hơn với SẢN PHẨM? Có thể bạn phải thay đổi một số cài đặt môi trường hoặc cơ sở dữ liệu, có thể bạn phải nhập dữ liệu SẢN PHẨM sang DEV, có thể bạn phải thay đổi một số cài đặt gỡ lỗi.

Nói chung, tôi không khuyên bạn nên đẩy linh cảm của mình về một giải pháp cho sản xuất trừ khi bạn có thể xác nhận rằng nó thực sự đúng ở một khu vực khác. Tôi hiểu loại sự cố phát sinh khi có lỗi xảy ra trong SẢN PHẨM và không thể được sao chép ở bất kỳ nơi nào khác. Đó là khi bắt đầu thấy những gì khác biệt giữa DEV / QA và SẢN PHẨM và tập trung vào những thứ đó. Theo kinh nghiệm của tôi, đó thường là cài đặt môi trường hoặc một số cấu hình khác, đặc biệt dành cho SẢN PHẨM. Và tôi biết rằng có lẽ có rất nhiều áp lực từ phía trên để khắc phục điều này, vì vậy có thể quay trở lại trạng thái làm việc trước đó và sau đó thử tái tạo vấn đề trong DEV, đưa ra cách khắc phục trong DEV, sau đó thử lại sản xuất? Đó là những gì tôi muốn đề xuất.


5
Bạn chắc chắn không muốn áp dụng một bản sửa lỗi cho một sản phẩm bị hỏng mà bạn không biết chắc chắn sẽ sửa nó; điều đó sẽ có khả năng chỉ phá vỡ nó nhiều hơn! Tốt hơn là quay trở lại trạng thái ổn định và làm việc trong QA, nơi có ít áp lực hơn để có được nó ngay lần đầu tiên và duy nhất.
Michael K

2

Phụ thuộc vào loại sửa chữa. Thường xuyên hơn không, các vấn đề trong sản xuất không xuất hiện trong dev có liên quan đến tranh cãi trong cơ sở dữ liệu. Vì vậy, áp dụng một lỗi làm thay đổi nội dung cơ sở dữ liệu mà không chắc chắn chính xác "ngoài kia" có thể là bước đầu tiên trong một thảm họa lớn. Nếu bạn có thể dễ dàng lấy lại sự thay đổi, bạn có thể thử lại. Nhưng nói chung, nếu bạn không có quyền truy cập trực tiếp, ít nhất nên có một bản sao của cơ sở dữ liệu hoặc toàn bộ máy chủ để kiểm tra. Những người có đặc quyền phù hợp vẫn sẽ phải chạy mã mới, nhưng ít nhất không có nguy cơ mất dữ liệu. (Nhưng đôi khi kích thước của cơ sở dữ liệu hoặc độ phức tạp của cơ sở hạ tầng cấm thiết lập như vậy)

Điều đó thực sự khó khăn, vì có nhiều khả năng như các cài đặt, thư viện và phiên bản phần mềm khác nhau.

Có thể trước tiên bạn có thể viết một đoạn mã để đánh giá với một số đầu ra gỡ lỗi nếu bạn đoán nguồn gốc của lỗi là đúng và chỉ sau đó áp dụng lỗi thực tế.


1

Thông thường, đó là vấn đề về cấu hình hoặc dữ liệu, giả sử rằng mã và DB giống hệt nhau giữa Prod, QA và dev.

Trước tiên tôi sẽ xem xét như sau:

  • Bất kỳ dữ liệu đăng nhập mã của bạn có.
  • Kiểm tra người xem sự kiện cho các ngoại lệ chưa được xử lý.
  • Kiểm tra dữ liệu đại diện cho tiến trình của ứng dụng của bạn, nó có thể nằm trong DB, tệp, v.v. Nó có ý nghĩa hay không? Là những gì bạn mong đợi?

Khi bạn hiểu điều gì đang xảy ra, bạn cần chuyển sản xuất về trạng thái làm việc và khắc phục sự cố trong môi trường thấp hơn, cho đến khi sửa và triển khai lại vào sản xuất.


0

Trong khi môi trường của bạn là PHP, tôi đã trình bày về cách nghĩ về nó cho Java: http://www.infoq.com/presentations/maintained-production-java-apps

Các vấn đề cốt lõi là như nhau - để hiểu các điểm nghẹt có thể xảy ra để khắc phục sự cố: mạng, truy cập hệ thống tệp, tệp nhật ký, khóa chết, v.v. Ngoài ra, để biết cách đặt câu hỏi đúng: "Hệ thống bị lỗi" có nghĩa là: trang web có chậm không, có thông báo lỗi cụ thể không, có thời gian chờ không ", v.v.

Ngoài ra, có một số công cụ giúp xử lý sự cố dễ dàng hơn: Wireshark để khắc phục sự cố mạng là cách tốt nhất tuyệt đối và đáng để học hỏi. Những người khác phụ thuộc vào O / S bạn sử dụng. Đối với Windows, mọi thứ từ SysI Internalal (hiện là một phần của Microsoft) đều tuyệt vời. Đối với Unix / Linux, hãy xem kèo / strace.

Khi truy cập vào sản xuất, nhóm hoạt động nên biết cách sử dụng các công cụ / kỹ thuật đó hoặc bạn có một trường hợp kinh doanh cho họ (cùng với bạn) để tìm hiểu cách sử dụng chúng. Sau đó, họ cần một bộ giao thức khắc phục sự cố cụ thể để chạy khi có sự cố xảy ra, do đó bạn có thể thực hiện phân tích ngoại tuyến.


0

Câu trả lời ngắn: Không nếu bạn có một sự lựa chọn.

Câu trả lời dài: Nếu bạn không hiểu vấn đề, có một số rủi ro liên quan đến một bản vá như vậy:

  1. Bạn có thể phá vỡ một cái gì đó khác, mà thậm chí có thể tái sản xuất ít hơn.
  2. Bạn chỉ có thể che giấu vấn đề, làm cho việc chú ý và tái tạo trở nên khó khăn hơn (điều này làm cho nó tồi tệ hơn)
  3. Bạn đang vứt bỏ kinh nghiệm trong nước tiềm năng - kinh nghiệm có thể giúp bạn trở thành một lập trình viên tốt hơn, đồng thời có giá trị hơn cho công ty của bạn (tức là tăng lương tiềm năng trong tương lai).

Mặt khác, tôi thấy không có hại gì trong lần kiểm tra đầu tiên nếu cách khắc phục giả thuyết của bạn có hiệu quả không, và nếu có - thì hãy đào sâu hơn và tìm hiểu lý do thực sự hoặc các cách khác có thể tốt hơn để giải quyết vấn đề.

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.