생산 과정에서 문제가 발생했을 때의 문제 이해


24

대본:

  • 생산을 추진
  • 푸시는 여러 가지를 bro습니다
  • 그 같은 빌드는 QA 또는 개발을 중단하지 않았다
  • 개발자는 제품에 액세스 할 수 없습니다.
  • 위에서 일을하게 만드는 압력이 많이 있습니다 .

사양 :

  • Zend에서 API 중심의 PHP / MVC 응용 프로그램.
  • 몇 대의 서버에 배포되었습니다.

내 질문:

조사하는 동안 뭔가 잘못되었다고 생각합니다. 그러나 나는 확실하지 않다. 물론 프로덕션에서는 테스트 할 수 없습니다. 그 직감을 기반으로 제안 된 수정 프로그램이 있다면 문제가 무엇인지 이해하기 전에 시도하고 적용하고 작동하는지 확인하는 것이 현명합니까?


24
DEV 또는 QA를 중단하지 않고 생산을 중단 한 경우 일반적으로 구성 문제입니다.
Mike L.

4
개인적으로 프로덕션에 액세스하지 못할 수도 있지만 문제를 해결하려면 눈과 손이 될 수있는 운영 팀원이 있어야합니다.
shufler

3
새 버전에서 사용될 수있는 데이터베이스 액세스 또는 네트워크 권한과 같은 구성 문제를 배제 했습니까?
JB King

7
@MikeL. 또는 개발자 또는 품질 관리에 존재하지 않는 손상된 데이터입니다.
maple_shaft

3
@shufler-미국에서 Sarbanes–Oxley Act (일명 SOX)는 개발자가 공개적으로 거래되는 회사의 생산에 액세스 할 수 없도록 요구합니다. 일부 회사에는 액세스를 제한하는 자체 내부 정책이 있습니다. 이는 일반적으로 개발자가 직감에 따라 전체 시스템을 중단 한 후에 적용됩니다.
jfrankcarr

답변:


33

문제점에 대한 많은 정보 (로그 파일 등)를 확보 한 후 프로덕션 서버를 작동 상태로 롤백하십시오. 물론 개발자의 입장에서 볼 때 고통 스럽지만 대부분 주어진 것입니다.

다음으로 개발 환경에서 문제를 재현 할 수 있는지 확인하십시오. 가능하면 수정 한 후 다시 릴리스하십시오.

이를 재현 할 수없는 경우 더 많은 진단을 추가하고 한 서버에 잠시 릴리스하여 문제점에 대한 자세한 정보를 얻을 수 있는지 확인하십시오.

이것이 가능하지 않은 경우 프로덕션 환경과 dev / qa 환경의 차이점을 자세히 살펴보고 개발 환경을 프로덕션 환경에 더 가깝게 만드십시오.


4

문제를 얼마나 이해하고 있습니까? 직감으로 인해 상황이 악화 될 위험은 무엇입니까? DEV / QA 지역에서 돌아가서 문제를 재현 할 수 있습니까? DEV / QA 리전을 PROD에 더 가깝게 동기화하기 위해 무엇을 할 수 있습니까? 환경 또는 데이터베이스 설정을 일부 변경해야 할 수도 있고 PROD 데이터를 DEV로 가져와야 할 수도 있고 디버그 설정을 변경해야 할 수도 있습니다.

일반적으로 다른 지역에서 실제로 솔루션이 올바른지 확인할 수 없으면 솔루션의 획을 PROD로 푸시 하지 않는 것이 좋습니다. PROD에서 버그가 발생할 때 발생하는 문제의 종류를 이해하고 다른 곳에서는 재현 할 수 없습니다. DEV / QA와 PROD의 차이점이 무엇인지 확인하고 그에 초점을 맞추는 것이 중요 합니다 . 내 경험상 일반적으로 환경 설정이거나 특히 PROD와는 다른 구성입니다. 그리고이 문제를 해결하기 위해 위에서부터 많은 압력이있을 수 있으므로 이전 작업 상태 로 롤백 한 다음 DEV에서 문제를 재현하고 DEV에서 수정 시도한 다음 시도해 볼 수 있습니다 다시 PROD? 그것이 내가 제안하는 것입니다.


5
당신은 확실히 당신이 확실하게 그것을 고칠 지 모르는 깨진 제품에 수정을 적용하고 싶지 않습니다; 아마도 더 많이 깨뜨릴 것입니다! 안정적인 상태로 롤백하고 QA에서 처음부터 유일한 시간에 맞출 압력이 적은 QA에서 작업하는 것이 좋습니다.
Michael K

