Як ми переводили на сервер php 7

php 7 вийшов майже рік тому, на носі вже версія 7.1, яка знаходиться в стадії реліз кандидата. Інтернет сповнений позитивних відгуків, що ж — пора використовувати його в продакшені. Про досвід переїзду на нього бойового сервера з тридцятьма проектами і піде мова в цій статті.

Сьома версія відкриває нам багато нових можливостей, але основним убивчим нововведенням php7, я вважаю, збільшення продуктивності і зменшення споживання пам'яті. У внутрішніх проектах ми його давно спробували, переконалися, що він дає приріст не тільки в синтетичних тестах, було прийнято рішення перекладати на нього весь продакшн.

Сервер і проекти
Наш продакшн сервер — це сервер HP з чотирьох-ядерним процесором Xeon X3430 на 2.40 GHz і 16GB оперативної пам'яті. На сервері хоститься близько 30-ти сайтів, близько половини з них — це середні інтернет магазини, на 10-20 тис. товарів з відвідуваністю близько 1-2 тис. унікальних відвідувачів на добу. Всі проекти написані на yii framework 1.1 різних версій, починаючи від 14-ї до 17. Все працює на зв'язці nginx-php-fpm.

Переїзд ми затіяли не від хорошого життя. Сервера було сутужно справлятися з запитами і в пікові години навантаження прийшов робот якого-небудь нескромного пошукача або парсер якогось школяра якщо не ронили сервер, то доставляли помітне кількість проблем.

Як переходили
Вирішили, що разом перемкнути ми не можемо, потрібно переводити по одному-двом проектам. Підняли другу версію демона php-fpm для сімки. Для сайту, для якого планувався переїзд, піднімався другий окремий сокет. Далі сокет підмінявся в конфігурації nginx. Це дозволяло нам у разі виявлення будь-яких проблем швидко змінювати сокет назад і однією командою service nginx reload повертати сайт в працездатний стан.

Що відбувалося з сервером
В день х була обрана жертва, яку не шкода, конфіги були змінені, процес почався. На сайті перехід відразу відчувся. Сторінки стали віддаватися за 400-500 мс. замість 600-800 мс. Ось картинка з часом віддачі головної сторінки першої жертви. Звертаємо увагу на початок вересня.

image
На жаль, нагиосом ми моніторимо тільки головні сторінки, вони досить добре оптимізовані, тому приріст там помітний, але не максимальний. Максимальний видно на важких сторінках з великою кількістю товарів, там вона ще істотніше, але графіків у мене немає.

Після переведення двох-трьох проектів стала змінюватися картина загалом на сервері. Кожен наступний переїзд ще більше його розвантажував. На цій картинці видно динаміку за останні чотири тижні.

image
Сервера ставало легше, видно це було навіть на тих сайтах, які стояли в черзі останніми і працювали на php 5.6 до останнього моменту (дивимося на вересень, жовтень)

image
І ось до такого стану ми прийшли зараз, жовтень та листопад на графіку коментарів не потребує.

image
Впала і навантаження на дискову підсистему

image
Які були проблеми
Як ми і очікували, великих проблем нова версія не принесла (інакше ми б просто не подужали переїзд)

З найбільш значних була лише одна. Пов'язана вона з тим, що php дозволяє відстрілювати собі ногу, потім другу ногу, і навіть руку, якою ти стріляєш.

У сімці змінилося поведінка функції substr, в yii зламався один з методів розбору http запиту, але Олександр Макаров з колегами його вже давно виправили, тому все вирішилося оновленням версії фреймворку на цих проектах.

З цікавого. Один із сайтів відразу не запустився, виявилося в його коді був метод, в якому два вхідних параметра мали однакове ім'я. 5.6 спокійно працював і глючив, а 7.0. вилаявся і впав.

Ну і не обійшлося без роздовбайства. Два сайти працювали на одному сокеті, для першого змінили назву сокета, про другий сайт ніхто не згадав і саме його не виявилося в моніторингу, в результаті він пролежав усю ніч, поки маркетологи не побачили на наступний день помилки в метриці і не прибігли.

Наостанок
З досвіду, хороший код легко переносити на нову версію php. З половиною з цих проектів ми перейшли до 5.4 на 5.6 взагалі без жодної правки і всієї пачкою відразу. Так що пишіть хороший код, використовуйте добрі фреймворки і, саме головне, не бійтеся змін — вони завжди на краще ;)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.