1. 程式人生 > >簡述分散式RPC框架

簡述分散式RPC框架

RPC定義:

遠端過程呼叫,是實現分散式計算的基礎。

實現方式:

1.基於TCP協議的RPC;

2.基於HTTP協議的RPC;

處理過程:

一個簡單的RPC過程包括一個服務消費者和服務提供者,服務消費者需要使用服務提供者的提供的服務,就需要傳給服務提供方相關的資訊,這些資訊包括服務名稱(實際上是一個介面),方法名稱,方法的引數型別,引數個數等引數列表資訊以及對應的引數,服務提供者根據這些資訊返回處理結果給服務消費者,一次RPC完成。

時序圖:


1、 客戶端(Client):服務呼叫方

2、 客戶端存根(Client Stub):存放服務端地址資訊,將客戶端的請求引數打包成網路訊息,再通過網路傳送給服務方

3、 服務端存根(Server Stub):接受客戶端傳送過來的訊息並解包,再呼叫本地服務

4、 服務端(Server):真正的服務提供者。

搭建過程:

1、我們需要將服務部署在分散式環境下的不同節點上,通過服務註冊的方式,讓客戶端來自動發現當前可用的服務,並呼叫這些服務。這需要一種服務登錄檔(Service Registry)的元件,讓它來註冊分散式環境下所有的服務地址(包括:主機名與埠號)可以使用ZooKeeper技術。

2、序列號和反序列化, Java 提供了預設的序列化方式,但在高併發的情況下,這種方式將會帶來一些效能上的瓶頸,使用市面比較優秀的序列化框架,比如:Protobuf、Kryo、Hessian、Jackson、fastJson 等,它們可以取代 Java 預設的序列化,從而提供更高效的效能。

3、支援高併發,傳統的阻塞式 IO 顯然不太合適,因此我們需要非同步的 IO,即 NIO。Java 提供了 NIO 的解決方案,Java 7 也提供了更優秀的 NIO.2 支援,用 Java 實現 NIO 並不是遙不可及的事情,只是需要我們熟悉 NIO 的技術細節。現在市面常用的Netty可以解決這個問題。

應用、服務、服務登錄檔之間的關係見下圖:



相關推薦

簡述分散式RPC框架

