自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring Aop源码解析与细节

终于看完了庞大的Spring core(spring ioc / spring aop),鉴于ioc更为庞大,先整理下aop的源码流程,也能简单回顾下springioc的流程首先要理解spring bean的启动大致的流程与生命周期,建议看另一篇已经详细解释 spring生命周期基础概念AOP 与 Spring AOP 与 AspectJ的区别AOP 是思想,Spring AOP 与 AspectJ是AOP的实现,Spring AOP实现的时候用了AspectJ的规范基本使用与AOP概念.

2020-08-17 12:01:21 303

转载 spring生命周期与集成apollo原理分析(动态生效配置中心)

结合spring总结的非常的棒!转载链接: Apollo配置中心动态生效实现原理Spring中的重要概念在了解Apollo配置中心实现原理之前,我们需要先熟悉一下Spring框架中的几个重要的概念:1、BeanDefinition用于描述Bean的配置信息,Bean配置一般有三种方式:(1)XML配置文件(2)@Service、@Component等注解(3)Java Config方式 对应的BeanDefinition实现类如下图,Spring容器启动时,会把所有的Bean配置信息转换为

2020-08-16 00:29:24 1445 1

原创 从kafka的请求处理模型理解Reactor模式

2020-08-12 23:52:16 738

原创 从kafka说起零拷贝机制的运用

参考文章: 图解Kafka的零拷贝技术kafka高吞吐量的原因1、磁盘顺序写: 磁盘的顺序IO速度远大于固态硬盘随机写操作2、消息压缩: 数据压缩减少网络传输3、分批发送: kafka允许批量发送消息4、分区: 多分区,并行消费5、零拷贝机制今天主要讲讲零拷贝机制与在kafka中的应用传统的文件拷贝机制传统的文件拷贝,从磁盘上再到网卡要经过四步1、操作系统从磁盘将数据读取到内核空间的页缓存2、应用程序将数据从内核空间读入用户空间缓存区3、应用程序将读到的数据写回到socket缓冲区

2020-08-12 20:51:50 304

原创 ES 运行机制 与 分页方式

Lucene相关概念Lucene采用新文档生成新倒排索引,读时两边一起。Lucene构建单个倒排索引称为segment,合并在一起称为Lucene Index,对应ES中的一个ShardLucene有专门文件记录所有segment信息,称为commit point文件...

2020-08-09 00:57:18 366

原创 秒杀系统总结与思考(四) 流量削峰

什么是流量削峰秒杀这一场景,削峰的本质是更多的延缓用户请求的发出,以便减少和过滤一些无效的请求,遵从“请求数尽量少”的原则为什么要用削峰的存在,一是可以让服务器端处理变的更加平稳,二是节省服务器资源成本。实现思路排队、答题、分层过滤排队1、利用线程池加锁等待2、先进先出、仅仅后出等常用的内存排队算法3、请求序列化文件,然后再顺序读文件恢复请求答题作用: 1、防作弊。2、延缓请求答题模块三部分1、题库生成,重要防止机器算出结果2、题库推送模块,秒杀答题前,把题目提前推送给详情和交

2020-08-06 02:48:34 298

原创 LRU算法介绍、优化、使用场景(Redis、MySQL、Memcached)

是的

2020-08-05 01:25:19 2952

转载 java 线程池核心配置与介绍

线程池是什么、为什么要用线程池 参考 美团线程池实现原理介绍参数的原始构造ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue,

2020-08-05 00:10:51 224

原创 MYSQL系列之 锁与死锁

MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类全局锁MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。风险:1.如果在主库备份,在备份期间不能更新,业务停摆2.如果在从库备份,备份期间不能执行主库同步的binlog,导致主从延迟可重复读的隔

2020-08-03 23:27:31 348

原创 MYSQL系列之 事务

事务的特性ACID: Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)事务开启方式:1、显式启动事务语句, begin 或 start transaction。配套的提交语句是 commit,回滚语句是 rollback。2、set autocommit=0,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行 commit 或 ro

2020-08-03 18:12:10 287

原创 MYSQL系列之 索引的概念

