10 000 lignes de code, 500 000 qps autonomes, le cadre RPC open source le plus intéressant à apprendre cette année!

58 Shen Jian 2021-11-25 19:18:05
lignes code qps autonomes le

J'ai trouvé un autre bon,Industriel,Haute performanceRPCCadresrpc,Partager avec tout le monde.

(1)RPCIntroduction;

(2)Fréquent dans l'industrieRPCCadre;

(3)srpcCaractéristiques;

(4)srpcGuide pratique,demoExemple;

(5)srpcConception architecturale;

(6)srpcInformations et ressources pertinentes;

L'article est long,Collection anticipée recommandée.

Qu'est - ce queRPC?

Remote Procedure Call,Appel de procédure à distance.

Qu'est - ce que“Distant”,Pourquoi“Loin.”?

Voyons d'abord ce qu'est“Proche”,C'est - à - dire:“Appel de fonction local”.

Quand nous écrivons:

int result = Add(1, 2);

Quand cette ligne de code,Que s'est - il passé exactement?

a9e264ceefc331fb37461d24267eabc8.png

(1)Passer deux paramètres entrants;

(2)La fonction dans le fragment de code local a été appelée,Exécuter la logique de fonctionnement;

(3)Renvoie un paramètre de sortie;

Ces trois mouvements,Tout se passe dans le même espace de processus,C'est un appel de fonction local.

Y a - t - il un moyen,Appelez unProcessus croisésEt la fonction de?

Typique,Ce processus est déployé sur un autre serveur.

42b71bf7bacd31540a15d7006a4bf55f.png

Le plus facile à imaginer, Les deux processus conviennent d'un format de protocole ,UtiliserSocketCommunications,Pour transmettre:

(1)Ginseng;

(2) Quelle fonction est appelée ;

(3)Ginseng;

Si possible, Alors voilà. “Distant”Appel de procédure.

PourquoiRPCEt le cadre?

S'il n'y a pas d'unité RPCCadre, .Les fournisseurs de services de chaque équipe doivent mettre en œuvre un ensemble de sérialisation 、Désérialisation、Cadre du réseau、Pool de connexion、 Fil émetteur - récepteur 、Traitement des délais、Machine d'état, etc.“ Hors entreprise ” Le travail technique répété de , Créer une inefficacité globale .

RPCResponsabilités du cadre, Il s'agit de masquer toutes les complexités :

(1)Appelantclient C'est comme appeler une fonction locale ,Pour invoquer le Service;

(2)Fournisseursserver C'est comme implémenter une fonction locale , Pour réaliser le Service ;

Qu'est - ce qui est commun,CircledRPCEt le cadre?

(1)gRPC,GoogleProduit,Support multilingue;

(2)Thrift,FacebookProduit,Support multilingue;

(3)Dubbo,Alibaba Open Source,SoutienJava;

(4)bRPC,Baidu Open Source,SoutienC++,Java;

(5)tRPC,TencentRPCCadre,Support multilingue;

(6)...

Voix off:Qu'est - ce qu'il y a d'autre?

Ce que j'ai partagé avec vous aujourd'hui srpc, L'auteur est l'architecte yuan de Sogou liyingxin,Basé surWF,Quantité de code1WGauche et droite:

(1)Parfait pour étudierRPCLa conception architecturale de;

(2) Un autre produit de qualité industrielle ,QPSPeut atteindre50W, L'industrie devrait être la plus performante RPC C'est parti. , Il est utilisé par un certain nombre d'applications en ligne avec une très grande concurrence .

Voix off:Non.? Allez! !

Qu'est - ce quesrpc?

Basé surWFLa légèreté de,Très haute performance,Niveau industrielRPCCadre, Compatible avec plusieurs protocoles ,Comme BaidubRPC,TencenttRPC,GoogleDegRPC,EtFBDethriftAccord.

srpc Quelles caractéristiques? ?

(1)Prise en charge de plusieursIDLFormat,Y compris:Protobuf,ThriftAttendez., Pour ce type de projet , Peut migrer en un seul clic ;

(2) Prise en charge de plusieurs méthodes de sérialisation ,Y compris:Protobuf,Thrift,jsonAttendez.;

(3) Prise en charge de la méthode de compression multiple ,Transparent pour l'application,Y compris:gzip,zlib,lz4,snappyAttendez.;

(4)Prise en charge de protocoles multiples,Transparent pour l'application,Y compris:http,https,ssl,tcpAttendez.;

(5)Haute performance;

18042874de92e823ce392053708863e6.png

Performance très stable sous différentes pressions de thread client ,QPSIn50WGauche et droite, Meilleure que la configuration piézométrique équivalente bRPCAvecthrift.

(6)Léger,Seuil bas,1WCode de droite et de gauche, Il suffit d'introduire une bibliothèque statique ;

Comment commencer rapidement, Expérimentez ce beau RPCEt le cadre?

En termes simples,Il ne faut que trois étapes.

Première étape:DéfinitionIDLDescription du fichier.

syntax = "proto3";// proto2 or proto3

