RPC - это аббревиатура удаленных вызовов процедур. Он широко используется в крупномасштабных распределенных приложениях. Его функция состоит в том, чтобы помочь вертикальному разделению системы и облегчить расширение системы. В Java есть много RPC -структур, каждая из которых имеет свои характеристики, и широко используемые включают RMI, Hessian, Dubbo и т. Д. Другая особенность RPC заключается в том, что он может пересекать языки. Эта статья принимает RPC только на языке Java в качестве примера.
Существует диаграмма логической взаимосвязи для RPC, принимая RMI в качестве примера:
Другие структуры структуры аналогичны, различия находятся в методе сериализации объекта, протоколе связи для передачи объекта, управлении регистрационным центром и проектированием отказа (с использованием Zookeeper).
Клиент и сервер могут работать в разных JVM. Клиент должен только представлять интерфейсы. Реализация интерфейса и данные, необходимые во время выполнения, находятся на стороне сервера. Основная технология зависимости RPC - это протоколы сериализации, опустошения и протокола передачи. Java соответствует сериализации, десериализации и передаче объектов и передаче сериализованных данных. Сериализация RMI и десериализация принадлежат Java. Сериализация и десериализация в Гессиане являются частными, протокол передачи - это HTTP, а сериализация Dubbo может быть выбрана во многих отношениях. Как правило, используется протокол сериализации Гессьяна, а протокол TCP является протоколом TCP, в котором используется высокопроизводительная платформа NIO Framework Netty. Что касается сериализации, я также знаю некоторые вещи, такие как Google Probuffer, Jboss Marshalling, Apache Thrift и т. Д. Я писал сообщение в блоге, представляющее Probuffer.
1. RMI (удаленный вызов метода)
Инструмент вызова удаленного метода, который поставляется с Java, имеет определенные ограничения. В конце концов, это был дизайн языка Java в начале. Позже принципы многих рамок были основаны на RMI. Использование RMI выглядит следующим образом:
Внешний интерфейс
публичный интерфейс iservice Extends remote {public String QueryName (String no) Throws RemoteException; } </span>Внедрение услуг
Импорт java.rmi.remoteexception; Импорт java.rmi.server.unicastremoteObject; // Реализация услуг Public Class ServiceImpl Extens UnicastRemoteObject реализует iservice {/ ***/ private Static Long Long SerialVersionUID = 682805210518738166L; / ** * @Throws remoteException */ protected serviceImpl () бросает remoteException {super (); } / * (non-javadoc) * @see com.suning.ebuy.wd.web.iservice#QueryName (java.lang.string) * / @override public String QueryName (String no) бросает remoteexception {// конкретная реализация метода System.out.println ("Hello" + no); return string.valueof (System.currentTimeMillis ()); }}Клиент RMI
Импорт java.rmi.remoteexception; Импорт java.rmi.registry.locateregistry; Импорт java.rmi.registry.registry; // сервер открытого класса RMI {public static void main (string [] args) {// Реестр реестра реестра регистрации = null; try {// создать реестр услуг = locateRegistry.createregistry (8088); } catch (remoteException e) {} try {// Создать службу службы serviceImpl server = new serviceImpl (); // Связано Сервис и имя The Registry.Rebind ("Vince", Server); System.out.println ("Bind Server"); } catch (remoteexception e) {}}}Диспетчер регистрации услуг записан на сервере, и, конечно, его также можно извлечь в качестве отдельной службы. В некоторых других структурах Zookeeper часто используется в качестве роли управления регистрацией.
2. Hessian (удаленный вызов метода на основе HTTP)
Основываясь на передаче протокола HTTP, производительность не идеальна. Балансировка нагрузки и перенос сбоя зависят от балансировщика нагрузки приложения. Использование Гессиана похоже на RMI. Разница в том, что это преуменьшает роль реестра. Через отображаемый адресный вызов HessianProxyFactory использует прокси -объект на основе настроенного адреса. Кроме того, также представлен пакет JAR Hessian.
3. Dubbo (RPC Framework на основе TCP на Taobao)
Высокопроизводительная платформа RPC, основанная на Nio Framework Netty, является открытым исходным кодом Alibaba. Общий принцип заключается в следующем:
Перед пониманием Дуббо вы должны сначала иметь глубокое понимание Zookeeper. После понимания Zookeeper у Дуббо не будет секретов.
Zookeeper является регистрационным центром Dubbo Services. Оригинальный центр регистрации на основе базы данных Dubbo не использовал Zookeeper. Zookeeper - это распределенная платформа обслуживания. Это хранилище данных для служб каталогов деревьев и может управлять данными в кластерах. Его можно использовать в качестве регистрационного центра для Dubbo Services. Dubbo может выполнять развертывание кластера с Zookeeper. Когда у поставщика есть аномальное время простоя, такое как отключение электроэнергии или другие вне воздуха, регистрационный центр Zookeeper может автоматически удалять информацию по провайдеру. Когда поставщик перезагружается, он может автоматически восстановить регистрационные данные и запросы на подписку.
Подробное описание Даббо очень подробно описано в открытом исходном коде Taobao. Во многих производственных проектах Dubbo используется во многих производственных проектах. В ходе процесса я также обнаружил, что на многие вещи обратите внимание, особенно на многие конфигурации, которые не настроены должным образом, и лучше всего настраивать и оптимизировать их на основе существующего открытого исходного кода Dubbo.