{"id":867,"date":"2011-02-09T21:35:39","date_gmt":"2011-02-10T03:35:39","guid":{"rendered":"http:\/\/puchunguis.com\/blog\/?p=867"},"modified":"2011-02-09T21:47:16","modified_gmt":"2011-02-10T03:47:16","slug":"facebook-no-es-php","status":"publish","type":"post","link":"https:\/\/www.jorgealdana.pro\/blog\/internet\/facebook-no-es-php\/","title":{"rendered":"Facebook no es PHP"},"content":{"rendered":"<p><a href=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2011\/02\/facebook-hiphop-for-php.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/484c2a6d15c399b70beb-b1e2a15a3df201703b71bb9b31acda05.ssl.cf5.rackcdn.com\/2011\/02\/facebook-hiphop-for-php-150x150.jpg\" alt=\"\" title=\"facebook-hiphop-for-php\" width=\"150\" height=\"150\" class=\"alignleft size-thumbnail wp-image-874\" \/><\/a>Muchas personas <strong>creen que Facebook est\u00e1 hecho solo en PHP<\/strong>, pero esto es un error ya que Facebook utiliza un conjunto de tecnolog\u00edas que hacen que la plataforma funcione correctamente.<\/p>\n<p>La mayor\u00eda ve una extensi\u00f3n \u00ab.php\u00bb y creen que toda la plataforma ha sido desarrollada en este lenguaje pero no es as\u00ed, cuando crearon Facebook llegaron a la conclusi\u00f3n de que PHP no es precisamente el lenguaje m\u00e1s r\u00e1pido que existe, ya <strong>que se trata de un lenguaje interpretado<\/strong> y si a eso le agregan que hay tareas que no se pueden llevar a cabo en PHP, \u00a0la conclusi\u00f3n a la que llegaron los programadores de Facebook fue que quiz\u00e1 no haya sido una buena elecci\u00f3n elegir PHP para su desarrollo, lo que les ha llevado a <strong>intentar migrar el n\u00facleo de Facebook a Python <\/strong>en varias ocasiones, pero ninguna lleg\u00f3 a tener el resultado que esperaban.<\/p>\n<p>Actualmente la plataforma de Facebook incluye:<\/p>\n<ul>\n<li>Sistema operativo Linux<\/li>\n<li>Memcache<\/li>\n<li>Apache Cassandra<\/li>\n<li>Apache Hive<\/li>\n<li>Apache Thrift<\/li>\n<li>Scribe<\/li>\n<li>Lenguajes: PHP, Java, C++, Erlang, .NET, PEARL<\/li>\n<li>HipHop para PHP<\/li>\n<li>Tornado Web Server<\/li>\n<li>Mysql<\/li>\n<li>Protocolo XMPP<\/li>\n<\/ul>\n<h3>Apache Thrift.<\/h3>\n<p>Thrift es un conjunto de herramientas y librer\u00edas software <strong>creadas por Facebook <\/strong> para acelerar el desarrollo e implementaci\u00f3n de servicios backend eficientes y escalables. El principal objetivo es permitir comunicaciones eficientes y fiables a trav\u00e9s de lenguajes de programaci\u00f3n mediante <strong>la abstracci\u00f3n de porciones de cada lenguaje en una librer\u00eda com\u00fan<\/strong>, espec\u00edficamente Apache Thrift permite a los desarrolladores definir los tipos de datos e interfaces de servicios en un archivo \u00fanico en lenguaje neutral y generar todo el c\u00f3digo necesario para construir clientes RPC y servidores.<\/p>\n<p>Actualmente Thrift soporta los siguientes lenguajes C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk y OCaml. Facebook utiliza esta tecnolog\u00eda para su sistema de b\u00fasqueda integrando as\u00ed un backend desarrollado en C++ con un frontend escrito en PHP.<\/p>\n<p>Facebook utilizo esta tecnolog\u00eda para utilizar las librer\u00edas de Java y que en PHP no existen, como por ejemplo la librer\u00eda para realizar el env\u00edo de SMS.<\/p>\n<h3>Apache Cassandra<\/h3>\n<p>Apache Cassandra es una Base de Datos no relacional, distribuida y basada en un modelo de almacenamiento de Clave-Valor, escrita en Java, adem\u00e1s de Facebook, sitios como Reddit y Twitter tambi\u00e9n usan Cassandra, la usan para almacenar los datos de los usuarios de forma estructurada y distribuida. Se dice que Cassandra pertenece a una segunda generaci\u00f3n de bases de datos, <strong>a un paradigma llamado NoSQL<\/strong>. Facebook hizo p\u00fablico el c\u00f3digo de Cassandra al tiempo que lo entreg\u00f3 a la comunidad Apache en el 2008, Facebook no podr\u00eda escalar sin Cassandra.<\/p>\n<h3>Apache Hive<\/h3>\n<p>Este es un proyecto auspiciado por la Fundaci\u00f3n Apache. Entre sus varias funcionalidades destaca una que es fundamental para el funcionamiento de Facebook: el an\u00e1lisis de grandes conjuntos de datos sobre los cuales es posible inquirir, buscar informaci\u00f3n en ellos, <strong>Facebook no podr\u00eda ofrecer su servicio de b\u00fasqueda sin Hive<\/strong>.<\/p>\n<h3>Scribe Server<\/h3>\n<p>Lo que hace Scribe es muy sencillo: es un sistema de distribuci\u00f3n y registro de mensajes en los servidores, es tolerante a fallas y capaz de funcionar sobre una gran cantidad de equipos, gracias a Scribe Facebook logra gestionar con mayor facilidad y eficiencia sus miles de servidores.<\/p>\n<h3>HipHop para PHP<\/h3>\n<p>La parte visible de Facebook <strong>est\u00e1 escrita en su mayor\u00eda con lenguaje PHP<\/strong>, por lo que su desempe\u00f1o es cr\u00edtico para todo el sistema. Siendo un lenguaje interpretado tiene limitaciones de desempe\u00f1o que los lenguajes compilados no tienen.<\/p>\n<p>Una gran cantidad de peticiones PHP impone un consumo excesivo de CPU, y en Facebook han logrado solucionar el problema con este desarrollo en el que llevaban trabajando m\u00e1s de 3 a\u00f1os <strong>y que permite convertir el c\u00f3digo PHP en c\u00f3digo C++<\/strong>, que luego se compila con g++ para obtener un c\u00f3digo objeto mucho m\u00e1s eficiente en consumo de recursos de lo que era el c\u00f3digo PHP original, el resultado es un software de igual funcionalidad, pero optimizado para un alto desempe\u00f1o. De hecho, Facebook afirma que gracias a HipHop para PHP usa hasta 50% menos CPU que antes, Facebook ser\u00eda m\u00e1s lento sin la ayuda de HipHop para PHP.<\/p>\n<h3>Tornado web Server<\/h3>\n<p>Tornado es un framework de servidor Web y est\u00e1 liberado bajo la licencia Apache versi\u00f3n 2, est\u00e1 escrito en Python y est\u00e1 dise\u00f1ado para permitir el procesamiento de miles de conexiones simultaneas. Facebook no podr\u00eda \u201csentirse\u201d en tiempo real sin Tornado.<\/p>\n<h3>Protocolo XMPP<\/h3>\n<p>Extensible Messaging and Presence Protocol (XMPP) es un protocolo para comunicaci\u00f3n en tiempo real, la cual sirve de base para un amplio rango de aplicaciones, incluyendo mensajer\u00eda instant\u00e1nea, informaci\u00f3n de presencia o tambi\u00e9n llamada \u00ablistas de contactos\u00bb, charlas con m\u00faltiples participantes, voz, video llamadas, colaboraci\u00f3n, sindicalizaci\u00f3n de contenidos y enrutamiento generalizado de datos en XML.<\/p>\n<p>El chat de Facebook y la integraci\u00f3n con sistemas como Windows Live no ser\u00eda posible sin XMPP con DIGEST-MD5.<\/p>\n<p>Bueno ahora que ya saben <strong> Facebook no es solo PHP<\/strong> y no ser\u00eda posible sin el uso de todas las tecnolog\u00edas antes mencionadas.<\/p>\n<p>Para finalizar te debo decirles que la informaci\u00f3n presentada fue tomada de \u00abPensamientos \u00c1giles\u00bb perteneciente a <a href=\"http:\/\/www.facebook.com\/aditya\" target=\"_blank\" rel=\"noopener\">Aditya Agarwal<\/a>, el director de ingenier\u00eda de Facebook.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Muchas personas creen que Facebook est\u00e1 hecho solo en PHP, pero esto es un error ya que Facebook utiliza un conjunto de tecnolog\u00edas que hacen que la plataforma funcione correctamente. La mayor\u00eda ve una extensi\u00f3n \u00ab.php\u00bb y creen que toda la plataforma ha sido desarrollada en este lenguaje pero no es as\u00ed, cuando crearon Facebook llegaron a la conclusi\u00f3n de que PHP no es precisamente el lenguaje m\u00e1s r\u00e1pido que existe, ya que se trata de un lenguaje interpretado y si a eso le agregan que hay tareas que no se pueden llevar a cabo en PHP, \u00a0la conclusi\u00f3n a <\/p>\n","protected":false},"author":1,"featured_media":874,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[100],"tags":[1633,1625,1626,1627,1631,1611,1610,1622,1620,1621,1618,1619,1632,37,1617,1616,1615,1614,1612,1613,1608,1635,1630,1629,1624,1637,1634,1609,1638,1628,1623,1607,1636],"class_list":["post-867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-internet","tag-net","tag-apache-cassandra","tag-apache-hive","tag-apache-thrift","tag-c","tag-en-que-esta-hecho-facebook","tag-en-que-esta-programado-facebook","tag-en-que-lenguaje-de-programacion-esta-hecho-facebook","tag-en-que-lenguaje-esta-desarrollado-facebook","tag-en-que-lenguaje-esta-escrito-facebook","tag-en-que-lenguaje-esta-hecho-facebook","tag-en-que-lenguaje-esta-programado-facebook","tag-erlang","tag-facebook","tag-facebook-en-que-esta-desarrollado","tag-facebook-en-que-esta-hecho","tag-facebook-en-que-esta-programado","tag-facebook-en-que-lenguaje-esta-desarrollado","tag-facebook-en-que-lenguaje-esta-hecho","tag-facebook-en-que-lenguaje-esta-programado","tag-facebook-tecnologia","tag-hiphop-para-php","tag-java","tag-lenguajes-php","tag-memcache","tag-mysql","tag-pearl","tag-plataforma-facebook","tag-protocolo-xmpp","tag-scribe","tag-sistema-operativo-linux","tag-tecnologia-facebook","tag-tornado-web-server","has_thumb"],"_links":{"self":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/comments?post=867"}],"version-history":[{"count":11,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/867\/revisions"}],"predecessor-version":[{"id":879,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/posts\/867\/revisions\/879"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/media\/874"}],"wp:attachment":[{"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/media?parent=867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/categories?post=867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jorgealdana.pro\/blog\/wp-json\/wp\/v2\/tags?post=867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}