Arquitectura

Componentes, su propósito y Lenguajes

Meshery y sus componentes están escritos utilizando los siguientes lenguajes de programación y tecnologías.

Componentes Lenguajes y Tecnologías
Meshery Server Golang, gRPC, GraphQL, SMP
Meshery Adapters Golang, gRPC, CloudEvents, SMI, OAM
Meshery WASM Filters Rust y C++
Meshery UI ReactJS, NextJS, BillboardJS
Meshery Provider UI ReactJS, NextJS
Meshery Remote Providers cualquiera - debe adherirse a los Extension Points de Meshery
Meshery Operator Golang
     MeshSync Golang
     Broker Golang, NATS
Meshery Database Golang, SQLlite

Despliegues

Meshery se despliega como un conjunto de contenedores. Los contenedores de Meshery pueden ser desplegados en Docker o Kubernetes. Los componentes de Meshery se conectan entre sí a través de peticiones gRPC. Meshery Server almacena la ubicación de los otros componentes y se conecta con estos componentes según sea necesario. Típicamente, una conexión de Meshery Server a Meshery Adapters es iniciada desde un petición de cliente (generalmente mesheryctl o Meshery UI) para recopilar información del Adapter o invocar una operación del Adapter.

Adapters

En Meshery v0.6.0, los Adapters se registrarán con Meshery Server a través de HTTP POST. Si Meshery Server no está disponible, los Meshery Adapters se apartan y vuelven a reintentar conectarse a Meshery Server perpetuamente.

Arquitectura de Meshery

Figure: Despliegue de Meshery dentro o fuera de un clúster de Kubernetes

Adapters y Registro de Capacidades

Cada Meshery Adapter ofrece su propia funcionalidad específica de un servicio único. Como tal, en el momento del despliegue, el Meshery Adapter registrará sus capacidades específicas de service mesh (sus operaciones) con el registro de capacidades de Meshery Server.

Registro de Operación de Meshery Adapter

Figure: Registro de Operación de Service Mesh Adapter

Clientes

La REST API de Meshery puede ser consumida por cualquier número de clientes. Los clientes necesitan presentar un token JWT válido.

Arquitectura de cliente

Figure: Los clientes usan REST API, GraphQL API de Meshery o una combinación de ambos.

Providers

Como un punto de extensión, Meshery soporta dos tipos de providers: Local y Remoto.

Arquitectura de Provider

Modelo de Objetos

Este diagrama describe las construcciones lógicas dentro de Meshery y sus relaciones.

Modelo de Objetos

Meshery Operator y MeshSync

Meshery Operator es el operador multi-service mesh (un controlador de Kubernetes personalizado) que administra MeshSync y su agente de mensajes.

Meshery Operator y MeshSync

Ver la sección Operator para obtener más información sobre la función de un operador y la sección MeshSync para obtener más infromación sobre la función de MeshSync.

Base de datos

La base de datos de Meshery es responsable de recopilar y centralizar el estado de todos los elementos bajo administración, incluyendo la infraestructura, la aplicación y los propios componentes de Meshery. La base de datos de Meshery, a la vez que persiste para archivar, es tratada como caché.

Meshery Database

Ver la sección Database para obtener más información sobre la función de la base de datos.

Statefulness en los componentes de Meshery

Algunos componentes dentro de la arquitectura de Meshery se ocupan de la persistencia de datos, mientras que otros solo se relacionan con una configuración de larga duración, mientras que otros no tienen ningún estado en absoluto.

Componente Persistencia Descripción
mesheryctl stateless interfaz de línea de comandos que tiene un archivo de configuración
Meshery Adapters stateless interfaz con service meshes sobre una base transaccional
Meshery Server caches state la memoria caché de la aplicación se almacena en la carpeta $HOME/.meshery/ del usuario
Meshery Providers stateful ubicación de las preferencias de usuario persistentes, ambiente, pruebas y etc.
Meshery Operator stateless operador de controladores personalizados de Meshery, espacialmente MeshSync
MeshSync stateless Controlador personalizado de Kubernetes, continuamente ejecutando el descubrimiento

Puertos de Red

Meshery usa la siguiente lista de puertos de red para interactuar con sus diversos componenetes:

Componente Puerto
Meshery REST API 9081/tcp
Meshery GraphQL 9081/tcp
Meshery Broker 4222/tcp, 6222/tcp, 8222/tcp, 7777/tcp, 7422/tcp, 7522/tcp
Learn Layer5 Application 10011/tcp
Meshery Adapters 10000+/tcp
Meshery Remote Providers 443/tcp

Puertos de Adapter

Service Mesh Port
Meshery Adapter for App Mesh                                          10005/gRPC
Meshery Adapter for Cilium Service Mesh                                          10012/gRPC
Meshery Adapter for Consul                                          10002/gRPC
Meshery Adapter for Citrix Service Mesh                                          10008/gRPC
Meshery Adapter for Istio                                          10000/gRPC
Meshery Adapter for Kuma                                          10007/gRPC
Meshery Adapter for Linkerd                                          10001/gRPC
Meshery Adapter for NGINX Service Mesh                                          10010/gRPC
Meshery Adapter for Network Service Mesh                                          10004/gRPC
Meshery Adapter for Open Service Mesh                                          10009/gRPC
Meshery Adapter for Tanzu Service Mesh                                          10011/gRPC
Meshery Adapter for Traefik Mesh                                          10006/gRPC

Ver la sección Adapters para obtener más información sobre la función del adapter.