- 博客(22)
- 收藏
- 关注
原创 2021-02-01 SPI规范解决了什么问题
SPI规范解决了什么问题SPI的全称是 Service Provider Interface,目的是为了方便面向接口的编程。定义了一个接口之后,具体的实现类可以在代码里实现这个接口,并在 META-INF/service/接口全限定名 这个文件下定义具体的实现。java.sql.Driver,common-logging都使用了SPI。dubbo的扩展是基于SPI做了一层封装,在META-INF/dubbo/services目录下定义了扩展的实现。代码中通过ServiceLoader.load(Sp
2021-02-01 15:01:13 221
原创 2021-01-29 Dubbo中都有哪些扩展点?怎么实现的?
Dubbo中都有哪些扩展点?怎么实现的?扩展点协议扩展调用拦截扩展(filter)负载均衡扩展合并结果扩展(Merger)注册中心扩展动态代理扩展dubbo的扩展点是基于SPI进行了一定的加强。扩展点放在 META-INF/dubbo/接口全限定名扩展点通过wrapper的方式自动包装扩展点自动装配,在setter中引用的扩展点可以自动加载扩展点自适应扩展点自动激活(@Active注解)...
2021-01-29 15:13:38 179
原创 2021-01-21 dubbo中注册中心有哪几种实现?
dubbo中注册中心有哪几种实现?Nacos服务发现和健康监测动态配置服务动态DNS服务及其元数据Zookeeper服务提供者启动的时候,向zk的特定目录写下自己的URL地址服务消费者启动的时候,也向zk写在自己的地址,并订阅服务提供者的地址监控中心启动时,订阅所有的提供者和消费者URL地址Multicast不需要启动中心节点,只要广播地址只适合小规模应用或开发阶段Redis使用redis的Key/Map结构存储数据map的key是URL地址,value是过期时间
2021-01-21 11:35:05 199
原创 2021-01-20 dubbo中泛化调用解决的问题?如何实现?
dubbo中泛化调用解决的问题?解决了通用api调用的问题。如果没有泛化调用,那么调用每一个provider都需要预先定义一个service。有了泛化调用可以在启动的时候不去定义,而是在运行时动态指定provider。例如通用API网关,会频繁的有service进行注册,如果没有泛化调用,那么每新增一个API就要修改网关的配置并重启。如何实现?RPC的调用本身就是通过provider的元信息(接口名,版本,参数个数,参数类型)来进行调用。泛化调用就是通过代码的方式动态设置这些元信息,然后进行实际的
2021-01-20 17:03:19 320
原创 2021-01-18 负载均衡策略?最少活跃调用数如何实现?
负载均衡策略?轮询加权轮询随机哈希最少连接数加权最小连接数最短响应时间一致性哈希最少活跃调用数如何实现?维护一个map,key是后端的real server,value是当前正在活跃的调用数。每次分配之前,查看这个map,找出value最小的那个对应的real server建立连接。并对value进行自增。...
2021-01-18 14:37:34 201
原创 2020-12-30 字节码和动态代理
javassist通过java编码的方式,操作字节码,可以生成新的类。ASM需要对class的底层结构、汇编有一定的了解。门槛比较高。性能高,维护性差。Cglib导入cglib依赖包,代理类实现MethodInterceptor使用Enhance类得到动态代理的实例,并执行指定方法。jdk动态代理只能针对接口代理,需要实现Invokhandler接口的invoke(Object proxy, Method method, Object[] args)接口...
2020-12-30 16:10:08 189
原创 2020-12-28 NIO框架对比
MinaApache Mina Server是一个网络通信应用框架,与Netty是同一作者。比较老了。Netty基于NIO实现API更简单功能强大,预制了很多编码方案定制能力强性能高成熟稳定GrizzlyNIO的简单封装
2020-12-28 16:29:28 100
原创 2020-12-22 Dubbo的序列化方式
可以通过serialization来进行指定,默认是用hessian2dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为jsonHessian2比较老,性能一般高效率,高压缩比,二进制Dubbo阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它JSON纯文本,自解释Java必须实现SerializableThrift有中间的的IDL,跨语言Kyro使用字节码生成机制,底层依赖asm,只支持java把类型信息也放在序列化的结果中
2020-12-22 10:26:34 337
原创 2020-12-18 dubbo的通信方式
dubbo的通信方式?dubbo支持多种协议,默认使用的是dubbo协议。dubbo缺省协议采用单一长连接和NIO异步通讯,适合小数据量大并发的服务调用,以及消费者机器数远大于服务提供者。反之,Dubbo缺省协议不适合传送大数据量的服务。使用mina,hessian,tbremoting交互单链接、长连接、TCP、NIO异步传输,Hessian二进制序列化rest基于标准的Java REST API- JAX-RS 2.0实现的REST调用支持http基于HTTP表单的远
2020-12-18 17:43:22 459 1
原创 2020-12-17 dubbo
Dubbo都有哪些组件?Provider服务的提供方Consumer服务的消费方Register服务注册和发现的组件Monitor:统计服务调用次数和调用时间的监控中心Container:服务的运行容器参考链接https://dubbo.apache.org/zh/docs/v2.7/user/preface/architecture/...
2020-12-17 09:26:19 72
转载 用户态和内核态
相关概念 从宏观上来看,Linux操作系统的体系架构分为用户态和内核态。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用。 Inter的CPU将特权级别分为4个级别:RING0
2017-08-28 18:01:22 517
原创 Java反射
概念指的是可以于运行时加载,探知和使用编译期间完全未知的类。 Class类与java.lang.reflect类库一起对反射进行了支持,该类库包含Field、Method和Constructor类,这些类的对象由JVM在启动时创建,用以表示未知类里对应的成员。获取一个ClassClass.forName(“ren.liushuang.test.reflect.User”)user.getCla
2017-08-23 16:08:45 232
原创 kafka相关
概述kafka是一个分部式发布-订阅消息系统。kafka最初是由linkedIn开发,之后成为Apache的一部分。kafka是一个快速的、可扩展的、设计分布式的、分区和可复制的日志提交服务。优点被设计为一个分布式系统,便于横向扩展同时为发布和订阅提供高吞吐量支持多订阅者,当失败的时候能够重新平衡消息持久化到磁盘,可以用于批量消费架构基本概念Topic(话题):特定类型的消息流,不同的消
2017-08-22 17:14:13 302
原创 MyBatis相关
MyBatis基本概念MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息。将接口和Java的POJO映射为数据库中的记录SqlSessionFactory每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心,S
2017-08-21 11:09:49 1117
原创 Redis相关
Redis是什么一个全内存的、可持久化的Key-Value结构的缓存Redis支持的数据结构Redis支持多种数据结构:例如String、List、Set、Hash、Sorted Set * String:普通类型,也可以是数字 * List:双向链表,可以用作队列 * Set:不重复的集合 * Sorted Set:在Set的基础上增加了score,可以进行排序 * Hash:字典,可以
2017-08-18 10:40:42 219
原创 Nginx相关
概述nginx是一个反向代理的HTTP服务器。 同时也可以是一个邮件代理服务器;一个TCP/UDP代理服务器。 它可以处理静态文件,可以对真实服务进行无缓存的代理,可以做简单的负载均衡和容错,提供模块化的服务,支持SSL。 Nginx有一个主进程和多个工作进程,每个工作进程都是单线程的。优点支持Linux、Windows,支持MacOS支持5W+的并发连接使用epoll实现异步非阻塞模
2017-08-15 15:00:28 241
原创 Java NIO 和 AIO的区别
来源NIONon-blocking IO,即非阻塞的输入输出。(也有叫做New IO,新IO)从jdk1.4开始支持。AIOAsynchronous IO,即异步IO。(也有叫做NIO2)从jdk7开始支持。相同都是基于Channel、Buffer对IO进行操作。都是非阻塞的。不同同步与异步同步与异步是指操作系统层面,当调用操作系统API之后是同步等待,还是操作系统以消息的形式异步返回结果。
2017-08-14 10:52:42 360
原创 Java NIO
概述NIO有三大核心组件:Channel、Buffer、Selector。传统IO基于字节流和字符流进行操作,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作的。传统IO(BIO)是同步阻塞的,而NIO是同步非阻塞。AIO是异步非阻塞的。同步和异步同步和异步是针对应用程序和内核的交互而言的, 同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪, 而异步是指用
2017-08-10 17:01:55 215
原创 Java垃圾回收并发和并行
英文单词并发:Concurrency 并行:Parallelism并发一个并发程序是具备处理多个任务的能力。并发并不需要有多个CPU,单个CPU通过时间片的方式,不同时间片处理不同任务,可以让程序“看起来”是都在执行的。并行并行表示在同一个时间点,有多个任务都在进行当中。并行是需要多个CPU才可以完成的。如果说每一个CPU都在运行一个程序,那么4个CPU就可以让4个程序“并行”运算。Java垃圾回
2017-08-04 15:48:22 2542
翻译 GraphQL相关
GQL是什么graphQL是由Facebook开发的一种查询语言,用于替换REST Api。可以类比SQL也是一种查询语言。GQL的好处在客户端需求发生变更的时候,可以不需要通知服务端。理论上服务端可知的字段是大而全的,客户端只需要按照自己的需要去请求对应的字段。多个客户端的请求可以合并为一个,减少网络请求次数Overview翻译http://facebook.github.io/graphq
2017-08-02 11:24:44 746
原创 几种常见GC方式对比
GC算法标记-清除复制标记-整理分代收集一些收集器Serial 单线程收集器ParNew Serial的多线程版 Parallel Scavenge 关注吞吐率CMS收集器 stop the world 时间最短 G1收集器使用G1: -XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200, 设置最大间隔时间G1将新生代、老年代
2017-08-01 17:54:36 6781
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人