Inhaltsverzeichnis
RPC-Prinzip
造轮子
框架使用" >框架使用
Heim häufiges Problem Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!

Aug 16, 2023 pm 05:01 PM
rpc框架

Im Interview wird der Interviewer leicht gefragt:

Wie entwerfe ich ein RPC-Framework?

Vielleicht wurdest du nicht gefragt, vielleicht hast du Glück, oder vielleicht bist du noch nicht auf diesem Niveau. Normalerweise beträgt das Monatsgehalt mehr als 20.000 und sie stellen grundsätzlich einige Designfragen.

Aus Sicht des Interviewers: Diese Art von Frage zu stellen ist besser als einen achtteiligen Aufsatz zu stellen, der viele technische Punkte beinhaltet. Zum Beispiel: Kenntnisse über Entwurfsmuster, Kommunikationsprotokolle, dynamische Agenten, Virtualisierung, Thread-Pools usw.

Okay, gehen wir nicht zu weit, fangen wir an, über das heutige Thema zu reden.

RPC ist ein Remote-Prozeduraufruf. Viele Leute verstehen diese Worte möglicherweise nicht besonders:

Rufen Sie einen Remote-Dienst auf, genau wie den Aufruf einer lokalen Methode.

Zum Beispiel der folgende Fall: Ein Benutzer betreibt einen Dienst:

public interface UserService{
    String findUserNameById(Integer userId);
}
@Service
public class UserServiceImpl implements UserService{
    String findUserNameById(Integer userId){
        //查数据或查缓存获取到用户名
        return "田哥"
    }
}
Nach dem Login kopieren

Jetzt möchte ein Controller die findUserNameById-Methode von UserServiceImpl aufrufen, um den Benutzernamen zu erhalten.

@RestController
public class UserController{
    @Resource
    private UserService userService;
    
    @GetMapping("/test")
    public String test(){
        return userService.findUserNameById(1);
    }
}
Nach dem Login kopieren

Unter der Annahme, dass sich die drei Klassen UserController, UserServiceImpl und UserService alle im selben Projekt befinden, ist es für den Controller sehr einfach, die Methode findUserNameById aufzurufen.

Wenn der Controller jedoch ein anderes Projekt ist und wie oben aufgerufen werden möchte (feiner Unterschied, das Gefühl ist immer noch das gleiche), dann können wir das RPC-Framework verwenden.

1. Die Schnittstelle UserService muss in einem separaten Projekt platziert werden, das wir normalerweise als API-Projekt bezeichnen.

2. UserServiceImpl muss in einem separaten Projekt platziert werden, das wir normalerweise als Provider-Projekt bezeichnen.

3. Controller, durch Web- und andere (Verbraucher-)Projekte

4. Geben Sie die API in ein JAR-Paket ein und verweisen Sie dann sowohl im Verbraucherprojekt als auch im Anbieterprojekt darauf.

Die auf dem Markt erhältlichen RPC-Frameworks wie Dubbo (Alibaba), Thrift (FaceBook), gRpc (Google), brpc (Baidu) usw. konzentrieren sich alle auf unterschiedliche Aspekte, um den ursprünglichen Zweck zu lösen Seien Sie extrem perfekt, und manche wollen Perfektion erreichen, während andere extreme Einfachheit bevorzugen.

RPC-Prinzip

Zurück zu dem, was wir zuvor gesagt habenRufen Sie einen Remote-Dienst wie einen Ortsgespräch an, welche technische Unterstützung wird benötigt?

  • Dynamischer Proxy, da unser Verbraucherprojekt nur Schnittstellendefinitionen UserService und keine Implementierungsklassen hat. Möchten Sie eine Methode einer Schnittstelle aufrufen? Dann können Sie nur ein Proxy-Objekt erstellen.
  • Encoding, das heißt, der Verbraucher muss die Anforderungsparameter an den Anbieter übergeben. Der Netzwerkübertragungsprozess codiert zunächst unsere Parameter und übergibt sie dann an den Anbieter.
  • Netzwerkkommunikation, prozessübergreifend wird definitiv Netzwerkkommunikation beinhalten.
  • Netzwerkübertragungsprotokoll, Verbraucher und Anbieter Es muss einen Standard für die hin- und hergehenden Parameterinformationen geben. Wie kann ich sonst wissen, was Sie ausdrücken möchten?
  • Serialisierung und Deserialisierung
  • Datenkomprimierung Wenn die Daten über das Netzwerk übertragen werden, müssen wir überlegen, ob die Daten komprimiert werden können.
  • Registrierungscenter: Wenn der Anbieter eine Clusterbereitstellung durchführt (derselbe Dienst wird auf mehreren Computern bereitgestellt), müssen wir eine manuelle Wartung für den Verbraucher durchführen. Wenn das Volumen zunimmt, kann man sich die Arbeitsbelastung vorstellen.
  • Dynamisches Bewusstsein für Online- und Offline-Dienste Wenn der Anbieter ausfällt oder ein neuer Knoten bereitgestellt wird, muss der Verbraucher wissen, welche Dienste offline und welche online sind.
  • Dynamisches Routing: Wenn der Anbieter in einem Cluster bereitgestellt wird (derselbe Dienst wird auf mehreren Computern bereitgestellt), können wir die Verbraucher nicht auf denselben Knoten fallen lassen, sodass die Ressourcen nicht vollständig genutzt werden können Regen und Tau des alten Kaisers werden zu gleichen Teilen geteilt. Dynamisches Routing umfasst eine Vielzahl von Algorithmen wie Randomisierung, Abfrage, Gewichtung usw.
  • Warum wird ein Registrierungszentrum benötigt? Ich habe es schon einmal geteilt:

