N 버전 프로그래밍 (N version programming)
여러 구현체에 같은 요청을 보낸 후 결과를 비교해 하나의 결과를 선택한다
기원
- 'N버전 프로그래밍: 소프트웨어 운영의 신뢰성에 대한 결함 포용 접근법(N-VERSION PROGRAMMINC: A FAULT-TOLERANCE APPROACH TO RELlABlLlTY OF SOFTWARE OPERATlON)'
- Liming Chen, Algirdas Avizienis
- 결함 포용 컴퓨팅에 관한 제25회 국제 심포지엄(International Symposium on Faul-Tolerant Computing)(1995)
Abstract
N-version programing is defined as the independent generation of \(N \ge 2\) functionally equivalent programs from the same initial specification. A methodology of N-version programing has been devised and three types of special mechanisms have been identified that are needed to coordinate the execution of an N-version software unit and to canpare the correspondent results generated by each version. Two experiments have been conducted to test the feasibility of N-version programing. The results of these experiments are discussed. In addition, constraints are identified that must be met for effective application of N-version programing.
- N-버전 프로그래밍의 정의: 동일한 초기 사양(specification)을 통해 만들어진 \(N \ge 2\)개의 기능적으로 동등한 독립적인 프로그램.
From: 마이크로서비스 도입 이렇게 한다
전기 신호식 비행조종 제어(fly-by-wire) 항공기와 같은 특정 안전 핵심 제어 시스템에는 병행 실행의 변형이 존재한다고 주장할 수 있다. 항공기는 기계식 제어에 의존하기보다 디지털 제어 시스템에 의존하는 경우가 점점 더 많아지고 있다. 조종사가 케이블 장치를 당겨서 방향타를 제어하는 것이 아니라 제어 장치를 사용하면, 전기 신호식 비행조종 제어 항공기는 제어 시스템에 입력을 보내고 이 시스템은 방향타의 회전각을 결정한다. 이런 제어 시스템은 전송된 신호를 해석하고 적절한 행동을 수행해야 한다.
분명히, 이런 제어 시스템에 버그가 있다면 매우 위험할 수 있다. 결함의 영향을 상쇄하기 위해 몇몇 상황에 서는 동일한 기능의 여러 구현이 나란히 사용된다. 동일한 하위 시스템의 모든 구현으로 신호가 전송되고 나면, 그다음으로 응답이 전송된다. 일반적으로 참가자들 사이에서 정족수를 찾는 방법으로, 결과를 비교하고 '올바른' 한 가지 결과를 선택한다. 이 기법을 N버전 프로그래밍(N-version programming)이라 부른다.
이런 접근 방식의 최종 목표는 3장에서 살펴본 패턴들과는 달리, 구현을 대체하지 않는 것이다. 그 대신, 주어진 하위 시스템 중 하나가 버그의 영향을 감소시킬 것이라는 희망하에 동일한 작업을 수행하는 여러 구현체가 계속해서 함께 존재할 것이다.
– 마이크로서비스 도입 이렇게 한다. 3장. 150쪽.
참고문헌
- 마이크로서비스 도입 이렇게 한다 / 샘 뉴먼 저/박재호 역 / 책만 / 2021년 01월 20일 / 원서 : Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith
- N-VERSION PROGRAMMINC: A FAULT-TOLERANCE APPROACH TO RELlABlLlTY OF SOFTWARE OPERATlON