среда, 3 августа 2016 г.

Как мы переезжали на PHP7

Ответы на два вопроса из поста про Амстердам:
- "нет-нет" и "нет-да" на почтовых ящиках это типа "не совать газеты" и "совать/не совать спам".
- крюк под крышей нужен для подъёма мебели в квартиру. Места в Амстрдаме не очень много, так что его экономят. Ну, по крайней мере, раньше экономили, до введения каких-то строительных норм, которые запрещают делать лестницы с углом подъёма в 60 градусов и подъезды, где с трудом расходятся два человека.

Так что все комментаторы были совершенно правы.

Теперь про переезд на PHP 7.0 с версии 5.6. У нас есть проект с небольшой посещаемостью, около 1000 посещений в минуту. Тем не менее, там работают шесть серверов, хотя и один справился бы легко. Это надо, чтоб нормально работал кластер редиса. Ну и иногда заходят боты, начинают индексировать сайт, там лучше, когда сервер всё же не один нагрузку принимает.

Ой, кластер редиса это тоже такая жопа. Экономия памяти, конечно, существенная - если раньше каждый сервер хранил у себя свою копию данных в памяти, то теперь она размазана по кластеру, по трём мастерам и трём слейвам. Это означает, что сервера постоянно дёргают друг друга, если у себя не находят нужный ключ. А ключи бывают по мегабайту у нас - справочник всех свойств по всем категориям, например. Чтоб не прогибалась сеть, мы всё равно используем локальное хранилище для этих монструозных ключей. На PHP 5.6 был xcache. Но в седьмом пхп икскэша нет.

И с самим редисом была засада ещё та. Мы использовали стандартное пекловское расширение PhpRedis, которое предоставляет классы Redis и RedisCluster. Версия для пхп 7, как выяснилось, работает нестабильно. Примерно 0,2% всех посещений вызывают ошибку, причём это fpm падает в segfault, отдавая 502. Выкинули на хер, я заменил на PRedis. Это pure-PHP код для работы с редисом через сокеты. Нареканий нет.

Проблемы были с локальным кэшированием. Так как икскэша нет, начали искать альтернативы. Пробовали мемкэш, собрали библиотеку для работы с ним в пхп 7 руками. Не покатило, падает, надёжности никакой. Я уже собирался использовать shared memory, но потом решили, что будет ещё один локальный редис на каждом сервере. Так и живём с кучей редисов теперь.

Итого: насколько выросла производительность, мне неизвестно. По ощущениям, нинасколько, я не заметил никакого прироста. Надёжность работы, напротив, снизилась, уменьшилась стабильность. Зато сколько времени и сил угробили на переезд и все эти эксперименты! На фиг обновлялись, ещё бы годик пожили на 5.6, ничего бы не случилось.

Комментариев нет:

Отправить комментарий

Ублюдочный Гугл поломал форму комментариев. Извините.