自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lzc的博客

加油!

  • 博客(101)
  • 资源 (2)
  • 收藏
  • 关注

转载 Nginx的异步非阻塞

1. 同步与异步同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。同步:当一个同步调用发出去后,调用者要一直等待调用结果的通知后,才能进行后续的执行。异步:当一个异步调用发出去后,调用者不能立即得到调用结果的返回。异步调用,要想获得结果,一般有两种方式:主动轮询异步调用的结果;被调用方通过callback来通知调用方调用结果。阻塞和非阻塞阻塞与非阻塞的重点在于进/线...

2019-09-16 14:10:58 1357

转载 Resilience4j 基本用法详解

和传统架构相比,微服务有一个非常严重的问题常常被人诟病。什么问题呢?就是故障率。在传统架构中,我们可以将故障率降到很低,但是在微服务中,这一点却不太容易做到,因为单个微服务的故障率即使降低了,但假如有1000台机器,那么整个系统正常运行的概率就是 (1-故障率)^1000 ,经过这样一个幂运算之后,你会发现系统正常运行的概率低得吓人,而且如果处理不好的话还会发生服务雪崩(故障蔓延),什么是服务雪...

2019-09-15 12:39:39 5272

转载 Feign 中的继承、日志与数据压缩

上篇文章和大家分享了声明式微服务调用组件 Feign 的基本用法,相信大家已经了解到使用 Feign 的好处了,使用 Feign 有效地解决了使用 RestTemplate 时的代码模板化的问题,使服务之间的调用更加简单方便,同时也不易出错。不过,细心的读者可能也发现,上篇文章中我们学的 Feign 还是有一些明显的缺陷,例如,当我们在 provider 中定义接口时,可能是下面这样:@Rest...

2019-09-15 11:18:08 681

转载 声明式服务调用 Feign

在前面几篇文章中,主要和大家介绍了服务的注册与消费。在介绍过程中,我们从最最原始的手动利用 DiscoveryClient 发现服务开始,手动实现负载均衡,再到最后的自动化配置。相信经过前面几篇文章的学习,大家对微服务之间的调用应该有了一个基本的认知。但是我们前面的所有服务调用都是手动写 RestTemplate 来实现的,大家可能已经发现这样写有点麻烦,每次都要写请求 Url 、配置响应数据类型...

2019-09-15 11:10:42 573 1

转载 服务请求负载均衡

通过前面文章的学习,大家已经了解到如何搭建服务注册中心,如何将一个 provider 注册到服务注册中心, consumer 又如何从服务注册中心获取到 provider 的地址,在 consumer 获取 provider 地址时,我们一直采用了 DiscoveryClient 来手动获取,这样出现了大量冗余代码,而且负载均衡功能也没能实现。因此,本文我将和大家分享在微服务中如何实现负载均衡,以...

2019-09-15 11:04:06 1607

转载 RestTemplate 用法详解

上篇文章带大家学习了一下基本的微服务环境搭建,由 provider 提供服务, consumer 通过 DiscoveryClient 先去 eureka 上获取 provider 的服务的地址,获取到地址之后再去调用相关的服务。在服务的调用过程中,使用到了一个工具,叫做 RestTemplate,RestTemplate 是由 Spring 提供的一个 HTTP 请求工具。在上文的案例中,开发者...

2019-09-15 10:49:20 247835 38

转载 服务注册与消费

前面几篇文章向读者介绍了 Eureka 和 Consul 的基本用法,并对原理做了细致地分析。对于服务注册与调用,在前面的文章中也有涉及,但是没有细说,本文我们就来看看微服务中的服务注册与消费。系统架构其实,在微服务出现之前,跨服务调用的需求就有了,只不过以前大多数人可能会采用直连的方式去调用另一个服务。例如有 Server A 和 Serve...

2019-09-13 11:02:00 968 1

转载 Eureka 缓存机制详细配置

