
窥探Dubbo的世界
西红柿系番茄
知其然,知其所以然。
展开
-
Spring-Boot2整合Dubbo
最近Dubbo又重新开始了维护,并且提供了和Spring-Boot整合的Dubbo-Starter。作为Dubbo的忠实使用者,真的是感动啊!这不,赶紧搭建个小Demo来爽了一把。一、项目结构我们一共搭建3个模块,common模块定义了服务提供者和服务消费者都需要使用的实体类和服务接口,provider模块定义了服务接口的具体实现,consumer模块定义了一个控制器并注入服务使用。...原创 2019-01-02 13:23:50 · 1327 阅读 · 0 评论 -
初识RPC
一、应用的架构演进更详细的相关内容介绍,请参考大型网站的架构。单一应用架构:管理部署简单,无法支撑复杂的业务体系。垂直应用架构:解决了单一应用架构面临的扩容问题,不同系统之间存在重叠的业务。分布式应用结构:核心部分抽取出来作为单独的系统对外提供服务,达成业务之间的相互复用。应用架构的演进分布式应用架构所面临的首要问题,便是如何实现应用之间的远程调用(RPC)。 二、什...原创 2019-01-07 23:18:02 · 1334 阅读 · 1 评论 -
自己动手写RPC框架
在上一篇博客中,介绍了RPC的主要概念和实现原理,然后基于TCP协议实现了一个非常简单的RPC小案例(点此回顾)。现在,自我挑战一下,动手写一个RPC框架。高能预警:本文涉及到的知识点如下Spring Boot2:起步依赖、自动配置,让应用开发变得简单 Spring的Java Bean配置,条件注解:灵活控制注入 基于JDK接口的动态代理(了解一下?):发起远程调用对服务消费者来说...原创 2019-01-13 02:08:02 · 3975 阅读 · 18 评论 -
Netty入门
Netty 5用户指南中文版前言1、传统IO编程在学习Java基础的网络编程时,我们写过这样的代码 // 在10086端口启动服务监听 ServerSocket ss = new ServerSocket(10086); System.out.println("服务器正常启动。。。"); while (true) { // 阻塞,等待...原创 2019-01-07 00:02:03 · 656 阅读 · 1 评论 -
Java NIO
一、Java NIO简介Java NIO(New IO,或称Non Blocking IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。二、Java NIO与传统IO的主要差别1、传统...原创 2019-01-06 16:46:21 · 957 阅读 · 0 评论 -
Dubbo服务调用过程
之前介绍了Dubbo的整体架构,现在我们来说一下Dubbo的调用过程。直奔主题,先看一下官方的说明节点角色说明:Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。 Container: 服务运行容器。调用关系说明:0. 服...原创 2019-01-05 22:30:47 · 25745 阅读 · 0 评论 -
Dubbo的介绍和架构
一、前言随着互联网的发展,网站应用的规模不断扩大,软件架构也在不断演进(上一篇博客有更详细的介绍点此传送)。单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效...原创 2019-01-01 16:38:44 · 4213 阅读 · 0 评论 -
ZooKeeper的主要功能和原理
本文转自:https://blog.youkuaiyun.com/weijifeng_/article/details/79775738一 、Zookeeper功能简介ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现。分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护...转载 2018-12-31 20:46:01 · 2077 阅读 · 0 评论 -
基于ZooKeeper实现分布式锁(公平和非公平两种形式)
关于ZooKeeper,上一篇博客有更详细的介绍(传送门)。一、分布式锁在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。 常见的分布式锁实现方式有Redis的SETNX和GETSET函数,数据库锁,zk的数据节点和监听事...原创 2018-12-31 21:54:19 · 3380 阅读 · 1 评论 -
字节码操纵技术——Javassist
一、背景编程语言有静态语言和动态语言之分,例如:C、C++、Java等属于静态语言,JavaScript、Ruby、Python等属于动态语言。动态语言的灵活性非常高,遗憾的是,至今为止,作为Java程序员的我尚未享受到动态编程的乐趣。不过,Java也逐步提供了一些有限的动态编程机制,主要有下面三个方面: (1) 反射 (2) 动态编译 (3) 调用Jav...原创 2018-12-30 19:00:58 · 2388 阅读 · 2 评论 -
Java SPI
参考:https://blog.youkuaiyun.com/sigangjun/article/details/79071850一、什么是SPI?有什么用?先贴一张官方文档的介绍图:总结一下:SPI,全名为Service Provider Interface。API大家都知道吧,它是针对使用者的;而SPI恰好相反,是针对服务提供者的,比如厂商或者插件。我们系统里抽象的各个模块,往往有很多不同...原创 2018-12-30 12:36:46 · 574 阅读 · 0 评论 -
负载均衡算法
不管是Nginx从集群中选出一台提供访问的服务器,还是RPC框架(Dubbo,Spring Cloud等)的消费者从注册中心提供的列表中选出一台提供者,都涉及到负载均衡。下面介绍几种常见的负载均衡算法,包括轮询法、随机法、客户端地址哈希法、加权轮询法、加权随机法,然后讲解一下Dubbo的随机法。在开始之前,创建一个类Server,模拟真实场景中的服务器或者提供者。它有两个属性,IP地址和权...原创 2019-01-16 23:36:34 · 373 阅读 · 0 评论