Php + erlang

941 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
941
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Php + erlang

  1. 1. PHP + Erlangускоряем checkout
  2. 2. Checkout – оформление заказа Onepage checkout Ajax request Screenshot Next step server HTML Database Database
  3. 3. Erlang – язык программирования • Функциональный • Старый (1987 год), но до сих пор активно развивающийся (последний релиз – апрель 2012) • Создавать много легковесных процессов • Транслируется в байт-код и запускается виртуальной машиной
  4. 4. Многопоточность • PHP и так для каждого HTTP запроса создает новый поток • Чрезмерная многопоточность усложняет программу • Хотя, кое где многопоточность нужна
  5. 5. Демонизация PHP Web (PHP) application Daemon Request 1 Request 1 Process #1 load load load load Process #1 Response 1 Response 1 save save Request 2 Request 2 load load Process #2 Response 2 Response 2 save save Request 3 Request 3 load load Process #3 Response 3 save save Response 3 save save
  6. 6. Инфраструктура user 1 user 2 user 3 user 4 user 5 Неподходящие запросы 1. Упаковывает Request Front Front выполняются как 2. Отсылает его в Erlang Manager script 3. Получает и распаковывает script Magento обычно Response Erlang 1. Распаковывает Request Создает новый или Erlang 2. Обрабатывает его передает управление в manager manager 3. Упаковывает и отсылает существующий процесс обратно Response PHP PHP PHP PHP PHP PHP PHP PHP PHP PHP node node node node node node node node node node user 1 user 2 user 3 user 4 user 5
  7. 7. Пример кода front script <?php if (isCheckoutRequest()) { runParallel(); } else { runMagento(); } function runParallel() { $parallel = new Mage_Parallel( array(host => 127.0.0.1, port => 7000, secret_cookie => Secret‘) ); $env = array(server => $_SERVER, get => $_GET, post => $_POST, ‘cookie => $_COOKIE); $result = unserialize($parallel->call(runApp, array($env), $_COOKIE[‘frontend’])); $response = new Zend_Controller_Response_Http(); $response->setBody($result[body])->setHttpResponseCode($result[responseCode]); foreach ($result[headers] as $header) { $response->setHeader($header[name], $header[value], $header[replace]); } $response->sendResponse(); }
  8. 8. Пример кода PHP node <?php include_once ../../../../../../app/Mage.php; $isMageRun = false; function runApp($env) { $_SERVER = $env[server]; $_GET = $env[get]; $_POST = $env[post]; $_COOKIE = $env[cookie]; ob_start(); if (!$isMageRun) { Mage::run(); $isMageRun = true; } else { preapreApp(); /* clean some singletons and objects*/ Mage::app()->setRequest(new Mage_Core_Controller_Request_Http()); Mage::registry(controller)->dispatch(); } ob_get_clean(); return serialize(array( body => Mage::app()->getResponse()->getBody(), headers => Mage::app()->getResponse()->getHeaders(), responseCode => Mage::app()->getResponse()->getHttpResponseCode() )); }
  9. 9. Как работает checkout Checkout steps Quote process • • load Quote load Quote • • collect totals collect totals step 1 • • save Quote save Quote • • load Quote load Quote • • collect totals collect totals step 2 • • save Quote save Quote • • load Quote MySQL MySQL load Quote • • collect totals collect totals database database step 3 • • save Quote save Quote •• load Quote load Quote •• collect totals collect totals step 4 •• •• save Quote save Quote create and save order create and save order
  10. 10. Как работает checkout Checkout steps Quote process step 1 step 2 MySQL MySQL database database step 3 step 4
  11. 11. Ресурсы PHP eval сервер для erlang - https://github.com/skeltoac/php_app PHP расширение для запуска Php, как erlang cnode - https://code.google.com/p/mypeb
  12. 12. Q& AРуслан Грабовой Саша Кусакинrgrabovoy@ebay.com akusakin@ebay.com

×