La idea de diseño de DMicro, el marco de desarrollo de microservicios de Go

DMicro Ideas de diseño del  marco de desarrollo de microservicios Go 

DMicro Dirección de la fuente:

  • casa rural:
  • dmicro: dmicro es un marco de microservicios eficiente, escalable y fácil de usar. Incluyendo drpc, dserver, etc.

antecedentes

DMicro El trasfondo del nacimiento es porque he escrito PHP durante los últimos 10 años y quiero promoverlo  Godentro de la empresa.. Los componentes y protocolos rpc dentro de la empresa se  swoole desarrollan en base a la personalización. He investigado varios marcos en el mercado, incluidos  beego, goframe, gin, , go-micro, go-zero, erpc etc. Puede ser que mis capacidades técnicas fueran limitadas en ese momento y estos marcos no pudieran adaptarse bien a nuestro negocio.

Hubo varios puntos débiles en el desarrollo de nuestro negocio, y  golang en ese momento no se podía encontrar un conjunto completo de soluciones en el ecosistema.

  • Las aplicaciones de microservicio y las aplicaciones monolíticas se desarrollan al mismo tiempo.
  • Comunicación de red de alto rendimiento y alta disponibilidad.
  • Requiere un protocolo de capa de aplicación personalizado (énfasis).
  • Se requiere un mecanismo de extensión de complemento flexible para facilitar la adaptación a los sistemas existentes (clave).
  • Los conceptos de servidor y cliente son vagos y ambos pueden usar la misma API para llamarse entre sí.
  • Los mensajes push son compatibles.
  • Gestión de conexión/sesión.
  • Desarrollo eficiente, generación de código de soporte a través de proto.
  • Soporta múltiples protocolos de red, tcp, websocket, quic, unixsocket.
  • Compatible con el protocolo http.
  • Capaz de localizar problemas más rápidamente.
  • Más fácil de agregar nuevas características.

Después de hacer una investigación simple sobre los marcos de código abierto de uso común, descubrí que no hay un marco adecuado que pueda satisfacer todas mis necesidades. Después de una cuidadosa consideración, descubrí que  la combinación de erpc los  goframe dos marcos puede satisfacer mis necesidades, por lo que nació la autoinvestigación  DMicro.

Visión general

DMicro La idea de un  drpc componente en es una  erpc implementación de referencia, o incluso su sucesor.

drpc Los componentes son  DMicro parte del marco. Para adaptarse al  DMicro marco,  erpc se ha realizado un desarrollo de extensión en profundidad sobre la base de .

Todo el  componente en DMicro uso  goframe , si la empresa usa el  goframe marco, se puede conectar sin problemas.

DRpc Lista de características:

  • 对等通信 , 对等Api
  • 高性能 , 非阻塞异步IO
  • 自定义Proto,,  兼容http协议 , 自定义Codec
  • Hook点 ,  插件系统 ,
  • Push消息 , session管理, Socket抽象 ,
  • 断线重连 ,  过载保护 ,  负载均衡 ,  心跳机制 ,
  • 平滑重启 ...

DServer Lista de características:

  • 快速构建 ,  平滑重启 ,  多进程支持 , 单/多进程一致
  • 预定义命令行 ,ctrl命令管理服务
  • 可观测 ,  可控制 , 应用沙盒

DMicro Componentes ya integrados:

  • [x]  Registry Registro del servicio
  • [x]  Selector Descubrimiento de servicios
  • [x]  Eventbus autobús de eventos
  • [x]  Supervisor Gestión de procesos
  • [ ]  Code gen Generación de código
  • [ ]  Tracing seguimiento de enlaces
  • [ ]  Metrics Alarma estadística
  • [ ]  Broker Fusible limitador de corriente
  • [ ]  OpenAPI La documentación se genera automáticamente

Arquitectura

concepto de diseño

El diseño del  DMicro marco es la búsqueda de flexibilidad y adaptabilidad desde el principio del diseño. Bajo la premisa de asegurar la estabilidad de los microservicios, se persigue la eficiencia de desarrollo del proyecto.

  • El diseño orientado a la interfaz garantiza la estabilidad del código y proporciona una personalización flexible.
  • Abstraer la interfaz de cada componente, alta cohesión, bajo acoplamiento.
  • El diseño en capas, la encapsulación de arriba a abajo, favorece la estabilidad y el mantenimiento.
  • Alto rendimiento, alta disponibilidad y bajo consumo.
  • Amigable con el desarrollo, complejidad del paquete.
  • Proporcione componentes y funciones enriquecidos, lo que permite a los desarrolladores centrarse en el negocio.

