Migración de mensajería instantánea a grpc dropbox tech blog best crypto exchange 2018

Dropbox ejecuta cientos de servicios, escritos en diferentes idiomas, que intercambian millones de solicitudes por segundo. En el núcleo de nuestra arquitectura orientada a servicios se encuentra el servicio de mensajería, nuestro marco de llamada a procedimiento remoto (RPC) basado en grpc. Al desarrollar el servicio de mensajería, aprendimos mucho sobre la extensión de grpc, la optimización del rendimiento para el intercambio criptográfico a escala y el suministro de un puente desde nuestro sistema RPC heredado.

Courier no es un protocolo RPC diferente, es solo la forma en que Dropbox integró grpc con nuestra infraestructura existente. Por ejemplo, debe funcionar con nuestras versiones específicas de autenticación, autorización y descubrimiento de servicios. También debe integrarse con nuestras estadísticas, registro de eventos y herramientas de seguimiento. El resultado de todo el trabajo de noticias de hoy en el mercado de la criptomoneda es lo que llamamos mensajería.

Queremos minimizar la cantidad de texto que escribimos. Dado que el servicio de mensajería es nuestro marco común para el desarrollo de servicios, incorpora características que todos los servicios necesitan. La mayoría de estas funciones están habilitadas de forma predeterminada y pueden controlarse mediante argumentos de la línea de comandos. Algunos de ellos también se pueden alternar dinámicamente a través de un indicador de función. Seguridad: identidad de servicio y autenticación mutua TLS

Courier implementa nuestro mecanismo de identidad de servicio estándar. Todos nuestros servidores y clientes tienen un significado de descifrado en hindi de sus propios certificados TLS, que son emitidos por nuestra autoridad de certificación interna. Cada uno tiene una identidad, codificada en el certificado. Esta identidad se usa luego para la autenticación mutua, donde el servidor verifica al cliente y el cliente verifica el servidor.

Una vez que se confirma la identidad y se descifra la solicitud, el servidor verifica que el cliente tenga los permisos adecuados. Las listas de control de acceso (ACL) y los límites de velocidad se pueden establecer tanto en los servicios como en los métodos individuales. También pueden actualizar las 10 criptomonedas que se pueden comprar a través de nuestro sistema de archivos de configuración distribuido (AFS). Esto permite a los propietarios de servicios deshacerse de la carga en cuestión de segundos, sin necesidad de reiniciar los procesos. El marco de mensajería se encarga de suscribirse a las notificaciones y las actualizaciones de configuración de manejo de criptomoneda.

Nuestro RPC heredado solo propagó request_id a través de los límites de la API. Esto permitió unir registros de diferentes servicios. En el servicio de mensajería, hemos introducido una API basada en un subconjunto de la especificación de opentracing. Escribimos nuestras propias bibliotecas de clientes, mientras que el lado del servidor está construido sobre Cassandra y Jaeger. Los detalles de cómo hicimos que este sistema de seguimiento funcionara justifican una publicación de blog dedicada.

Cada solicitud de grpc incluye una fecha límite, que indica cuánto tiempo esperará el cliente una respuesta. Dado que los talones de mensajería propagan automáticamente los metadatos de reddit 2018 de las criptomonedas principales conocidas, la fecha límite se desplaza con la solicitud incluso a través de los límites de la API. Dentro de un proceso, los plazos se convierten en una representación nativa. Por ejemplo, en go están representados por un contexto. Resultado de contexto del método de línea de retiro.

¡Este contexto puede viajar incluso fuera de la capa RPC! Por ejemplo, nuestro ORM mysql heredado serializa el contexto RPC junto con la fecha límite en un comentario en la consulta SQL. Nuestro sqlproxy puede analizar estos comentarios y KILL consultas cuando se excede la fecha límite. Como beneficio adicional, tenemos atribución por solicitud al depurar consultas de base de datos.

Por razones de seguridad, es posible que desee exponer la aplicación de intercambio criptográfico reddit en un puerto separado (posiblemente solo en una interfaz de bucle invertido) o incluso en un socket Unix (para que el acceso se pueda controlar adicionalmente con los permisos de archivos Unix). Autenticación TLS mutua allí solicitando a los desarrolladores que presenten sus certificados para acceder a los puntos finales de depuración (especialmente los que no son de solo lectura).

Dado que la verificación RSA 2048 es 3 veces más rápida que la ECDSA P-256 una, desde las 10 mejores criptomonedas para invertir en 2018 desde una perspectiva de rendimiento, puede considerar el uso de RSA para sus certificados de raíz / hoja. Sin embargo, desde una perspectiva de seguridad, es un poco más complicado ya que estará encadenando diferentes primitivas de seguridad y, por lo tanto, las propiedades de seguridad resultantes serán el mínimo de todas ellas.

Dropbox tiene múltiples centros de datos conectados a través de tablas de cifrado que viven en una red troncal. A veces, los nodos de diferentes regiones necesitan comunicarse entre sí a través de RPC, e.G. A los efectos de la replicación. Cuando se usa TCP, el kernel es responsable de limitar la cantidad de datos en curso para una conexión dada (dentro de los límites de / proc / sys / net / ipv4 / tcp_ {r, w} mem), aunque ya que grpc se basa en HTTP / 2 También tiene su propio control de flujo sobre TCP. El límite superior para la configuración de yamaha crypton z el BDP está codificado en grpc-go a 16mb, lo que puede convertirse en un cuello de botella para una única conexión de BDP alto. El servidor net.Server vs grpc.Server de Golang

En nuestro código go, inicialmente admitimos HTTP / 1.1 y grpc usando el mismo net.Server. Esto era lógico desde la perspectiva del mantenimiento del código, pero tenía un rendimiento subóptimo. La división de las rutas HTTP / 1.1 y grpc para ser procesadas por servidores independientes y el cambio de grpc a grpc.Server mejoró en gran medida el rendimiento y el uso de la memoria de nuestros servicios de mensajería. Golang / protobuf vs gogo aes criptografía ppt / protobuf

Escribir una nueva pila de RPC no es una tarea fácil, pero en términos de complejidad operativa todavía no se puede comparar con el proceso de migración de todo el mundo a ella. Para asegurar el éxito de este proyecto, hemos tratado de facilitar a los desarrolladores la migración del RPC heredado al servicio de mensajería. Dado que la migración en sí misma es un proceso muy propenso a errores, hemos decidido seguir un proceso de varios pasos. Paso 0: congelar el RPC heredado

En un futuro relativamente próximo de la conferencia criptográfica de Toronto, quisimos agregar una API de resolución adecuada al código grpc de python, cambiar a enlaces C ++ en python / rust, y agregar soporte completo de ruptura de circuitos e inyección de fallas. A finales del próximo año, estamos planeando examinar ALTS y cambiar el protocolo de enlace de TLS a un proceso separado (posiblemente incluso fuera del contenedor de servicios). ¡Estamos contratando!

Los equipos de tráfico / tiempo de ejecución / confiabilidad están contratando swes y sres para trabajar en procesadores de paquetes TCP / IP y balanceadores de carga, proxies HTTP / grpc, y nuestro tiempo de ejecución de malla de servicio interno: courier / grpc, descubrimiento de servicio la mejor cartera de hardware de criptomoneda y AFS . ¿No es lo tuyo? También estamos contratando para una amplia variedad de puestos de ingeniería en San Francisco, Nueva York, Seattle, Tel Aviv y otras oficinas en todo el mundo. Expresiones de gratitud

banner