message EchoRequest {

   string message = 1;

   string name = 2;

};

message EchoResponse {

   string message = 1;

};

service Example {

   rpc Echo(EchoRequest) returns (EchoResponse);

};

Deuxième étape:Générer le Code,Et réaliserServiceIMPL,server C'est fini. .

class ExampleServiceImpl : public Example::Service

{

public:

   void Echo(EchoRequest *request,

        EchoResponse *response,

        RPCContext *ctx) override

    {

       response->set_message("Hi, " + request->name());

    }

};

makeUne poignée.,En un seul coup..

Troisième étape: Définissez vous - même un client demandeur ,Envoyer au serveurechoDemande.

int main()

{

   Example::SRPCClient client("127.0.0.1", 1412);

   EchoRequest req;

   req.set_message("Hello, srpc!");

   req.set_name("zhangsan");

   client.Echo(&req, 

        [](EchoResponse *response, RPCContext *ctx){});

   return 0;

}

Dans l'ensemble de données à la fin de l'article , Il existe des liens très détaillés vers les manuels , Suivez - le étape par étape .

srpc Quelle est l'idée de conception architecturale de ?

En tant queRPCCadre,srpc L'architecture est exceptionnellement claire , Les utilisateurs doivent se concentrer sur 3Niveaux:

(1)IDL Description de l'interface niveau de fichier ;

(2)RPC Couche de Protocole de sérialisation ;

(3) Couche de communication réseau ;

En même temps, Chaque niveau offre une variété d'options , L'utilisateur peut combiner n'importe quelle combinaison :

d7d6308078fa9188b020dc5deb1d65fc.png

Comme le montre la figure ci - dessus:

(1)IDLCouche,L'utilisateur peut choisirProtobufOuThrift;

(2)Niveau du Protocole,Vous pouvez choisirThrift,bRPC,tRPCAttendez.;

Voix off:Donc,, Et d'autres RPC Cadre sans soudure .

(3) Niveau de communication ,Vous pouvez choisirtcpOuhttp;

Sous cette hiérarchie ,RPC Que font les clients de ,RPC Que fait le serveur ,srpc Que fait le cadre? ?

Il faut d'abordIDL Définir :

(1) Paquet de demandes logiques request;

(2) Paquet de réponse logique response;

(3) Fonctions d'interface de service method;

e1191f76afb7a2932830f77337239de7.png

RPC-clientTravail C'est très simple. :

(1)Appelezmethod;

(2)Lier la fonction de rappel,Traitement des rappels;

Correspond à la partie verte de la case supérieure de l'illustration ci - dessus .

RPC-serverTravailC'est aussi très simple, Comme mettre en œuvre une fonction locale , Fournir des services à distance :

(1)Réalisationmethod;

(2)Acceptérequest,Traitement logique,Retourresponse;

Correspond à la partie jaune de la case inférieure de la figure ci - dessus .

srpcCadre J'ai fait la plupart du travail :

(1)C'est exact.requestSérialisation,Compression, Le traitement génère des messages binaires ;

(2)Pool de connexion,Temps mort,File d'attente des tâches, Traitement asynchrone, etc. ;

(3)C'est exact.request Traitement des messages binaires ,Décompresser,Désérialisation;

...

Correspond à la partie rouge de la boîte au milieu de la figure ci - dessus , Et la plupart des processus .

Dans ce processus,,srpc Adopter une conception plug - in , Divers détails de complexité , Pour les appelants d'interface et les fournisseurs de services ,Tout est transparent., Et avoir une bonne Extensibilité.

94f34b8acb73832bd34b3a6651d7c22e.png

Comme le montre la figure ci - dessus, Les utilisateurs ont juste besoin de se concentrer sur IDL, Demande logique ,Réponse, Appel et mise en œuvre de l'interface .Niveau du cadre, Intégrer les différentes capacités dans un plug - in , Offre à l'utilisateur un choix de combinaisons de capacités différentes .

En plus,Bien défini.IDLAprès, Le Code côté serveur peut être généré automatiquement en utilisant les outils fournis par le cadre , Fournisseurs de services aux entreprises , Il suffit de se concentrer sur la mise en œuvre de l'interface d'affaires , Tu as dit beau pas beau ?

Voix off: Outils de construction spécifiques , Et la méthode de génération ,VoirgitDocuments sur.

Enfin,Je pense quesrpc Un des plus beaux endroits ,C'est: La version open source est la version de projet en ligne ,Mise à jour rapide,issueRéponse rapide, Et la documentation est vraiment complète !

Voix off: Beaucoup de grandes entreprises , La version interne de l'entreprise et la version open source sont deux ensembles de codes , La version open source n'a pas de documentation ,KPIUne fois terminé, Open source n'est plus entretenu , Il s'est avéré qu'il y avait une grande fosse .

Fin de l'article, Partagez quelques ressources d'apprentissage .

Adresse du projet:https://github.com/sogou/srpc

Projetsdemo:

e53263b8d74e8670c3ad5613c3fc8939.png

README_cn.md

