문제

컴퓨터, 라우터, 프로그램, 브라우저를 다시 시작하여 얼마나 자주 문제를 해결합니까? 아니면 운영 체제 또는 소프트웨어 구성 요소를 다시 설치해야합니까?

소프트웨어 구성 요소가 상태를 올바른 방식으로 유지하지 못한다고 의심되는 경우 일반적인 패턴 인 것 같습니다. 그러면 구성 요소를 다시 시작하여 초기 상태를 얻습니다.

Amazon/Google에는 많은 마니 노드 클러스터가 있다고 들었습니다. 각 노드의 중요한 속성 중 하나는 몇 초 안에 다시 시작할 수 있다는 것입니다. 따라서 그중 하나가 실패하면 초기 상태로 되돌아가는 것은 다시 시작하는 문제 일뿐입니다.

이 기술을 일류 시민으로 활용하는 언어/프레임 워크/디자인 패턴이 있습니까?

편집하다 아마존의 일부 원칙과 가용성 및 일관성의 전반적인 원칙을 설명하는 링크 :http://www.infoq.com/presentations/availability-consistency

도움이 되었습니까?

해결책

이는 임베디드 시스템 세계와 통신에서 일반적입니다. 서버 기반 세계에서는 훨씬 덜 일반적입니다.

관심있는 연구 그룹이 있습니다. 그들은 복구 지향 컴퓨팅 또는 "Roc". ROC의 주요 원칙은 모든 프로그램에 참여할 수있는 가장 깨끗하고 가장 신뢰할 수있는 상태가 시작 직후에 있다는 것입니다. 따라서 결함을 감지 할 때는 결함에서 복구하려고 시도하는 대신 소프트웨어를 다시 시작하는 것을 선호합니다.

충분히 간단하게 들립니까? 글쎄, 대부분의 연구는 그 아이디어를 구현하는 데 도움이되었습니다. 그 이유는 당신과 다른 주석가들이 지적한 것입니다. OS 재시작은 너무 느리기 때문에 실행 가능한 복구 방법이 될 수 있습니다.

ROC는 세 가지 주요 부분에 의존합니다.

  1. 가능한 빨리 결함을 감지하는 방법.
  2. 나머지 시스템을 보존하면서 결함이있는 구성 요소를 분리하는 수단.
  3. 구성 요소 수준 재시작.

ROC와 전형적인 "야간 재시작"접근 방식의 실제 차이점은 ROC가 재부팅이 반응하는 전략이라는 것입니다. 내가 의미하는 바는 대부분의 소프트웨어가 어느 정도의 오류 처리 및 복구 (던지기, 캐치, 로깅, 레트리 루프 등)로 작성된 것입니다. ROC 프로그램은 결함 (예외)을 감지하고 즉시 출구. 두 패러다임을 혼합하면 두 세계의 최악의 결과가 낮습니다.

다른 팁

이것은 실제로 UNIX/Linux 세계에서 매우 드 rare니다. 이러한 OS는 심하게 행동하는 프로세스로부터 자신을 보호하도록 설계되었습니다 (Windows도 마찬가지). Google이 잘못된 소프트웨어를 수정하기 위해 하드 재시작에 의존하지 않는다고 확신합니다. 나는이 기술을 사용해서는 안된다고 말하고 누군가가 소프트웨어의 복구 경로라고 말하면 다른 것을 찾아야합니다!

마이크로 컨트롤러에는 일반적으로 Watchdog 타이머가 있으며, 이는 자주 재설정해야합니다. 또는 마이크로 컨트롤러가 재설정됩니다. 이렇게하면 펌웨어가 끝없는 루프에 갇히거나 입력을 기다리는 등에 붙어 있습니다.

사용하지 않은 메모리는 때때로 재설정을 유발하는 명령으로 설정되거나 재설정 될 때 마이크로 컨트롤러가 시작하는 것과 동일한 위치로 점프합니다. 이것은 어떻게 든 프로그램 메모리 외부의 위치로 점프하면 마이크로 컨트롤러를 재설정합니다.

임베디드 시스템에는 현재 스택이 저장되는 모든 NS가 저장되는 체크 포인트 기능이있을 수 있습니다. 메모리는 전원 재시작시 (즉, 배터리 백업)에서 비 휘발성이므로 전원 시작시 코드가 이전 체크 포인트로 점프 해야하는지 또는 새로운 시스템인지 테스트합니다.

Amazon/Google에도 비슷한 기술 (더 정교한)이 사용된다고 생각합니다.

디자인 패턴 자체를 생각할 수는 없지만 내 경험에 따르면 개발자로부터 "Select Is Broken"의 결과입니다.

50 사용자 사이트가 SQL Server Enterprise Edition (750MB 데이터베이스 포함)과 Novell Server가 과도한 통화와 캐싱이 없어서 Novell Server를 모두 보았습니다. Novell이었다 언제나 범인은 핵심 라이브러리에서 누락 된 "클로스 앤 링크"호출을 발견 할 때까지 개발자에 따르면. 그때까지, 하나의 누락 된 코드 라인을 해결하기 위해 업그레이드에 수천 명이 소비되었습니다.

(왜 그들이 Enterprise Edition을 가지고 있었는지 나를 넘어서서 묻지 마십시오 !!)

Apache에서 실행되는 PHP와 같은 스크립팅 언어를 보면 각 호출은 새로운 프로세스를 시작합니다. 기본 경우에는 프로세스간에 공유 상태가 없으며 호출이 완료되면 프로세스가 종료됩니다.

프로세스가 끝나고 오류 처리가 적을 때 릴리스 될 때 릴리스되므로 리소스 관리에 대한 장점은 덜 적용됩니다.

응용 프로그램 수준에서 몇 곳을 보았습니다 (폭탄이 발생하면 앱 자체를 다시 시작합니다).

응용 프로그램 수준에서 패턴을 구현했는데, DBase 파일의 서비스가 X 시간을 읽은 후 오류가 발생하기 시작하는 응용 프로그램 수준에서 패턴을 구현했습니다. 특정 오류가 발생하는 특정 오류를 찾고 있으며 해당 오류가 표시되면 서비스는 프로세스를 끊고 서비스를 다시 시작하는 콘솔 앱을 호출합니다. 그것은 Kludgey이고 나는 그것을 싫어하지만,이 특정 상황에서는 더 나은 대답을 찾을 수 없습니다.

IIS에는 특정 조건에서 응용 프로그램 풀을 다시 시작하는 내장 기능이 있습니다.

이 문제에 대해 서비스를 다시 시작하는 것은 서비스가 실패 할 때 취해야 할 조치 중 하나로 Windows의 모든 서비스에 대한 옵션입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top