狂刷200道数据结构与算法,四面美团开发岗,成功定级腾讯T3-2

前言

昨天,有个女孩子问我提高数据库查询性能有什么立竿见影的好方法?

这简直是一道送分题,我自豪且略带鄙夷的说,当然是加「索引」了。

她又不紧不慢的问,索引为什么就能提高查询性能。

这还用问,索引就像一本书的目录,用目录查当然很快。

她失望地摇了摇头,你说的只是一个类比,可为什么通过目录就能提高查询速度呢。

唉,对啊,通过书目可以快速查询,这只是一个现象,真正原因到底是什么呢。

那女孩看着诧异且表情僵硬的我,满意而又意味深长的笑笑:原来你这个男程序员也不会,看来我还得靠自己研究了。

哎,熬夜又要憔悴了我这该死的美貌。

来自同行的羞辱,是可忍孰不可忍?!

于是,我踏上了数据库索引学习的不归路,原来数据库索引使用了一种叫 B+ 树的古老数据结构,当然也有 Hash 等类型,暂且不说,可 B+ 树 这是个什么妖魔鬼怪呢?

下面就来浅尝辄止的扒一扒树的前世今生。

RPC概述

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

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

RPC框架原理

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

狂刷200道数据结构与算法,四面美团开发岗,成功定级腾讯T3-2

节点角色说明:

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

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

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

RPC调用流程

RPC基本流程图:

狂刷200道数据结构与算法,四面美团开发岗,成功定级腾讯T3-2

一次完整的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这些步骤都封装起来,让用户对这些细节透明。

服务注册&发现

狂刷200道数据结构与算法,四面美团开发岗,成功定级腾讯T3-2

服务提供者启动后主动向注册中心注册机器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哪个更好?

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,免费分享,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

狂刷200道数据结构与算法,四面美团开发岗,成功定级腾讯T3-2

资料免费获取方式:点击这里免费领取Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料

888715389)]

资料免费获取方式:点击这里免费领取Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料

上一篇:Go语言开发(二十)、GoStub测试框架


下一篇:hyperledger fabric 开发第一个智能合约