Innumerables  DMicro días y noches de escritura, tengo presente los tres principios del desarrollo:

  • Clarity(清晰)
  • Simplicity(简单)
  • Productivity(生产力)

Ya sea que esté trabajando o realizando proyectos de código abierto, debe mantener estos tres principios y desarrollar buenos hábitos.

diseño orientado a la interfaz

DMicro Siguiendo el principio de que todo es una interfaz, proporciona una extensibilidad incomparable del marco.

La siguiente figura muestra el flujo de envío de mensajes.Se puede ver que todos los puntos de función se abstraen en interfaces, y cada punto de función proporciona diferentes implementaciones.

Sesión Sesión

La mayoría  de Rpc los marcos no enfatizan sessionel concepto de sesión ( ), porque sus escenarios de aplicación no necesitan usar sesión ( session). Entonces,  drpc ¿por qué necesita abstraer sesión ( session)?

  • Endpoint Fusión  Client y  Servernecesidad de proporcionar lo mismo  Api.
  • 服务端客户端Necesidad de enviar mensajes activamente y obtener la respuesta del cliente.
  • 服务端Soporte para 多个客户端enviar mensajes en lotes.
  • Sesión 一个o desconexión activa asíncrona .多个
  • Obtenga la capa inferior de la sesión 文件描述符 y realice ajustes de rendimiento en ella.
  • especial 数据/属性_

Session Abstraer la  drpc sesión de todo el marco  , fusionar, Socketjuntos  . Los desarrolladores solo necesitan   operar en .MessageContextsession

  • Obtener información de conexión
  • Controlar la vida útil de la conexión (tiempo de espera)
  • Controle el ciclo de vida (tiempo de espera) de una sola solicitud
  • recibir mensaje
  • Enviar un mensaje
  • Crear el contexto del mensaje.
  • Información sobre la sesión enlazada (como la información del usuario)
  • Reconectar después de la desconexión
  • Desconecte activamente la sesión.
  • Examen de salud
  • Obtener evento de cierre de conexión
  • establecer una identificación separada para la sesión

Session La interfaz se puede subdividir en 4  interface{}, respectivamente  EarlySession, BaseSession, CtxSession, Session. Correspondientes a los diferentes atributos de las diferentes sesiones de la etapa de vida de la aplicación ( Session).

  • EarlySession Indica la etapa donde se acaba de generar la sesión y no se ha iniciado la gorutina para leer los datos.
  • BaseSession Solo existe el método más básico, que se usa para los parámetros del complemento al cerrar la conexión.
  • CtxSession El objeto de sesión pasado en el contexto del controlador.
  • Session Un objeto de sesión con todas las funciones.

En circunstancias normales, los desarrolladores usan  estas dos interfaces Sessiony CtxSession las otras dos interfaces se usan en complementos.

información Message

Un mensaje  Message contiene un encabezado  de mensaje Header, un cuerpo de mensaje  Bodyy es la entidad que se comunica entre el cliente y el servidor.

Message interface{} Operaciones abstractas sobre entidades comunicantes.

  • Size longitud del mensaje
  • Transfer-Filter-Pipeline Tubería de filtrado y procesamiento de paquetes de datos
  • Seq número de serie
  • MType Tipo de mensaje
  • ServiceMethod identificador de recursos
  • Meta metadatos del mensaje
  • BodyCodec Formato de codificación del cuerpo del mensaje
  • Body Cuerpo del mensaje

Protocolo de protocolo

El protocolo es 消息Message la serialización y deserialización de objetos, y el marco proporciona la  Proto interfaz. Solo al implementar esta interfaz, los desarrolladores pueden personalizar protocolos personalizados que satisfagan las necesidades comerciales, mejorando así la flexibilidad del marco.

La interfaz se define de la siguiente manera:

type Proto interface {
	Version() (byte, string)
	Pack(Message) error
	Unpack(Message) error
}
  • Version() Devuelve la identificación y el nombre del protocolo, que forman un número de versión único.
  • PackMessage Serialice  el objeto de mensaje  .
  • Unpack Deserialice el flujo de bytes, produciendo un  Message objeto de mensaje.

Actualmente , el marco admite  Http, Json, Raw,  estos cinco protocolos.ProtobufJsonRpc

RAW El protocolo consta de lo siguiente:

Otros protocolos pueden hacer referencia al código.

códec

Como marco general, puede haber varios protocolos compatibles y tantos códecs como el cuerpo del mensaje.  drpc Utilice  Codec la interfaz para codificar y decodificar el cuerpo del mensaje.

La interfaz se define de la siguiente manera:

