2009-08-29 17 views
7

Jak porównać Java RPC vs Java Web Services. Mam małe doświadczenie w korzystaniu z usług internetowych. Teraz muszę wiedzieć, jak RPC porównuje się z usługami sieciowymi. Jak działa RPC?Porównaj Java RPC vs WebServices

Dodawanie: Kiedy idziemy na jedną z opcji?

+0

Czy chodziło Ci o RMI vs usług internetowych? RPC jest rozwiązaniem niezależnym od języka. Interesuję się Javą przy użyciu RPC (nie RMI/REST/etc.), Ale to może nie być to, co miałeś na myśli. –

Odpowiedz

1

Zgaduję, że masz na myśli RMI z Java RPC. Wywołanie metody zdalnej jest bardzo specyficzne dla języka Java i dlatego jest dość łatwe w obsłudze w macierzystych programach Java (Java po obu stronach). Używa formatu binarnego do przesyłania danych i nie działa za pośrednictwem protokołu HTTP, więc prawdopodobnie jest szybszy niż rozwiązanie do obsługi sieci.

Serwisy internetowe wykorzystują (ogólnie) ogólny format, taki jak XML lub JSON, który może być żądany i czytany przez dowolną inną aplikację zdalną. Obciążenie jest większe (wykonanie żądania http i szeregowanie/deserializacja danych), ale klient korzystający z usługi internetowej nie dba o to, w jaki sposób usługa wygenerowała te dane i nie polega na określonym języku programowania, o ile jest on w stanie określony format.

To, jakiej technologii chcesz użyć, zależy od tego, czy mogą istnieć klienci inni niż Java, którzy chcą korzystać z Twojej usługi.

7

Jak mówi Daff, sama Java RMI jest tylko odpowiednia dla komunikacji Java-to-Java. Pod względem łatwości rozwoju w dzisiejszych czasach stopień kodowania z punktu widzenia dostawcy usług jest dość podobny.

Oprócz problemów związanych z wydajnością, w których luka między usługami WebServices i RMI jest dość zmienna (w przypadku niektórych rozmiarów komunikatów może występować pomijalna różnica), należy rozważyć jeszcze jeden aspekt: ​​odporność.

Zwykle RMI jest łatwy do skonfigurowania, gdy jeden klient rozmawia z jednym serwerem, a Ty nie masz nic przeciwko dostępności klienta do połączenia z pojedynczym serwerem. Serwer w dół, klient w dół, takie jest życie.

W przypadku usługi sieciowej można dość łatwo wdrożyć usługę do klastra serwerów, a biorąc pod uwagę, że wywołujesz usługę sieci Web za pośrednictwem protokołu HTTP, możesz z łatwością wykorzystać wszystkie standardowe metody routingu i natryskiwania używane w większej skali. witryny internetowe. Nie wymaga specjalnego kodowania na serwerze lub kliencie.

Teraz można uzyskać ten sam poziom odporności na RMI, ale wymaga to nieco lepszej infrastruktury świadczenia usług i właśnie tam do gry wchodzi model programowania EJB Java EE (lub frameworków takich jak Spring). EJB używa RMI przez IIOP, protokół, który pozwala na elastyczne wywoływanie do instancji serwera, w sposób przejrzysty radząc sobie z awariami serwerów. [Robi to o wiele więcej, takie jak secutiry i transakcje, ale tak samo może być z usługami sieciowymi. Interesujące, ale nie będące częścią tej dyskusji.]

Konkluzja: W przypadku świadczenia usług o jakości produkcji zwykle rozpoczynam od utworzenia obiektu usługi. Używam Java EE EJB 3, inni używają Springa. Możesz odsłonić ten obiekt usługi jako serwis internetowy lub jako RMI/IIOP z bardzo prostą konfiguracją/adnotacją. To bardzo mały wysiłek, aby wybrać jedną lub obie. Mój świat staje się ważny w interopie, więc mam tendencję do ujawniania usług sieciowych. Jeśli masz tylko Java do rozważenia, może to poprawić wydajność korzystania z RMI/IIOP, ale nie jest to gwarantowane, musisz zmierzyć perfromance, aby mieć pewność.

0

Usługa RPC jest używana tylko wtedy, gdy na obu końcach używana jest ta sama platforma. EJB jest używane tylko w języku Java.

Pytanie: Co, jeśli jakaś aplikacja inna niż Java chce uzyskać dostęp do mojej Usługi?

A: Ów, gdzie usługi internetowe są wprowadzone Web Services mogą być non Java oraz a także wykorzystywane do synchronicznego, a także komunikacji asynchronicznej