>  기사  >  PHP 프로그래머가 성장 병목 현상을 극복하는 방법(PHP 개발 3~4년)

PHP 프로그래머가 성장 병목 현상을 극복하는 방법(PHP 개발 3~4년)

无忌哥哥
无忌哥哥원래의
2018-06-27 16:32:221591검색

PHP 엔지니어는 성장 병목 현상에 직면합니다

우선 여기서 언급하는 PHP 엔지니어는 주로 PHP를 사용하여 웹 시스템을 개발하고 다른 언어로 작업한 적이 없는 사람들을 의미하는 것이 분명합니다. 저는 3~4년 정도의 업무 경험을 가지고 있습니다. 저는 기본적으로 일반 웹 시스템(수백만 건의 액세스, 1,000개 미만의 데이터 또는 비즈니스 로직이 특별히 복잡하지 않은 경우)을 문제 없이 개발하는 데 능숙합니다. 하지만 그들은 다음과 같이 지적할 것입니다:

◆PHP 이외의 다른 언어를 사용하지 마십시오. ​​​​쉘 스크립트를 사용할 수 있습니다.

◆PHP 실력이 좋지 않습니다(라이브러리 외에는 PHP 매뉴얼을 많이 읽지 않았습니다).

◆지식 기반이 상대적으로 좁습니다(수요에 직면하여 PHP 및 MySQL을 사용하는 것 외에는 다른 솔루션을 모릅니다).

◆PHP 코드는 주로 프로세스 지향인데, 객체 지향 구현은 너무 복잡하고 이해하기 어렵다고 생각합니다.

이러한 PHP 사용자는 고성능, 높은 동시 처리 및 대량의 데이터가 필요한 프로젝트를 접하거나 비즈니스 로직이 상대적으로 복잡한 경우(시스템이 여러 분야의 비즈니스 문제를 해결해야 함) 아이디어가 부족합니다. 문제의 본질을 분석하지 못하고 기술적 판단력이 부족하여 문제에 대한 일시적인 해결책을 빠르게 찾을 수 있지만, 끊임없는 일시적인 해결책에 시스템과 자체가 단계적으로 붕괴되는 경우가 많습니다. 그렇다면 어떻게 자신을 향상시킬 수 있나요? 더 어려운 시스템은 어떻게 도전할 수 있나요?

더 높은 도전 과제는 어디에 있나요?

내 경험을 바탕으로 모든 사람에게 지각적인 이해를 제공하기 위한 몇 가지 구체적인 과제를 나열합니다.

고성능 시스템의 과제는 무엇입니까?

◆웹 서버를 선택하는 방법은 무엇입니까? fast-cgi 모드를 사용하시겠습니까?

◆역방향 프록시 서비스를 사용해야 합니까? 전체 메모리 캐시 또는 하드 디스크 캐시를 선택하시겠습니까?

◆로드 밸런싱이 필요합니까? 애플리케이션 계층을 기반으로 합니까, 아니면 네트워크 계층을 기반으로 합니까? 높은 신뢰성을 보장하는 방법은 무엇입니까?

◆최적화 도구를 사용한 후 PHP 코드의 성능은 어떻습니까? 성능 병목 현상은 어디에 있습니까? C의 확장으로 작성해야 합니까?

◆사용자 접속의 특징은 무엇인가요? 읽기가 더 많은가요, 쓰기가 더 많은가요? 읽기-쓰기 분리가 필요합니까?

◆데이터는 어떻게 저장되나요? 쓰기 속도와 읽기 속도는 어떻습니까? 데이터가 증가함에 따라 액세스 속도는 어떻게 변합니까?

◆캐시는 어떻게 사용하나요? 실패를 어떻게 고려하는가? 데이터 일관성을 보장하는 방법은 무엇입니까?

복잡도가 높은 시스템의 과제는 무엇인가요?

◆업종에 해당하는 분야를 알 수 있나요? 하나인가요, 여러개인가요?

◆비즈니스 규칙의 변화를 적은 비용으로 실현할 수 있도록 비즈니스를 합리적으로 추상화할 수 있습니까?

◆데이터의 일관성과 보안이 보장될 수 있나요?

◆객체지향 분석 및 설계 방법을 마스터하셨나요

여기 나열된 질문에 긍정적으로 답할 수 있다면 기본적으로 기술적으로 건축가가 될 수 있는 능력이 있다는 뜻입니다. 아직 대답을 할 수 없다면 다음 방향으로 강화해야 합니다.

병목 현상을 개선하고 돌파하는 방법

아직 답할 수 없는 부분은 다음과 같은 방향으로 강화해야 합니다.

◆사용하는 기술의 원리와 그 메커니즘을 분석하여 기술을 향상시킬 수 있습니다. 선택한 기술 솔루션의 정확성을 높이기 위한 판단력

◆대학에서 중요한 지식, 운영 체제 원리, 데이터 구조 및 알고리즘을 배우세요. 예전에는 시험을 위해 공부했지만 이제는 스스로 공부해야 하며 그 이유를 스스로에게 알려야 합니다.

◆이미 대학에서 C 언어를 배웠지만 다시 배우기 시작하세요. 이는 PHP 확장을 작성해야 할 뿐만 아니라 C 애플리케이션에는 항상 성능, 메모리 제어, 가변 수명 주기, 데이터 구조 및 알고리즘을 고려하는 환경이 있기 때문입니다.

