字节跳动Java高级工程师,统一命名服务、集群管理、分布式应用?

随时待命 2021-09-15 07:49:25
java 后端 程序员


RPC概述

RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。

现在互联网应用的量级越来越大,单台计算机的能力有限,需要借助可扩展的计算机集群来完成,分布式的应用可以借助RPC来完成机器之间的调用。

RPC框架原理

在RPC框架中主要有三个角色:Provider、Consumer和Registry。如下图所示:

字节跳动Java高级工程师,统一命名服务、集群管理、分布式应用?_Java

节点角色说明:

  • Server: 暴露服务的服务提供方。

  • Client: 调用远程服务的服务消费方。

  • Registry: 服务注册与发现的注册中心。

RPC调用流程

RPC基本流程图:

字节跳动Java高级工程师,统一命名服务、集群管理、分布式应用?_后端_02

一次完整的RPC调用流程(同步调用,异步另说)如下:

1)服务消费方(client)调用以本地调用方式调用服务;

2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;

3)client stub找到服务地址,并将消息发送到服务端;

4)server stub收到消息后进行解码;

5)server stub根据解码结果调用本地的服务;

6)本地服务执行并将结果返回给server stub;

7)server stub将返回结果打包成消息并发送至消费方;

8)client stub接收到消息,并进行解码;

9)服务消费方得到最终结果。

RPC框架的目标就是要2~8这些步骤都封装起来,让用户对这些细节透明。

服务注册&发现

字节跳动Java高级工程师,统一命名服务、集群管理、分布式应用?_程序员_03

服务提供者启动后主动向注册中心注册机器ip、port以及提供的服务列表;

服务消费者启动时向注册中心获取服务提供方地址列表,可实现软负载均衡和Failover;

使用到的技术

1、动态代理

生成 client stub和server stub需要用到 Java 动态代理技术 ,我们可以使用JDK原生的动态代理机制,可以使用一些开源字节码工具框架 如:CgLib、Javassist等。

2、序列化

为了能在网络上传输和接收 Java对象,我们需要对它进行 序列化和反序列化操作。

  • 序列化:将Java对象转换成byte[]的过程,也就是编码的过程;

  • 反序列化:将byte[]转换成Java对象的过程;

可以使用Java原生的序列化机制,但是效率非常低,推荐使用一些开源的、成熟的序列化技术,例如:protobuf、Thrift、hessian、Kryo、Msgpack

关于序列化工具性能比较可以参考:jvm-serializers

3、NIO

当前很多RPC框架都直接基于netty这一IO通信框架,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推荐使用Netty 作为底层通信框架。

4、服务注册中心

可选技术:

  • Redis

  • Zookeeper

  • Consul

  • Etcd

编程实践:手写实现千万级流量架构必备的RPC框架

视频内容

1、为什么千万级流量分布式、微服务架构都有RPC?
2、什么是RPC?
3、辨析RPC和HTTP
4、实现RPC框架我们需要解决哪些问题?
5、具体问题具体分析,各个解决和实现!
6、应付千万级流量,这样够了吗?反思我们的实现。
7、Dubbo和SpringCloud哪个更好?

最后

码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考

 CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

以下是部分内容截图
字节跳动Java高级工程师,统一命名服务、集群管理、分布式应用?_后端_04

版权声明
本文为[随时待命]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15302413/3888192

  1. 小白也能看懂的dubbo3应用级服务发现详解
  2. SpringBoot异步使用@Async原理及线程池配置
  3. Questions d'entrevue de test avancé de Dachang, liste des compétences de base de l'entrevue Java,
  4. SpringBoot异步使用@Async原理及線程池配置
  5. Springboot utilise asynchrone le principe @ async et la configuration du pool de threads
  6. Détails de la découverte du Service d'application Dubbo 3 que Xiaobai peut également comprendre
  7. Springboot utilise asynchrone le principe @ async et la configuration du pool de threads
  8. 如何强大且优雅的搞定Linux文件系统,算法题 JVM,
  9. 太牛了,阿里P7架构师带你看透maven的来龙去脉,
  10. Oracle central et Oracle décentralisé
  11. java JavaBean
  12. Java wrapper type
  13. Java super keyword
  14. Java static keyword
  15. Java this keyword
  16. Java interface
  17. 太牛了,阿裏P7架構師帶你看透maven的來龍去脈,
  18. C'est génial, l'architecte Ali p7 vous montre à travers Maven.
  19. Comment traiter le système de fichiers Linux avec puissance et élégance, algorithme JVM,
  20. Java + SSM Social Insurance Pension System for Computer Graduation Design
  21. Usage of Java scanner
  22. Java inheritance
  23. Java method review
  24. java JVM
  25. Java Basics
  26. Java file operation object IO stream
  27. Java console reads multi character input and output
  28. Java simple array sorting
  29. In addition to MySQL master-slave, you have another choice, Galera
  30. Configuration standard dockerfile et docker-composer.yml
  31. 字节大神强推千页PDF学习笔记,2021Java开发学习路线,
  32. 字节大牛耗时八个月又一力作,靠这份Java知识点PDF成功跳槽,
  33. 字节大牛教你手撕Java学习,最新大厂程序员进阶宝典,
  34. Comment l'automne est - il beau?Ces 24 ensembles de modèles d'automne et d'hiver sont grands, minces et vieillissants
  35. 字節大牛教你手撕Java學習,最新大廠程序員進階寶典,
  36. 字節大牛耗時八個月又一力作,靠這份Java知識點PDF成功跳槽,
  37. Byte Bull vous apprend à déchiqueter Java à la main, le dernier dictionnaire avancé des programmeurs de grandes usines,
  38. Byte Bull a pris huit mois à travailler dur et a réussi à changer d'emploi avec ce PDF Java Knowledge point.
  39. Byte God Push 1000 pages PDF Learning notes, 2021 Java Development Learning route,
  40. Five minutes to understand MySQL index push down
  41. Spring中@within与@target的一些区别
  42. 力荐:提高千倍效率的一些 Java 代码小技巧
  43. Redis技术专题系列之帮你从底层彻底吃透RDB技术原理(基础篇)
  44. Juan Benet et vitalik buterin discutent des réflexions sur les médias sociaux décentralisés
  45. Ipfs Weekly Report 152 | pinata launched "submarining"
  46. Performance optimization issue 03 - HTTP request optimization
  47. JavaScript genrator generator
  48. 字节跳动Java面试全套真题解析在互联网火了,面试大厂应该注意哪些问题?
  49. 字节跳动Java社招,2021年阿里 腾讯 快手offer都已拿到!
  50. 用Java实现红黑树
  51. 使用Redis Stream来做消息队列和在Asp.Net Core中的实现
  52. 海量列式非关系数据库HBase 架构,shell与API
  53. Redis Technology Topic Series vous aide à comprendre les principes de la technologie rdb du Bas (Basic)
  54. Conseils: quelques conseils pour améliorer l'efficacité du Code Java
  55. Quelques différences entre @ within et @ Target au printemps
  56. 海量列式非關系數據庫HBase 架構,shell與API
  57. Architecture, Shell et API de base de données non relationnelle à grande échelle
  58. Mise en œuvre de l'arbre Rouge et noir en Java
  59. Byte Hopping Java Service Call, 2021 Alibaba Tencent Express offer a été obtenu!
  60. Byte Jump Java interview Full Set of true Problems Analysis in Internet fire, interview Factory should pay attention to what Problems?