Муносибати мақола ба мо наздик аст: ҳангоми ҳалли мушкилоти худ, мо инчунин аксар вақт як қатор PHP ва Go -ро истифода мебарем, ки бартариҳои ҳарду забонро ба даст меорем ва якеро ба манфиати дигаре тарк намекунем.
Баҳра баред!
Дар даҳ соли охир мо барои ширкатҳо аз рӯйхат замимаҳо эҷод кардем Фаронса 500, ва барои корхонаҳое, ки аудиторияи на бештар аз 500 корбар доранд. Дар тӯли ин вақт, муҳандисони мо пуштибониро асосан дар PHP таҳия мекарданд. Аммо ду сол пеш чизе на танҳо ба иҷрои маҳсулоти мо, балки ба миқёспазирии онҳо низ таъсири калон расонд - мо Golang (Go) -ро ба стеки технологии худ ҷорӣ кардем.
Қариб дарҳол, мо фаҳмидем, ки Go ба мо имкон дод, ки барномаҳои калонтарро бо беҳбудии то 40x беҳтар созем. Бо он, мо тавонистем маҳсулоти мавҷудаи дар PHP навишташударо васеъ кунем ва онҳоро тавассути омезиши бартариҳои ҳарду забон такмил диҳем.
Мо ба шумо мегӯям, ки чӣ тавр омезиши Go ва PHP барои ҳалли мушкилоти воқеии рушд кӯмак мекунад ва чӣ гуна он барои мо ба асбобе табдил ёфтааст, ки метавонад аз баъзе мушкилоти марбут ба он халос шавад. Модели марги PHP.
Муҳити таҳияи ҳаррӯзаи PHP-и шумо
Пеш аз он ки мо дар бораи он сӯҳбат кунем, ки чӣ тавр шумо метавонед Go-ро барои эҳёи модели мурдаи PHP истифода баред, биёед муҳити пешфарзии рушди PHP-и шуморо бубинем.
Дар аксари ҳолатҳо, шумо барномаи худро бо истифода аз омезиши веб-сервери nginx ва сервери PHP-FPM иҷро мекунед. Аввалин ба файлҳои статикӣ хидмат мерасонад ва дархостҳои мушаххасро ба PHP-FPM равона мекунад, дар ҳоле ки худи PHP-FPM рамзи PHP-ро иҷро мекунад. Шумо шояд комбинатсияи камтар маъмули Apache ва mod_php-ро истифода баред. Аммо гарчанде ки он каме дигар кор мекунад, принсипҳо яканд.
Биёед бубинем, ки чӣ тавр PHP-FPM рамзи барномаро иҷро мекунад. Вақте ки дархост ворид мешавад, PHP-FPM раванди кӯдаки PHP-ро оғоз мекунад ва тафсилоти дархостро ҳамчун қисми ҳолати он (_GET, _POST, _SERVER ва ғайра) интиқол медиҳад.
Ҳолат ҳангоми иҷрои скрипти PHP наметавонад тағир ёбад, аз ин рӯ танҳо як роҳи ба даст овардани маҷмӯи нави маълумоти воридотӣ вуҷуд дорад: тоза кардани хотираи раванд ва аз нав оғоз кардани он.
Ин модели иҷро бартариҳои зиёд дорад. Шумо набояд дар бораи истеъмоли хотира аз ҳад зиёд ғамхорӣ кунед, ҳама равандҳо комилан ҷудо карда мешаванд ва агар яке аз онҳо "мурда шавад", он ба таври худкор аз нав барқарор карда мешавад ва ба боқимондаи равандҳо таъсир намерасонад. Аммо ин равиш инчунин нуқсонҳое дорад, ки ҳангоми кӯшиши васеъ кардани барнома пайдо мешаванд.
Камбудиҳо ва бесамарии муҳити муқаррарии PHP
Агар шумо як таҳиягари касбии PHP бошед, пас шумо медонед, ки лоиҳаи навро аз куҷо оғоз кунед - бо интихоби чаҳорчӯба. Он аз китобхонаҳои тазриқи вобастагӣ, ORMҳо, тарҷумаҳо ва қолабҳо иборат аст. Ва, албатта, ҳама вуруди корбарро метавон ба осонӣ дар як объект ҷойгир кард (Symfony/HttpFoundation ё PSR-7). Чорчӯбаҳо хубанд!
Аммо ҳама чиз арзиши худро дорад. Дар ҳама гуна чаҳорчӯбаи сатҳи корхона, барои коркарди дархости оддии корбар ё дастрасӣ ба пойгоҳи додаҳо, шумо бояд ҳадди аққал даҳҳо файлро бор кунед, синфҳои сершумор эҷод кунед ва якчанд конфигуратсияҳоро таҳлил кунед. Аммо бадтарин чиз дар он аст, ки пас аз анҷом додани ҳар як супориш ба шумо лозим меояд, ки ҳама чизро аз нав танзим кунед ва аз нав оғоз кунед: тамоми коде, ки шумо оғоз кардед, бефоида мешавад ва бо ёрии он шумо дигар дархости дигарро коркард намекунед. Инро ба ягон барномасозе, ки ба ягон забони дигар менависад, бигӯед ва дар чеҳраи ӯ ҳайрон мешавед.
Муҳандисони PHP солҳо боз роҳҳои ҳалли ин мушкилотро меҷӯянд, бо истифода аз усулҳои доно боркунии танбалӣ, микрофроймҳо, китобхонаҳои оптимизатсияшуда, кэш ва ғайра. Аммо дар ниҳоят, шумо ба ҳар ҳол бояд тамоми барномаро аз нав танзим кунед ва дубора оғоз кунед. . (Эзоҳи мутарҷим: бо пайдоиши ин мушкилот қисман ҳал хоҳад шуд пешакӣ дар PHP 7.4)
Оё PHP бо Go метавонад зиёда аз як дархостро наҷот диҳад?
Скриптҳои PHP-ро навиштан мумкин аст, ки умри бештар аз чанд дақиқа (то соатҳо ё рӯзҳо) дарозтар аст: масалан, вазифаҳои cron, таҳлилгари CSV, шикастани навбат. Ҳамаи онҳо мувофиқи як сенария кор мекунанд: онҳо супоришро мегиранд, онро иҷро мекунанд ва вазифаи дигарро интизор мешаванд. Рамз ҳама вақт дар хотира ҷойгир буда, миллисонияҳои гаронбаҳоро сарфа мекунад, зеро барои бор кардани чаҳорчӯба ва барнома қадамҳои зиёди иловагӣ лозиманд.
Вазъият бо нашри PHP 7 беҳтар шуд: як коллектори боэътимоди партов пайдо шуд, коркарди хатогиҳо осонтар шуд ва васеъшавии ядро ҳоло аз ихроҷ тобовар аст. Дуруст аст, ки муҳандисон то ҳол бояд бо хотира эҳтиёткор бошанд ва аз масъалаҳои давлатӣ дар код огоҳ бошанд (оё забоне ҳаст, ки ин чизҳоро сарфи назар карда метавонад?). Бо вуҷуди ин, PHP 7 барои мо сюрпризҳои камтаре дорад.
Оё модели кор бо скриптҳои дарозмуддати PHP-ро гирифтан, онро ба корҳои ночиз, ба монанди коркарди дархостҳои HTTP мутобиқ кардан ва ба ин васила аз зарурати боркунии ҳама чиз аз сифр бо ҳар як дархост халос шудан мумкин аст?
Барои ҳалли ин мушкилот, ба мо лозим буд, ки як барномаи серверро амалӣ созем, ки метавонад дархостҳои HTTP-ро қабул кунад ва онҳоро як ба як ба коргари PHP бе куштани он равона кунад.
Мо медонистем, ки мо метавонем веб-серверро бо PHP холис (PHP-PM) ё бо истифода аз тамдиди C (Swoole) нависем. Ва гарчанде ки ҳар як усул бартариҳои худро дорад, ҳарду вариант ба мо мувофиқ набуданд - мо чизи бештареро мехостем. Ба мо на танҳо як сервери веб лозим буд - мо интизор будем, ки ҳалли он ба даст ояд, ки метавонад моро аз мушкилоти марбут ба "оғози сахт" дар PHP наҷот диҳад, ки дар айни замон онро барои барномаҳои мушаххас ба осонӣ мутобиқ кардан ва васеъ кардан мумкин аст. Яъне ба мо сервери барнома лозим буд.
Оё Go метавонад дар ин кор кӯмак кунад? Мо медонистем, ки ин метавонад аз он сабаб бошад, ки забон барномаҳоро ба як файлҳои дуӣ тартиб медиҳад; он кросс-платформа аст; модели коркарди худ, хеле шево, параллелӣ (ҳамзамон) ва китобхонаро барои кор бо HTTP истифода мебарад; ва ниҳоят, ҳазорҳо китобхонаҳои кушодаасос ва ҳамгироӣ барои мо дастрас хоҳанд шуд.
Мушкилоти омезиши ду забони барномасозӣ
Пеш аз ҳама, муайян кардан лозим буд, ки ду ё зиёда барномаҳо бо ҳамдигар чӣ гуна муошират мекунанд.
Масалан, истифода китобхонаи зебо Alex Palaestras, имкон дошт мубодилаи хотира байни равандҳои PHP ва Go (монанд ба mod_php дар Apache). Аммо ин китобхона дорои хусусиятҳое мебошад, ки истифодаи онро барои ҳалли мушкилоти мо маҳдуд мекунад.