PHP5.3 -> PHP7.1로 올라가면...

7805 단어 PHP

개요


이 글은 LIFULL Advent Calender의 2 16일째 되는 글이다.
이번에는 지난달에 운영된 PHP 버전 업그레이드입니다.
나는 그 추진 방법과 결과를 기록할 것이다.
이번에는 PHP5입니다.버전 3에서 7.1로 업그레이드되었습니다.
말하자면 며칠 전에 7.2가 발표되었다.
http://php.net/archive/2017.php#id2017-11-30-1

설치하다.


공식 문서를 보십시오.
http://php.net/manual/ja/install.php
업그레이드와 동시에 OPCache라는 중간 코드 캐시 장치도 설치했다.
http://php.net/manual/ja/book.opcache.php

애플리케이션에 미치는 영향


버전 업그레이드의 영향을 확인하려면 다음 공식 문서를 참조하십시오.
http://php.net/manual/ja/appendices.php
http://php.net/manual/ja/migration54.php
http://php.net/manual/ja/migration55.php
http://php.net/manual/ja/migration56.php
http://php.net/manual/ja/migration70.php
http://php.net/manual/ja/migration71.php

실제 영향


다행히 이번 버전 업그레이드에서 그렇게 큰 영향을 받지 않은 코드는
코드의 변경은 소량만 있으면 완성된다.
참고가 될 수 있을지 모르겠지만 구체적으로 영향을 받은 변경과 대응을 적어보겠습니다.

사용자 정의 세션 프로세서의 반환 값 수정


session_set_save_handler 함수 등 사용자 정의 세션 처리 프로그램을 사용할 때
반환 값이 가짜/-1이면 FatalError가 발생합니다.
가짜/-1을 반환하는 상황에서 일부 이상 시스템의 경우 처리가 비교적 많다고 생각합니다.
이 경우에도 빈 문자, 진짜 문자 등을 반납해야 한다.

잘못된 클래스 이름입니다.


아래와 같이 예약어를 학급명 등에 사용할 수 없다.사용한 곳의 이름이 모두 바뀌었다.
http://php.net/manual/ja/migration70.incompatible.php#migration70.incompatible.other.classes

정렬 작업 변경


이것은 문서에 명확하게 기록되지 않았지만, 일부 정렬 행위는 버전 업그레이드로 인해 바뀌었다.
다음 코드가 있습니다. rsort가 건네준 매개 변수의 배열 순서를 반대 순서로 하려고 합니다.
PHP5.3 기대와 반대되는 순서, PHP7.1이면 순서는 변하지 않는다.
php53.php
$array = array('b', 'a');
rsort($array);
# array('a', 'b')
php71.php
$array = array('b', 'a');
rsort($array);
# array('b', 'a')
# 入れ替わっていない!???
원래 rsort는 배열 내림차순 배열을 바꾼 것입니다, PHP5.3시의 행동은 틀렸다고 할 수 있다.
http://php.net/manual/ja/function.rsort.php
array_리버스 이용을 수정했습니다.
명확하게 기재되지 않은 이런 행위 변화(오류 수정)도 주의해야 한다.

확인


