Antes de aprendizaje, la base de conocimientos para asegurar que existen los siguientes:
- Programación de la cadena de Java
- la transmisión de datos socket
- flujo IO
RPC Introducción y Ejecución
RPC es una forma rápida llamada a procedimiento remoto, es decir, las llamadas a procedimientos remotos.
escenario de aplicación RPC es mayor desarrollo distribuido, el desarrollo de lo que se distribuye?
Al principio yo también quería explicar a mí mismo, pero ya en línea Gangster explicar muy claramente, no es incompetencia, recomiendo la lectura de la siguiente recomienda varios para continuar por
- [Cerrar] evolución de la arquitectura distribuida (JavaWeb)
- ¿Cómo explicar a mi esposa lo que es RPC
- Cómo implementar una sencilla RPC
Al principio, el servicio y las llamadas están en la misma máquina, llamada llamada de procedimiento local
Más tarde, debido al crecimiento del volumen del cliente, el servidor no puede cumplir con los requisitos, entonces la llamada se separa y servicios, están desplegados en una máquina diferente, es responsable de llamar al método de servicio se llama cliente , es responsable de proporcionar un método de servicio llamada máquinas de servicio
Figura principio podría intensificar un poco más, pero recuerda que los datos del cliente se transfiere a través del zócalo u otro acuerdo a los servidores, por lo que las máquinas de servicio para el procesamiento, por lo que en la misma forma en que el protocolo para pasar de nuevo a los datos
Cómo implementar un simple RPC artículo, hermano mayor ha puesto en marcha un marco RPC simple, y el marco para este RPC, y formuló una serie de puntos que puede ser optimizado:
1. La falta de versatilidad
Puedo escribir dando interfaz de la calculadora a un CalculatorRemoteImpl, para lograr la calculadora de llamada remota, la próxima vez si hay una necesidad de llamadas de larga distancia en otra interfaz, no está usted también tiene que escribir la clase de implementación llamadas de larga distancia que corresponde? Este es sin duda un inconveniente.
2, Spring Integración
En la realización de un objeto proxy universal, el siguiente paso será el de considerar la integración de Primavera características de la COI, para crear un objeto proxy a través de la primavera, será necesario para inicializar el grano de primavera un cierto alcance.
3, conector de servicios de larga o corta
Es abrir una conexión de socket se establece que no siempre puede ser invocada cuando la interfaz RPC? Cuando no es posible mantener una serie de servicios de larga, entonces hay muchas petición RPC, la solicitud en la cola de tareas, y luego ejecutado por un grupo de subprocesos para gastar? Es sólo una idea, puede hacer referencia a la forma en que se alcanza la Dubbo seguimiento.
4, la agrupación de hebras del servidor
Ahora estamos del lado del servidor, un único subproceso, por lo que cada vez que se procesa una solicitud con el fin de aceptar una conexión con otro conector, por lo que el rendimiento es ciertamente malo, no es por un grupo de subprocesos para lograr el procesamiento simultáneo de múltiples solicitud RPC? También sólo un pensamiento.
5, el registro de servicios
Como se mencionó anteriormente, para llamar al servicio, primero es necesario un registro de servicios, que son lo que la otra instancia de servicio decirle. registro de servicios dubbo es configurable, el funcionario recomendó Zookeeper. Si está utilizando Zookeeper, entonces, cómo registrar la instancia anterior, sino también cómo obtener una instancia, se trata de lograr.
6, el equilibrio de carga
Cómo elegir entre varias instancias donde uno y hacer llamadas, que utilizan el equilibrio de carga. La política de equilibrio de carga es sin duda más de uno, cómo la política se puede hacer configurable? Sino también la forma de aplicar estas estrategias? Lo mismo puede referirse a Dubbo, Dubbo - Equilibrio de carga
7. Resultado caché
Del lado del servidor realmente debe ir a cada consulta de llamadas de todos modos consulta interfaz? Es no pensar en el almacenamiento en caché de apoyo?
8, el control multi-versión
interfaces de servidor cambiado, la interfaz de edad cómo hacerlo?
9, una llamada asincrónica
Después de la terminación de la interfaz de llamada del cliente, no quieren esperar a que el servidor de retorno, quiero hacer algunas otras cosas, no se puede apoyar?
10, el tiempo de inactividad elegante
Para apagar el servidor, la solicitud no se procesa, ¿cómo?
PD: Cuando se utiliza RPC, tenga en cuenta el problema de red, es necesario un mecanismo de reintento
A partir de estas preguntas, entonces es que ha habido algunos marcos de RPC pendientes, como dubbo, primavera de nubes, etc.
Perfil dubbo
Dubbo es una RPC basada en Java de alto rendimiento (Remote Procedure Call) Distribuido Framework Service (SOA), que proporciona un alto rendimiento y la transparencia de los programas RPC servicio remoto de llamadas, servicios y programa de gobierno de SOA, su uso interno de Alibaba de código abierto Netty, Zookeeper, asegura un alto rendimiento y alta disponibilidad.
estructura dubbo figura:
nodo | Descripción del papel |
---|---|
Proveedor | Exponer servicio de proveedor de servicios |
Consumidor | Llamar a los servicios de consumo de servicios a distancia |
Registro | el registro del servicio y los registros de descubrimiento |
Monitor | El número de las estadísticas de llamadas seguimiento de los servicios centrales y duración de la llamada |
Envase | ejecutar los servicios de contenedores |
Entre ellos, los registros Registry
y los centros de vigilancia Monitor
son opcionales, por lo que a continuación se brevemente logrado dubbo (punto a la transmisión punto de datos)
<dependency>
<groupId>com.starsone</groupId>
<artifactId>dubbo-api</artifactId>
<version>0.0.1</version>
</dependency>
implementación simple dubbo
Descripción del Proyecto: El
proyecto se basa en el arranque de primavera, que se divide en tres partes api
, consumer
yprovider
- API se utiliza principalmente para declarar algunas interfaces de servicios (proyecto maven)
- proveedor es la realización de la interfaz de servicio (proyecto de arranque de primavera a través del proyecto API depende maven)
- consumidor es la interfaz de servicio (proyecto de muelle de arranque a través de la API depende maven) proporciona el proveedor remoto de llamadas,
El cliente es esencialmente equivalente para el consumidor y el proveedor es equivalente al cliente
1. Crear un nuevo proyecto
Uso IDEA, crear un proyecto en blanco, y luego crear un nuevo módulo
Después de IDEA se abrirá una ventana de un nuevo módulo
Y a continuación, haga clic en Nuevo api, proveedor, tres módulos cousmer
api elija Maven proyecto, después de llenado en la información relevante directamente al nuevo nombre de paquete puede (no se necesita para elegir una estructura maven específica), mientras que los otros dos son proyecto de arranque primavera, se puede elegir la primavera initializr nueva, igualmente, no marque la otra la dependencia, de relleno en la información relevante nombre del paquete a Nueva
interfaz de servicio de declaración de proyecto 2.api
En el proyecto de API, creamos una nueva interfaz CalculatorService, que define un método add
public interface CalculatorService {
int add(int a,int b);
}
proyecto API dependientes 3. Configurar
Originalmente, después de que el proveedor y las necesidades de los consumidores a proyectos de referencia son dubbo-primavera-arranque-motor de arranque esta dependencia, dubbo-primavera-arranque-motor de arranque depende ya incluido dubbo dependiente, lo que puede confiar dubbo de la necesidad de escribir
Desde entonces nuestros artículos proveedor y el consumidor son api necesidad de hacer referencia a este proyecto, para que podamos poner el proveedor y el consumidor sea necesario confiar dubbo-spring-boot-starter
añaden a esta API proyecto
Después de que los elementos de proveedor y el consumidor que depende del proyecto de API, también depende del éxito de ladubbo-spring-boot-starter
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
4.provider y proyectos de consumo referencias dependencias del proyecto api
Porque antes de API proyecto estamos creando un proyecto Maven, por lo que añadir una dependencia es muy simple, la adición de una dependencia de proveedor y el consumidor a su pom.xml
5.provider implementan la API de interfaz de servicio
Creamos una nueva clase en el proveedor de proyecto CalculatorServiceImpl
, para implementar CalculatorService
la interfaz
@Service(interfaceName = "calculatorService")
class CalculatorServiceImpl:CalculatorService {
override fun add(a: Int, b: Int): Int {
val result = a+b
println("$a+$b=$result")
return result
}
}
Tenga en cuenta que este comentario es dubbo del paquete de servicio dentro de las notas, en lugar de la primavera de servicio , definir el nombre de la interfaz interfaceName
para el calculatorService
contenedor de encontrar, conveniente después
6. Proyecto proveedor de Configurar
Tenemos que modificar el archivo de configuración de inicio de la primavera, y aquí usamos la forma yml ser configurado, la lectura más cómoda
spring:
application:
name: dubbo-provider-application
dubbo:
scan:
#扫描指定包是否包含有dubbo中Service注解的类
base-packages: com.starsone.provider.service
protocol:
name: dubbo #协议,默认为dubbo(其他协议webserovice、Thrift、Hessain、http)
port: 12345 #端口,默认为20880
registry:
address: N/A #不需要注册中心
PD: Si no se desarrollan como el escaneo contiene anotaciones de servicio en el archivo de configuración, se puede añadir proyecto proveedor de clase de aplicación a su vez dubbo exploración automática de notas@EnableDubbo
proveedor de diagrama de estructura del proyecto:
7. proveedor Run
Puesto que no hemos introducido el registro, por lo que tenemos que correr el proveedor, la dirección IP
Después de artículos de consumo, para hacer Springr recipiente de acuerdo con la dirección IP y número de puerto para encontrar la instancia correspondiente y carga automática
El registro de salida, se puede ver la dirección IP
8.consumer obtener objetos de servicio
@Component
class MyRunner:ApplicationRunner {
@Reference(url ="dubbo://192.168.52.1:12345",interfaceName = "calculatorService" )
private lateinit var calculatorService: CalculatorService
override fun run(args: ApplicationArguments?) {
println(calculatorService.add(5,14))
}
}
En este caso, debido a que es fácil de tener en cuenta, sin usar una red dependiente, por lo tanto, utilizar esta interfaz para probar la ApplicationRunner, primavera cargado de contenedores para completar esta interfaz automáticamente devolución de llamada
Referencia es dubbo notas en los comentarios, después de la ejecución del proyecto del consumidor, el consumidor será pasado dubbo datos de acuerdo con esta url y otra información, llame al proveedor de servicio remoto y, a continuación, el proveedor recibe y procesa los datos y devuelve datos para el consumidor, no es con la sensación de RPC?
9. Configurar y prueba de consumidores
Configurado, sólo el nombre de la configuración de la aplicación
Después de eso, se corre la aplicación del consumidor, se puede ver los resultados
Del mismo modo, el proveedor, y también es imprimir los parámetros pasados sobre artículos de consumo
La introducción de registro
Delante de realización, no existe un registro, es una manera de conectar directamente, pero, de hecho, el desarrollo distribuido, con múltiples máquinas de servicio
El cliente debe solicitar al registro, la consulta del registro del servicio actual está inactivo, y de acuerdo con una estrategia, seleccione un servicio, establezca su posterior dirección IP al cliente, el cliente mediante la dirección IP y el máquina de servicio conectado para funcionamiento RPC
marco dubbo recomienda ZooKeeper como un centro de registro
ZooKeeper es una, de código abierto del servicio de coordinación distribuida para aplicaciones distribuidas, es una implementación de código abierto del rechoncha de Google, es un componente clave de Hadoop y hbase. Es para proporcionar un servicio consistente para aplicaciones distribuidas, proporciona características incluyen: mantenimiento de la configuración, el servicio de nombres de dominio, la sincronización distribuida, los servicios de grupos.
1. Descarga el cuidador del zoológico
http://mirror.bit.edu.cn/apache/zookeeper/
Tenga en cuenta que la descarga aquí es consistente con la versión de la mejor versión del proyecto se basa
2. empleado del zoológico dependiente de las importaciones
Tenemos que modificar depender proyecto API, por lo que depende del operador y el consumidor es capaz de modificar los dos proyectos
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Zookeeper客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
3. Configurar el proveedor de registro y de consumo de
proveedor:
consumidor:
4. Cancelar URL especificada del consumidor
Ya que estamos usando el registro, no hay necesidad de especificar la dirección URL, ésta elimina en Referencia Notas
5. Ejecutar empleado del zoológico
Extraer el archivo descargado empleado del zoológico, en el directorio conf, el zoo_sample.cfg
archivo ha cambiadozoo.cfg
Vaya al directorio bin, haga clic en el zkserver.cmd
archivo, ejecute el cuidador del zoológico
6. Ejecutar el proveedor y el consumidor
En primer proveedor de carrera, después de ejecutar el consumidor, se puede ver los resultados
En este artículo también tirar de unos pocos días, más de una docena referencia al artículo, llegar paso a prueba de paso se ha realizado correctamente, y algunos puntos y el conocimiento no demasiado profundo, al igual que la consola dubbo, tales como la forma de configurar el centro de monitoreo, cuando este último estudio adicional suplemento lo
referencia
- [Cerrar] evolución de la arquitectura distribuida (JavaWeb)
- ¿Cómo explicar a mi esposa lo que es RPC
- Cómo implementar una sencilla RPC
- Artículo dubbo es suficiente: desde la entrada hasta el combate real
- SpringBoot integración Dubbo
- Basado aplicación springboot sencilla de dubbo
- conocimiento dubbo puntos de introducción - libro de Jane