Ahorro apache
La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la
versión revisada el 8 de febrero de 2021; las comprobaciones requieren
5 ediciones .
Thrift (del inglés - "thrift", pronunciado como [θrift] ) es un lenguaje de descripción de interfaz que se usa para definir y crear servicios para diferentes lenguajes de programación. Es un marco para la llamada a procedimiento remoto (RPC). Utilizado por Facebook como un servicio escalable de desarrollo multilingüe. Combina un pipeline con un motor de generación de código para desarrollar servicios que funcionan de forma más o menos eficiente y sencilla entre lenguajes como [2] C# , C++ , Cappuccino , Cocoa , Delphi , Erlang , Go , Haskell , Java , OCaml , Perl , PHP , Python , Ruby , Rust , Smalltalk y JavaScript [3] . En pocas palabras, Thrift es un protocolo de comunicación binario . Desde abril de 2007, se ha desarrollado como un proyecto de código abierto de la organización sin fines de lucro Apache Software Foundation .
Arquitectura
Thrift incluye una tubería de software lista para usar, que consta de seis capas, para trabajar con las partes del cliente y del servidor. El nivel superior es el código de descripción Thrift generado. Los servicios generan código de cliente y servidor a partir de él. A diferencia de los tipos integrados, la estructura de datos generada se devuelve como resultado en el código generado. Las capas de protocolo y transporte son parte de la biblioteca de tiempo de ejecución . En Thrift es posible seleccionar servicios y cambiar el protocolo y el transporte sin volver a compilar el código. Además del lado del cliente, Thrift incluye una infraestructura de servidor para la comunicación y el transporte de protocolos en blocking, non-blockingy multi-threadedservidores. El marco de la capa de E/S se implementa de manera diferente para diferentes idiomas.
Protocolos soportados
- TBinaryProtocol : un formato binario sin complicaciones, simple pero no optimizado para ahorrar espacio.
- TCompactProtocol : formato binario más compacto, generalmente más eficiente.
- TDebugProtocol : un formato de texto legible por humanos que ayuda en la depuración.
- TDenseProtocol : al igual que con TCompactProtocol , obtiene metainformación de lo que se pasó.
- TJSONProtocol : uso de JSON para decodificar datos.
- TSimpleJSONProtocol : protocolo de solo escritura que utiliza JSON. Adecuado para analizar en lenguajes de secuencias de comandos.
Transportadores admitidos
- TFileTransport : este transportador escribe en un archivo.
- TFramedTransport : este transportador se usa cuando se aplican servidores sin bloqueo. Envía datos en marcos, donde cada marco está precedido por una longitud de información.
- TMemoryTransport : uso de memoria para E/S. La implementación de Java usa un simple ByteArrayOutputStream.
- TSocket : utiliza E/S de socket de bloqueo para el transporte.
- TZlibTransport : realiza la compresión mediante zlib. Utilizado en combinación con otros vehículos. Falta en la implementación de Java.
Servidores soportados
- TNonblockingServer : multi-threadedservidor que utiliza non-blockingentrada/salida (usos de implementación de Java NIO channels). Estos servidores deben usar TFramedTransport .
- TSimpleServer : uno single-threadedque usa std blockingE/S. Útil para la prueba.
- TThreadPoolServer es multi-threadedun servidor que utiliza std blockingE/S.
Beneficios
- Serialización entre idiomas con una sobrecarga menor que alternativas como SOAP mediante el uso de un formato binario.
- Biblioteca simple y limpia. No necesita un marco de código. No utiliza configuración XML.
- Los enlaces de idiomas se sienten naturales. Por ejemplo, Java usa ArrayList<String>. usos de C++std::vector<std::string>.
- El formato de comunicación de la capa de aplicación y el formato de comunicación de la capa de serialización están estrictamente separados. Se pueden cambiar independientemente uno del otro.
- Los tipos de serialización integrados incluyen: binario, apto para HTTP y binario compacto.
- Se acumula como un archivo serializado en varios idiomas.
- Versiones blandas del protocolo. Thrift no requiere un mecanismo centralizado y explícito como lo hace la versión principal/versión secundaria. Los grupos débilmente acoplados pueden pasar libremente a llamadas RPC.
- Independiente de arquitectura o software a la medida . Sin licencias de software incompatibles.
[cuatro]
|
Ahorro apache
|
Búferes de protocolo
|
Desarrollador
|
facebook, apache
|
Google
|
Idiomas admitidos
|
C++, C#, Dart, D, Go, Haskell, Java, JavaScript, Python, PHP, XSD, Ruby, Perl, Objective C,
Erlang, rubí, Smalltalk, OCaml, Haskell
|
C++, C#, Dart, Go, Java, JavaScript, Python, PHP, Objective C, Ruby
|
Formatos salientes
|
Binario, JSON
|
Binario
|
tipos simples
|
bool byte enteros de 16/32/64 bits cadena doble secuencia de bytes map<t1,t2> list<t> set<t>
|
bool enteros de 32/64 bits flotan secuencia de bytes de cadena doble propiedades repetidas funcionan como listas
|
constantes
|
Sí
|
No
|
tipo compuesto
|
estructura
|
mensaje
|
Excepciones
|
Sí
|
No
|
Documentación
|
problemático
|
Bueno
|
Licencia
|
apache
|
estilo BSD
|
Extensiones de tipo compuesto
|
No
|
Sí
|
Creando un Servicio de Ahorro
Thrift está escrito en C++, sin embargo, el código se puede escribir en varios idiomas. Para crear un servicio Thrift, primero debe escribir archivos Thrift que lo describan, luego generar código en el idioma de salida y especificar los comandos para iniciar el servidor y luego llamarlos en el cliente. Aquí hay un archivo de descripción de ejemplo:
enum tipo de teléfono {
casa ,
TRABAJO ,
MÓVIL ,
OTRO
}
teléfono estructura {
1 : identificación i32 ,
2 : número de cadena ,
3 : Tipo de teléfono _
}
Thrift generará código a partir de este archivo de descripción, por ejemplo, en Java. PhoneTypeserá una enumeración simple (enum)dentro del POJO para la clase Teléfono.
Literatura
- Randy Abernethy. La guía del programador de Apache Thrift. - Compañía de Publicaciones Manning, 2015. - ISBN 978-1-61729-181-4 .
Notas
- ↑ https://projects.apache.org/json/projects/thrift.json
- ↑ Apache Thrift: lenguaje y matriz de características . Consultado el 11 de marzo de 2019. Archivado desde el original el 8 de marzo de 2019. (indefinido)
- ↑ Apache Thrift-Javascript . thrift.apache.org. Consultado el 13 de octubre de 2016. Archivado desde el original el 9 de octubre de 2016. (indefinido)
- ↑ Thrift vs Protocol Bufffers vs JSON Archivado el 7 de noviembre de 2015 en Wayback Machine , MirthLab LLC, 2009
Enlaces
Fundación de software Apache |
---|
Proyectos de primer nivel |
|
---|
Subproyectos | |
---|
Web de Apache |
- Eje
- Eje2
- CXF
- WS-
- SAT
- JaxMe
- jUDDI
- Kandula
- Mira
- musa
- Suscríbete
- Sandesha
- explorador
- JABÓN
- sinapsis
- TSIK
- Toscana
- madera
- WSIF
- WSRF
- WSS4J
- XML-RPC
|
---|
Otros proyectos |
|
---|
Desarrollando proyectos ( Incubadora ) |
- XAP
- río
- OpenEJB
- Abrir JPA
- Grafito
- Toscana
- Log4Net
- Rodillo
- Félix
- Abdera
- celtixfire_
- Servidor FTP
- Heráldica
- hiedra
- jugo
- Kabuki_
- Lokahi
- Lucene.Net
- mod_ftp
- NMaven
- Oda
- stdcxx
- madera
- WSRP4J
- Yoko
- WADI
- rápido
- Sopa Triple
- UIMA
- adobe flexible
|
---|
Proyectos fuera de servicio ( Ático ) |
- AxKit
- colmena
- cacto_
- ECS
- Excálibur
- Armonía
- Mente colmena
- iBATIS
- Jacarta
- ORO_
- expresión regular
- Esquisto
- diapositiva
- Taglibs
|
---|
|
Metaplataformas |
---|
Servicios | |  |
---|
Gente | Fundadores |
|
---|
Junta Directiva |
|
---|
administración | Actual |
- Mark Zuckerberg (CEO)
- Chris Cox (VP de Productos)
- Sheryl Sandberg (COO)
- Elliot Shraj (vicepresidente de comunicaciones globales, marketing y políticas públicas)
- Mike Schroepfer (CTO)
- Ted Ulliot (Vicepresidente y asesor jurídico)
|
---|
Anterior |
- Sean Parker (presidente)
- Owen Van Natta (COO)
- Gideon Yu (director financiero)
- Adam d'Angelo (CTO)
- Chris Kelly (Director de privacidad)
- Matt Cowler (vicepresidente de gestión de productos)
- Bret Taylor (CTO)
|
---|
|
---|
colaboradores notables | |
---|
|
---|
EN |
|
---|
medios de comunicación en masa |
|
---|
Conceptos |
|
---|
Negocio |
- Historia Facebook
- Lista de fusiones y adquisiciones de Meta Platforms
- Facebook F8
- Oferta Pública Inicial de Facebook
- censura en facebook
- criticas a facebook
- Escándalo de Facebook y Cambridge Analytica
- Documentos de
- Problemas de privacidad de Facebook
- Demandas que involucran Meta Plataformas
|
---|
Relacionado |
|
---|