Meituan-Interview: Wie gestaltet man ein Registrierungszentrum?

造轮子

根据上面的这些原理,田哥也搞了一个RPC框架,命名为mink(一个动物的名称)。

然后,我们把mink-spring打成jar包,服务发布和服务引用都把这个jar给依赖进去。

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!


框架使用

上面,我们创造了轮子,下面,我们就来看如何使用。

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!

mink-demo就是一个Spring Boot项目,有三个module。

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!


我们把mink-api打成jar包,共consumer和provider使用。

也就是我们在consumer和provider都引入:

下面,我们来看看provider端的代码:

我们的mink框架,只需要引入mink-spring依赖即可。

接着就是properties的配置:

再来看看具体服务实现类:

这一步,我们只需要在实现类上加上注解@MinkService即可。

最后就是项目启动类:

我们启动项目(注册中心用的是zookeeper):

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!


从日志中可以看出,我们的服务已经成功注册到注册中心了。

下面,我们来看看consumer端代码。

首先来看看依赖:

这依赖也很简单,没什么好说的。

再来看看properties配置项:

是不是也很简单?

再来看看我们的controller代码:

需要用到对应服务,只需要添加注解@MinkReference即可。

最后就是项目启动类,简单的不行。

启动日志:

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!

访问:http://localhost:8090/test

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!

成功!整个过程,非常轻松地集成mink框架并在业务代码中使用。

总结起来,其实就三步:

1、pom中添加依赖

2、properties文件中配置注册中心信息

3、使用的时候加上注解@MinkReference@MinkService即可

Das obige ist der detaillierte Inhalt vonDas handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13! Das handgeschriebene RPC-Framework dient wirklich nicht nur dazu, so zu tun, als wäre man 13! Aug 16, 2023 pm 05:01 PM

Vielleicht wurden Sie nicht gefragt, vielleicht haben Sie Glück, oder vielleicht sind Sie noch nicht auf diesem Niveau. Normalerweise beträgt das Monatsgehalt mehr als 20.000 und sie stellen grundsätzlich einige Designfragen. Aus Sicht des Interviewers: Solche Fragen zu stellen ist besser, als einen achtteiligen Aufsatz zu schreiben, der viele technische Punkte beinhaltet. Zum Beispiel: Kenntnisse über Entwurfsmuster, Kommunikationsprotokolle, dynamische Agenten, Virtualisierung, Thread-Pools usw.

Alibaba-Interviewer: Bitte schreiben Sie mir handschriftlich ein RPC-Framework. Alibaba-Interviewer: Bitte schreiben Sie mir handschriftlich ein RPC-Framework. Aug 17, 2023 pm 04:24 PM

RPC ist ein Computerkommunikationsprotokoll. Dieses Protokoll ermöglicht es einem Programm, das auf einem Computer läuft, eine Unterroutine auf einem anderen Computer aufzurufen, ohne dass der Entwickler diese Interaktion zusätzlich programmieren muss.

Prinzipien und Anwendungen des RPC-Frameworks in der Go-Sprache Prinzipien und Anwendungen des RPC-Frameworks in der Go-Sprache Jun 01, 2023 pm 03:01 PM

1. Das Konzept des RPC-Frameworks In verteilten Systemen müssen häufig Daten zwischen verschiedenen Servern und Clients übertragen werden. Das RPC-Framework (RemoteProcedureCall) ist ein häufig verwendetes technisches Mittel. Das RPC-Framework ermöglicht es Anwendungen, über Remote-Messaging Funktionen oder Methoden einer anderen Ausführungsumgebung aufzurufen, wodurch das Programm auf verschiedenen Computern ausgeführt werden kann. Derzeit gibt es viele RPC-Frameworks auf dem Markt, wie z. B. Googles gRPC, Thrift, Hessian usw. Dieser Artikel stellt hauptsächlich vor

