
高并发、高可用、高性能专题
以各种Demo演示的方式,展现三高(高并发、高可用、高性能)
New俊
感谢你技术这么好还来关注我
展开
-
Java进阶系列:GC分析与优化
GC分析与优化原创 2020-12-17 14:32:25 · 428 阅读 · 1 评论 -
Java并发系列:反射的使用和AOP
Java反射可以自由的获取类的对象属性、方法。本文主要介绍以下用法:获取对象中的常量正文获取对象中的常量\color{7f1A8A}获取对象中的常量获取对象中的常量说明假设存在类A,是一个测试用例类,类中存在大量的以array开头的非静态数组现在有个类B,想对类A中的这些用例做同样的操作,因此需要把这些用例放置在一个容器中,通过循环去做操作,获取用例数组的过程需要反射。注意因为是非静态,所以m.invoke(gg),为不是m.invoke( c ),c是类,gg是对象,类取原创 2020-11-20 14:07:22 · 446 阅读 · 2 评论 -
Java并发系列:正确创建和停止线程的方式及Volatile失效场景
其实本质上实现线程只有一种方式:那就是new Thread();后续介绍的6种,哪怕再多,最终都是调用该方法创建线程的。原创 2020-10-09 13:50:18 · 283 阅读 · 0 评论 -
数据库系列:数据库事务、锁、死锁
数据库锁表锁行锁脏读幻读原创 2020-10-09 13:14:05 · 395 阅读 · 1 评论 -
Redis系列:redis实现分布式锁
基于 Redis 实现一个通用的分布式锁组件。整体模式Jmeter发压到Nginx上,Nginx在负载到两台应用上,应用去redis上扣款,组成分布式环境。注意在实验的时候,可以打包两个端口不同的jar包,也可以在idea上开启Allow parallel run达到实验目的。SpringBoot jar启动报错:S原创 2020-10-08 14:34:50 · 3861 阅读 · 9 评论 -
Java并发系列:Stream的使用
Java并发:Stream的用法在这里插入代码片原创 2020-10-08 14:07:23 · 642 阅读 · 0 评论 -
Java并发系列:线程池与阻塞队列
本文主要介绍Java线程池的设计和使用newCachedThreadPoolnewFixedThreadPoolnewSingleThreadExecutornewScheduleThreadPool阻塞队列的选取参考博客:java常用的几种线程池比较原创 2020-10-08 10:55:15 · 558 阅读 · 1 评论 -
Java进阶系列:使用Jmeter进行并发测试
本文包括三部分:Mac下安装及启动Jmeter使用Jmeter进行并发测试存在的坑Mac下安装及启动Jmeter安装安装并校验Java,设置环境变量vim ~/.bash_profile下载apache-jmeter-5.0.tgz,并使用tar解压更改JMeter语言为中文参考博客:JMeter在Mac下的安装启动cd ~/tools/apache-jmeter-5.3/binsh jmeter使用Jmeter进行并发测试最基本的就五步:1、创原创 2020-09-25 00:34:56 · 459 阅读 · 0 评论 -
Redis系列:搭建Redis集群(集群模式)
搭建步骤:1、安装6台单机redis2、在某一台上执行集群命令搭建步骤及脚本:常见中间件安装语句中的Redis安装脚本。集群命令redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 -a 123456注意到最后的-a 输入密码:ljfirst或者你自己的原创 2020-09-23 14:17:48 · 449 阅读 · 0 评论 -
数据库性能:索引及其优化
研究mysql,主要是因为大批数据的增删改查,而导致的性能问题,因此需要了解一些原理类知识来帮助我们优化操作。本文的逻辑顺序如下:1、mysql底层使用的引擎是以什么样的数据结构来存储数据的,这个直接关系到使用效率。2、在增删改查的过程中,那些操作会引起性能问题?3、这些性能问题,如何解决。1、innodb是如何存储数据的【mysql的数据结构为什么选择b+,它和b树的主要区别】+2、增删改查是否会引起性能问题【新增、删除和修改会引起页分裂和合并】页分裂和合并:InnoDB原创 2020-09-21 22:30:10 · 430 阅读 · 0 评论 -
Java并发系列:ThreadLocal的用法和坑
本文主要讲解:ThreadLocal的用法多线程竞争同一个变量同一个线程无需显式调用ThreadLocal的原理数据结构set、get 和 remove方法ThreadLocal的问题线程不安全的场景内存溢出问题延伸:强弱虚软引用本文源码地址:E01_ThreadLocal, 欢迎star我的Github正文开始ThreadLocal的用法多线程竞争同一个变量 当我们使用线程池来复用线程的时候,对于同一个变量的竞争使用,一般会导致线程安全问题,因此原创 2020-09-17 12:12:57 · 735 阅读 · 0 评论 -
Keepalived(VIP)搭建Nginx高可用
在前两篇的基础上,搭建Nginx高可用其实很简单。哨兵加VIP漂移实现Redis集群高可用HAProxy+Keepalived(VIP)搭建Rabbitmq高可用镜像队列主要组件NginxKeepalived搭建流程安装Nginx和Keepalived编写配置文件,注意待修改的参数启动安装Nginx和Keepalived,并测试VIP地址脚本在常见中间件安装语句中找出下列脚本Nginx安装脚本和Keepalived安装脚本:InstallNginx.sh、Install原创 2020-09-14 10:15:46 · 731 阅读 · 1 评论 -
Redis系列:神器Redis的性能及优化探究
计划本周写完。。。分析Redis性能主要考虑两个问题:1、Redis为什么这么快(优化点\color{red}{优化点}优化点)2、Redis怎么用能更快(注意事项\color{red}{注意事项}注意事项)1、分析Redis为什么这么快,我们从以下几方面去分析:网络层和操作系统层内存及数据结构Redis自身做了那些优化阿里及其他云公司又做了那些优化2、分析Redis怎么用能更快,我们从以下几方面去分析:Redis用于缓存防止缓存穿透、缓存击穿、缓存雪崩冷热数据分离网络原创 2020-09-02 10:04:58 · 300 阅读 · 0 评论 -
记一次蛮有意思的Nginx线上排错
现象给两台服务器配置一台nginx用于负载均衡高可用,但是通过nginx请求数据的时候,发现每次打到第一台的时候,报错,第二台没问题(通过分别反向代理发现哪一台有问题的)。但是,单独去调用每一台服务器的接口,都可以正常拿到数据。排查过程【第一步:看看是不是网络问题】通过在nginx上ping和telnet port看看网络和端口通不通,看一下两台服务和nginx的防火墙是否都开通。结果都是通的。【第二步:查看是否是机器原因】将负载均衡改成单台的反向代理。结果是第一台依旧不可以,原创 2020-08-26 22:32:42 · 1711 阅读 · 2 评论 -
Java进阶系列:锁:Synchronized、Lock、Volatile、CAS、Concurrent包
未完待续。。。探究Java 中的锁,其实主要讨论synchronized、lock、volatile的特性,以及具体到ReentrantLock、ReadWriteLock、CountDownLatch、CAS、AQS等类的用法上。synchronized要从下面四个方面去理解代码表现上锁升级锁在不同系统层面的实现1、代码表现上(1)Synchronized锁对象和同步方法时:只对该对象有效(对象锁:锁this或者锁其他对象);具体见Synchronized方法锁、对象锁、类原创 2020-08-16 18:12:45 · 318 阅读 · 0 评论 -
Redis系列:搭建Redis集群(哨兵模式)
注意首先我觉得这两篇博客写的比我的比较好:redis(一主两从三哨兵模式搭建)记录采用 redis主从 + 哨兵(sentinel) + vip漂移搭建一套redis高可用集群其实按照步骤就可以搭建出来,但是我测试的时候,一直不成功,需要把sentinel.conf中的等待数据值尽可能的调小,能尽快看出效果目标搭建一款三节点的 Redis 服务集群,满足高可用的要求统一IP:三节点集群对外暴露一个统一的IP地址高可用:主节点宕机,从节点需要很快承担主节点读写分离:主节点允许读原创 2020-08-12 20:31:55 · 468 阅读 · 0 评论 -
Netty简单入门:获取请求、多客户端连接与通信、心跳检测、长链接
目的及介绍Netty是一款类似于Tomcat的服务器,它更关注网络编程,相对来说网络通信性能更高。本文主要介绍Netty的简单入门,内容包括:搭建一款简单的Netty程序,只编写简单的服务端程序,通过浏览器或者bash的curl方式来感受一下netty的通信模式编写一个多客户端的程序,与服务器端通信,满足某客户端上线,服务器端能通知其他客户端:上线通知,某客户发送消息,服务器端能转发至其他客户端模仿一个服务器端检测客服端心跳的机制,场景:在长链接情况下,服务器端需要通过心跳机制来确认客服端存活原创 2020-07-09 10:11:06 · 2877 阅读 · 0 评论 -
使用JMH进行微基准测试
微基准测试目的及介绍有时候我们想测试一个方法,一个函数,一个类的执行效率,最土的办法莫过于做时间差:long timebegin = System.nanoTime();for(int timei = 0; timei < 10; timei++){ do somethings;}long timeend = System.nanoTime();System.out.println("cost time:" + (timeend - timebegin));这个方法虽然原创 2020-06-04 14:20:46 · 305 阅读 · 0 评论 -
手把手搭建EFK日志级别的监控系统
如何搭建日志级别的监控日志级别的监控,目前最火的是ELK,分别是Elasticsearch、Logstash、Kibana的缩写。Logstash:负责日志收集和格式整理Elasticsearch:负责日志搜索Kibana:负责以图表形式来展示日志Supervisord 负责管理、启动前三者进程后来通过Filebeat替换Logstash,达到更好的日志收集效果,形成了EFK(Filebeat 是基于原先 logstash-forwarder 的源码改造出来的)。目前互联网公司的实际搭原创 2020-06-01 00:17:51 · 1002 阅读 · 0 评论 -
HAProxy+Keepalived(VIP)搭建Rabbitmq高可用镜像队列
搭建Rabbitmq高可用原创 2020-05-10 14:08:14 · 1506 阅读 · 0 评论 -
RabbitMQ实现消息100%投递的详细设计和测试方案
目标实现一个在恶劣条件下,依旧保证消息百分百投递或消费的消息队列。存在的挑战及简易方案1.你说百分百投递,万一你mq挂了,怎么投递?使用镜像队列2.那要是网络不稳定,消息没有送到exchange或者没有送到queue怎么办?conform模式和return模式2.1.消息发送至某一台mq,但是这台mq突然停电,来不及同步到其他镜像队列怎办?消息持久化2.2.如果消息刚到内存,还没来及固化到硬盘,此时发生故障,导致消息丢失怎么办?这次消息是真的丢失了,但是有补偿机制3.消息执原创 2020-05-09 10:02:53 · 1129 阅读 · 0 评论 -
高并发、高可用、高性能技术方案连载
项目介绍本项目通过Demo的方式揭露中间件神秘的面纱,希望你能通过这些Demo,从初学乍练到恍然大悟,最后兴趣盎然、渐入佳境(欢迎关注我的博客);建立中间件的知识结构体系,方便使用的时候查找,欢迎更多志同道合的朋友加入项目MiddleSoftwarePractice(欢迎提issue和pull request)。第一境界:昨夜西风凋碧树。独上高楼,望尽天涯路Demo演示如何使用jav...原创 2020-04-24 15:17:48 · 1035 阅读 · 0 评论