Foros del Web » Programando para Internet » PHP »

Script enviar datos de servidor1 a servidor2

Estas en el tema de Script enviar datos de servidor1 a servidor2 en el foro de PHP en Foros del Web. Hola amigos, Tengo el siguiente problema: Estoy enviando datos de el Servidor1 al Servidor2, pero la cuestión es que va muy lento. El proceso tarda ...
  #1 (permalink)  
Antiguo 07/04/2012, 04:14
Avatar de ciscoh4x0r  
Fecha de Ingreso: junio-2010
Ubicación: Londres, Inglaterra
Mensajes: 300
Antigüedad: 13 años, 10 meses
Puntos: 12
Exclamación Script enviar datos de servidor1 a servidor2

Hola amigos,

Tengo el siguiente problema: Estoy enviando datos de el Servidor1 al Servidor2, pero la cuestión es que va muy lento. El proceso tarda alrededor de 5 - 8 horas en completarse o simplemente se congela, y ya no envía nada ni se actualiza nada, ni pasa nada., lo cual no lo puedo tolerar/permitir/dejar , se supone que esto máximo debería demorará 30 minutos - 1 hora....

Lo que hace: El script en PHP toma los datos de la base de datos MySQL en el Servidor1 y los envia a la base de datos MySQL del Servidor2, donde este los procesa y crea una lista y contenido para cada usuario con esta información, luego crea un archivo en HTML y programa una tarea para enviarse todos los días.

Lo que busco, es saber como puedo optimizar este proceso o que puedo hacer para acelerarlo, estamos perdiendo tiempo valioso que necesitamos recuperar.

Como dato crucial: Yo creo que un problema es la memoria RAM de el servidor1, pues este servidor pasa con memoria de 256mb libre para este proceso o menos.

Como solución a esto: El script fue hecho en 4 partes (4 archivos php) para salvar procesos y memoria.

Esto es lo que hace:

Código PHP:
Ver original
  1. function createCampaign() {
  2.     ini_set('memory_limit', '1024M');
  3.     set_time_limit(0);
  4.    
  5.     try {
  6.         $listId = 17;
  7.         if (isset($listId) && $listId > 0) {
  8.             $customerList = getCustomerList();
  9.             foreach ($customerList as $customer) {
  10.                 $params = getCustomFieldValuesForSubscriber($customer['subscriber_email']);
  11.                 if (isset($params) && count($params) > 0) {
  12.                     $dynamicContent = $params['dynamic_content'];
  13.                     unset($params['dynamic_content']);
  14.                     if (isset($dynamicContent)) {
  15.                         //addSubscriber($customer['subscriber_email'], $listId, $params);
  16.                         addDynamicContentBlock($dynamicContent, $customer['subscriber_email'], $listId, $customer['customer_id']);
  17.                         Mage::log("Added subscriber ..." . $customer['customer_id']);
  18.                     }
  19.                     unset($dynamicContent);
  20.                 }
  21.                 unset($params);
  22.             }
  23.             //scheduleCampaign($listId);
  24.         } else {
  25.             Mage::log( "Contact list not present.");
  26.         }
  27.     } catch (Exception $e) {
  28.         Mage::log("Exception occured .." . $e);
  29.     }
  30. }
  31. function sendRequest($requestUrl, $requestType, $params) {
  32.     if (isset($requestUrl) && isset($requestType)) {
  33.         $session = curl_init($requestUrl);
  34.  
  35.         if ($requestType === "POST") {
  36.             curl_setopt($session, CURLOPT_POST, true);
  37.             curl_setopt($session, CURLOPT_POSTFIELDS, $params);
  38.         }
  39.  
  40.         curl_setopt($session, CURLOPT_HEADER, false);
  41.         curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
  42.  
  43.         $response = curl_exec($session);
  44.         curl_close($session);
  45.  
  46.         //print_r($response);
  47.         return $response;
  48.     }
  49. }
  50.  
  51. function scheduleCampaign($listId) {
  52.     $htmlBody = getHtmlTemplate();
  53.     if (isset($htmlBody) && isset($listId)) {
  54.         $requestUrl = "http://www.dominio.com/ruta/archivo.php";
  55.         $requestType = "POST";
  56.         $params = array('htmlBody' => $htmlBody,
  57.             'listId' => $listId);
  58.         sendRequest($requestUrl, $requestType, $params);
  59.     }
  60. }


No es todo el código, pero es la idea de como lo hago, esto se repite el proceso y hace:
- Lista
- Suscriptores
- Datos
- Ofertas
- Y crea un HTML de todo

Y con esto tengo que alimentar la base de datos, la información al Server2 pero este tiene que crear todo en él no de la misma forma, pero tiene que crearla..

¿Ideas?

Agradezco cualquier comentario sobre como acelerar la transferencia de estos datos, pues va como lo peor.
__________________
Algún día habrá una persona mejor que yo, pero esa persona no eres tú, ni ese momento es ahora...
  #2 (permalink)  
Antiguo 09/04/2012, 00:34
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Script enviar datos de servidor1 a servidor2

Es muy difícil decirte algo sin conocer todos los detalles del sistema.
Respecto a posibles soluciones, de más fácil a más difícil, tal como tú comentas, soluciona la RAM del servidor, mejora la conexión y en lo posible todo el hardware en ambos servidores.
Si el problema es transferir la info, y luego es Server2 el que procesa, puedes buscar un método alternativo como replicación o transferencia masiva con el toolkit de Mysql.
Entrando en más detalles: comprobar indices, claves foráneas, defragmentar discos y mil etcéteras. La función EXPLAIN de MySQL te puede servir para ver cuáles son las select que van mal. Cualquier profiler de PHP te dirá dónde consumes la mayoría de tu tiempo.
Espero que sirva, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 17/04/2012, 17:17
Avatar de ciscoh4x0r  
Fecha de Ingreso: junio-2010
Ubicación: Londres, Inglaterra
Mensajes: 300
Antigüedad: 13 años, 10 meses
Puntos: 12
Respuesta: Script enviar datos de servidor1 a servidor2

Agradezco tu enorme respuesta, he aumentado la memoria RAM a 4GB y he optimizado las configuraciones de las bases de datos en ambos servidores, el día siguiente estaremos probando los resultados, ojalá funcione.
__________________
Algún día habrá una persona mejor que yo, pero esa persona no eres tú, ni ese momento es ahora...

Etiquetas: html, mysql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:17.