什么是 RPC?

Remote Procedure Call,远程过程调用。

RPC 有什么作用?

  • 屏蔽远程调用、本地调用的区别
  • 隐藏底层网络通信的复杂性,让我们更专注于业务

RPC 步骤

为什么需要序列化?

  • 网络传输必须是「二进制」,调用方的参数都是对象
  • 请求二进制消息体

零拷贝

什么是零拷贝?

为什么需要零拷贝?

网卡等操作,只能通过内核操作,应用程序要发送网络数据,需要将数据复制到内核。

如何实现零拷贝?

虚拟内存

  • mmap + write
  • sendfile

Netty 的零拷贝有何不同?

  • 一个请求,可能拆分成多个数据包
  • 数据包的组合在用户空间,解决用户空间内存的拷贝处理问题,CompositeByteBuf
  • 也包括用户空间、内核空间的数据拷贝:Direct Buffers

动态代理实现

  • JDK:只能代理接口
  • Javassist:操作底层字节码,不需要反射,性能好
  • Byte Buddy:更容易的 API,速度比 Javassist 快,Spring、Jackson 使用

HTTP/2 特性

  • 多路复用,同一链路双向发送stream数据
  • Header 压缩

为什么需要服务发现?

公共的“通讯录”

为什么不用 DNS?

  • DNS多级缓存,且缓存时间长
  • 需要搭建负载均衡,额外成本

定时任务 & 时间轮

定时任务的问题?

  • future 启动线程进行异步编程,sleep
  • 如果5秒超时,高并发的
  • 让CPU额外轮询遍历,浪费CPU

时间轮的应用

  • 延迟消息
  • 订单过期(10分钟未付款,取消订单)

时钟轮本质

减少额外的扫描操作

时间轮在 RPC 的应用

调用端请求的超时处理,节省CPU

时间轮实现

Netty的 TimeWheel

如何注册和发现服务?

  • RPC Server 提供服务,向 Registry 注册自身
  • RPC Client 调用服务,从 Registry 拉取服务列表
  • Server 节点变更时,同步变更,Client 感知刷新本地的「服务节点列表」

实现:

  • 注册中心 API
  • 服务健康状态监测:ZooKeeper 的会话超时控制机制
  • 服务状态变更通知:ZooKeeper 的 Watcher 机制

如何实现 RPC 远程调用?

  • 客户端、服务端如何建立网络连接:HTTP、Socket
  • 服务端如何处理请求:NIO(使用 Netty)
  • 数据传输采用什么协议
  • 数据如何序列化、反序列化:JSON,PB,Thrift

如何追踪微服务?

核心理念:调用链,全局唯一的 ID 将同一请求串联起来,从而还原调用关系,统计系统指标。

注册中心选型

  • 高可用

    • 集群部署:多个实例
    • 多机房部署:一个机房断电等不可抗因素
  • 数据一致性
    • CP 型:ZooKeeper(Redis),强一致性,机房间断网,注册中心不可用
    • AP 型:牺牲一致性,保证可用性。Eureka

开源 RPC 框架

限定语言

  • Dubbo:Java,阿里
  • Motan:Java,微博
  • Tars:C++,腾讯(已支持多语言)
  • Spring Cloud:Java
    • 网关 Zuul
    • 注册中心 Eureka
    • 服务超时熔断 Hystrix
    • 调用链监控 Sleuth
    • 日志分析 ELK

跨语言 RPC 框架

  • gRPC:HTTP/2
  • Thrift:TCP

Spring Cloud 微服务架构

代码、思维导图笔记链接

代码和思维导图在 GitHub 项目中,欢迎大家 star!

coding 笔记、点滴记录,以后的文章也会同步到公众号(Coding Insight)中,希望大家关注_

RPC 实战与原理 精简版的更多相关文章

  1. 微信小程序实战之百思不得姐精简版

    原文:微信小程序实战之百思不得姐精简版 微信小程序基本组件和API已撸完,总归要回到正题的,花了大半天时间做了个精简版的百思不得姐,包括段子,图片,音频,视频,四个模块.这篇就带着大家简述下这个小的A ...

  2. NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块

    前言 NETCore 里说到任务调度,大家首先想到的应该是大名鼎鼎的 QuartzNET 与 Hangfire,然而本篇介绍的却都不是,而是 Bootstrap Admin(以下简称 BA)通用后台权 ...

  3. Linux上oracle精简版客户端快速部署

    RHEL6 + Oracle 11g客户端快速部署 需求:只是用到客户端的sqlplus, sqlldr功能. 方案:用精简版实现客户端的快速部署 1.上传oracle精简版客户端到服务器/tmp目录 ...

  4. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

  5. ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址

    原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...

  6. TeamViewer12.0.71503(远程控制软件)精简版 单文件企业版介绍

    TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可 ...

  7. Log4j快速使用精简版

    Log4j快速使用精简版 1.导入log4j-1.2.17.jar包 2.在src根目录下创建log4j.properties文件 log4j.rootLogger=INFO, CONSOLE, FI ...

  8. VMware10.06精简版安装后台运行

    VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...

  9. [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)

    利用周末时间将整个电脑格式化,换成了ubuntu系统- 所谓:扫清屋子再请客! 但是有些软件只在win上有,于是还是考虑装个虚拟机来个——逐步过度策略,一点点地从win上转移到linux上 我的系统是 ...

随机推荐

  1. 一目了然的 Node.js Windows10 安装篇

    本篇文章 介绍 NodeJS 的安装 及环境变量配置 Node JS 的 了解 1.Node.js简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于 ...

  2. Docker 笔记学习

    文章目录 概述 CentOS7 Docker 安装 启动 Docker 后台服务 镜像加速 Docker常用命令 如何创建一个镜像 存储和载入镜像 上传镜像 容器的基本操作 创建容器 终止容器 如何进 ...

  3. webform中ajax.ajaxMethod使用方法

    前言 dll文件 如果还没有ajax.dll文件,就先下载一个来 引用 将ajax.dll添加到项目引用中:在VS的解决方案资源管理器中右键点击项目名称--"添加项目引用"--浏览 ...

  4. Autofac官方文档翻译--一、注册组件--1注册概念

    官方文档:http://docs.autofac.org/en/latest/register/registration.html 一.注册概念 使用Autofac 注册组件,通过创建一个Contai ...

  5. x264编码demo定制修改介绍

    x264编码器,提供了两个demo来验证编码功能:一个是大而全的x264.c,另外一个是简洁版的example.c. 其中,前者demo,可以配置很多编码参数,但太冗长繁杂,对初学者不太友好.  后者 ...

  6. Flutter低版本迁移到高版本

    记录一次Flutter v1.12.13+hotfix.8 升级到1.22.4(当前最新) 后 ,旧项目的适配过程 工具:Android Studio 4.1.1 1.android 的MainAct ...

  7. 一.C语言概述

    C语言的起源 贝尔实验室的Dennis Ritchie在1972年开发了C,当时他正与ken Thompson一起设计UNIX操作系统,然而,C并不是完全由Ritchie构想出来的.它来自Thomps ...

  8. 熬夜肝了这篇Spring Cloud Gateway的功能及综合使用

    前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul.网关通常在 ...

  9. [转载]Mybatis Generator最完整配置详解

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  10. 基于ESP32的智能家居管理系统的设计与实现

    基于ESP32的智能家居管理系统的设计与实现 ESP32的智能家居管理系统访问链接: https://www.cnblogs.com/easyidea/p/13101165.html 一.需求分析 1 ...