Eureka Server 内部有二层缓存机制,那这些机制是如何工作的,以及 Eureka Server 是如何存储服务的注册信息,本节会给大家揭晓。Eureka 在使用过程中有一些非常重要的配置项,本节也会整理出来,方便大家以后在生产环境根据项目场景来调整。Eureka Server 数据存储我们知道 Eureka Server 在运行期间就是一个普通的 Java 项目,并没有使用数据库...

2019-09-12 14:53:53 1121

转载 Eureka 工作原理

Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。Eureka 核心概念回到服务注册调用示意图,服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka Server 和 Eureka Client。Eureka Server:注册中心服务端注册中心服务端主...

2019-09-12 14:37:57 1084 1

原创 spring、spring-boot和-spring-cloud的关系

想要了解 Spring Cloud 和 Spring Boot 是如何配合使用的,就必须先要了解 Spring Boot 的 Starter 机制。Spring Boot StarterSpring Boot Starter 是 Spirng Boot 约定优于配置理念的最佳实现。Spring Boot Starter 有两个核心组件:自动配置代码和提供自动配置模块及其它有用的依赖。也就意味着...

2019-09-12 10:43:13 1418

转载 【RabbitMQ】一文带你搞定RabbitMQ死信队列

一、说明RabbitMQ是流行的开源消息队列系统,使用erlang语言开发,由于其社区活跃度高,维护更新较快,性能稳定,深得很多企业的欢心(当然,也包括我现在所在公司【手动滑稽】)。为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息消费发生异常时,将消息投入死信队列中。但由于对死信队列的概念及配置不熟悉,导致曾一度陷入百度的汪洋大海,无法自拔,很多文章都看起来可...

2019-09-05 14:54:57 833

转载 RabbitMQ入门

RabbitMQ 简介RabbitMQ是一个在AMQP(Advanced Message Queuing Protocol )基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。AMQPAMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标...

2019-09-05 10:36:05 146

转载 Spring BeanFactory实例化Bean的详细过程

Spring中Bean的实例化是Bean生命周期的一个重要环节,通常Bean初始化后将不再改变。那么Spring实例Bean的过程到底是怎么样的呢?!要想获取到一个bean对象,得先通过BeanFactory的getBean()方法获取,期间会经过一系列步骤来实例化这个bean对象:第一步:调用Bean的默认构造方法(当然也可以是指定的其它构造方法),生成bean实例:bean1。第二步:...

2019-09-04 15:53:46 3231 1

转载 volatile 与处理器的嗅探技术

在《java并发编程的艺术》这本书中,关于volatile的内存原理本质的描述如下:有volatile变量修饰共享变量在编译器编译后,后多出一个“lock” 来(lock前缀指令相当于一个内存屏障,会强制将对缓存的修改操作写入主内存),该字符在多核处理器下回引发两个事件:1.将当前处理器缓存行的数据写回系统内存;2.这个写会内存的操作会使得其他处理器里缓存的该内存地址的数据无效。在该书籍第...

2019-09-04 15:36:58 2263 2

转载 CPU缓存一致性协议MESI

CPU缓存一致性协议MESICPU高速缓存(Cache Memory)CPU为何要有高速缓存CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU。这就造成了高性能能的内存和硬盘价格及其昂贵。然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。在CP...

2019-09-04 15:34:58 157

转载 HTTP和HTTPS

前言近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。读完本文,希望你能明白:HTTP通信存在什么问题HTTPS如何改进HTTP存在那些问题HTTPS工作原理是什么想阅读更...

2019-09-04 10:03:19 2340 2

原创 HTTP各版本区别

HTTP协议全称HyperText Transfer Protocol,中文名超文本传输协议。是互联网上应用最为广泛的一种网络协议。HTTP是基于TCP/IP协议的应用层协议,不涉及数据包的传输,主要是规定了客户端和服务器之间的通信格式。默认使用80端口。HTTP 0.9版本HTTP 0.9是最早发现的一个版本。它只允许客户端发送一种GET请求,并且不支持请求头,因为没有协议头的原因,HTTP...

2019-09-03 15:46:02 1443

转载 双重检查单例为什么要加volatile

