自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(225)
  • 收藏
  • 关注

原创 class文件扫描分析

一.简介最近项目中需要分析java文件中依赖的类,通过提取字节码文件中的Constant_Class_info 常量池中的信息实现class 文件依赖分析。使用了ASM 轻量级jar包读取字节码文件,再解析常量池信息。<dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>8.0</version&gt

2021-05-26 17:01:42 444 2

原创 Java Shell执行命令

简介最近做公司的WebLogic 迁移工作,其中很多东西需要使用到相关的shell命令操作,需要同一个shell多次执行相关命令,简单使用Java ProcessBuilder 封装了一个shell工具类,可以同时在linux/windows下运行。并且每次运行的命令都有其执行结果返回。import java.io.*;import java.util.Scanner;import java.util.regex.Pattern;public final class ShellUtil {

2021-05-17 13:01:45 313 1

原创 Nginx+Keepalived 高可用

简介Keepalived是Linux下的一个高可用解决方案,Keepalived 可以用来防止服务器单点故障的发生。Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。后来Keepalive

2021-01-09 18:44:41 323

原创 18.Seata 分布式事务

简介Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。整体机制两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。二阶段:提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。Seata 术语TC (Transaction Coordinator) - 事务协调者维护全局和分支事务的状态,

2020-12-29 19:56:31 584

原创 分布式事务

简介Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。整体机制两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。二阶段:提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。Seata 术语TC (Transaction Coordinator) - 事务协调者维护全局和分支事务的状态,

2020-12-27 20:45:45 137

原创 17.Sentinel动态规则

简介Sentinel 的理念是开发者只需要关注资源的定义,当资源定义成功后可以动态增加各种流控降级规则。Sentinel 流控规则在服务重启后将丢失配置的规则,更多时候我们希望规则存储在文件、数据库或者配置中心中。Sentinel DataSource 扩展方式:拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nac

2020-12-26 16:41:20 368

原创 16.Sentinel整合Openfeign

简介Openfeign 实现远程接口映射,与Sentinel整合同Hystrix 整合非常类似,只需要在配置文件中启用feign.sentinel.enabled=true 即可开启Openfeign与Sentinel熔断处理。实现1.service-consumer 模块添加openfeign依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&

2020-12-26 15:21:13 846

原创 15.@SentinelResource定义资源

简介Sentinel 提供了 @SentinelResource 注解用于定义资源,并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。其使用非常简单,参考官方文档即可正确使用@SentinelResource,笔者也是参考官方文档资料copy过来。官方文档:https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81实现1.新建GlobalFallback.ja

2020-12-24 22:38:49 270 3

原创 14.Sentinel流控

简介Sentinel 是阿里基于Java 开发的分布式流控防护组件。从限流、熔断降级、系统负载保护、热点防护等多个维度保障微服务的稳定性。微服务可以轻松整合Sentinel实现流控、服务监控,Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。Sentinel服务端也是基于SpringBoot 开发,下载后java -jar xxxx.java 运行即启动Sentinel服务端。资源是Se

2020-12-22 21:47:12 213

原创 13.Nacos 服务配置

简介Nacos 提供了方便的服务配置功能,相较与spring-cloud-starter-config-server 还需要建立服务配置服务端,Nacos 本身就拥有服务配置功能,对微服务开发者更是友好。Nacos 官网dataId 说明:配置文件=spring.application.name−{spring.application.name}-spring.application.name−{spring.profiles.active}-{.properties | .yml | .yaml}

2020-12-19 22:32:24 435 1

原创 12.Nacos 服务注册

一.简介Nacos是阿里基于Java 实现动态服务发现、服务配置、服务元数据及流量管理的的服务端。Nacos 关键特性1.服务发现和服务健康监测Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。2.动态配置服务动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。3.服务及其元数据管理Nacos 能让您从微服务平台建设的视角管

2020-12-19 18:01:05 229 1

原创 11.SpringCloud升级 & Spring-Cloud-Alibaba

一.简介SpringCloud 作为微服务的集大成者,借鉴和吸收了许多开源优秀的框架,尤其是Netflix 公司的Eureka、Ribbon、Feign、Hystrix、Zuul组件。但是由于一些Netflix公司内部原因导致很多组件都进入停更维护阶段,导致SpringCloud 不得不自己开发/吸收一些新的组件替换原有功能。二.组件图谱红色标注表示停更或进入维护阶段(即只修复部分严重bug),阿里的Nacos也整合到SpringCloud 中,Nacos经受双十一的严禁考验,在国内也非常受欢迎。有了

2020-12-19 16:01:34 381 1

原创 10.SpringCloudSleuth

一.简介微服务之间通过网络通信,服务之间的调用形成调用链路。在服务调用链上如何快速定位服务业务处理速度变慢、服务变为环形调用等。SpringCloud提供了Sleuth 可以实现微服务的调用跟踪,形成调用线路。Sleuth 采集调用链路上的信息以Span描述,一个Span包含4个部分:-CS(Client Sent 客户端发送):客户端发起请求,表示请求开始;-SR(Server Received 服务器接收):服务器获取客户端请求,SR-CS 表示网络延迟;-SS(Server Sent 服务端

2020-12-13 16:14:13 134

原创 09.SpringCloudStream

一.简介消息中间件对于服务解耦、流量削峰、消息延迟都是非常常用的技术手段。各种消息中间件支持的协议、使用方式各有不同,对于整合多种消息中间件将非常繁琐。SpringCloudStream通过增加绑定器中间层,隔离消息中间件与应用程序的耦合,通过向应用程序暴露统一的Channel通道,使应用程序不需要考虑不同的消息中间件。SpringCloudStream架构:二.实现三.总结...

2020-12-12 18:09:15 214 2

原创 08.SpringCloud之Bus

一.简介SpringCloudBus是SpringCloud的消息总线,通过消息组件代理各个连接分布点,当配置文件发生变化后可以通过SpringCloudBus实现配置信息动态抓取,实现配置项的动态更新。二.实现1.SpringCloudConfigServer和需要动态抓取配置的服务都增加依赖库<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spr

2020-09-18 00:08:07 429

原创 07.SpringCloud之SpringCloudConfig

一.简介SpringCloudConfig是微服务的配置中心,使用git/svn 作为版本管理工具管理配置文件,这样所有的微服务都通过SpringCloudConfig微服务动态获取配置信息。SpringCloudConfig 微服务注册到Eureka中,而后所有微服务都从SpringCloudConfig微服务中获取配置。二.SpringCloudConfig微服务端1.编写服务端配置文件并推送到gitserver: port: 8001 context-path: /service-u

2020-09-07 15:00:32 261

原创 06.SpringCloud之Zuul路由网关

一.简介Zuul实现的是路由网关微服务,所有路由网关微服务都需要注册到注册中心。Zuul网关路由微服务代理客户端访问微服务,即消费端不直接访问微服务,而是访问路由网关微服务,这样可以在消费端与微服务之间构建过滤、认证操作。二.流程1.新建zuul网关微服务模块<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-we

2020-09-06 17:39:02 262

原创 05.SpringCloud之Hystrix熔断器

一.简介微服务运行过程中常需要对微服务进行监控,Hystrix提供了服务监控功能。二.HystrixDashboard 监控1.微服务端引入hystrix 和 actuator<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId></d

2020-09-06 15:26:38 281

原创 04.SpringCloud之Feign远程接口映射

一.简介SpringCloud是基于Restful的远程调用框架,引入Ribbon负载均衡组件后还需要客户端使用RestTemplate调用远程接口,操作起来还显得繁琐。SpringCloud提供了远程接口映射,将远程Restful服务映射为远程接口,消费端注入远程接口即可实现方法调用。二.流程1.新建远程接口映射模块service-api,并引入Feign接口映射依赖 <dependencies> <dependency> <groupId&g

2020-09-06 11:41:57 1887 3

原创 03.SpringCloud之Ribbon负载均衡组件

一.简介Ribbon的主要作用是进行Eureka中服务调用,微服务注册到Eureka中后,Ribbon通过服务名称即可进行服务调用,屏蔽了多主机微服务的ip地址和端口。使用Ribbon需要引入如下依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId

2020-09-05 19:33:29 191

原创 02.SpringCloud之Eureka

一.简介RestTemplate 访问服务端时需要明确服务端地址,在服务端宕机、地址变化后则需要大量修改。微服务中使用注册中心对所有微服务管理,微服务启动后把自己注册到注册中心,注册中心以统一的方式暴露服务。二.定义Eureka服务端1.统一定义依赖模块<groupId>com.vincent</groupId><artifactId>demo</artifactId><packaging>pom</packaging>&

2020-09-05 17:45:41 424 1

原创 01.SpringCloud 简介

一.简介

2020-09-05 15:32:24 212

原创 微服务简介

一.起源单体应用:传统软件把所有功能模块放在单一进程中,并通过复制这个单体应用到不同的服务器以实现扩展,通过DNS服务器配置域名——服务器ip地址实现网络层负载均衡(域名解析时一个域名配置多个服务器ip地址,DNS服务器会从中选取一台服务器ip地址返回)、Nginx软件负载均衡。单体应用的开发、测试、维护耦合性都比较强。修改软件时都需要重新部署整个应用,扩展性比较差。微服务:微服务需要以SOA(面向服务)思考方式设计软件,将每一个功能模块分别放进到一个独立的服务中。每个功能模块都可以独立开发、测试

2020-09-05 15:20:28 299

原创 分布式服务框架Zookeeper

ZooKeeper是一个分布式、开放源码的分布式应用程序协调服务,使用ZAB协议实现数据一致性。ZooKeeper 可以以单机模式或集群模式工作:单机模式Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,需要将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper 在启动时会找这个文件作为默认配置文件。tickTime=2000dataDir=D:/devtools/zookeeper-3

2020-08-30 21:37:47 179

原创 分布式系统CAP理论

一.简介

2020-08-30 19:56:32 164

原创 全国省市区街道数据

一.简介1.数据库表结构:CREATE TABLE `t_area` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL COMMENT '父级', `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '名称', `shortname` varchar(30) COLLATE utf8_unicode_ci

2020-08-14 13:08:15 5454 3

原创 设计模式之解释器

一.简介二.实现三.总结

2020-07-18 20:36:11 141

原创 设计模式之责任链

一.简介生活中常有一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等。责任链(Chain of Responsibility)模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。模式结构:1.抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。2.具体处理者(C

2020-07-17 23:28:53 163

原创 设计模式之策略

一.简介软件开发中常常遇到实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式的优点:1.多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。2.策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。3.策略模式把易变化的代码抽离出来,变化部分

2020-07-17 21:21:07 188

原创 设计模式之状态

一.简介程序设计中有些对象是有状态的对象。当有状态的对象与外部事件产生互动时,其内部状态会发生改变,从而使得其行为也随之发生改变。传统的处理方法是采用if-else 语句判断处理多种状态,状态模式的思想是:把“判断逻辑”提取出来,放到一系列的状态类当中,状态对象在其内部状态发生改变时改变其行为。模式结构:1.环境(Context)角色:它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。2.抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态

2020-07-17 16:28:30 199

原创 设计模式之备忘录

一.简介备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。该模式又叫快照模式。模式结构:1.发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。2.备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。3.管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。

2020-07-15 19:25:25 139

原创 设计模式之中介者

一.简介现实生活中常有许多对象存在复杂的交互关系,这种关系常是“网状结构”,把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要添加一个“中介者”就可以了。中介者(Mediator)模式:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式。模式结构:1.抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。2.具体中介者(ConcreteMediat

2020-07-15 16:33:20 207

原创 设计模式之观察者

一.简介观察者(Observer)模式:多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式。模式结构:1.抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。2.具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的

2020-07-15 13:41:31 138

原创 设计模式之迭代器

一.简介迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部状态结构。模式结构:1.抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。2.具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。3.抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。4.具体迭代器(Concretelt

2020-07-15 10:30:14 158

原创 设计模式之访问者

一.简介每种元素存在多种不同的访问者或处理方式(如消费者对同一产品的使用体验是不一样的)。被处理的元素结构相对稳定而有多种访问方式,如果用“访问者模式”来处理比较方便。访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加新的处理方法,且不用修改原来的程序代码与数据结构,这提高了程序的扩展性和灵活性。访问者(Visitor)模式:将作用于各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。模式结构:1.抽象

2020-07-14 21:52:24 168

原创 设计模式之命令

一.简介命令(Command)模式将“方法的请求者”与“方法的实现者”分离。两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。命令模式的结构:1.抽象命令类(Command):声明执行命令的接口,拥有执行命令的抽象方法。2.具体命令角色(Concrete Command):是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。3.实现者/接收者(Receiver):执行命令功能的相关操作,是具体命令对象业务的真正实现者。4

2020-07-14 16:49:26 178

原创 设计模式之模板方法

一.简介系统开发过程中可能知道了算法所需的执行步骤,但具体实现细节需要实现类中才能确定。可采用模板方法模式解决这类问题。模板方法(Template Method)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤模板方法模式结构:1.抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。基本方法:是整个算法中

2020-07-14 09:35:28 225

原创 设计模式之代理

一.简介二.实现三.总结

2020-07-13 17:58:45 128

原创 设计模式之享元

一.简介程序设计过程中有时会创建大量相同或相似对象实例的问题,把它们相同的部分提取出来共享,则能节省大量的系统资源。享元(Flyweight)模式:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元模式状态1.内部状态:不会随着环境的改变而改变的可共享部分;2.外部状态:随环境改变而改变的不可以共享的部分。享元模式的实现要区分应用中的这两种状态,并将外部状态外部化。享元模式的结构1.抽象享元

2020-07-13 15:21:59 137

原创 设计模式之外观

一.简介外观(Facade)模式:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问。外观(Facade)模式主要定义了一个高层接口,包含了对各个子系统的引用,通过它访问各个子系统的功能。与计算机领域一位大神说的:“Any problem in computer science can be solved by another layer of indirection”(计算机科学领域的任何问题都可以通过增加一个中间层来解决”) 如出一辙。模式结构:1.外观(Facade)

2020-07-12 23:04:20 195

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除