인증 정보
  • 서버 준비 확인
  • 코드 수정
  • 테스트 테스트
  • 이러한 절차에 따라 진행하여 어느 정도에 공정을 자동화하다
    나는 도구를 사용하면 검증이 수월해질 것이라고 생각한다.

    검증 서버 준비


    Ansible + Serverspec


    서버 구축은 관리 도구를 구성하는 Ansible을 활용합니다.
    https://www.ansible.com/
    예전부터 ansible를 이용하여 결합 환경~정식 환경의 구축을 진행하였다
    PHP7 서버 구매와 관련해서는 PHP 관련 부분만 교체하면 된다.
    Ansible로 구성된 인프라 테스트로 Serverspec을 제작하고 있습니다.
    http://serverspec.org/
    Ansible로 구축했다면 테스트는 필요 없었겠죠이런 의견도 있고요.
    원래는 Ansible 사용법을 설정할 의도가 없었어요.
    幂 등성을 보장하지 않는 기술도 있기 때문에 별도로 테스트 코드를 준비했다.
    이렇게 서버를 인코딩합니다.
    변경과 재제작의 원가를 낮출 수 있다.

    코드 수정


    코드 수정은 수첩을 보면서 디버깅을 하면서 진행되었다
    정적 분석 도구를 사용하여 검증할 수도 있다.

    php7cc


    https://github.com/sstalle/php7cc
    창고의 원본 코드를 분석하고 php7 비대응 코드를 추출할 수 있습니다.
    상세한 사용 방법은 아래 보도를 참고하시오.
    https://qiita.com/su_mi/items/b9f06a81bdae40b84c61

    phan


    https://github.com/phan/phan
    php7에 대응하는 정적 분석 도구입니다.
    치명적인 것은 php 7cc로 세척할 수 있으니 참고하세요.
    상세한 사용 방법은 아래 보도를 참고하시오.
    https://qiita.com/msmsny/items/46aaeda7e565cfc7ec48

    테스트


    이렇게 모든 창고와 관련된 테스트는 눈대중으로 한계가 있음을 확인한다.
    테스트도 아래의 도구를 준비하여 어느 정도 자동화되었다.

    E2E


    일반적인 개발 시점부터 E2E 테스트 구축 및 활용
    서비스 전체의 통과 테스트를 진행하고 있습니다.
    미리 지정한 URL 목록을 망라하고 상태 코드 등을 검사합니다.
    시험은 capybara를 사용합니다.
    https://github.com/teamcapybara/capybara
    이렇게 테스트를 통해 치명적인 문제가 발생했는지 어느 정도 포괄적인 테스트를 할 수 있다.

    html diff


    상기 내용 외에 서로 다른 두 환경의 버전 diff를 얻을 수 있는 스크립트도 개발됐다.
    php5.3과 php7.각각 1개의 환경을 방문하여 >의 diff가 나타날지 확인합니다.
    버전 업그레이드로 인한 오류는 없지만
    고장난 것도 이걸로 주울 수 있어.

    결실


    버전 업그레이드 전후의 성능 비교 등 데이터를 기재합니다.
    PHP7이 폭발 속도를 낸다고 하는데,

    응답 시간



    업그레이드 서비스의 Top 페이지에 대한 응답 시간입니다.
    중간의 부드러운 부분이 발표의 포인트입니다.
    50ms 정도 고속화됐다고 할 수 있죠.
    참고로 상술한 ELB 로그는 QuickSight로 표시됩니다.
    QuickSight에 관한 작은 단락도 투고했기 때문에 가능하면 아래와 같이 하십시오.
    https://qiita.com/to_muu_mas/items/fffe1122a9583d4d6bca

    CPU 스토리지 사용률



    일반적으로 응답 시간 이상에 효과가 있다고 생각하는 것은 CPU 메모리 사용률의 감소이다.
    차트의 파란색은 메모리 사용률을 나타냅니다.주황색은 CPU 사용률입니다.
    메모리 사용률은 약 10%이고 CPU 사용률도 약 3% 감소할 수 있다.
    OPCache 도입 효과도 있을 수 있다.
    이전에는 Apc 캐시를 도입했지만 전환을 통해 다이어트에 성공했다.

    감상


    PHP 버전 업그레이드의 추진 방법과 결과가 기재되어 있습니다.
    우리 회사는 지금 마이크로 서비스화를 추진하고 있는데, 이번에 업그레이드된 서비스를 진행하였다
    거대한 창고에서 벗어나 마이크로 서비스화된 서비스 중의 하나가 되었다.
    의존 관계가 복잡하거나 창고가 너무 크다
    이러한 활동의 난이도가 매우 높아졌기 때문에 이번 버전 업그레이드 중
    나는 마이크로 서비스화의 은혜를 느꼈다.
    또한 이번에 말한 바와 같이 인프라 시설의 인코딩과 테스트를 자동화할 경우
    이렇게 규모가 큰 변경은 난이도가 낮아진다.
    실제로 이 PHP 버전이 업그레이드되면 2주 정도 API 서버의
    Ruby 버전 업그레이드도 발표되었습니다.
    그게 기회가 된다면

    좋은 웹페이지 즐겨찾기