- 博客(37)
- 收藏
- 关注
原创 SNMP协议
远程管理、监视和设置网络硬件可以使用SNMP(Simple Network Management Protocol)协议。使用SNMP协议能够从远处对整个网络组织结构内安装的交换机和其他网络硬件进行统一的管理。SNMP协议分为版本1、版本2和版本3 版本 RFC 说明 SNMPv1 RFC1157 在RFC1157中定义了整个协议的内容,在RFC1066中定义了MIB信息,在RFC12
2020-11-15 12:17:43
606
原创 浅谈Java线程状态
本文章基于JDK8版本从官方文档看,Java线程有6种状态,分别为NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED,在类Thread中有更详尽的对于线程状态描述,如下代码所示/*** A thread state. A thread can be in one of the following states:* &...
2020-01-06 13:36:37
267
原创 Redis存储结构体信息是用hash还是string
在讲到使用hash还是string存储的选择前,先了解Redis的hash和string结构。以下资料引自老钱的Redis深度历险(侵删)stringstring和hash都是Redis的一种数据结构。string结构常用来缓存用户信息,通常将用户信息结构体使用JSON序列化成字符串,然后将序列化后的字符串存入Redis进行缓存。String数据结构Redis的字符串是动态字符串,...
2019-08-13 13:51:54
6174
2
原创 微服务负载均衡组件Ribbon——源码解读篇
从这几篇源码解读可以发现一个规律,那就是引进某个服务,会经常看到@Configuration和@Import(核心服务注册类)这两个注解,伴随着@ConditonalOnClass(XXX.class)、@ConditionalOnBean(XXX.class)、@ConditionOnProperty(***)和@ConditionalOnMissingBean(XXX.class)。作为Spr...
2019-07-10 21:04:58
554
原创 微服务负载均衡组件Ribbon——实战篇
Ribbon是一个有容错能力的客户端负载均衡器,支持HTTP\TCP\UDP协议,从前面Feign的源码可以看出来,默认Feign集成了Ribbon。下面是官方对Ribbon特性的一个简介。Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following featuresL...
2019-07-08 19:48:32
1183
原创 微服务RESTful客户端Feign——源码解读篇
所谓一图胜千言,本篇文章先用Spring Cloud Feign类的脑图勾勒一个对Feign的简明印象。然后通过http请求的流程图和源码解析来解读Feign的功能。下图是对Spring Cloud Feign类的一个简单描述,先对整体的框架有个了解。Spring Cloud Feign类解析下图可以看出OpenFeign在微服务架构中的角色,即方便构建网络请求应用。OpenFeg...
2019-07-02 13:34:43
516
原创 微服务RESTful客户端Feign——实战篇
什么是Feign,又为什么使用Feign。Feign是一个声明式的Web Service客户端, Feign满足JSR 356规范、满足JAX-RS(Java API for RESTful)规范 ,可以快速地构建具有RESTful风格的网络请求应用。为什么用Feign,在微服务架构中, 庞杂的系统被分成了一个个微小的服务,服务与服务之间是通过HTTP接口的形式对外提供服务,Feign让服务间的调...
2019-06-22 01:39:52
2059
原创 微服务发现组件Eureka Server源码解读篇
上一篇说到Eureka客户端,这篇分析服务器端是如何与客户端交互及实现了哪些功能这里解释一些Eureka的专有名词instanceInfo: 服务实例信息, instanceId(唯一),app, appGroupName, ipAddr, port, leaseInfo等Lease:租约,客户端向服务器端注册相当于签下了一纸租约,存在租期的概念,到期了要是没动静就默认不租了,把实例剔除...
2019-06-19 22:15:12
353
原创 微服务发现组件Eureka Client源码解读篇
上一篇实战篇讲到Eureka具有如下功能:获取注册表信息服务注册服务续约服务下线(服务销毁)那么它是如何实现?接下来通过源码解读的方式一一道来。由于Eureka客户端代码较多,单独成篇,此篇主要是关于客户端源码的解读,下一篇文章讲解服务器端源码。Eureka是由Netflix公司开发并开源的微服务组件之一,目前最新版本是2.X,网飞出于商业的考虑,该组件不再增加新功能,不会有更新的版...
2019-06-18 20:38:31
514
原创 微服务发现组件Eureka——实战篇
在文章微服务架构设计模式——微服务架构 中谈到服务发现组件Eureka,在这里做一下拓展。古人云,知其然,知其所以然。国人习惯于先讲实战,后谈理论,鉴于此,这篇文章主要讲Eureka如何使用,在下一篇文章会详细分析Eureka的源码。首先,从架构图一窥Eureka的究竟。Eureka架构图从架构图中可知,Eureka具有如下功能:服务注册获取注册表信息服务续约服务下线(服务销毁...
2019-06-17 23:22:13
411
原创 微服务架构设计模式——微服务架构
关于微服务架构的定义众说纷纭,因此我摘取了几个描述的比较清晰的定义在这供参考。1.网飞(Netflix)架构师给出的定义,所谓微服务架构就是服务导向,松耦合有边界的元素构成的架构,松耦合指的是可以独立更新服务,不会对其他服务造成影响。同时,对于数据库需要适当的拆分,有可能会违反规范。Cockcroft defines a microservices architecture as a serv...
2019-06-15 20:17:13
23669
5
原创 微服务架构设计模式——单体架构
首先,要明确单体架构的定义是什么,才好与其他架构作区别于讨论。以下是我觉得对单体架构总结的比较好的定义Monolithic application has single code base with multiple modules. Modules are divided as either for business features or technical features. It ha...
2019-06-14 23:38:11
1473
原创 微服务架构设计模式综述
随着微服务的大量应用,在实践中也会遇到很多之前单体架构所没有的问题,微服务架构设计模式也应运而生。架构方面的权威Chris Richardson先生从多个角度归纳了42个设计模式,我将其归纳整理如下表,以飨读者。后面会陆续出关于微服务架构设计模式的文章,更加深入的阐述Richardson先生关于微服务架构设计模式的理解。微服务架构设计模式用图来自于Chris Richardson先...
2019-06-09 01:07:31
2012
原创 多线程设计模式-半同步/半异步模式
定义: 一个分层架构,将系统中的任务进行恰当地分解,使各个子任务落入合适的层次中半同步/半异步模式UML图AsyncTask: 异步任务,负责接收来自客户端的输入,对其进行初步处理,并通过队列与相应的同步任务通信 dispatch: 对输入进行初步处理,并构造相应消息放入队列由相应的同步任务进行处理Queue: 队列,异步任务层和同步任务层进行通信的中介 enqu...
2019-06-09 00:07:59
370
原创 多线程设计模式-主动对象模式
定义: 一种异步编程模式,允许任务的提交(对异步方法的调用)和任务的执行(异步方法的真正执行)分离主动对象模式UML图Proxy: 负责对外暴露异步方法接口 asyncService: 该异步方法负责创建与该方法相应的MethodRequest参与者实例,并将其提交给Scheduler参与者实例。该方法的返回值是一个Future参与者实例,客户端代码可以通过它获取异步方法对应的任...
2019-06-08 23:57:59
278
原创 多线程设计模式-线程池模式
定义:使用极其有限的资源(线程池)去处理相对无限的任务线程池模式UML图ThreadPool: 负责接收和存储任务以及工作者线程的生命周期管理 submit: 用于接收一个任务,客户端代码调用该方法向线程池提交一个任务 shutdown: 关闭线程池对外提供的服务Promise: 获取相应任务执行结果的凭据对象 getResult: 获取相应任务的执行结果...
2019-06-08 23:18:32
911
原创 多线程设计模式-生产者/消费者模式
定义:通过通道对数据(或任务)的生产者和消费者进行解耦,使二者不直接交互,从而使二者的处理速率相对来说互不影响。生产者消费模式UML图Producer: 生产者,负责生产相应的“产品”并将其存入通道 service: 生产者对外暴露的服务方法Product: 生产者所“生产”的数据或者任务Channel: 对通道的抽象。通道充当生产者和消费者之间的缓冲区用于“产品”传递,它可...
2019-06-08 22:53:43
423
原创 多线程设计模式-线程特有存储模式
定义:通过不共享变量实现线程安全,并规避锁的消耗及相关锁带来的问题线程特有存储模式UML图ApplicationThread: 线程持有存储模式的客户端,表示各个应用线程TSObjectProxy: 用于访问线程特有对象的代理对象 getThreadSpecific: 获取与其所属TSObjectProxy实例相关联的线程特有对象实例 setThreadSpecifi...
2019-06-08 19:06:17
243
原创 多线程设计模式-串行线程封闭模式
定义:通过将多个并发的任务存入队列实现任务的串行化,并为这些串行化的任务创建唯一的一个工作者线程进行处理由于只有唯一的工作者线程访问,对其的访问无须加锁,因此避开了锁的的开销和锁带来的问题串行线程封闭模式Serializer: 负责对外暴露服务接口以及工作者线程的生命周期管理,并将客户端对其的并发任务调用转换为相应的任务以实现服务串行化 service: 表示将串...
2019-06-08 18:18:40
511
原创 多线程设计模式-主仆模式
定义:将一个任务(原始任务)分解为若干个语义等同的子任务,并由专门的工作者线程来并行执行子任务主从模式UML图Master: 负责原始任务的分解、子任务的派发和子任务处理结果的合并 service: Master参与者对外暴露的接口,用于接收原始任务,并返回其处理结果 splitWork: 将原始任务分解成若干个语义等同的子任务 callSlaves: 将各个子任...
2019-06-08 12:51:54
886
原创 多线程设计模式-承诺模式
定义:这是一种异步编程模式,先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作。等到需要该任务的执行结果时,再调用凭据对象的相关方法来获取承诺模式UML图Promiser: 负责对外暴露可以返回的Promise对象的异步方法,并启动异步任务的执行 compute: 启动异步任务的执行,并返回用于获取异步任务执行结果的凭...
2019-06-08 05:20:21
430
原创 多线程设计模式-两阶段终止模式
定义:通过将停止线程这个动作分解为准备阶段和执行阶段两个阶段,提供了一种通用的用于优雅地停止线程的方法准备阶段:“通知”目标线程(欲停止的线程)准备进行停止,会设置一个标志变量用于指示目标线程可以准备停止了停止阶段:检查准备阶段所设置的线程停止标志和信号,在此基础上决定线程停止的时机,并进行适当的“清理”操作两阶段终止模式UML图ThreadOwner: 目标线程的拥有者。一般讲目标...
2019-06-07 02:38:05
662
原创 多线程设计模式-保护性暂挂模式
定义:如果某个线程执行特定的操作前需要满足一定的条件,则在该条件未满足时将该线程暂停运行(即暂挂线程,使其处于等待状态,直到该条件满足时才继续该线程的运行)保护性暂挂模式UML图GuardedObject: 包含受保护方法的对象 guardedMethod: 受保护方法 stateChanged: 改变GuardedObject实例状态的方法。该方法负责在保护条件成...
2019-06-07 01:23:09
1393
原创 多线程设计模式-不可变对象模式
定义: 将现实世界中状态可变的实体建模为状态不可变对象,并通过创建不同的状态不可变的对象来反映实现世界实体的状态变更不可变对象模式UML图ImmutableObject:负责存储一组不可变状态。该参与者不对外暴露任何可以修改其状态的方法 getStateX, getStateN:这些getter方法返回其所属ImmutableObject实例所维护的状态相关变量的值。这些变量在对...
2019-06-07 01:15:46
210
原创 多线程设计模式综述
由于多核CPU已经成了每台电脑的标配,计算机性能大大提高,随之带来的是程序员对多核的高效利用,也就是多并发编程。显然,多并发编程大大提高了系统的吞吐率,使得高并发不再遥不可及。但与此同时,也带来了很多令人头疼的问题。为了解决多线程编程带来的问题(如线程安全问题、死锁问题、内存溢出等),通过一些多线程设计模式可以巧妙的避开或者解决这些问题。我们可以在大量的分布式中间件(比如RocketMQ)...
2019-06-05 05:32:10
193
原创 设计模式——装饰模式
定义:动态地给一个对象添加一个额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。装饰者模式UML图Component: 组件对象的接口,可以给这些对象动态地添加职责ConcreteComponent:具体的组件对象,实现组件对象接口,通常就是被装饰器装饰的原始对象,也就是可以给这个对象添加职责Decorator: 所有装饰器的抽象父类,需要定义一个与组件接口一致的接口,并持有一...
2019-05-16 01:24:37
68
原创 设计模式——命令模式
定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令模式UML图Command: 定义命令的接口,声明执行的方法ConcreteCommand: 命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。Receiver: 接收者,真正执行命令的对象。任何类都可能成为一个接收者...
2019-05-16 01:18:12
169
原创 设计模式——观察者模式
定义:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式UML图Subject: 目标对象,通常具有如下功能一个目标可以被多个观察者观察目标提供观察者注册和退订的维护当目标的状态发生变化时,目标负责通知所有注册的、有效的观察者Observer: 定义观察者的接口,提供目标通知时对应的更新方法,这个更新方法进行相应的...
2019-05-16 01:09:15
128
原创 设计模式——建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示生成器模式UML图Builder: 建造者接口,定义创建一个Product对象所需的各个部件的操作ConcreteBuilder: 具体的建造者实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法Director: 指导者,也被成为导向者,主...
2019-05-16 00:34:29
87
原创 设计模式——外观模式
定义:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用外观模式UML图/*** A模块的接口*/public interface AModuleApi { /** * 示意方法,A模块对外的一个功能方法 */ public void testA();}public class AModu...
2019-05-15 19:33:30
85
翻译 浅拷贝(shallow copy)和深拷贝(deep copy)
浅拷贝(shallow copy):只负责克隆按值传递的数据(比如基本数据类型、String类型)深拷贝(deep copy):除了shallowcopy的值外,还负责克隆引用类型的数据,基本是就是被克隆实例所有的属性数据都会被克隆出来。这里推荐一篇介绍非常详细的外文文章Difference Between Shallow Copy Vs Deep Copy In Java什么是...
2019-05-07 23:56:44
3528
原创 设计模式——原型模式
定义:用原型实例指定创建对象,并通过拷贝这些原型创建新的对象原型模式UML图Prototype: 声明一个克隆自身的接口,用来约束想要克隆自己的类,要求它们都要实现这里定义的克隆方法。ConcretePrototye: 实现Prototype接口的类,这些类真正实现了克隆自身的功能Client: 使用原型的客户端,首先要获取到原型实例对象,然后通过原型实例克隆自身来创建新的对象实例。...
2019-05-07 22:59:30
110
原创 设计模式——职责链模式
定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一线,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链模式UML图示例代码如下:/*** 职责的接口,也就是处理请求的接口*/public abstract class Handler { /** * 持有后继的职责对象 */ protected...
2019-05-05 21:45:39
172
原创 设计模式概览
面向对象的分析设计会根据一些原则进行设计,以下是一些常见的设计原则。常见的面向对象设计原则 单一职责原则SRP(Single Responsibility Principle: 就是说一个类仅有一个引起它变化的原因。如果一个类有多个引起它变化的原因,那也就意味着这个类有多个职责,把多个职责耦合在一起了。 开放-关闭原则OCP(Open-Closed Principle):就是说...
2019-05-05 19:29:37
165
原创 JAVA IO流结构图概览
整理Java IO流的关系,并作图如下,以供参考。下图基于JDK 1.8制作,其中需要注意的是StringBufferInputStream和LineNumberInputStream已被废弃。详情如下:1.StringBufferInputStream@deprecatedThis class does not properly convert characters into...
2019-05-03 23:51:15
3157
3
原创 RabbitMQ vhost权限问题
RabbitMQ vhost权限问题RabbitMQ vhost权限问题RabbitMQ vhost权限问题在整合spring boot和RabbitMQ时,需要配置RabbitMQ,由于新手第一次使用,因此vhost的权限并未设置,会遇到如下问题Channel shutdown: channel error; protocol method: #method<channel.clos...
2018-12-18 18:16:04
4185
原创 centos7安装netspeeder教程
centos7安装netspeeder教程使用以下命令从github上下载安装脚本wget --no-check-certificate https://gist.github.com/LazyZhu/dc3f2f84c336a08fd6a5/raw/d8aa4bcf955409e28a262ccf52921a65fe49da99/net_speeder_lazyinstall.shsh n...
2018-11-24 00:41:00
2217
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人