2

수정 종류에 따라 다릅니다. 종종 개발에 나타나지 않는 프로덕션 문제는 데이터베이스의 충돌과 관련이 있습니다. 따라서 정확히 "있는"것이 무엇인지 확실하지 않고 데이터베이스 내용을 변경하는 버그를 적용하면 큰 재앙이 발생할 수 있습니다. 쉽게 변경 사항을 되돌릴 수 있으면 시도해 볼 수 있습니다. 그러나 일반적으로 직접 액세스 할 수없는 경우 테스트를 위해 최소한 데이터베이스 사본 또는 전체 서버 사본이 있어야합니다. 올바른 권한을 가진 사람은 여전히 ​​새 코드를 실행해야하지만 최소한 데이터 손실 위험이 없습니다. (그러나 때로는 데이터베이스 크기 나 인프라의 복잡성으로 인해 이러한 설정이 금지되는 경우가 있습니다)

다른 설정, 라이브러리 및 소프트웨어 버전과 같은 많은 가능성이 있기 때문에 실제로 어렵습니다.

아마도 버그의 소스에 대한 추측이 맞다면 실제 버그 수정을 적용하면 디버그 출력으로 평가하는 코드를 먼저 작성할 수 있습니다.


1

일반적으로 코드와 DB가 Prod, QA 및 dev간에 동일하다고 가정하면 구성 또는 데이터 문제입니다.

먼저 다음을 살펴 보겠습니다.

  • 코드에있는 모든 로깅 데이터
  • 처리되지 않은 예외가 있는지 이벤트 뷰어를 확인하십시오.
  • 응용 프로그램의 진행률을 나타내는 데이터를 확인하십시오. DB, 파일 등일 수 있습니다. 의미가 있습니까? 당신은 무엇을 기대합니까?

진행 상황을 이해하면 프로덕션 환경을 작업 상태로 롤백하고 프로덕션 환경에 수정 및 재배치 될 때까지 낮은 환경에서 문제를 해결하는 작업을 수행해야합니다.


0

귀하의 환경이 PHP 인 동안 Java에 대해 생각하는 방법에 대한 프레젠테이션을했습니다 : http://www.infoq.com/presentations/maintaining-production-java-apps

핵심 문제는 동일합니다. 네트워크, 파일 시스템 액세스, 로그 파일, 교착 상태 등과 같은 상황을 해결할 수있는 초크 포인트를 이해하는 것입니다. 또한 올바른 질문을하는 방법을 알고 있어야합니다. "시스템 다운"- "특히 구체적으로 무엇을하십니까? 평균 : 웹 페이지가 느리거나 특정 오류 메시지가 있습니까? 시간 초과가 있습니까? "등

네트워크 문제 해결을위한 Wireshark는 절대적으로 최고이며 배우는 것이 좋습니다. 다른 것은 사용하는 O / S에 따라 다릅니다. Windows의 경우 SysInternal (현재 Microsoft의 일부)의 모든 것이 훌륭합니다. Unix / Linux의 경우, truss / strace를보십시오.

프로덕션에 액세스 할 때 운영 그룹은 해당 도구 / 기술을 사용하는 방법을 알고 있거나 사용 방법을 배우기위한 비즈니스 사례가 있어야합니다. 그런 다음 문제가 발생할 때 실행할 특정 문제 해결 프로토콜 세트가 필요하므로 분석을 오프라인으로 수행 할 수 있습니다.


0

짧은 대답 : 선택의 여지가 없습니다.

긴 대답 : 문제를 이해하지 못하면 이러한 패치와 관련된 몇 가지 위험이 있습니다.

  1. 다른 것을 부술 수 있으며, 재현성이 떨어질 수도 있습니다.
  2. 당신은 할 수 마스크 (이 악화을 만드는) 통지 및 재현하기 어렵게 만드는 문제를
  3. 당신은 잠재적 인 국내 경험을 버리고 있습니다.-더 나은 프로그래머가 될 수있는 경험과 동시에 회사에 더 가치있는 기회가 될 것입니다 (예 : 잠재적 인 미래 인상).

반면에, 가정 된 수정 프로그램이 제대로 작동하는지 먼저 확인하면 문제가 해결되지 않습니다. 그런 다음 더 깊이 파고 들어가서 실제 원인 또는 문제를 해결하는 더 나은 방법을 찾아보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.