Wie entwickle ich ein RPC-Framework in PHP? Wie entwickle ich ein RPC-Framework in PHP? May 13, 2023 pm 03:22 PM

RPC (RemoteProcedureCall) ist ein prozessübergreifendes Kommunikationsprotokoll, das es verschiedenen Prozessen ermöglicht, über das Netzwerk auf verschiedenen physischen Maschinen zu kommunizieren und zusammenzuarbeiten. Das RPC-Framework erregt immer mehr Aufmerksamkeit, da es Entwicklern dabei helfen kann, die Entwicklung verteilter Systeme einfach umzusetzen. In diesem Artikel stellen wir Ihnen Schritt für Schritt vor, wie Sie mit PHP ein RPC-Framework entwickeln. 1. Was ist das RPC-Framework? Das RPC-Framework ist ein Framework zur Implementierung von Remote-Prozeduraufrufen. Auf RPC-Basis

Welche RPC-Frameworks gibt es? Welche RPC-Frameworks gibt es? Aug 03, 2023 am 10:17 AM

Zu den RPC-Frameworks gehören: 1. gRPC, ein von Google entwickeltes, leistungsstarkes Open-Source-RPC-Framework; 2. Apache Thrift, ein von Facebook entwickeltes und quelloffenes, sprachübergreifendes RPC-Framework; leistungsstarkes, leichtes RPC-Framework, geeignet für große verteilte Systeme; 4. Apache Axis2, ein RPC-Framework basierend auf Web-Service-Standards; 5. Spring Cloud, ein Open-Source-Framework zum Aufbau verteilter Systeme;

Evaluierung des RPC-Frameworks der Go-Sprache: Leistung, Benutzerfreundlichkeit, Vergleich der Community-Unterstützung Evaluierung des RPC-Frameworks der Go-Sprache: Leistung, Benutzerfreundlichkeit, Vergleich der Community-Unterstützung Feb 27, 2024 pm 09:12 PM

Als wichtige moderne Programmiersprache wird die Go-Sprache zunehmend in der verteilten Systementwicklung eingesetzt. Beim Aufbau eines verteilten Systems ist die Wahl des RPC-Frameworks (Remote Procedure Call) oft entscheidend. In diesem Artikel wird eine horizontale Bewertung der aktuellen Mainstream-RPC-Frameworks der Go-Sprache durchgeführt, ihre Vor- und Nachteile in Bezug auf Leistung, Benutzerfreundlichkeit und Community-Unterstützung verglichen und spezifische Codebeispiele beigefügt. 1. Leistungsvergleich In verteilten Systemen ist die Leistung oft einer der Hauptindikatoren, auf die Entwickler achten. Im Folgenden sind einige der wichtigsten aufgeführt

So implementieren Sie ein RPC-Framework mit hoher Parallelität in der Go-Sprache So implementieren Sie ein RPC-Framework mit hoher Parallelität in der Go-Sprache Aug 05, 2023 pm 12:49 PM

Einführung in die Implementierung des RPC-Frameworks mit hoher Parallelität in der Go-Sprache: Mit der rasanten Entwicklung des Internets haben Anwendungen mit hoher Parallelität immer mehr Aufmerksamkeit auf sich gezogen. Die Verwendung des RPC-Frameworks (RemoteProcedureCall) ist eine gängige Lösung. In diesem Artikel wird erläutert, wie ein RPC-Framework mit hoher Parallelität in der Go-Sprache implementiert wird, und er enthält Codebeispiele. Einführung in das RPC-Framework: RPC ist ein Kommunikationsprotokoll, das es einem Computerprogramm ermöglicht, eine Unterroutine in einem anderen Adressraum (normalerweise auf dem Remote-Computer) aufzurufen, ohne

Was sind die RPC-Frameworks in PHP7.0? Was sind die RPC-Frameworks in PHP7.0? May 29, 2023 am 11:10 AM

Mit der kontinuierlichen Weiterentwicklung der Computertechnologie sind verteilte Systeme zum Mainstream geworden, und Remote Procedure Call (RPC) ist ein wichtiges Mittel zur Implementierung verteilter Systeme. Als beliebte Web-Programmiersprache verfügt PHP auch über ein eigenes RPC-Framework, darunter einige neue RPC-Frameworks, die in der PHP7.0-Version eingeführt wurden. In diesem Artikel werden das allgemeine RPC-Framework und seine Eigenschaften in PHP7.0 vorgestellt. PHPRemoteProcedureCall(phpRPC)phpRPC ist ein leichtgewichtiges RP