시스템 개발
1. 높은 응집력/낮은 결합력
높은 응집력은 소프트웨어 모듈을 의미합니다. 관련성이 높은 코드로 구성되어 있으며 단일 작업만 담당하는데, 이를 단일 책임 원칙이라고도 합니다. 모듈의 응집력은 모듈 내 내부 연결의 긴밀성을 반영합니다.
모듈 간의 연결이 가까울수록 결합력이 강해지고 모듈의 독립성이 떨어집니다. 모듈 간의 결합 수준은 모듈 간 인터페이스의 복잡성, 호출 방법 및 전송되는 정보에 따라 달라집니다. 완전한 시스템을 위해서는 모듈이 가능한 한 독립적으로 존재해야 합니다. 일반적으로 프로그램 구조에서 각 모듈의 응집도가 높을수록 모듈 간의 결합도는 낮아집니다.
2. 오버 디자인
오버 디자인이란 지나치게 미래지향적인 디자인을 하거나, 상대적으로 단순한 것을 지나치게 복잡하게 만들고, 모듈성, 확장성, 디자인 패턴 등을 지나치게 추구하여 시스템에 불필요한 기능을 추가하는 것을 의미합니다.
3. 조기 최적화
조기 최적화는 개발 프로세스의 초기 단계가 아니라 향후 요구 사항 변경이 아직 이해되지 않은 경우를 의미합니다. 최적화로 인해 새로운 요구 사항을 제대로 구현하지 못할 수 있을 뿐만 아니라 예상되는 최적화에 대한 추측이 잘못되어 실제로는 아무것도 얻지 못하고 코드가 복잡해질 수 있습니다.
올바른 방법은 먼저 요구 사항을 고품질로 구현하고, 충분한 테스트 사례를 작성한 다음 프로파일링하여 성능 병목 현상을 찾은 다음 최적화하는 것입니다.
4. 리팩토링
리팩토링은 프로그램 코드를 조정하고, 프로그램의 디자인 패턴과 아키텍처를 보다 합리적으로 만들고, 소프트웨어의 확장성과 유지 관리성을 향상시켜 소프트웨어의 품질과 성능을 향상시키는 것입니다.
5. 깨진 유리창 효과
깨진 유리창 이론이라고도 알려진 깨진 유리창 이론은 범죄학의 이론입니다. 이 이론은 환경에 바람직하지 않은 현상이 존재하도록 허용하면 사람들은 이를 모방하거나 심지어 악화시키고 싶은 유혹을 받게 될 것이라고 믿습니다. 창문이 몇 개 깨진 건물의 경우, 창문을 수리하지 않으면 파손자가 더 많은 창문을 파괴할 수 있습니다. 결국 그들은 건물에 침입하여 사람이 살지 않는 것으로 발견되면 그곳에 정착하거나 불을 지를 수도 있습니다.
소프트웨어 엔지니어링에 적용하면 시스템 코드나 아키텍처 설계에 숨겨진 위험이 나타나도록 허용해서는 안 됩니다. 그렇지 않으면 시간이 지남에 따라 숨겨진 위험이 점점 더 심각해질 것입니다. 반대로, 고품질 시스템은 사람들이 무의식적으로 고품질 코드를 작성하게 만듭니다.
6. 상호 불신의 원칙
은 프로그램 작동의 전체 링크 업스트림과 다운스트림에서 기계 네트워크를 포함하여 어떤 포인트도 언제든지 실패하거나 예측할 수 없는 동작을 보장할 수 없음을 의미합니다. 서비스 자체는 환경, 입력 및 요청 등에 따라 달라지므로 모든 곳에서 보호되어야 합니다.
7. 지속성
지속성은 임시 상태와 지속성 상태 간에 프로그램 데이터를 변환하는 메커니즘입니다. 일반인의 관점에서 보면 임시 데이터(예: 영구적으로 저장할 수 없는 메모리의 데이터)는 영구 데이터(예: 장기간 저장할 수 있는 데이터베이스 또는 로컬 디스크에 지속되는 데이터)로 유지됩니다.
8. Critical section
Critical 섹션은 여러 스레드에서 사용할 수 있는 공통 리소스 또는 공유 데이터를 나타내는 데 사용되지만 한 번에 하나의 스레드만 임계 섹션 리소스를 차지하면 다른 스레드에서만 사용할 수 있습니다. 스레드가 이 리소스를 사용하려면 기다려야 합니다.
9. 차단/비차단
차단과 비차단은 일반적으로 여러 스레드 간의 상호 작용을 설명합니다. 예를 들어 스레드가 중요 섹션 리소스를 점유하는 경우 이 리소스가 필요한 다른 모든 스레드는 이 중요 섹션에서 기다려야 합니다. 대기하면 스레드가 중단됩니다. 이 상황은 차단됩니다. 이때 리소스를 점유하고 있는 스레드가 리소스를 해제할 의사가 없으면 이 중요 섹션에서 차단된 다른 모든 스레드는 작동할 수 없습니다. 비차단을 사용하면 여러 스레드가 동시에 중요 섹션에 들어갈 수 있습니다.
10. 동기화/비동기
보통 동기화와 비동기는 함수/메서드 호출을 의미합니다.
동기화는 함수 호출을 실행할 때 결과를 얻을 때까지 호출이 반환되지 않음을 의미합니다. 비동기 호출은 즉시 반환되지만 비동기 호출의 즉시 반환은 작업이 완료되었음을 의미하지 않으며 작업을 계속하기 위해 백그라운드에서 스레드를 시작하고 작업이 완료된 후 콜백이나 다른 메서드를 통해 호출자에게 알립니다. 완전한.
11. 동시성/병렬
병렬은 여러 명령이 여러 프로세서에서 동시에 실행되는 것을 의미합니다. 따라서 미시적 관점이든 거시적 관점이든 둘은 함께 실행됩니다.
동시성은 하나의 명령만 동시에 실행할 수 있지만 여러 프로세스 명령이 빠른 회전으로 실행된다는 의미입니다. 이는 거시적 관점에서는 여러 프로세스가 동시에 실행되지만 미시적 관점에서는 동시에 실행되지 않는 효과가 있습니다. . , 시간을 여러 세그먼트로 나누면 여러 프로세스가 신속하고 교대로 실행될 수 있습니다.
Architecture Design
1. 높은 동시성
분산 시스템의 출현으로 인해 높은 동시성(High Concurrency)은 일반적으로 설계를 통해 시스템이 동시에 많은 요청을 병렬로 처리할 수 있도록 보장하는 것을 의미합니다. 일반인의 관점에서 높은 동시성이란 동일한 시점에 많은 사용자가 동일한 API 인터페이스 또는 URL 주소에 동시에 액세스하는 것을 의미합니다. 이는 활성 사용자 수가 많고 사용자가 집중된 비즈니스 시나리오에서 자주 발생합니다.
2. 고가용성
고가용성 HA(High Availability)는 분산 시스템 아키텍처 설계에서 고려해야 할 요소 중 하나이며 일반적으로 시스템이 높은 수준을 유지하면서 다운타임을 줄이기 위해 특별히 설계되었음을 의미합니다. 서비스 가용성.
3. 읽기와 쓰기의 분리
데이터베이스 제품의 안정성을 보장하기 위해 많은 데이터베이스에는 이중 머신 핫 백업 기능이 있습니다. 즉, 제1 데이터베이스 서버는 외부 추가, 삭제, 수정 서비스를 제공하는 프로덕션 서버이고, 제2 데이터베이스 서버는 주로 읽기 작업을 수행한다.
4. 콜드 스탠바이/핫 스탠바이
콜드 스탠바이: 두 대의 서버, 하나는 실행 중이고 다른 하나는 백업으로 실행되지 않습니다. 이런 방식으로 실행 중인 서버가 다운되면 백업 서버가 실행됩니다. 콜드 스탠바이 솔루션은 상대적으로 구현하기 쉽지만 콜드 스탠바이의 단점은 호스트 장애 시 스탠바이 시스템이 자동으로 인계받지 않고 서비스의 활성 전환이 필요하다는 점입니다.
핫 대기: 일반적으로 활성/대기 방식으로 알려져 있으며, 데이터베이스 데이터를 포함한 서버 데이터가 동시에 두 개 이상의 서버에 기록됩니다. 활성 서버에 장애가 발생하면 소프트웨어 진단(보통 하트비트 진단)을 통해 대기 머신이 활성화되어 짧은 시간 내에 애플리케이션이 정상적으로 사용되도록 완전히 복원됩니다. 한 서버가 다운되면 자동으로 다른 백업 서버로 전환됩니다.
5. 원격 위치의 멀티 액티브
원격 위치의 멀티 액티브는 일반적으로 여러 도시에 독립적인 데이터 센터를 구축하는 것을 의미합니다. 콜드 백업은 전체 용량을 백업하는 것입니다. 일반적으로 비즈니스 요구 사항을 지원하지 않습니다. 주 컴퓨터실에 장애가 발생한 경우에만 백업 컴퓨터실로 전환되며, 다중 활동은 이러한 컴퓨터실에서도 트래픽을 처리하고 일상 업무에서 비즈니스 지원을 제공해야 함을 의미합니다.
6. 로드 밸런싱
로드 밸런싱은 트래픽을 여러 서버에 분산시키는 로드 밸런싱 서비스입니다. 애플리케이션의 외부 서비스 기능을 여러 인스턴스에 자동으로 배포하고, 단일 장애 지점을 제거하여 애플리케이션 시스템의 가용성을 향상시키며, 더 높은 수준의 애플리케이션 내결함성을 달성할 수 있도록 하여 애플리케이션 배포에 필요한 로드를 원활하게 제공할 수 있습니다. 효율적이고 안정적이며 안전한 서비스를 제공하기 위한 균형 잡힌 용량.
7. 동적 및 정적 분리
동적 및 정적 분리는 웹 서버 아키텍처에서 정적 페이지 또는 정적 콘텐츠 인터페이스와 다양한 시스템 액세스에 대한 동적 콘텐츠 인터페이스를 분리하여 액세스 성능을 향상시키는 아키텍처 설계 방법을 말합니다. 전체 서비스의 유지 관리.
8. 클러스터
단일 서버의 처리 용량이 성능 병목 현상에 도달하면 여러 서버를 결합하여 서비스를 제공합니다. 클러스터 내의 를 클러스터의 "노드"라고 하며, 각 노드는 동일한 서비스를 제공할 수 있으므로 전체 시스템의 동시 처리 능력이 두 배로 늘어납니다.
9. 분산
분산 시스템은 비즈니스 기능에 따라 전체 시스템을 여러 개의 독립적인 하위 시스템으로 분할하는 것입니다. 각 하위 시스템을 "서비스"라고 합니다. 분산 시스템은 요청을 서로 다른 하위 시스템으로 분류하고 배포하여 서로 다른 서비스가 서로 다른 서비스를 처리할 수 있도록 합니다. 요청. 분산 시스템에서는 하위 시스템이 독립적으로 실행되고 네트워크 통신을 통해 연결되어 데이터 상호 운용성과 복합 서비스를 구현합니다.
10. CAP 이론
CAP 이론은 분산 시스템에서 Consistency(일관성), Availability(가용성) 및 Partition Tolerance(파티션 내결함성)가 동시에 확립될 수 없다는 것을 의미합니다.
- 일관성: 동일한 시점에 분산 시스템의 모든 데이터 백업이 동일하거나 동일한 상태에 있어야 합니다.
- Availability: 시스템 클러스터의 일부 노드가 다운된 후에도 시스템은 여전히 사용자 요청에 올바르게 응답할 수 있습니다.
- 파티션 오류 허용: 시스템은 노드 간 네트워크 통신의 오류를 허용할 수 있습니다.
간단히 말하면 분산 시스템에서는 위 속성 중 최대 2개까지 지원 가능합니다. 그러나 분명히 분산되어 있으므로 분할할 수밖에 없으므로 분할 오류를 100% 피할 수는 없습니다. 따라서 우리는 일관성과 가용성 중에서 하나만 선택할 수 있습니다.
분산 시스템에서는 일관성보다 더 중요한 가용성을 추구하는 경우가 많습니다. 따라서 고가용성을 달성하는 방법에는 CAP 이론을 더욱 확장한 또 다른 이론인 BASE 이론이 있습니다.
11. 기본 이론
기본 이론 내용:
- Basically Available(기본적으로 사용 가능)
- Eventually Consistency(eventual Consistency)
BASE 이론은 CAP에서 일관성과 가용성 간의 균형을 맞춘 결과입니다. 이론의 핵심 아이디어는 강력한 일관성을 달성할 수 없지만 각 애플리케이션은 자체 비즈니스 특성에 따라 적절한 방법을 사용하여 시스템이 최종 일관성을 달성할 수 있다는 것입니다.
12. 수평 확장/수직 확장
수평 확장 Scale Out은 서버나 프로그램 인스턴스를 추가하여 부하를 분산시켜 저장 용량과 컴퓨팅 성능을 높입니다. 또한, 공식 계정 프로그래밍 테크놀로지 서클 백엔드를 검색해 'mall'이라고 답하면 깜짝 선물 패키지를 받아보실 수 있습니다.
수직 확장 Scale Up은 단일 기계의 처리 능력을 향상시킵니다.
세로로 확장하는 방법에는 두 가지가 있습니다.
- (1) 독립형 하드웨어 성능 향상(예: 32개 코어와 같은 CPU 코어 수 늘리기, 10G와 같은 더 나은 네트워크 카드로 업그레이드, SSD와 같은 더 나은 하드 드라이브로 업그레이드, 하드 드라이브 확장) 2T와 같은 드라이브 용량, 128G와 같은 시스템 메모리 확장
- (2) 독립형 소프트웨어 또는 아키텍처의 성능을 향상합니다. 예를 들어 캐시를 사용하여 IO 수를 줄이고 비동기식을 사용하여 단일을 늘립니다. 서비스 처리량, 잠금 없는 데이터 구조를 사용하여 응답 시간 단축
13. 병렬 확장
수평 확장과 유사합니다. 클러스터 서버의 노드는 모두 병렬 피어 노드입니다. 확장이 필요한 경우 클러스터의 서비스 기능을 향상시키기 위해 더 많은 노드를 추가할 수 있습니다. 일반적으로 서버의 주요 경로(예: 로그인, 결제, 핵심 비즈니스 로직 등)는 런타임 시 동적 병렬 확장을 지원해야 합니다.
14. 탄력적 확장
은 배포된 클러스터의 동적 온라인 확장을 의미합니다. 탄력적 확장 시스템은 실제 비즈니스 환경과 특정 전략에 따라 더 많은 노드(스토리지 노드, 컴퓨팅 노드, 네트워크 노드 포함)를 자동으로 추가하여 시스템 용량을 늘리거나 시스템 성능을 향상시키거나 시스템 신뢰성을 향상시키거나 이 세 가지 목표를 한 번에 달성할 수 있습니다. 동시에.
15. 상태 동기화/프레임 동기화
상태 동기화: 상태 동기화는 서버가 모든 게임 논리를 계산하고 이러한 계산 결과를 브로드캐스트하는 역할만 담당한다는 의미입니다. 게임 결과.
특징: 상태 동기화가 매우 안전하고 로직 업데이트가 편리하며 연결 해제 및 재연결이 빠르지만 개발 효율성이 낮고 게임 복잡도에 따라 네트워크 트래픽이 증가하며 서버가 더 큰 압력을 견뎌야 합니다.
프레임 동기화: 서버는 논리적 처리 없이 메시지만 전달합니다. 각 클라이언트는 초당 동일한 수의 프레임을 가지며 모든 프레임에서 동일한 입력 데이터를 처리합니다.
Feature: 프레임 동기화는 시스템이 동일한 입력에서 동일한 출력을 갖도록 보장해야 합니다. 프레임 동기화는 높은 개발 효율성, 낮은 트래픽 소비 및 안정성을 제공하며 서버에 거의 부담을 주지 않습니다. 그러나 네트워크 요구 사항이 높고 연결 끊김 및 재연결 시간이 길고 클라이언트 컴퓨팅 부담이 높습니다.
네트워크 통신
1. 연결 풀
연결 버퍼 풀을 미리 구축하고 연결 풀에 있는 연결을 효율적이고 안전하게 재사용할 수 있도록 연결 사용, 할당, 관리 전략을 제공합니다. 빈번한 연결 설정 및 종료.
2. 연결 끊김 및 재연결
네트워크 변동으로 인해 사용자가 서버에서 간헐적으로 연결이 끊어지는 현상이 발생합니다. 네트워크가 복원된 후 서버는 사용자가 마지막으로 연결을 끊었을 때의 상태 및 데이터에 연결을 시도합니다.
3. 세션 지속성
세션 지속성은 클라이언트와 서버 간의 상호 작용 프로세스 간의 상관 관계를 식별하고 로드 밸런싱 요청을 수행하는 동안 일련의 관련 액세스를 보장할 수 있는 로드 밸런서의 메커니즘을 의미합니다. 하나의 기계에. 인간의 용어로 표현하자면, 세션 중에 시작된 여러 요청은 모두 동일한 시스템에 속합니다.
4. 긴 연결/짧은 연결
일반적으로 TCP의 긴 연결과 짧은 연결을 나타냅니다. 연결이 길다는 것은 TCP 연결이 이루어진 후에도 연결이 유지되는 것을 의미하며, 일반적으로 통신 여부를 확인하기 위해 서로 하트비트를 보내는 방식으로 중간에 비즈니스 데이터가 여러 번 전송되며 일반적으로 연결이 활발하지 않습니다. 연결이 끊어졌습니다. 짧은 연결은 일반적으로 연결 설정, 트랜잭션(예: http 요청) 실행 및 연결 종료를 의미합니다.
5. 흐름 제어/혼잡 제어
흐름 제어는 송신자가 너무 빠르게 전송하여 수신자의 리소스를 소진시키는 것을 방지하여 수신자가 처리할 시간이 없도록 합니다.
혼잡 제어는 발신자가 메시지를 너무 빨리 보내는 것을 방지하여 네트워크가 처리할 시간이 없어 혼잡을 초래하고 이로 인해 이 부분은 물론 전체 네트워크의 성능이 저하되는 경우도 있습니다. 네트워크 통신 서비스가 정지되는 원인이 됩니다.
6. 천둥 떼 효과
천둥 떼 효과라고도 하는데, 간단히 말해서 여러 프로세스(멀티 스레드)가 대기하는 경우를 천둥 떼 현상이라고 합니다. 동일한 이벤트(휴면 상태), 기다리고 있는 이벤트가 발생하면 대기 중인 모든 프로세스(또는 스레드)가 깨어나지만 결국에는 단 하나의 프로세스(스레드)만이 이 시간의 "제어"를 얻을 수 있습니다. 다른 A 프로세스(스레드)는 "제어"를 획득하지 못하고 다시 슬립 상태에 들어갈 수 있는 현상을 패닉(panicking)이라고 합니다.
7. NAT
NAT(Network Address Translation, Network Address Translation)는 IP 메시지 헤더의 주소 정보를 바꾸는 것입니다. NAT는 일반적으로 조직의 네트워크 출구에 배포되어 내부 네트워크 IP 주소를 출구 IP 주소로 대체하여 공용 네트워크 연결 가능성과 상위 계층 프로토콜 연결을 제공합니다.
비정상적인 오류
1. 다운타임
다운타임은 일반적으로 예상치 못한 오류로 인해 컴퓨터 호스트가 충돌하는 것을 의미합니다. 둘째, 데이터베이스 교착 상태와 같은 일부 서버를 가동 중지 시간이라고 할 수도 있습니다.
2.coredump
프로그램 오류가 발생하여 비정상적으로 중단되면 OS는 프로그램 작업의 현재 상태를 coredunmp 파일에 저장합니다. 일반적으로 코어 덤프 파일에는 프로그램이 실행될 때 메모리, 레지스터 상태, 스택 포인터, 메모리 관리 정보 등이 포함됩니다.
3.캐시 침투/고장/눈사태
캐시 침투: 캐시 침투는 확실히 존재하지 않는 데이터를 조회하는 것을 의미하므로, 데이터를 조회할 수 없는 경우에는 데이터베이스에서 조회해야 합니다. 발견되면 캐시에 기록되지 않으므로 요청될 때마다 존재하지 않는 데이터가 데이터베이스에서 쿼리되어 데이터베이스에 부담을 줍니다.
캐시 분석: 캐시 분석은 핫스팟 키가 특정 시점에 만료되는 것을 말하며, 이 시점에서 이 키에 대한 동시 요청이 많아 많은 요청이 DB에 도달합니다. .
Cache Avalanche: 캐시 Avalanche는 캐시에 있는 대량의 데이터가 만료되는 시간을 말하며, 엄청난 양의 쿼리 데이터로 인해 데이터베이스에 과도한 부담을 주고 심지어 다운타임까지 발생시킵니다.
캐시 고장과의 차이점은 캐시 고장은 핫스팟 키 오류이고, 캐시 눈사태는 동시에 많은 수의 키 오류라는 것입니다.
4.500/501/502/503/504/505
500 내부 서버 오류: 내부 서비스 오류 일반적으로 서버에 예상치 못한 상황이 발생하여 요청을 완료할 수 없습니다. 가능한 이유:
501 구현되지 않음: 서버가 요청된 HTTP 요청을 이해하거나 지원하지 않습니다.
502 잘못된 게이트웨이: WEB 서버가 실패합니다. 요청한 php-fpm이 실행되었지만 어떤 이유로 완료되지 않아 결국 php-fpm이 종료됩니다. 프로세스. 가능한 이유:
503 서비스를 사용할 수 없습니다: 현재 서버를 사용할 수 없습니다. 시스템 유지 관리 서버가 일시적으로 클라이언트의 요청을 처리할 수 없는 상태입니다. 서버 공급자에게 문의할 수 있습니다.
504 게이트웨이 시간 초과: 서버 504 오류는 시간 초과를 나타냅니다. 이는 클라이언트가 보낸 요청이 게이트웨이에 도달하지 못하고 요청이 실행 가능한 php-fpm에 도달하지 않음을 의미합니다. 이는 일반적으로 구성과 관련이 있습니다. nginx.conf의
505 지원되지 않는 HTTP 버전: 서버가 요청에 사용된 HTTP 프로토콜 버전을 지원하지 않습니다. (HTTP 버전은 지원하지 않습니다.)
프로그래밍 언어 오류일 수 있는 500 오류를 제외하고 나머지 오류는 아마도 서버나 서버 구성의 문제로 이해될 수 있습니다.
5. 메모리 오버플로/메모리 누수
메모리 오버플로: 메모리 오버플로(Out Of Memory)는 프로그램이 메모리를 신청할 때 신청자가 사용할 수 있는 메모리가 부족하다는 의미입니다. int 유형 데이터를 저장하기 위한 블록입니다. 저장 공간이 있지만 Long 유형 데이터를 저장하면 결과적으로 메모리가 부족해 소위 메모리 오버플로라고 하는 OOM 오류가 보고됩니다.
Memory Leak: 메모리 누수란 프로그램에서 동적으로 할당된 힙 메모리가 해제되지 않거나 어떤 이유로 해제될 수 없어 시스템 메모리가 낭비되어 프로그램 속도가 느려지거나 심지어는 심각한 결과를 초래하는 것을 말합니다. 시스템이 충돌합니다.
6. 핸들 누출
핸들 누출은 프로세스가 시스템 파일을 호출한 후 열린 파일 핸들을 해제하지 않는 것입니다. 핸들 누수 이후의 일반적인 현상은 기기 속도가 느려지고, CPU가 급증하며, 핸들 누수가 발생한 CGI나 서버의 CPU 사용량이 늘어나는 것입니다.
7. 교착 상태
두 개 이상의 스레드가 실행 중에 서로 통신하거나 리소스를 확보하기 위해 발생하는 차단 현상을 말합니다. 이때는 모두 차단 상태를 유지할 수 없습니다. 시스템이 교착 상태에 있거나 시스템에 교착 상태가 있다고 합니다.
8. 소프트 인터럽트/하드 인터럽트
하드 인터럽트: 우리가 일반적으로 말하는 인터럽트는 하드 인터럽트(hardirq)를 의미합니다.
주로 시스템 주변 장치 상태의 변경 사항을 운영 체제에 알리는 데 사용됩니다.
소프트 인터럽트: 1. 일반적으로 커널은 하드 인터럽트 서비스 루틴에 의해 중단됩니다. 2. 실시간 시스템의 요구 사항을 충족하려면 인터럽트 처리가 최대한 빨라야 합니다.
이 기능을 구현하기 위해 리눅스에서는 인터럽트가 발생했을 때 단시간에 완료할 수 있는 작업을 하드 인터럽트(Hard Interrupt)를 사용하고, 이벤트 처리에 오랜 시간이 필요한 작업은 소프트 인터럽트인 인터럽트 이후에 완료한다. (softirq).
9. Glitch
짧은 순간에 서버 성능 지표(트래픽, 디스크 IO, CPU 사용량 등)가 그 순간 전후의 기간보다 훨씬 커집니다. 결함이 발생한다는 것은 서버 리소스가 고르지 않고 충분히 활용되지 않음을 의미하며, 이는 다른 더 심각한 문제로 쉽게 이어질 수 있습니다.
10. Replay 공격
공격자는 대상 호스트가 수신한 패킷을 시스템에 보내어 주로 신원 인증 과정에 사용되며 인증의 정확성을 파괴합니다. 유효한 데이터 전송을 악의적 또는 부정하게 지속적으로 반복하는 공격 유형입니다. 재생 공격은 개시자 또는 데이터를 가로채서 재전송하는 공격자에 의해 수행될 수 있습니다. 공격자는 네트워크 모니터링이나 기타 방법을 사용하여 인증 자격 증명을 훔친 다음 인증 서버로 다시 보냅니다.
11. 네트워크 아일랜드
네트워크 아일랜드란 클러스터 환경에서 일부 머신이 전체 클러스터와의 네트워크 연결이 끊어지고 작은 클러스터로 분할되어 데이터 불일치가 발생하는 상황을 말합니다.
12. 데이터 왜곡
클러스터 시스템의 경우 캐시는 일반적으로 분산되어 있습니다. 즉, 서로 다른 노드가 특정 범위의 캐시된 데이터를 담당합니다. 캐시된 데이터를 충분히 분산시키지 못하여 많은 양의 캐시된 데이터가 하나 또는 여러 서비스 노드에 집중되는 현상을 데이터 왜곡이라고 합니다. 일반적으로 데이터 왜곡은 잘못된 로드 밸런싱 구현으로 인해 발생합니다.
13. 분할 브레인
분할 브레인은 클러스터 시스템의 일부 노드 간의 네트워크 접근 불가능으로 인해 발생하는 시스템 분할을 의미합니다. 서로 다른 분할 소규모 클러스터는 해당 상태에 따라 서비스를 제공하며 원래 클러스터는 일관되지 않은 서비스를 갖습니다. 동시에 반응하여 노드가 리소스, 시스템 혼란 및 데이터 손상을 위해 서로 경쟁하게 만듭니다.
모니터링 알람
1. 서비스 모니터링
서비스 모니터링의 주요 목적은 서비스 문제가 발생하거나 발생하려고 하는 시점을 정확하고 신속하게 감지하여 영향 범위를 줄이는 것입니다. 서비스 모니터링에는 일반적으로 여러 가지 방법이 있으며, 수준별로 나눌 수 있습니다.
- 시스템 계층(CPU, 네트워크 상태, IO, 머신 로드 등)
- 애플리케이션 계층(프로세스 상태, 오류 로그, 처리량 등)
- 비즈니스 계층(서비스/인터페이스의 오류 코드) , 응답 시간) )
- 사용자 레이어(사용자 행동, 여론 모니터링, 프런트엔드 묻힌 지점)
2. 풀링크 모니터링
서비스 다이얼링 테스트: 서비스 다이얼링 테스트는 모니터링 방법입니다. 서비스(응용 프로그램)의 가용성을 감지합니다. 대상 서비스는 주로 가용성 및 응답 시간으로 측정되는 전화 접속 테스트 노드를 통해 정기적으로 감지됩니다.
노드 감지: 노드 감지는 서로 다른 컴퓨터실(데이터 센터)에 있는 노드 간의 네트워크 가용성 및 원활성을 발견하고 추적하는 데 사용되는 모니터링 방법으로 주로 응답 시간, 패킷 손실률 및 홉 수를 측정합니다. 방법 일반적으로 ping, mtr 또는 기타 개인 프로토콜입니다.
알람 필터링: 예측 가능한 특정 알람을 필터링하고 소수의 크롤러 방문으로 인한 http 응답 500 오류, 비즈니스 시스템 사용자 정의 예외 정보 등의 데이터를 알람 통계에서 제외합니다.
알람 중복제거: 담당자에게 알람이 통보되면 해당 알람이 복원될 때까지 동일한 알람이 다시 수신되지 않습니다.
Alarm Suppression: 시스템 지터로 인한 간섭을 줄이려면 억제도 구현해야 합니다. 예를 들어 서버의 일시적인 높은 로드는 일정 시간 동안 지속되는 높은 로드만 필요할 수 있습니다. 진지하게 받아들여야 합니다.
경보 복구: 개발/운영 및 유지 관리 담당자는 경보 알림을 받아야 할 뿐만 아니라 결함이 제거되고 경보가 정상으로 돌아왔다는 알림도 받아야 합니다.
Alarm merging: 동시에 생성된 여러 개의 동일한 경보를 병합합니다. 예를 들어 마이크로서비스 클러스터에 동시에 과도한 하위 서비스 로드가 있는 여러 경보가 있는 경우 이를 하나의 경보로 병합해야 합니다.
알람 수렴: 가끔 알람이 발생하면 다른 알람이 동반되는 경우가 많습니다. 이때, 근본 원인에 대해서만 알람이 발생될 수 있으며, 다른 알람은 하위 알람으로 통합되어 알림을 함께 보낼 수 있습니다. 예를 들어, 클라우드 서버에 CPU 부하 경보가 있는 경우 해당 서버가 수행하는 모든 시스템에 대한 가용성 경보가 동반되는 경우가 많습니다.
결함 자가 치유: 실시간 경보 감지, 사전 진단 및 분석, 자동 결함 복구, 주변 시스템 개방을 통해 전체 프로세스를 종료합니다.
서비스 거버넌스
1. 마이크로서비스
마이크로서비스 아키텍처는 단일 애플리케이션을 작은 서비스 집합으로 나누는 것을 옹호하는 아키텍처 패턴으로, 서비스는 사용자에게 궁극적인 가치를 제공하기 위해 서로 조정하고 협력합니다. 각 서비스는 자체 독립적인 프로세스에서 실행되며 가벼운 통신 메커니즘(일반적으로 HTTP 기반 Restful API)을 사용하여 서로 통신합니다. 각 서비스는 특정 비즈니스를 중심으로 구축되며 프로덕션과 유사한 프로덕션 환경에 독립적으로 배포될 수 있습니다. 환경 등
2. 서비스 검색
서비스 검색이란 등록 센터를 사용하여 분산 시스템의 모든 서비스에 대한 정보를 기록하여 다른 서비스가 등록된 서비스를 빠르게 찾을 수 있도록 하는 것을 말합니다. 서비스 디스커버리(Service Discovery)는 대규모 SOA와 마이크로서비스 아키텍처를 지원하는 핵심 모듈로, 최대한 가용성이 높아야 합니다.
3. 트래픽 피크 감소
복권이나 플래시 세일 시스템의 요청 모니터링 곡선을 보면 이러한 유형의 시스템은 이벤트가 열리지 않는 시간에 피크가 발생한다는 것을 알 수 있습니다. , 시스템 요청량, 머신 로드는 일반적으로 상대적으로 안정적입니다. 기계 리소스를 절약하기 위해 단기 피크 요청을 지원하기 위해 항상 최대 리소스 용량을 제공할 수는 없습니다. 따라서 순간적인 요청 피크를 약화시키고 피크 요청 시 시스템 처리량을 제어할 수 있도록 유지하기 위해 몇 가지 기술적 수단을 사용해야 합니다. 또한 피크 클리핑을 사용하여 결함을 제거하고 서버 리소스 활용도를 보다 균형있고 완전하게 만들 수 있습니다. 일반적인 피크 컷팅 전략에는 대기열, 빈도 제한, 계층적 필터링, 다중 레벨 캐싱 등이 포함됩니다.
4. 버전 호환성
버전을 업그레이드하는 과정에서는 업그레이드된 버전 이후의 새로운 데이터 구조가 이전 데이터를 이해하고 구문 분석할 수 있는지, 새로 수정된 프로토콜이 이전 프로토콜을 이해하고 예상할 수 있는지를 고려해야 합니다. 그리고 적절한 거래. 이를 위해서는 서비스 설계 과정에서 버전 호환성이 필요합니다.
5. 과부하 보호
오버로드는 현재 부하가 시스템의 최대 처리 용량을 초과했음을 의미하며, 과부하가 발생하면 일부 서비스를 제대로 처리하지 못할 가능성이 높습니다. 전혀 사용할 수 없거나 눈사태가 발생할 수도 있습니다. 과부하 보호는 이러한 비정상적인 상황에 대해 서비스를 완전히 사용할 수 없는 것을 방지하기 위해 취하는 조치입니다.
6. 서비스 차단기
서비스 차단기의 기능은 가정용 퓨즈와 유사합니다. 서비스가 중단되거나 응답 시간이 초과되면 전체 시스템의 눈사태를 방지하기 위해 서비스 호출이 일시적으로 중단됩니다.
7. 서비스 다운그레이드
서비스 다운그레이드는 서버 압력이 급격히 증가하는 경우, 핵심 작업의 정상적인 운영을 보장하기 위해 서버 리소스를 확보하기 위해 현재 비즈니스 상황 및 트래픽을 기반으로 일부 서비스 및 페이지를 전략적으로 다운그레이드합니다. 성능 저하에서는 종종 다른 수준을 지정하고, 다른 예외 수준에 직면할 때 다른 처리를 수행합니다. 또한, 공개 계정인 Java Architect Technical Backend를 검색해 "Spring"이라고 답하면 깜짝 선물 패키지를 받아보실 수 있습니다.
서비스 방식에 따라 서비스를 거부할 수도 있고, 서비스를 지연할 수도 있으며, 경우에 따라서는 랜덤 서비스를 제공할 수도 있습니다.
서비스 범위에 따라 특정 기능이 중단되거나 특정 모듈이 중단될 수 있습니다.
간단히 말하면, 서비스 다운그레이드에는 다양한 비즈니스 요구 사항에 따른 다양한 다운그레이드 전략이 필요합니다. 서비스가 훼손되더라도 없는 것보다는 낫다는 게 주된 목적이다.
8. Meltdown VS Downgrade
동일한 점: 시스템 충돌을 방지하기 위한 목표는 동일하지만, 결국 사용자는 일부 기능을 일시적으로 사용할 수 없게 됩니다.
다양한 점: 서비스 회로 차단기는 일반적으로 특정 서비스(다운스트림 서비스)의 실패로 인해 발생하지만 서비스 저하는 일반적으로 전체 부하에서 고려됩니다.
9. 제한은 서비스 저하의 한 유형으로 간주될 수 있으며 시스템 보호 목적을 달성하기 위해 시스템의 입력 및 출력 흐름을 제한하는 것입니다. 일반적으로 시스템의 처리량은 시스템의 안정적인 작동을 보장하기 위해 제한해야 하는 임계값에 도달하면 트래픽을 제한해야 하며 목적을 달성하기 위한 몇 가지 조치를 취해야 합니다. 트래픽을 제한하는 것입니다. 예: 처리 지연, 처리 거부, 부분 처리 거부 등
10. 오류 마스킹
클러스터에서 오류가 있는 시스템을 제거하여 새 요청이 오류가 있는 시스템에 배포되지 않도록 하세요.
테스트 방법
1. 블랙박스/화이트박스 테스트
블랙박스 테스트는 프로그램의 내부 구조나 논리적 구조를 고려하지 않고 시스템의 기능이 요구 사양을 충족하는지 테스트하는 데 주로 사용됩니다. 일반적으로 입력값, 입력값, 비교 기대값이 있습니다.
화이트 박스 테스트는 주로 단위 테스트 단계에서 사용되며 주로 코드 수준 테스트에 사용됩니다. 프로그램의 내부 논리 구조에 대한 테스트 방법에는 명령문 적용 범위, 결정 적용 범위, 조건 적용 범위, 경로 적용 범위 및 조건 조합이 포함됩니다. Coverage
2. 유닛/통합/시스템/수락 테스트
소프트웨어 테스팅은 일반적으로 유닛 테스트, 통합 테스트, 시스템 테스트, 승인 테스트의 4단계로 나누어집니다.
유닛 테스트: 유닛 테스트는 모듈, 프로세스, 메소드 등 소프트웨어에서 검증할 수 있는 가장 작은 단위를 확인하고 검증하는 것입니다. 단위 테스트는 가장 작은 단위를 가지며 일반적으로 개발 팀에서 화이트박스 접근 방식을 사용하여 테스트합니다. 이는 주로 단위가 "설계"를 준수하는지 여부를 테스트합니다.
통합 테스트: 통합 테스트는 어셈블리 테스트라고도 합니다. 일반적으로 단위 테스트를 기반으로 모든 프로그램 모듈을 순차적이고 증분적으로 테스트합니다. 통합 테스트는 단위 테스트와 시스템 테스트 사이에서 "브리지 역할"을 수행합니다. 일반적으로 개발 팀은 테스트에 화이트 박스와 블랙 박스 접근 방식을 사용하여 "설계"뿐만 아니라 "요구 사항"도 확인합니다.
시스템 테스트: 시스템 테스트 중에 통합 테스트를 거친 소프트웨어는 컴퓨터 시스템의 일부로 사용되며 시스템의 다른 부분과 결합되어 실제 운영 환경에서 일련의 엄격하고 효과적인 테스트를 수행합니다. 소프트웨어의 잠재적인 문제를 발견하여 시스템의 정상적인 작동을 보장합니다. 시스템 테스트는 가장 세분화되어 있으며 일반적으로 블랙박스 접근 방식을 사용하여 독립적인 테스트 팀에 의해 테스트됩니다. 주로 시스템이 "요구 사항 사양"을 충족하는지 여부를 테스트합니다.
수락 테스트: 전달 테스트라고도 하는 승인 테스트는 시스템이 승인 기준을 충족하는지 여부를 결정하기 위해 사용자 요구와 비즈니스 프로세스를 기반으로 하는 공식 테스트입니다. 승인 테스트는 시스템 테스트와 유사합니다. 주요 차이점은 테스터가 사용자에 의해 수행된다는 점입니다.
3. 회귀 테스트
결함이 발견되어 수정되거나 소프트웨어에 새로운 기능이 추가된 후 다시 테스트하세요. 발견된 결함이 수정되었는지, 수정 사항으로 인해 새로운 문제가 발생하지 않았는지 확인하는 데 사용됩니다.
4. 연기 테스트
이 용어는 하드웨어 산업에서 유래되었습니다. 하드웨어 또는 하드웨어 구성 요소를 변경하거나 수리한 후에는 장치에 직접 전원을 공급하십시오. 연기가 나지 않으면 구성 요소가 테스트를 통과한 것입니다. 소프트웨어에서 "스모크 테스트"라는 용어는 코드 변경 사항을 제품의 소스 트리에 포함시키기 전에 유효성을 검사하는 프로세스를 설명합니다.
스모크 테스트는 소프트웨어 개발 과정에서 소프트웨어 버전 패키지에 대한 빠른 기본 기능 검증 전략으로, 소프트웨어의 기본 기능을 확인하고 검증하는 수단이며 소프트웨어 버전 패키지에 대한 심층적인 테스트는 아닙니다.
예를 들어 로그인 시스템의 스모크 테스트의 경우 로그인의 핵심 기능 지점을 확인하기 위해 올바른 사용자 이름과 비밀번호만 테스트하면 되며, 입력 상자, 특수 문자 등은 이후에 수행할 수 있습니다. 연기 테스트.
5. 성능 테스트
성능 테스트는 다양한 정상, 최대 및 비정상 부하 조건을 시뮬레이션하는 자동화된 테스트 도구를 통해 시스템의 다양한 성능 지표를 테스트하는 것입니다. 부하 테스트와 스트레스 테스트는 모두 성능 테스트이며, 둘을 결합할 수 있습니다.
부하 테스트를 통해 다양한 작업 부하 하에서 시스템의 성능을 결정합니다. 부하가 점차 증가할 때 시스템의 다양한 성능 지표의 변화를 테스트하는 것이 목표입니다.
스트레스 테스트는 시스템이 제공할 수 있는 최대 서비스 수준을 얻기 위해 시스템의 병목 현상이나 허용할 수 없는 성능 지점을 결정하는 테스트입니다.
6. 벤치마크 테스트
벤치마크는 기계 하드웨어의 최대 실제 작동 성능과 소프트웨어 최적화의 성능 개선 효과를 측정하는 데 사용되는 성능 테스트 방법이기도 합니다. 또는 메모리 효율성 문제. 많은 개발자가 벤치마크를 사용하여 시스템 처리량을 최대화할 수 있도록 작업자 풀 수를 구성합니다.
7.
A/B 테스트는 비슷한 숫자를 가진 무작위로 할당된 두 개 이상의 그룹을 사용하여 비교하는 것입니다. 실험 그룹과 비교 그룹의 실험 결과가 대상 지표에서 통계적으로 유의미한 경우 그룹 기능을 설명할 수 있습니다. 원하는 결과를 얻을 수 있어 가설을 검증하거나 제품 결정을 내리는 데 도움이 됩니다.
8. 코드 커버리지 테스트
코드 커버리지는 테스트되는 프로그램에서 소스 코드의 비율과 범위를 설명하는 소프트웨어 테스트의 측정입니다. 단위 테스트를 수행할 때 코드 커버리지는 테스트 품질을 측정하는 지표로 사용되는 경우가 많습니다. 예를 들어 코드 커버리지는 테스트 작업의 완료율을 평가하는 데에도 사용됩니다. 그 이후로 테스터들은 케이스 커버리지 코드를 디자인하기 위해 많은 노력을 기울였습니다.
릴리스 배포
1. DEV/PRO/FAT/UAT
DEV(개발 환경): 대규모 버전 변경으로 개발자가 디버깅하는 데 사용되는 개발 환경입니다.
FAT(Feature Acceptance Test Environment): 소프트웨어 테스터가 테스트하는 데 사용되는 기능 승인 테스트 환경입니다.
UAT(User Acceptance Test Environment): 사용자 승인 테스트 환경으로, 프로덕션 환경에서 기능 검증에 사용되며 사전 출시 환경으로 사용할 수 있습니다.
PRO(프로덕션 환경): 프로덕션 환경, 정식 온라인 환경.
2. 그레이스케일 출시
그레이스케일 출시는 버전을 업그레이드하는 과정에서 일부 사용자는 파티션 제어, 화이트리스트 제어 등을 통해 제품 기능으로 업그레이드되고 나머지 사용자는 변경되지 않고 그대로 유지된다는 의미입니다. 일정 기간 후에 업그레이드됩니다. 제품 기능에 대한 사용자의 피드백 문제가 없으면 범위가 점진적으로 확장되고 궁극적으로 전체 시스템의 안정성을 보장할 수 있는 새로운 버전 기능이 모든 사용자에게 공개됩니다. 문제의 영향을 보장하기 위해 초기 그레이스케일에서 문제를 발견하고 수정할 수 있습니다.
3. 롤백
이란 프로그램이나 데이터 처리 오류가 발생한 경우 프로그램이나 데이터를 마지막으로 올바른 상태(또는 마지막으로 안정된 버전)로 복원하는 행위를 말합니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