Conception de l'architecture du projet :

45481b539f0238e5c509c7ef8b57fedf.png

docs/wiki.md

Auteur: :

e5d1c62dda5c1508fcf07b46cece6c95.png

https://www.zhihu.com/people/liyingxin1412/posts

Coordonnées des auteurs:

865dad08d9b39ef15507b9ce6a9d27c3.png

Découvertebug Peut lui être soumis à tout moment , Réponse absolument rapide .

Adresse du projethttps://github.com/sogou/srpc

Star:800+

Voix off:srpc Et beaucoup d'excellents dessins , Attendez que tout le monde creuse .

C'est fini.,J'espère que1WCode de ligneRPCCadre, Peut aider tout le monde à mieux comprendre RPCLe principe sous - jacent.

Lire le texte original, Code direct , Étoile de bienvenue .

版权声明
本文为[58 Shen Jian]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125191700023l.html

  1. Fonction de flèche JavaScript
  2. JavaScript - déconstruction assignations
  3. Building CentOS 7.6 with Linux
  4. JavaScript - type d'emballage
  5. linux deepin/ubuntu安装flameshot火焰截图
  6. JavaScript - encapsulation et héritage (deux)
  7. JavaScript JS method for writing 99 multiplication table
  8. 從零開始學java - 第二十五天
  9. Apprendre Java à partir de zéro - jour 25
  10. Les voitures d'hiver, les voitures électriques et les voitures à essence ne sont pas les mêmes?
  11. JavaScript - ceci pointe vers le problème
  12. Copie JavaScript
  13. Spring boot quickly integrates swagger
  14. linux deepin/ubuntu安裝flameshot火焰截圖
  15. Capture d'écran de flamme de l'installateur de flamme Linux deepin / Ubuntu
  16. Jquery DOM et jquery, fonctions d'entrée (bases)
  17. Méthode d'instance jquery
  18. Méthode et démonstration de code dans l'interface de liste en Java
  19. 【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )
  20. Démarrage du Zookeeper
  21. Java oom Cognition
  22. Java 开发者最困惑的四件事,值得一看!,BAT面试文档
  23. Java 将两个对象list里面的 某个字段值抽取到一个list里,java选择排序原理
  24. Java 多线程 —— 生产者消费者问题,从基础到深入案例
  25. Java 中设计模式 之 工厂模式,java反射机制的底层原理
  26. 【錯誤記錄】Java 中 ArrayList 排序 ( 使用 Comparator 接口時注意 compare 返回值是 -1 和 +1 )
  27. 【 enregistrement des erreurs 】 tri ArrayList en Java (Notez que les valeurs de retour de comparaison sont - 1 et + 1 lors de l'utilisation de l'interface de comparaison)
  28. Pourquoi Xiaopeng P5 est - il devenu un grand succès dans le cercle? Le Salon de l'automobile de Guangzhou montre encore des compétences polyvalentes
  29. Java 開發者最困惑的四件事,值得一看!,BAT面試文檔
  30. Les quatre choses les plus déroutantes pour les développeurs Java valent la peine d'être regardées! Document d'entrevue sur les MTD
  31. k8s-Pod污点与容忍
  32. k8s-Pod污点与容忍
  33. K8s POD Contamination and Tolerance
  34. K8s POD Contamination and Tolerance
  35. mysql常用语句——GROUP BY和HAVING
  36. Spring boot quickly integrates swagger
  37. mysql常用語句——GROUP BY和HAVING
  38. MySQL Common statements - group by and having
  39. Le défi du pinceau leetcode - Javascript: 110. Arbre binaire équilibré
  40. [notes d'apprentissage de première ligne] day44: XMLHttpRequest
  41. java调用RFC延长调用时间
  42. java調用RFC延長調用時間
  43. Java call RFC prolonge le temps d'appel
  44. Le modèle d'usine du modèle de conception en Java, le principe sous - jacent du mécanisme de réflexion Java
  45. Java Multithreading - producer Consumer issues, From Basic to Deep case
  46. OushuDB 安装与升级之安装 HDFS
  47. OushuDB 安装与升级之安装 Zookeeper
  48. Java-String-对象,你真的了解了吗?,mysql教程入门到精通
  49. Linux引导过程与服务控制
  50. Java-8新特性:学习如何使用Lambda表达式(一,线程池的实现原理
  51. Java 读写锁 ReentrantReadWriteLock 源码分析,headfirstjavapdf百度云
  52. JAVA 获取系统日期时间,初级java开发常见的面试题
  53. MySQL judges the salary changes based on the existing data
  54. k8s-Pod污點與容忍
  55. Java extrait une valeur de champ de deux listes d'objets dans une liste, et Java sélectionne le principe de tri
  56. java中ArrayList应用实例,阿里巴巴java面试流程
  57. Java个人技术知识点总结(框架篇),kafka聊天服务器架构
  58. JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践
  59. JavaWeb - 文件的上传,核心API的使用,文件下载,附学习笔记 面试整理 进阶书籍
  60. Netty原理:pipeline