RPC框架
总体思路
RPC核心原理
客户端client:调用远程方法
客户端Stub:一个代理类,将客户端调用的方法、类、方法参数等信息传递到服务端。
网络传输:将调用的方法的信息比如说参数等传输到服务端,然后服务端执行完之后再把返回结果通过网络传输会客户端。网络传输方法有很多种,比如socket、Netty等。
服务端Stub:接收到客户端执行方法的请求后,取指定的方法然后返回结果给客户端的类。
服务端:提供远程方法的一端。
常见RPC框架Dubbo、Motan、gRPC、Thrift
如何设计一个RPC框架一般情况下,RPC框架不仅要提供服务发现功能,还要提供负载均衡、容错等功能。服务提供端Server向注册中心注册服务,服务消费者Client通过注册中心拿到服务相关信息,然后再通过网络请求服务提供端Server。下面是一个完整的RPC框架示意图:
注册中心可以使用Zookeeper、Nacos甚至是Redis。注册中心负责服务地址的注册和查找,相当于目录服务。服务端启动的时候将服务名称以及对应的地址(ip+port)注册到注册中心,服务消费端根据服务名称找到对应的服务地址。有了服务地址之 ...
JVM
JVM内存区域划分内存区域一共分为5个区域,其中方法区和堆是所有线程共享的区域,随着虚拟机的创建而创建,虚拟机的结束而销毁,而虚拟机栈、本地方法栈、程序计数器都是线程之间相互隔离的,每个线程都有一个自己的区域,并且线程启动时会自动创建,结束后会自动销毁。内存划分完成之后,我们的JVM执行引擎和本地库接口,也就是Java程序开始运行之后就会根据分区合理利用对应区域的内存。
运行时数据区程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程毁灭
程序计数器定义:JVM中的程序计数器可以看做是当前线程所执行字节码的行号指示器,而行号正好就是值得是某一条指令,字节码解释器在工作时也会改变这个值,来指定下一跳即将执行的指令。
程序计数器的两个特点
现成私有
不会内存溢出
虚拟机栈定义:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧,栈帧中包括了当前方法的一些信息,比如局部变量表、操作数栈、动态链接、方法出口等。如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverFlowError异常;如果Java虚拟机栈容量可以动态扩展,当栈扩展到无法申请到足够的内存会抛出 ...
Redis学习总结
Redis学习总结介绍一下RedisRedis是一种基于内存的数据库,对数据的读写都是在内存中完成的,因此读写速度非常快,常用于缓存、消息队列、分布式锁等场景。Redis提供了多种数据结构来支持不同的业务场景,比如String、hash、list、set、zset、bitmaps(位图)、hyperLogLog(基数统计)、GEO(地理信息)、Steam(流),并且对数据的操作都是原子性的,因为执行命令是单线程负责的,不存在并发竞争的问题。除此之外,Redis 还支持事务 、持久化、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。
Redis和Memcached的区别?相同点:
都是基于内存的数据集,一般当做缓存使用。
都有过期策略。
两者性能都非常高
不同点:
Redis支持的数据类型更多(String、List、set、zset、hash),而Memcached只支持key-value数据类型。
Redis支持数据的持久化,Memcached不支持。
Redis原生支持集群模式,Memcached ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