◆객체 지향을 배우세요. 분석 디자인과 마찬가지로 복잡한 문제를 해결하는 효과적인 방법입니다. 추상화를 배우십시오. 이것이 복잡한 문제를 해결하는 유일한 방법입니다.

어떻게 효과적으로 공부하느냐가 큰 문제입니다. "아키텍처 중심, 유스 케이스 중심, 반복 개발"이라는 개념을 빌려 효과적인 학습 방법은 원리, 모델 또는 메커니즘 중심, 작업 중심, 반복 학습으로 표현할 수 있습니다. 다소 추상적이므로 학습 방법을 설명하기 위해 예를 들어 보겠습니다.

목적: 처리 성능을 향상시키는 방법을 알아봅니다.

Iterable 기반 작업: IP로 위치를 찾습니다. 이는 웹 애플리케이션의 일반적인 작업이며 IP 데이터베이스에는 약 100,000행의 레코드가 포함되어 있습니다.

첫 번째 반복: 성능을 고려하지 않고 함수 구현(PHP를 통해 구현)

KEY(IP)를 통해 직접 영역 검색이 불가능하므로 데이터에 직접 배치하거나 연관 배열을 통해 배치할 수 있습니다. 어떤 방법도 작동하지 않습니다. 데이터를 먼저 정렬한 다음 검색하는 것이 아이디어입니다.

◆IP로 검색하는 방법은 무엇인가요? 정렬된 데이터의 경우 이진 검색이 가장 빠릅니다.

◆정렬하는 방법은? 물론 라이브러리 함수인 sort를 사용해도 되지만, 배우는 중이므로 직접 퀵소트를 구현해 보는 것이 더 좋습니다.

학습 목표: 정렬 알고리즘, 검색 알고리즘

PHPer의 데이터 구조와 알고리즘 기초가 상대적으로 열악합니다. 저는 평소에 이 분야에 대한 작업도 없고, 스스로 공부하지도 않아서 이 분야에 대한 지식이 부족합니다. 그러나 프로그래밍으로 해결되는 문제는 궁극적으로 데이터 구조와 이 데이터 구조에서 작동하는 알고리즘으로 귀결됩니다. 자료구조 알고리즘을 항상 염두에 두면 문제가 발생했을 때 그 내부 구조를 명확하게 이해할 수 있고, 해결책도 자연스럽게 떠오르게 됩니다.

두 번째 반복: 데이터 로드 및 정렬 최적화

첫 번째 단계를 수행하면 매번 데이터를 로드하고 정렬해야 하기 때문에 기본적으로 여전히 사용할 수 없으며 이는 시간이 너무 많이 걸립니다. 해결책은 데이터를 한 번 로드하고 정렬한 다음 각 PHP 프로세스가 액세스할 수 있는 위치에 배치하는 것입니다. Memcache에 넣는 것은 누구에게나 쉬운 문제입니다. 실제로 Memcache에는 더 많은 네트워크 작업이 있으므로 공유 메모리(EA 및 기타 가속기에서 지원)에 저장하는 것이 더 빠른 방법입니다. 데이터가 전체적으로 공유 메모리에 저장되나요? 성능을 테스트하는 방법(xdebug)을 분석하는 방법을 알아봅니다.

학습 목표: PHP 성능을 감지하고 찾아 최적화하는 방법, PHP 구현 구조가 성능에 미치는 영향.

세 번째 반복: PHP 확장 작성

성능은 여전히 ​​개선되지 않고 C/C++의 세계로 들어가야 하는데 이제부터 당신은 PHPer뿐만 아니라 PHP의 만능 엔지니어가 될 것입니다. 물론, 이것은 완료되지 않았습니다. C/C++를 통과한 학생들의 도전은 엄청납니다.

학습 목표: C/C++ 학습, PHP 확장 작성

학습해야 할 메커니즘과 원리를 어떻게 결정합니까? 운전 학습 과제를 찾는 방법은 무엇입니까? 위의 두 가지 질문에 어떻게 답해야 할까요? 이 기술의 포지셔닝에서 배워야 할 핵심 포인트, 즉 어떻게 하는가(메커니즘)와 왜 할 수 있는지 알아보세요. 이 기술의 가장 일반적인 응용을 학습 과제로 나열하고 간단한 것부터 어려운 것까지 연습해 보세요.

JavaScript를 배워야 한다면 HTML과 CSS에 대한 지각적 지식이 어느 정도 있습니다. 가장 먼저 이해해야 할 것은 JavaScript는 주로 웹 페이지의 동적 상호 작용을 해결하는 웹 분야의 동적 언어라는 것입니다. 학습 핵심 포인트는 다음과 같습니다.

◆JavaScript가 HTML과 상호 작용하는 방식(메커니즘)

◆JavaScript의 동적 특성은 무엇이며, 다른 동적 언어와 어떻게 다른가요? (언어 모델)

완전히 독학이라면 학습해야 할 핵심 포인트(메커니즘, 모델, 원리)를 찾는 것이 학습 과제 설정이 사실 쉽지 않습니다. 경험이 풍부한 사람을 찾아 지도해 주거나 학습 팀을 추가하면 학습 속도가 실제로 크게 향상될 것입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.