최상의 답변
확장 성이란 시스템이 초기 또는 원래 의도 한 것보다 더 넓은 사용자 기반에 비교적 쉽게 적응할 수 있음을 의미합니다. . 애플리케이션의 확장 성을 결정하는 요소는 다음과 같습니다.
- 좋은 프로그램 구조 (새로운 역할을 지원하기 위해 프로그램을 이해하고 확장하는 것이 얼마나 쉬운 지)
- 여러 사용자 및 동시 데이터베이스 액세스 및 편집 (데이터베이스 잠금, 액세스 거부, 손상 또는 데이터 손실 방지)
- 사용자 액세스 및 데이터베이스 무결성을위한 보안 규정
- 여러 시간대에 걸쳐 여러 서버 및 데이터베이스에 분산 된 애플리케이션
- 데이터베이스 백업, 수정 및 복원
- 언어 및 문화 조항
- 타사와의 상호 통신을위한 프로비저닝 잘 관리되는 프로그램 인터페이스를 노출하거나 업계 표준에 가입하여 애플리케이션을 적용합니다.
- 리소스 사용량 및 하드웨어 / 운영 체제 종속성
- 실시간 성능
특정 비즈니스 도메인에 따라 다른 요인이 있지만, 이것이 우리가 일상적으로보고있는 요인입니다. 회사가 애플리케이션을 “확장”하거나 “확장”하려고 할 때 문제를 제기하십시오.
확장 성은 일반적으로 다음 중 하나 또는 다음과 같은 경우에 어려움을 겪습니다.
- 프로그램이 다른 사람에 의해 고 안되고 작성되었습니다. 애플리케이션 개발 분야에 능숙 함
- 프로그램 작성에 대한 책임은 고객의 미래 요구에 적합한 모든 요소를 탐색하지 않는 사양으로 계약됩니다 (약한 사양은 종종 확장 불가능한 솔루션으로 이어짐 )
- 비즈니스 도메인을 이해하는 숙련 된 소프트웨어 엔지니어의 감독이 없습니다.
확장 실패의 간단한 예는 제가 다시 작업 한 창고 인벤토리 프로그램입니다. 1990 년 (ish).
원래 프로그램은 한 명의 사용자, 한 대의 서버 및 야간 백업을 위해 작성되었습니다 (시스템을 사용할 수 없었던 시간 동안). 고객은 연속적으로 다음을 원했습니다.
- 사용자 수를 1 명에서 최대 50 명 이상으로 늘리고 각 사용자에 대해 다양한 역할과 액세스 권한을 부여하기를 원했습니다.
- 동일한 국가 내의 여러 창고를 지원하도록 애플리케이션 확장
- 여러 시간대, 언어, 법적 표준 및 운영 절차에 대한 지원을 암시하는 새로운 해양 창고를 고려하여 애플리케이션을 확장
원래 프로그램은 이러한 강력한 확장 요구 사항에 맞게 구성되지 않았습니다. 데이터베이스는 빈번한 “치명적인 수용”잠금, 데이터 손실 및 데이터베이스 백업 절차로 인한 허용 할 수없는 다운 타임으로 어려움을 겪었습니다. 이 애플리케이션은 “오프라인”데이터 입력에 대한 조항이 없었으며 물론 통신 문제에 대해 내결함성을 갖도록 작성되지 않았습니다. 프로그램 업데이트 시도도 악몽으로 판명되었습니다. 기본적으로 전체 시스템이 글로벌 업데이트를 설치하는 데 몇 시간 동안 중단되었습니다.
컨설턴트로 호출되기 전에 프로그램은 나중에 종료하고 불편하게 사라진 원래의 코더 (단수)에 의해 “패치”되었습니다.
패칭은 코드의 구조와 기능을 난독하게 만들었습니다. 이것이 회사에 미치는 위험을 인식 할만큼 아무도 알지 못했습니다! 코드는 C ++로 작성되었으며 업계 표준의 MBCS (멀티 바이트 문자 집합) 문자열 대신 바이트 배열을 사용했습니다. 일반적인 아이디어를 얻을 수 있습니다!
우리는 “수정”을 요청 받았습니다. 문제. 사실, 고객을 상업용 재고 관리 제품으로 전환하는 것이 더 간단하고 저렴할 수 있었지만, 시스템에 재무 모델링이 깊이 내장되어 있었고 이러한 기능을 상업용으로 이전하는 방법에 대해 충분히 이해하지 못했습니다. 프로그램 (적어도 큰 위험은 없음).
결국 더 비용 효율적인 솔루션을 지적 했음에도 불구하고 우리는 제품을 리버스 엔지니어링하고 애플리케이션을 완전히 다시 작성해야했습니다. 제품을 다시 작성하는 데 2 명의 시스템 설계자, 4 명의 수석 엔지니어, 20 명의 소프트웨어 엔지니어, 5 명의 검증 및 2 명의 도구 / 방법론 엔지니어가 필요했으며 애플리케이션을 일반 릴리스로 가져 오는 데 거의 2 년이 소요되었습니다.
그래서 확장 성을 어떻게 달성합니까?
- 확장 성 요구 사항을 제품 사양에 기록했는지 확인하는 것부터 시작하십시오. 일반적으로 시간 압박과 최저 비용은 사양에서 적절하게 지정되지 않은 영역에서 희생을 초래합니다.
- 향후 요구 사항을 충족 할 수있는 구조를 개발하는 데 도움을 줄 수있는 도메인 전문가와 협력합니다.
- li>
- 확장 성 문제를 피하기 위해 처음부터 공식화 된 디자인 패턴, 라이브러리, 4GL / AI 애플리케이션 및 아키텍처를 활용하십시오 (그 중 대부분은 쓰라린 경험에서 개발 됨).
- 동시성 높은 애플리케이션을위한 분산 된 내결함성 데이터베이스, 내장형 보안 아키텍처, 데이터베이스 복제, 클라우드 처리 등과 같은 모든 핵심 영역에 대해 읽어보십시오.
- 주요 직책에 노련하고 경험이 풍부한 엔지니어. 우리가 착수 한 구조 프로젝트의 거의 50 \%가 경험이 부족한 수석 엔지니어와 시스템 설계자의 결과라고 말하고 싶습니다. 나머지는 관리 실패 나 엔지니어링과 고객 간의 부적절한 커뮤니케이션 때문이었습니다.
그렇습니다. 요즘에는 중대형 기업의 확장 성 문제에 대한 변명의 여지가 없지만 많은 기업은 최선을 다해 솔루션을 해킹하는 소수의 사람들로 시작합니다. 그러면 회사가 성장하고 확장 성은 정상적인 발전보다는 악몽이됩니다!
Answer
소프트웨어 엔지니어링의 확장 성은 일반적으로 다음과 같은 방식으로 소프트웨어 시스템을 설계하는 것을 말합니다. , 시스템 사용자 수가 증가함에 따라 (100 배 이상의 요인에도 불구하고) 소프트웨어는 유사한 응답 시간으로 계속 작동합니다. 이제 다음 질문은 “어떻게이 작업을 수행 할 수 있습니까?”입니다.
독립 실행 형 데스크톱 소프트웨어 (예 : 게임)는 각 사용자가 자신의 컴퓨터 전체를 갖게되므로 항상 100 \% 확장 가능합니다. 이것은 사소한 형태의 확장 성입니다.
클라이언트-서버 및 웹 기반 소프트웨어 시스템은 컴퓨터 인 서버 에 의존합니다. 여러 사용자에게 서비스를 제공합니다. 주어진 서버가 제한된 수의 동시 사용자 만 처리 할 수 있다는 것은 분명합니다.
시스템이 단일 서버가 처리 할 수있는 것 이상으로 확장 할 수 있도록하는 두 가지 일반적인 기술이 있습니다. 확장 성이 뛰어난 시스템은 두 기술을 결합합니다.
첫 번째는 기능을 여러 부분으로 분할하는 것입니다. 하나의 일반적인 분할은 시스템이 의존하는 데이터베이스를 호스팅 할 별도의 서버를 갖는 것입니다 (거의 항상 영구적 인 정보를 보유하는 일종의 데이터베이스가 있음). 데이터베이스 서버에는 많은 양의 메모리와 매우 빠른 디스크 또는 RAID 어레이가 제공되는 반면 다른 유형의 서버에는 적은 메모리와 상대적으로 적은 디스크 공간이 필요합니다.
이는 n 계층 아키텍처로 확장 할 수 있습니다. 점점 더 많은 기능 (및 데이터베이스의 경우 데이터)이 서로 다른 프로세스로 분할됩니다. 로드가 증가하면 성능을 유지하기 위해 프로세스가 별도의 서버로 마이그레이션됩니다. 이러한 모든 서버는 물리적으로 동일한 서버 팜에 있으며 초고속 네트워크 연결로 연결되어 있습니다.
확장 성을 위해 사용되는 다른 기술은 복제입니다. . 즉, 예를 들어 여러 웹 서버가 사용되고 각 사용자는 그 중 하나에 만 연결됩니다. 더 많은 사용자를 지원하려면 시스템에 더 많은 하드웨어 만 필요합니다 (이 예에서는 웹 서버 시스템). 데이터베이스는 또한 복제가 가능하므로 여러 데이터베이스 서버가 데이터베이스의 복제를 지원할 수 있습니다 (데이터베이스의 다른 복사본을 최신 상태로 유지하는 것이 까다로울 때도 있지만 dba는이 문제를 수년 동안 처리해 왔습니다). 대규모 시스템의 경우 확장 가능하도록 설계된 데이터베이스가 있으며 데이터를 여러 서버에 분산합니다.
A2A : “소프트웨어 엔지니어링에서”확장 성 “이란 무엇입니까?”