- 博客(99)
- 收藏
- 关注
原创 亿级数据库迁移、分库分表、实践
在测试阶段,并发上不去,线程配置如下:核心线程池配置了16个,最大线程配置了750,然后配置了5000的缓冲队列,主要是当提交任务大于核心线程数时,后续任务会首先提交到缓冲队列。分布式和并行化的方式都是自己手写代码实现,其实可以用ScheduleX和MapReduce实现,框架已经实现任务分发,并行处理,充实,reduce等功能。增加机器节点,任务进行水平扩展,把大任务拆分为独立的子任务,所有子任务执行结果等价于各个子任务结果,手动根据不同租户或商家平摊到不同机器节点上执行。3、老系统升级过度新系统。
2024-03-24 22:35:51 154
原创 Rocket MQ 从入门到实践
生产者将消息推送到队列之后,如果有消费者去消费这个主题上的消息,在队列上记录下不同消费者互不干扰不同的消费位置,它就可享有同一份消息。生产者将消息发送给Exchange交换机,交换机路由到不同的队列,不同的消费者针对不同的队列进行消费,实现简单、但是消息存储冗余。是否一致:如果消息的量级规模存在巨大差异,或者说消息的链路重要程度存在差异,则应该使用不同的主题进行隔离拆分。是否一致:不同类型的消息,如顺序消息和普通消息需要使用不同的主题进行拆分,无法通过tag标签进行分类。即不丢消息,但也有少量重复。
2024-03-17 21:02:09 910
原创 ApplicationContextAware 接口妙用
但是SpringBoot的强大让我们无需再配置xml文件,也因此我们无法通过上述方式拿到ApplicationContext对象,所以当在项目需要用到spring中的bean对象时,一般做法就是实现ApplicationContextAware接口,通过这个接口就可以获取到ApplicationContext对象,进入从ApplicationContext中获取所需要bean对象。ApplicationContextAware接口的基本介绍。
2023-12-06 15:11:16 71
原创 SpringCloud之Hystrix、Resilience4j、GateWay、Sentinel、Config、Bus、Stream
SpringCloud之Hystrix、Resilience4j、GateWay、Sentinel、Config、Bus、Stream
2022-08-24 18:11:05 617
原创 Redis核心技术与实战
Redis 三大主线高性能主线,包括线程模型、数据结构、持久化、网络框架;高可靠主线,包括主从复制、哨兵机制;高可扩展主线,包括数据分片、负载均衡。Redis底层数据结构动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组为什么哈希表操作变慢了?当你往 Redis 中写入大量数据后,就可能发现操作有时候会突然变慢了。这其实是因为你忽略了一个潜在的风险点,那就是哈希表的冲突问题和 rehash 可能带来的操作阻塞。Redis 解决哈希冲突的方式,就是链式哈希。链式哈希也很容易理解,就是指同
2022-04-18 22:26:52 2734
原创 数据结构与算法之链表
如何分析、统计算法的执行效率和资源消耗?多项式时间复杂度。O(1)首先你必须明确一个概念,O(1) 只是常量级时间复杂度的一种表示方法,并不是指只执行了一行代码。比如这段代码,即便有 3 行,它的时间复杂度也是 O(1),而不是 O(3)。 int i = 8; int j = 6; int sum = i + j;我稍微总结一下,只要代码的执行时间不随 n 的增大而增长,这样代码的时间复杂度我们都记作 O(1)。或者说,一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代
2022-02-11 21:14:29 403
原创 如何对CPU过载进行排查
如何对CPU过载进行排查?1、怎么找出有问题的进程2、掌握简单的GC分析技巧3、掌握多线程分析技巧4、多线程的使用注意的问题案例现象CUP使用率持续在80%左右持续在3~8之间1、业务量,高峰期6000/分钟发送量,平均2000/分钟发送量2、服务器状况,两个节点接收数据,单节点消费数据3、每个消息发送处理时间平均为10秒4、单线程模式下节点最大消费能力每秒100条分析1、数据量并不大2、服务器物力资源够用3、单节点有足够的处理能力分析排查-CPU的负载什么事load数?
2022-01-28 11:32:51 1614
原创 Java 虚拟机
01、Java 代码是怎么运行的?Java 代码有很多种不同的运行方式。比如说可以在开发工具中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至可以在网页中运行。当然,这些执行方式都离不开 JRE,也就是 Java 运行时环境。实际上,JRE 仅包含运行 Java 程序的必需组件,包括 Java 虚拟机以及 Java 核心类库等。我们 Java 程序员经常接触到的 JDK(Java 开发工具包)同样包含了 JRE,并且还附带了一系列开发、诊断工具。Java 虚拟机可以由硬件实现[1],但
2022-01-27 11:05:06 1060
原创 Flink 学习(一)
了解数据处理过程的基本模式?数据输入(Source)数据处理(Transformation)数据输出(Sink)大数据处理计算模式流计算与批计算对比Flink核心特性1、统一数据处理组件栈,处理不同类型的数据需求(Batch、Stream、Machine Learning Graph)2、支持事件时间(Event Time)、接入时间(Ingestion Time) 、处理时间(Processing Time)等概念3、基于轻量级分布式快照实现的容错4、支持有状态计算(Suppor
2021-12-31 19:37:37 1285
原创 消息队列(一)
为什么需要消息队列?哪些问题适合使用消息队列来解决?异步处理流量控制服务解耦以上就是消息队列最常被使用的三种场景:异步处理、流量控制和服务解耦。当然,消息队列的适用范围不仅仅局限于这些场景,还有包括:作为发布 / 订阅系统实现一个微服务级系统间的观察者模式;连接流计算任务和数据;用于将消息广播给大量接收者。该如何选择消息队列?RabbitMQ我们说一下老牌儿消息队列 RabbitMQ,俗称兔子 MQ。RabbitMQ 是使用一种比较小众的编程语言:Erlang 语言编写的,它最早是为电
2021-12-31 17:34:12 317
原创 微服务(三)
Dubbo框架里的微服务组件?微服务的架构主要包括服务描述、服务发现、服务调用、服务监控、服务追踪以及服务治理这几个基本组件。服务发布与引用三种常用方式:RESTful API、XML 配置以及 IDL 文件,其中 Dubbo 框架主要是使用 XML 配置方式,接下来我通过具体实例,来给你讲讲 Dubbo 框架服务发布与引用是如何实现的。首先来看服务发布的过程,下面这段代码是服务提供者的 XML 配置。<?xml version="1.0" encoding="UTF-8"?>&l
2021-12-31 16:02:43 1227
原创 微服务(二)
注册中心原理在微服务架构下,主要有三种角色:服务提供者(RPC Server)、服务消费者(RPC Client)和服务注册中心(Registry),三者的交互关系请看下面这张图,我来简单解释一下。RPC Server 提供服务,在启动时,根据服务发布文件 server.xml 中的配置的信息,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。RPC Client 调用服务,在启动时,根据服务引用文件 client.xml 中配置的信息,向 Registry 订阅服
2021-12-31 15:01:01 358
原创 Executor与线程池
定义线程是一个重量级的对象,应该避免频繁创建和销毁。class XXXPool{ // 获取池化资源 XXX acquire() { } // 释放池化资源 void release(XXX x){ }} 线程池是一种生产者 - 消费者模式//采用一般意义上池化资源的设计方法class ThreadPool{ // 获取空闲线程 Thread acquire() { } // 释放线程 void release(Thread t){ }}
2021-12-30 23:30:26 1052
原创 Java线程生命周期
通用的线程生命周期通用的线程生命周期基本上可以用下图这个“五态模型”来描述。这五态分别是:初始状态、可运行状态、运行状态、休眠状态和终止状态。初始状态,指的是线程已经被创建,但是还不允许分配 CPU 执行。这个状态属于编程语言特有的,不过这里所谓的被创建,仅仅是在编程语言层面被创建,而在操作系统层面,真正的线程还没有创建。可运行状态,指的是线程可以分配 CPU 执行。在这种状态下,真正的操作系统线程已经被成功创建了,所以可以分配 CPU 执行。当有空闲的 CPU 时,操作系统会将其分配给一个处于可运
2021-11-19 23:01:07 87
原创 并发编程之解决原子性问题
那原子性问题到底该如何解决呢?原子性问题的源头是线程切换,如果能够禁用线程切换那不就能解决这个问题了吗?而操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换。在早期单核 CPU 时代,这个方案的确是可行的,而且也有很多应用案例,但是并不适合多核场景。这里我们以 32 位 CPU 上执行 long 型变量的写操作为例来说明这个问题,long 型变量是 64 位,在 32 位 CPU 上执行写操作会被拆分成两次写操作(写高 32 位和写低 32 位,如下图所示)。在单
2021-11-19 22:45:00 157
原创 并发编程之可见性、原子性、有序性
并发编程可以总结为三个核心问题:分工、同步、互斥所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共享资源。Java SDK 并发包很大部分内容都是按照这三个维度组织的,例如 Fork/Join 框架就是一种分工模式,CountDownLatch 就是一种典型的同步方式,而可重入锁则是一种互斥手段。分工所谓分工,类似于现实中一个组织完成一个项目,项目经理要拆分任务,安排合适的成员去完成。在并发编程领域,你就是项目经理,线程就是项目
2021-11-17 23:34:52 610 1
原创 微服务(一)
单体应用各大互联网公司的应用技术栈大致可分为 LAMP(Linux + Apache + MySQL + PHP)和 MVC(Spring + iBatis/Hibernate + Tomcat)两大流派。无论是 LAMP 还是 MVC,都是为单体应用架构设计的,其优点是学习成本低,开发上手快,测试、部署、运维也比较方便,甚至一个人就可以完成一个网站的开发与部署。存在问题1、部署效率低下当单体应用的代码越来越多,依赖的资源越来越多时,应用编译打包、部署测试一次,甚至需要 10 分钟以上。这也经常被新
2021-11-09 17:27:08 445
原创 Dubbo的调用过程
注册服务:resources/dubbo/dubbo_registry.xml#id:标识需要在zookeeper上注册的服务的ID,方便下面暴露服务时引用。#protocol:协议名称#address:注册中心地址#register:是否向此注册中心注册服务,如果设为false,将只订阅,不注册。#check:注册中心不存在时,是否报错。#group:Dubbo提供服务分组,用于当一个接口有多种实现时,可使用group分组。即暴露的服务接口通过group来区分不同的实现类。#inte
2021-09-08 20:00:08 147
原创 Dubbo服务调用过程分析
简单的想想大致流程在分析Dubbo 的服务调用过程前我们先来思考一下如果让我们自己实现的话一次调用过程需要经历哪些步骤?首先我们已经知晓了远程服务的地址,然后我们要做的就是把我们要调用的方法具体信息告知远程服务,让远程服务解析这些信息。然后根据这些信息找到对应的实现类,然后进行调用,调用完了之后再原路返回,然后客户端解析响应再返回即可。调用具体的信息那客户端告知服务端的具体信息应该包含哪些呢?首先客户端肯定要告知要调用是服务端的哪个接口,当然还需要方法名、方法的参数类型、方法的参数值,还有可能
2021-08-24 18:54:57 243
原创 Spring Security
什么是Spring SecuritySpring Security 是基于Spring AOP和Servlet过滤器的安全框架,它提供全面的安全解决方案,同时在Web请求级别和方法调用级别处理身份确认和授权Spring Security 核心功能1、认证(你是谁,用户/设备/系统)2、验证(你能干什么,也叫权限控制/授权,允许执行的操作)3、攻击防护(防止伪造身份)Spring Security原理技术Filter、Servlet、Spring DI、Spring AOP常用的安全框架目前
2021-01-21 20:46:56 99
原创 Nginx(负载均衡、反向代理)
安装配置NginxLinux下Nginx的安装1、下载nginx安装包2、进入对应目录输入命令./configure 回车make 回车makeinstall 回车 安装完毕3、启动
2021-01-20 15:45:32 74
原创 HTTP协议
什么是URI、什么是HTML、什么是HTTP?1、URI:即统一资源标识符,作为互联网上资源的唯一身份;2、HTML(HyperText Transfer Protocol):即超文本标记语言,描述超文本文档;3、HTTP:即超文本传输协议,用来传输超文本。HTTP各版本之间的差异(0.9、1.0、1.1、2.0、3.0)HTTP/1.0 版本在 1996 年正式发布。它在多方面增强了 0.9 版,形式上已经和我们现在的 HTTP 差别不大了,例如:1、增加了 HEAD、POST 等新方法;2
2021-01-18 15:15:54 1711
原创 Mysql实践篇
1、普通索引和唯一索引,应该怎么选择?假设,执行查询的语句是 select id from T where k=5。这个查询语句在索引树上查找的过程,先是通过 B+ 树从树根开始,按层搜索到叶子节点,也就是图中右下角的这个数据页,然后可以认为数据页内部通过二分法来定位记录。对于普通索引来说,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。InnoDB
2021-01-15 15:24:02 105
原创 锁和表锁及MVCC
MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类全局锁命令是 Flush tables with read lock (FTWRL)全局锁的典型使用场景是,做全库逻辑备份。也就是把整库每个表都 select 出来存成文本。表级锁表锁的语法是 lock tables … read/write在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。死锁和死锁检测一种策略是,直接进入等待,直到超时。这个超时时间可以
2021-01-15 11:38:48 91
原创 索引
隔离性与隔离级别提到事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中 I,也就是“隔离性”。当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。在谈隔离级别之前,你首先要知道,你隔离得越严实,效率就会越低。因此很多时候,我们
2021-01-15 11:10:39 61
原创 一条SQL 查询、跟更新语句是如何执行的
Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。查询语句连接器第一步,你会先连接到这个数据库上,这时候接待你的就.
2021-01-14 20:21:50 156
原创 分布式理论之问题
一、访问一个网站的全过程DNS先尝试从host文件读取域名对应的IP地址,如果找到,则完毕;如果为找找到,则使用DNS进行查找TCP三次握手建立连接负载均衡服务器Nginx?应用服务器Tomcat?浏览器渲染缓存?二、大型网站架构演进1、单机2、单机负载告警,数据库与应用分离3、应用服务器负载告警,让应用服务器走向集群(1)引入负载均衡设备(2)分布式SessionSession Sticky 回话粘滞这个方案本身非常简单,对于web服务器来说,该方案和单机情况是一
2020-07-16 03:39:51 190
原创 Java实现链表的创建、删除、修改、查询以及用链表实现一个Stack、Quque
一、什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(lo
2020-06-22 05:07:19 154
原创 JWT与加密算法(RSA)实现Token以及Zuul实现鉴权
JWT1、简介JWT,全称json Web Token,是JSON风格轻量级的授权和身份认证规范可以实现无状态、分布式的Web应用授权;官网:https://jwt.io2、JWT数据格式:JWT包含三部分:Header :头部,通常头部有两部分信息Payload :载荷,就是有效数据,一般包含用户身份信息、注册声明Signature:签名是整个数据的认证信息。一般根据前两步的数据,再加上服务的秘钥(secret)3、JWT交互流程(1)用户登录(一般POST方式保证安全)(2)服务认
2020-06-19 22:05:32 894
原创 集合相关数据结构、栈、队列、数组、链表、红黑树
一、栈栈 :stack又称堆栈,它是运算受限的线性表,其限制是仅仅允许在栈的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作先进后出:如:子弹压进弹夹 栈的入口、出口都是在栈的顶端位置二、队列队列:queue 简称队,它同堆栈一样,是一种受限制的线性表,其限制仅允许在表的一端进行插入,而在另一端进行删除先进先出、对垒的入口出口各自占一侧三、数组数组 :Array 是有序的元素序列,数组是在内存中开辟的一段连续的空间,并在此空间存放元素。就像一排出租屋,有以100个房间
2020-06-15 07:33:12 120
原创 RibbitMQ
一、消息队列1、什么是消息队列,即MQ,Message QueueMQ全称为MQ,Message Queue消息队列(MQ)是一种应用程序得通信方法,应用程序通过读写出入队列得消息来通信,而无需要专用得连接来链接他们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常用于诸如远程过程调用技术。排队指的是应用程序通过队列来存储通信,队列得使用除去了接受和发送应用程序同时执行的要求消息队列是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者的从
2020-06-15 05:01:27 212 1
原创 Collection、List、Set、Map集合及泛型
一、Collection集合集合 : 集合是java中提供的一种容器,可以用来存储多个数据。数组和集合都是容器,它们的区别(1)数组长度是固定的,集合长度是可变的(2)数组中存储的都是同一类型元素,可以存储基本数据类型值。集合存储的都是对象,而且对象的类型可以不一致,在开发中一般当对象多的时候,使用集合进行存储集合框架集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.MapCollection:单列集合的根接口,用于存储一系列
2020-06-13 05:53:38 485 1
原创 Linux基础知识及相关命令
一、Linux简介1、LinuxOS体系结构----LinuxOS类似UNIX OS----内核 : 模块化管理----Shell: 用户与内核之间交互的一个接口----应用工具:编辑器、过滤器2、软件模式开源软件(Open Source):软件发布,并公布源代码闭源软件(Close Source):仅推出可执行的二进制程序免费软件(Freeware):共享软件(Shareware):商业软件(Commercial Software):由开发者出售拷贝并提供软件技术服务,用户只有使用权
2020-06-12 20:45:47 1203
原创 Mysql基本知识、语法及操作
一、数据库的概念1、数据库的英文单词:DataBase 简称 :DB2、什么是数据库?----用于存储和管理数据的仓库3、数据库的特点:—持久化存储数据的(相当于一个文件系统)—方便存储和管理数据—使用了同一方式操作数据库(SQL)待更新...
2020-06-10 02:27:57 183
原创 Redis基本知识、语法及相关操作
一、Redis初识1、Redis是什么—开源—多种数据结构—基于键值的存储服务器系统—高性能、功能丰富2、Redis的特性—速度快(10w OPS)Redis将数据存储在内存当中、C语言写的、单线程模式—持久化(断电数据不丢失)Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘上—多种数据结构BitMaps(位图)、HyperLogLog(超小内存唯一值计数)GEO(地理信息定位)—功能丰富发布订阅、Lua脚本、事务、pipeline—简单不依赖外部库、单线程
2020-06-08 23:06:34 253
原创 SpringMVC
1、MVC设计模式M: mode模型 JavaBeanV: View视图 JSPC: Controller控制器 Servlet2、SpringMVC是什么3、SpringMVC的优势和Struts2对比4、SpingMVC入门案例配置前端控制器DispatcherServlet视图解析器ViewResover开启mvc框架注解支持mvc:annotation-driven案例分析案例组件介绍5、@RequestMapping注解属性:6、
2020-06-05 02:12:34 107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人