索引的常见模型:1、哈希表,以key-value存储的数据结构。同样的哈希用链表存储(类hashmap)优点: 插入很快缺点: 链表非有序查询会很慢。范围查询遍历整个数据库2、有序数组,优点:等值查询(二分)、范围查询性能非常优秀缺点:二叉搜索树维持有序需要log(N)、大量数据会访问多个数据块,访问会变慢3、 InnoDB索引模型(B+): 每一个索引在InnoDB中,对应一颗B+树索引存储结构create table T( id int primary key,

2020-08-03 14:47:39 202

原创 MYSQL系列之 redolog 和 binlog

上一篇中已经介绍过redo log的基本概念 MYSQL系列之 change buffer 和 redo logbinlogMySQL整体分为两块:Server层,主要MySQL功能层面的事情,引擎层,负责存储相关。redo log是InnoDB特有的日志,Server有自己的日志,称为binlog为什么有两份日志:MySQL自带引擎不具有crash-safe能力,binlog只是用于归档,InnoDB使用redolog实现此功能redolog 与 binlog 区别1、redo lo

2020-08-03 13:29:22 186

原创 MYSQL系列之 change buffer 和 redo log

读丁奇大佬课程笔记与思考 课程链接WAL技术(Write-Ahead Logging) 先写日志,再写磁盘:当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log(粉板)里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。刚刚update的语句还在缓存中未持久化磁盘,此时select是直接读取内存redo logInnoDB的redo log固定大小,比如可配置一组

2020-08-03 13:20:26 3080 2

原创 秒杀系统总结与思考(三) 发现热点

什么是热点:热点分为热点操作和热点数据。热点数据又分为静态热点数据和动态热点数据发现热点数据:发现静态热点数据:1、静态热点数据可通过强制卖家报名,提前把商品筛选,然后通过后台系统将热点商品进行预处理(提前进行缓存),不过增加了卖家的使用成本,也不够灵活2、通过技术手动进行提前预测,大数据分析,统计TOPN商品发现动态热点数据: 可以通过大数据预测等手动提前预测,但是实时性较差1、构建一个异步系统,可收集交易链路上各个环节的中间件产品的热点key,如Nginx、缓存、RPC服务框架等(一些中间

2020-08-03 12:53:26 278

原创 秒杀系统总结与思考(二) 数据动静分离

何为动静数据“动态数据”和“静态数据”的主要区别就是看页面中输出的数据是否和 URL、浏览者、时间、地域相关,以及是否含有 Cookie 等私密数据。比如说:1、媒体类网站,无论谁访问,文章内容都一样,典型的静态资源2、页面上的个性化推荐与个人信息等为动态数据静态数据如何缓存呢1、将静态数据缓存在用户最近的地方。常见的有三种:· 用户浏览器· CDN上· 服务器的Cache上2、静态化改造就是直接缓存HTTP连接。静态化缓存HTTP连接不是仅仅缓存数据,就连HTTP协议都不用重新组装

2020-08-03 00:33:30 357

原创 秒杀系统总结与思考(一) 架构原则

重温许令波老师的秒杀系统课程 课程链接架构基本原则: “4要1不要”1、数据尽量少:数据网络传输,序列化,编码,解压等操作消耗CPU,数据越简单、越小则好简化秒杀页面大小,去掉不必要的页面装修等2、请求数量尽量少: 减少额外的请求,TCP等都耗时较多3、路径尽量短: 远程调用都会创建scoket连接,也会增大服务不可用的可能性的叠加4、依赖尽量少: 用户访问一个页面所依赖的系统,防止关键系统被弱依赖系统拖累5、不要单点: 服务单点不可用最初版本的秒杀系统把你的商品购买页面增加一个“定时

2020-08-03 00:27:14 252

原创 ES读写性能优化

写性能优化优化方案:客户端: 多线程写,批量写ES:在高质量数据建模前提下,主要在refresh,translog和flush之间做文章写性能优化 - refresh增大refresh_interval,降低实时性,增大一次refresh处理的文档树,默认是1s,设置为-1直接禁止自动refresh增大index buffer size ,参数 indices.memory.index_buffer_size(静态参数,在elasticsearch.yml),默认10%写性能优化 -

2020-08-02 01:02:37 1017

原创 ES为什么被称为实时性搜索

segmentLucene采用新文档生成新倒排索引,读时两边一起。Lucene构建单个倒排索引称为segment,合并在一起称为Lucene Index,对应ES中的一个ShardLucene有专门文件记录所有segment信息,称为commit point文件ES Index 与 Lucene Index整体视角对照图文档搜索实时性 - refresh· segment写入磁盘很耗时,借助缓存,先将segment在缓存中创建并开放查询,提升实时性,该过程成为refresh· ref

2020-08-02 00:33:57 756

原创 网易云音乐评论模块高并发下的设计思考

主要讨论的功能 (基于高流量高并发的场景)评论资源评论总数的更新评论点赞精彩评论的读取评论表设计(简约版)这是资源通用的表设计高并发下的问题热点数据并发量极高评论的新增,更新CommentResource的评论总数,存在并发问题评论的点赞数也是同样的问题四大业务模块详解评论发表,如下图通过异步化的操作,来解决行锁竞争给核心资源MYSQL带来压力,保证系统平稳平滑。在异步化的场景下,同时带来的问题1、评论的有序性质: 评论的发布本周没有逻辑上的有序,最终展示通过发

2020-08-01 01:11:49 1004 2

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

TA关注的人

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