type Codec interface {
	ID() byte
	Name() string
	Marshal(interface{}) ([]byte, error)
	Unmarshal([]byte, interface{}) error
}
  • ID Devuelve el id del códec.
  • Name Devuelve el nombre del códec, que es para que los desarrolladores lo identifiquen más fácilmente.
  • Marshal Codificar el contenido del mensaje
  • Unmarshal Decodificar el contenido del mensaje

Actualmente, el marco admite  Form, Json, plain, Protobuf, XML estos 5 códecs.

Enchufe de conexión

Socket Se extiende  net.Conny la interfaz se abstrae para facilitar la integración del marco con el protocolo de red subyacente.

Socket La interfaz implementa algunas de  Session las funciones de la Session interfaz, y algunos métodos llamados por la interfaz en realidad se reenvían para llamar a los métodos en  la interfaz Socket .

Tal implementación en capas permite  Socket la capacidad de integrar otros protocolos.

  • TCP V4,TCP V6
  • Unix Socket
  • KCP
  • QUIC

Admite ajustes de rendimiento para conexiones.

  • SetKeepAlive Habilitar enlace mantener vivo
  • SetKeepAlivePeriod enlace de intervalo de actividad
  • SetReadBuffer Establecer el tamaño del búfer de lectura del enlace
  • SetWriteBuffer Obtener el tamaño del búfer de escritura del enlace
  • SetNoDelay Activar y desactivar el algoritmo sin demora
  • ControlFD Manejadores sin procesar que admiten enlaces de operación

combinación orgánica

Como se mencionó anteriormente, DMicro todo en el marco es una interfaz, y el diseño de la interfaz en capas permite  DMicro una composición flexible y la capacidad de ser eficiente y estar en línea con la situación real del negocio.

A continuación, hablaremos sobre las bases para realizar estas capacidades. sistema de complementos.

Enchufar

El sistema de complementos aporta una gran extensibilidad y flexibilidad al marco, y es un módulo del alma de todo el marco.Con él, el marco tiene infinitas posibilidades.

¿Qué tipo de sistema de complementos puede considerarse elegante? Las cosas que se me ocurren son las siguientes:

  • Las ubicaciones razonables y abundantes  hook pueden cubrir todo el ciclo de vida del marco y ejecutar todos los aspectos de la comunicación.
  • La entrada y salida de cada  hook posición están cuidadosamente diseñadas.
  • Cada complemento puede usar múltiples  hook ubicaciones, y cada  hook ubicación puede ser utilizada por múltiples complementos.
  • El diseño es bastante simple y elegante. Puede llevar a cabo fácilmente desarrollo secundario y personalización.

En  drpc China, el anzuelo recorre todo el  Endpoint ciclo de vida y es una parte indispensable e importante del mismo.

Error al volcar, volver a cargar, cancelar A través de estos 钩子 Hook puntos, el complemento tiene posibilidades ilimitadas.

componentes

Con los complementos, puede escribir componentes con funciones completas a través de la combinación de complementos. En la actualidad, el marco proporciona algunos componentes integrados.

  • 服务端 Rpc Server
  • 客户端 Rpc Client
  • 服务注册 Registry
  • 服务发现 Selector
  • 事件总线 EventBus
  • 进程管理 Supervisor

Próximamente, en breve, pronto:

  • 链路追踪 Tracing
  • 统计告警 Metrics
  • 限流熔断 Broker.

Debido a limitaciones de espacio, la implementación de componentes específicos no se explicará en profundidad aquí, preste atención a los artículos de seguimiento.

perspectiva del futuro

Si lo compara  DMicro con la vida, la etapa de crecimiento aún se encuentra en la adolescencia, y solo se ha completado el diseño de la arquitectura básica y el desarrollo de algunos componentes.

La siguiente dirección es principalmente desarrollarse en la dirección de la facilidad de uso y la confiabilidad.

Facilidad de uso:

  • Desarrollo de herramientas de rendimiento de proyectos  dmctl , incluida la generación de código, la generación de estructuras de proyectos, el empaquetado, la compilación y otras funciones.
  • Desarrollo de componentes de documentación que se ajusten a la definición de openapi.
  • Mejor documentación y ejemplos de uso.

fiabilidad:

  • observabilidad
    • seguimiento de enlaces
    • Información del indicador
    • flujo de registro
  • producción disponible
    • Perfección de casos de prueba
    • cobertura de código
    • la optimización del rendimiento

Espero  DMicro crecer y desarrollarme bajo el cuidado y aliento de todos.

Supongo que te gusta

Origin blog.csdn.net/m0_66404702/article/details/127360530
Recomendado
Clasificación