双重检测锁实例:public class Single { private Factory factory; public Factory getFactory(){ if (factory == null){//① synchronized (Single.class){//② if (factory ...

2019-08-26 22:06:37 2570

转载 以操作系统的角度述说线程与进程

什么是线程什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识。我不能确保能把它讲的话,也不能确保讲的内容全部都正确。即使这样,我也希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱。 任务调度线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。...

2019-08-22 10:22:48 158

原创 Java 如何有效地避免OOM:善于利用软引用和弱引用

Java 如何有效地避免OOM:善于利用软引用和弱引用  想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。下面是本文的目录大纲:  一.了解 强引用、软引用、弱引用、虚引用的概念  二.进一步理解软引用和弱引用  三.如何利用软引用和弱引用解决OO...

2019-08-22 09:04:12 176

转载 Java中的BIO、NIO、AIO(NIO2)

在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 序号问题1什么是同步?2什么是异步?3什么是阻塞?4什么是非阻塞?5什么是同步阻塞?6什么是...

2019-08-16 19:19:01 165

转载 详解 MySql InnoDB 中意向锁的作用

前言InnoDB 支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存,而意向锁就是其中的一种表锁。意向锁(Intention Locks)需要强调一下,意向锁是一种不与行级锁冲突表级锁,这一点非常重要。意向锁分为两种:意向共享锁(intention shared lock, IS):事务有意向对表中的某些行加共享锁(S锁)-- 事务要获取...

2019-08-14 15:15:13 2266 7

转载 MySQL中的锁

MySQL/InnoDB的加锁,一直是一个面试中常问的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等。于是今天就对这几个概念进行学习,屡屡思路,记录一下。注:MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。存储引擎查看MyS...

2019-08-08 11:10:11 133

原创 远程方法调用(RMI)与远程过程调用(RPC)

一、RMI 远程方法调用RMI(Remote Method Invocation)远程方法调用。能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法。使用代表:EJB RMI远方法程调用步骤: 1、客户调用客户端辅助对象stub上的方法2、客户端辅助对象stub打包调用信息(变量、方法名),通过网络发送给服务端辅助对象skeleton3、服...

2019-08-07 10:50:29 5621

转载 常用的分布式事务解决方案

众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式...

2019-08-06 16:42:19 143

原创 高性能MySQL(第三版)第一章: MySQL架构与历史

《高性能MySql》阅读笔记(1)1 MySql架构1.1 MySql逻辑架构1.2 读写锁1.3 锁粒度1.4 死锁1.5 事务1.6 事务的隔离级别1.7 多版本并发控制(MVCC)2 存储引擎2.1特点2.2 MyISAM2.2.1 特性2.2.2 MyISAM压缩2.2.3 MyISAM适用场景2.3 InnoDB2.3.1 特性2.3.2 适用场景2.4 MyISAM与InnoDB比较2...

2019-08-06 10:24:30 386 1

转载 消息队列常见问题和解决方案

一、为什么使用消息队列?  消息队列使用的场景和中间件有很多,但解决的核心问题主要是:异步、解耦、消峰填谷。二、消息队列的优缺点  异步、解耦、消峰填谷这是消息队列最大的优点,除了这些消息队列还可以会解决一些我们特殊业务场景的问题。但是缺点主要在于系统的可用性、复杂性、一致性问题,引入消息队列后,需要考虑MQ的可用性,万一MQ崩溃了岂不是要爆炸?而且复杂性明显提高了,需要考虑一些消息队列的...

2019-08-02 16:16:55 500

转载 RabbitMQ消息确认机制+延时队列

RabbitMQ之TTL(JAVA设置TTL) 大白话讲解RabbitMQ消息可靠传输保障 消息确认机制 死信队列 应用RabbitMQ可靠性传输机制实现 Redis 缓存的实时更新 深入分析RabbitMQ消息异常处理,及延迟队列在缓存架构中的应用 RabbitMQ消息确认机制 生产者消息确认机制 当消息发...

2019-08-02 15:32:55 1822

转载 多线程如何保证线程安全

一、线程安全等级       之前的博客中已有所提及“线程安全”问题,一般我们常说某某类是线程安全的,某某是非线程安全的。其实线程安全并不是一个“非黑即白”单项选择题。按照“线程安全”的安全程度由强到弱来排序,我们可以将java语言中各种操作共享的数据分为以下5类:不可...

2019-08-01 15:26:30 796

转载 Thread Local的原理与适用场景

Thread Local的原理与适用场景ThreadLocal解决什么问题ThreadLocal用法ThreadLocal原理ThreadLocal维护线程与实例的映射Thread维护ThreadLocal与实例的映射ThreadLocal 在 JDK 8 中的实现ThreadLocalMap与内存泄漏读取实例设置初始值设置实例防止内存泄漏适用场景案例总结ThreadLocal解决什么问题由于...

2019-07-31 10:52:10 150

转载 强引用、弱引用、软引用、虚引用

1、强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Object o=new Object(); // 强引用当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下方式来弱化引用,如下:o=nu...

2019-07-30 14:29:38 144

原创 TCP如何保证可靠传输

TCP协议保证数据传输可靠性的方式主要有:校验和确认应答+序列号超时重传流量控制拥塞控制校验和发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。确认应答+序列号TCP给发送的每一个包(报文段)进行编号,接收方对数据包进行排序,把有序数据传送给应用层。超时重传当TCP发出一个段后,它...

2019-07-30 12:31:53 3283 1

转载 HTTP长连接和短连接

1. HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。2. 如何理解HTTP协议是无状态的HTTP协...

2019-07-30 00:07:34 164

转载 基于Redis的分布式令牌桶限流器

本文根据GuavaRateLimiter令牌桶限流器修改的基于Redis的分布式限流器。令牌桶采用横定速率生成令牌存放入桶中,通过计算获取指定令牌数所需要的等待时间来进行限流。注:其中对于令牌桶的更新需要依赖分布式同步锁:DistributedLock本文采用基于Redis的RedLock来实现,请参见本人另外的一篇文章:MySQL和Redis实现分布式锁1. Guava RateLi...

2019-07-29 15:19:59 1512

转载 进程和线程调度算法

调度算法是指:根据系统的资源分配策略所规定的资源分配算法,如任务A在执行完后,选择哪个任务来执行,使得某个因素(如进程总执行时间,或者磁盘寻道时间等)最小。对于不同的系统目标...

2019-07-29 13:12:54 11073

转载 redis阻塞处理分析

1.内因:A.api或数据结构使用不合理: 如:对一个包含上万元素的hash结构执行hgetall操作,数据量大且命令复杂度O(n),必然阻塞B.慢查询:和很多关系型数据库(例如:MySQL)一样, Redis 也提供了慢查询日志记录,Redis 会把命令执行时间超过 slowlog-log-s...

2019-07-29 12:53:29 340

转载 HTTP请求行、请求头、请求体详解

HTTP请求报文解剖HTTP请求报文由3部分组成(请求行+请求头+请求体):下面是一个实际的请求报文:①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,Spring 3.0提供了一个HiddenHttpMethodFilter,允许你通过“_method”的表单参...

2019-07-29 12:39:33 309

转载 传输层TCP和UDP的区别分析与应用场景

基本概念:面向报文面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。面向字节流面向字节流的话,虽然应用程序...

2019-07-29 11:03:41 250

转载 Redis的过期策略和内存淘汰策略

Redis的过期策略我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。过期策略通常有以下三种:定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从...

2019-07-29 10:36:28 113

转载 Java 中的阻塞队列

1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:方法\...

2019-07-27 22:39:36 128

springboot+springsecurity+oauth2.zip

springboot+springsecurity+oauth2,包含数据库sql文件

2019-07-21

高性能mysql(第三版).pdf

高性能mysql(第三版)完整版,一共16章,学习重点在数据类型优化,索引,查询性能优化,视图等。此次上传的资源为完整版

2019-05-09

空空如也

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

TA关注的人

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