2022

MQ系列1:消息中间件执行原理

1 关于消息中间件 1.1 什么是消息中间件? 消息中间件是指在分布式系统中完成消息的发送和接收的基础软件。 消息中间件也可以称消息队列(Message Queue / MQ),用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。 简而言之,互联网场景中经常使用消息中间件进行消息路由、订阅发布、异步处理等操作,来缓解系统的压力。 1.2 它解决了我们哪些痛点? 1、解耦: 比如说系统A会交给系统B去处理一些事情,但是A不想直接跟B有关联,避免耦合太强,就可以通过在A,B中间加入消息队列,A将要…

Redis系列3:高可用之主从架构

1 主从复制介绍 上一篇《Redis系列2:数据持久化提高可用性》中,我们介绍了Redis中的数据持久化技术,包括 RDB快照 和 AOF日志 。有了这两个利器,我们再也不用担心机器宕机,数据丢失了。 但是持久化技术只是解决了Redis服务故障之后,快速数据恢复的问题。并没有从根本上提升Redis的可用性,我们需要的是保障Redis的高可用,减少甚至避免Redis服务发生宕机的可能。 目前实现Redis高可用的模式主要有三种: 主从模式、哨兵模式、集群模式。这些我们后面会分成三篇介绍,今天我们先来聊一下主从模式。 Redis 提供的主从模式,是通过复制的方式,将主服务器上的Redis的数据同步…

Redis系列2:数据持久化提高可用性

1 介绍 从上一篇的 《深刻理解高性能Redis的本质》 中可以知道, 我们经常在数据库层上加一层缓存(如Redis),来保证数据的访问效率。这样性能确实也有了大幅度的提升,但是本身Redis也是一层服务,也存在宕机、故障的可能性。一旦服务挂起,可能生产的后果包括如下几方面:1、Redis的数据是存在内存中的,所以一旦挂起,内存中的数据会全部丢失。2、I/O从内存层级迁移到磁盘层级,性能极速下降。3、原本访问缓存的请求会透过缓存层直接投向数据库,给数据库带来极大的压力,甚至导致雪崩。 所以,缓存层崩溃产生的后果是灾难的。为了避免宕机和宕机后的数据丢失, 为了保证数据的快速恢复,Redis提供了…

Redis系列1:深刻理解高性能Redis的本质

1 背景 分布式系统绕不开的核心之一的就是数据缓存,有了缓存的支撑,系统的整体吞吐量会有很大的提升。通过使用缓存,我们把频繁查询的数据由磁盘调度到缓存中,保证数据的高效率读写。 当然,除了在内存内运行还远远不够,我们今天就以具有代表性的缓存中间件Redis为例子,分析下,它是如何达到飞起的效率。 2 Redis高效性能分析 Redis之所以能够提供超高的执行效率,主要从以下几个维度来实现的: 存储模式:基于内存实现,而非磁盘 数据结构:基于不同业务场景的高效数据结构 动态字符串(REDIS_STRING):整数(REDIS_ENCODING_INT)、字符串(REDIS_ENCODING_RA…

Java核心知识体系2:注解机制详解

1 Java注解基础 注解是JDK1.5版本开始引入的一个特性,用于对程序代码的说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有以下四方面: 生成javadoc文档,通过在代码里面标识元数据生成javadoc文档。 编译期的检查,通过标识的元数据让编译器在编译期间对代码进行验证。 编译时动态处理,编译时通过代码中标识的元数据动态处理,比如动态生成代码。 运行时动态处理,运行时通过代码中标识的元数据动态处理,比如使用反射技术注入实例。 注解的常见分类有三种: Java自带的标准注解,包括 @Override、@Deprecated和@SuppressWarnings,…

架构与思维:互联网高性能Web架构

1 什么是高性能Web架构 在互联网业务中,我们经常会面临流量巨大的复杂的分布式场景。这就要求我们在设计系统的时候保证系统具有承载高并发(High Concurrency)的能力,同时能够保证系统的高可用性(High Availability)。 所以,具备高性能Web架构通常是指,通过稳健的系统设计能力,来保证系统能够同时处理复杂的业务场景,并保证性能、稳定性、可用性的架构体系。。 高性能Web常用的一些衡量指标有响应时间(Response Time),吞吐量(Throughput),每秒请求数QPS(Query Per Second),并发用户数等。 响应时间(RT) 响应...

MQ系列3:RocketMQ 架构分析

MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 1 背景 我们前面两篇对主流消息队列的基本构成和技术选型做了详细的分析。从本篇开始,我们会专注当下主流MQ之一的RocketMQ。 从他的如下的几个方面去讨论: 基础能力(如 组织构成、消息发送、消息存储(持久化)、消息通信、消息消费) 功能性方面(如消息堆积、消息回溯、消息追踪、消息过滤), 高可用性方面(如 消息顺序性保障、消息幂等性保障、消息安全性保障、消息事务性保障), 性能方面(如时效性,单机吞吐率) 参考 MQ系列2:消息中间件的技术选型 1.1 RocketMQ是的基本组件构成 RocketMQ主要有...

Java核心知识体系4:AOP原理和切面应用

1 概述 我们所说的Aop(即面向切面编程),即面向接口,也面向方法,在基于IOC的基础上实现。 Aop最大的特点是对指定的方法进行拦截并增强,这种增强的方式不需要业务代码进行调整,无需侵入到业务代码中,使业务与非业务处理逻辑分离。 以Spring举例,通过事务的注解配置,Spring会自动在业务方法中开启、提交业务,并且在业务处理失败时,执行相应的回滚策略。 aop的实现主要包括了两个部分: 匹配符合条件的方法(Pointcut) 对匹配的方法增强(JDK代理、cglib代理) spring针对xml配置和配置自动代理的Advisor有很大的处理差别,在IOC中主要是基于XML...