RPC定義:遠端過程呼叫,是實現分散式計算的基礎。實現方式:1.基於TCP協議的RPC;2.基於HTTP協議的RPC;處理過程:一個簡單的RPC過程包括一個服務消費者和服務提供者,服務消費者需要使用服務提供者的提供的服務,就需要傳給服務提供方相關的資訊,這些資訊包括服務名稱(

從零寫分散式RPC框架 系列 第一版 (1)架構設計

本系列文章的目的是搭建出一個基於Netty,Zookeeper和SpringBoot的簡易分散式RPC框架,並且釋出到Maven中央倉庫以 spring-boot-starter 的形式對外提供開箱即用的服務。1.0 版本使用 protobuf 來做序列化,最終的使用形式比較接近於 Du

從零寫分散式RPC框架 系列 1.0 (2)RPC-Common模組設計實現

RPC-Common模組提供RPC-Server和RPC-Client的通用物件,封裝統一規則,使RPC Server和RPC Client 可以基於同一協議通訊。主要包含底層通訊的Netty所需的編碼解碼器(RpcEncoder,RpcDecoder),實現自定義協議的傳輸物件(Rpc

從零寫分散式RPC框架 系列 1.0 (5)整合測試

本篇將對前面幾篇模組作整合處理,使用spring-boot-starter的形式進行釋出。然後新建 examples 工程模組對其測試使用。 系列文章: 從零寫分散式RPC框架 系列 1.0 (1)架構設計 從零寫分散式RPC框架 系列 1.0 (2)RPC-Common模組設計

從零寫分散式RPC框架 系列 1.0 (4)RPC-Client模組設計實現

RPC-Client模組負責建立 動態代理物件 供 服務消費者 使用,而動態代理物件的方法執行則是通過RPC呼叫RPC-Server的服務實現。即RPC-Client遮蔽了底層的通訊過程,使得服務消費者可以基於介面透明使用服務提供者的服務。 系列文章: 從零寫分散式RPC框架 系

從零寫分散式RPC框架 系列 1.0 (3)RPC-Server模組設計實現

RPC-Server模組負責(1)將@RpcService註解標記的服務和自身資訊註冊到ZK叢集,(2)對外提供RPC服務實現,處理來自RPC-Client的請求。該模組整體的核心類為 RpcServer ,而真正處理請求的核心類是 RpcServerHandler 。另外還有一個 ZK

Motan 1.1.3 釋出,微博開源的高效能分散式 RPC 框架

   Motan 1.1.3 已釋出,這是一個小的修復版本,主要是解決了與 zookeeper string serializer 的相容問題。#707 Motan 是微博團隊開源的一套高效能、易於使用的分散式 RPC 框架。功能包括: 支援通過 spring 配置方式整合

輕量級分散式RPC框架實現(續)

1、背景 最近在搜尋Netty和Zookeeper方面的文章時,看到了這篇文章《輕量級分散式 RPC 框架》,作者用Zookeeper、Netty和Spring寫了一個輕量級的分散式RPC框架。花了一些時間看了下他的程式碼,寫的乾淨簡單,寫的RPC框架可以算是一個簡易版的

輕量級分散式 RPC 框架 netty+protostuff+zk +Spring

RPC,即 Remote Procedure Call(遠端過程呼叫),說得通俗一點就是:呼叫遠端計算機上的服務,就像呼叫本地服務一樣。 RPC 可基於 HTTP 或 TCP 協議,Web Service 就是基於 HTTP 協議的 RPC,它具有良好的跨平臺性,但其效能卻不如基於 TCP 協議的 RP

從零寫分散式RPC框架 系列 2.0 (4)使用BeanPostProcessor實現自定義@RpcReference註解注入

之前服務提供方 RpcServer 我們是使用 ApplicationContextAware 來掃描 @RpcService 註解,新增一個註解即可實現服務暴露。現在,我們用 BeanPostProcessor 來實現服務注入,自動將服務實現類注入到被@RpcReference註解標記

從零寫分散式RPC框架 系列 2.0 (3)RPC-Server和RPC-Client模組改造

2.0版本RPC-Server改動不大,主要變化在於RPC-Client使用了服務地址快取,並引入監控機制,第一時間獲取zk叢集中服務地址資訊變化並重新整理本地快取。另外,RPC-Client還使用了RpcClientProperties開放對負載均衡策略和序列化策略的選擇。 系列文

從零寫分散式RPC框架 系列 2.0 (2)RPC-Common模組設計實現

RPC-Common模組相對於1.0版本複雜了很多,最主要的變化在於將 Rpc的Netty處理器從RPC-Server和RPC-Client收回。1.0 版本的設計思路是儘可能減少冗餘依賴,所以RPC-Common一般只放通用的功能。現在則是儘可能都放在RPC-Common模組,以方便工

從零寫分散式RPC框架 系列 2.0 (1)架構升級

針對1.0版本的效能問題,本版本做了從服務地址列表快取等方面做了優化處理,並加入負載均衡引擎、序列化引擎、服務端限流等新功能,並對通訊模型進行改造,使其支援新特性、避免粘包半包問題並對後續升級改造留下支援空間。具體可見 專案GitHub地址 。本文將介紹 2.0 版本的邏輯架構和模型設計

分散式RPC框架效能大比拼

來源:http://colobu.com/2016/09/05/benchmarks-of-popular-rpc-frameworks/ Dubbo 是阿里巴巴公司開源的一個Java高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。

一個輕量級分散式RPC框架--NettyRpc

1、背景 最近在搜尋Netty和Zookeeper方面的文章時,看到了這篇文章《輕量級分散式 RPC 框架》,作者用Zookeeper、Netty和Spring寫了一個輕量級的分散式RPC框架。花了一些時間看了下他的程式碼,寫的乾淨簡單,寫的RPC框架可以算是一個簡易版的dubbo。這個RPC框架雖小,但是

從零寫分散式RPC框架 系列 1.0 (1)架構設計

本系列文章的目的是搭建出一個基於Netty,Zookeeper和SpringBoot的簡易分散式RPC框架,並且釋出到Maven中央倉庫以 spring-boot-starter 的形式對外提供開箱即用的服務。1.0 版本使用 protobuf 來做序列化,最終

Dubbo+zk/Redis 分散式RPC框架

Dubbo是什麼?Dubbo是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000多個服務提供30多億次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。 Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。 核心部

如何實現一個分散式 RPC 框架

遠端過程呼叫(Remote Procedure Call,RPC)是一個計算機通訊協議。該協議允許運行於一臺計算機的程式呼叫另一臺計算機的子程式,而程式設計師無需額外地為這個互動作用程式設計。RPC的主要目標是讓構建分散式應用更加容易,在提供強大的遠端呼叫能力的同時不損失

基於Netty的分散式 RPC 框架

轉載自:http://blog.csdn.net/z69183787/article/details/52700274               http://blog.csdn.net/z69183787/article/details/52680941        

RPC框架簡述

RPC(remote procedure call)遠端過程呼叫。 比如:兩臺伺服器A和B,A伺服器上部署一個應用,B伺服器上部署一個應用,A伺服器上的應用想呼叫B伺服器上的應用提供的介面,由於不在一個記憶體空間,不能直接呼叫,所以需要通過網路來表達呼叫的語義和傳達呼叫的資料。