
笔记
大象_
技术,是服务于人而不是局限住人的。
写博客一是记录一些开发笔记以及思路,二是希望自己整理的笔记和心得能帮助到遇到问题的开发。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2020-10-14
jar;JDK、JRE、JVM;操作系统;硬件的关系原创 2020-10-14 23:57:27 · 413 阅读 · 0 评论 -
背压
什么是背压在异步场景下,被观察者(生产者)发射事件(数据)的速度过快,导致观察者(消费者)处理事件(数据)不及时,从而造成 Buffer 溢出。对于这种现象,我们称之为「背压」。注意的是,异步场景指的是被观察者与观察者需要在不同的线程中,并且被观察者生产速度大于观察者消费速度,导致观察者的 Buffer 溢出。为了更好地理解,举个例子,例如有一个服务器不断地接收来自用户的 HTTP 请求来把用户需要的网页返回给用户。服务器所能承受的同时访问用户数是有上限的。这里,它由服务器主机的处理器和内存情况决定了原创 2020-10-14 23:38:38 · 566 阅读 · 1 评论 -
BIO NIO Netty
传统阻塞型 I/O(BIO)可以用下图表示:原创 2020-10-14 22:37:10 · 155 阅读 · 0 评论 -
数据存储选型演进:
文件txt->数据库mysql->纯内存数据库SAP-HANA->内存数据库redis->分布式数据库hbase一、数据存储选型要点容量成本访问速度二、访问速度磁盘内存原创 2020-10-14 22:15:56 · 219 阅读 · 0 评论 -
解决问题的重中之重:分治思想
思考1:redis阻塞了怎么办,严重时会引发蝴蝶效应、雪崩拆解redis实例,redis实例隔离思考2一个系统内有耗时严重的 有耗时极短的,那么应该使用各自的线程池实例线程池隔离原创 2020-10-14 22:00:29 · 158 阅读 · 0 评论 -
架构设计思想:AKF 拆分原则
AKF 拆分原则业界对于可扩展的系统架构设计有一个朴素的理念,就是:通过加机器(水平扩展)就可以解决容量和可用性问题 。( 如果一台不行那就两台) 。我是个段子:( 世界上没有什么事是一顿烧烤不能解决的。如果有,那就两顿 。)这一理念在“云计算”概念疯狂流行的今天,得到了广泛的认可!对于一个规模迅速增长的系统而言,容量和性能问题当然是首当其冲的。但是随着时间的向前,系统规模的增长,除了面对性能与容量的问题外,还需要面对功能与模块数量上的增长带来的系统复杂性问题以及业务的变化带来的提供差异化服原创 2020-10-14 21:58:31 · 1086 阅读 · 0 评论 -
多核cpu、cpu高速缓存、缓存一致性协议、缓存行、内存
1、cpu高速缓存工业实践表明,三层最合适读 l0 >l1 > l2 > 内存写 内存 > l2 > l1> l01、缓存一致性协议有些指令会触发缓存一致性协议,有些指令不会触发缓存一致性协议:i++不会。MESI协议是其中的一种实现,英特尔cpu用的是MESI协议2、缓存行一个缓存行64个细节同一颗cpu可能有多核,他们之间有缓存一致性保障,也就是同一行的数据发生改变后,需要通知彼此。...原创 2020-09-28 21:21:18 · 877 阅读 · 0 评论 -
网络分区
网络分区分布式通常假设网络是异步的,意味着网络可能会导致任意的重复、丢失、延迟或者乱序的节点间消息传递。在实际中,TCP状态机会保证节点间消息传递的不丢失、不重复、时序。但是,在Socket级别上,节点接发消息会阻塞,超时等等。检测到网络失败是困难,因为我们唯一能跟得到其他节点状态的信息就是通过网络来得到,延迟跟网络失败也无从区分。这里就会产生一个基本的网络分区问题:高延迟可以考虑作为失败。当分区产生后,我们没有渠道去了解到其他节点到底发生了什么事: 它们是否还存活?或者已经crash?是否有收到消息?原创 2020-09-21 21:02:19 · 1037 阅读 · 0 评论 -
CAP 理论
CAP 理论的经典解释CAP 定理是分布式系统设计中最基础,也是最为关键的理论。它指出,分布式数据存储不可能同时满足以下三个条件。一致性(Consistency):每次读取要么获得最近写入的数据,要么获得一个错误。可用性(Availability):每次请求都能获得一个(非错误)响应,但不保证返回的是最新写入的数据。分区容忍(Partition tolerance):尽管任意数量的消息被节点间的网络丢失(或延迟),系统仍继续运行。CAP 定理表明,在存在网络分区的情况下,一致性和可用性必须二选一。原创 2020-09-21 20:46:58 · 174 阅读 · 0 评论 -
zk是如何避免脑裂问题的?
Zookeeper是如何避免脑裂问题的?过半机制原创 2020-09-03 22:25:00 · 561 阅读 · 0 评论 -
脑裂-导致数据丢失
在一个高可用系统中,当联系着的节点断开联系时,本来为一个整体的系统,分裂成两个独立节点,两个节点开始争抢共享资源造成系统混乱、数据损坏的现象,成为“脑裂”。原创 2020-09-03 22:07:08 · 259 阅读 · 0 评论 -
Nacos如何应对高并发?
没有使用synchronize 也没有加锁,而是copyOnWrite思想原创 2020-09-03 21:35:05 · 1993 阅读 · 0 评论 -
eureka如何应对高并发?
注册表多级缓存设计1)只读缓存2)读写缓存3)实际注册表原创 2020-09-03 21:29:45 · 822 阅读 · 0 评论 -
Seata 回滚是怎么做到的?
Seata回滚是如何做到的?根据redo日志,生成反向SQL原创 2020-09-02 22:24:48 · 942 阅读 · 0 评论 -
OpenFeign 原理
OpenFeign 依靠Ribbon,Ribbon类似于拦截器 进行计算挑选路由后调用远端服务@OpenFeignClient原理拼接url:name + mapping实际就像原始的 Ribbon +ResetTemplate调用方式原创 2020-09-02 21:22:19 · 510 阅读 · 0 评论 -
线上实时QPS统计方案-Metrics
Java实时监控类库Metrics 随着系统越来越大,越来越复杂,我们需要在业务方面加上一些监控服务。Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成自定义的监控工作。使用Metrics使用Metrics,只需要在pom文件里面加入一下依赖: io.dropwizard.metrics metrics-core 3.1.2 Metrics的基本工具Metrics提供了五个基本的度量类型:1.Gauges(度量)2.Counters(计原创 2020-08-20 22:01:45 · 2766 阅读 · 0 评论 -
JVM 调优-参数整理
1、堆初始值和最大值-Xms作用:指定堆初始值(最小值)。单位:必须以M为单位。建议:通常设置成跟最大堆内存一样,减少GC。-Xmx作用:指定堆最大值。单位:必须以M为单位。可以使用java -Xmx5000M -version判断当前系统能分配的最大堆内存。注意:将-Xmx和-Xms设置为一样可以避免堆自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要高。2、年轻代-Xmn作用:设置年轻代大小。单位:必须以M为单位。建议:Sun官方推荐配置为整个堆的3/原创 2020-08-09 23:30:40 · 284 阅读 · 0 评论 -
JVM 调优原则 整理
一、调优原则JVM参数调优原则一(这些比率是最优)1)新生代:老年代:1:2;eden:s0:s1:8:1:1。JVM参数调优原则一之二,根据业务场景进行优化:1)存活时间短的对象,随生随死,尽量在新生代被回收掉2)如果常量、静态对象较多的长时间存活的对象较多比较,老年代一定要给足...原创 2020-08-09 23:26:17 · 288 阅读 · 0 评论 -
JVM堆组成
堆组成新生代(enden、S0、S1)老年代元空间(永久代)原创 2020-08-09 23:24:00 · 206 阅读 · 0 评论 -
JVM组成
1、JVM组成线程共享:堆、方法区线程私有:栈、程序计数器、本地方法栈原创 2020-08-09 23:20:42 · 422 阅读 · 0 评论 -
栈上分配、逃逸分析
栈上分配栈上分配是java虚拟机提供的一种优化技术,基本思想是对于那些线程私有的对象(指的是不可能被其他线程访问的对象),可以将它们打散分配在栈上,而不是分配在堆上。分配在栈上的好处是可以在函数调用结束后自行销毁,而不需要垃圾回收器的介入,从而提供系统的性能。栈上分配的一个技术基础是进行逃逸分析。逃逸分析的目的是判断对象的作用域是否有可能逃逸出函数体。在运行时分析对象的生命周期,如果发现该对象只会被本线程使用(一般是一些局部对象),那么就将该对象在栈上分配,而不在堆中(heap)分配,1)以减少对象原创 2020-08-09 23:10:44 · 280 阅读 · 0 评论 -
《Dubbo 使用zookeeper作为注册中心》
《Dubbo 使用zk作为注册中心》1、配置 Spring的 服务生产者 和 服务消费者,注册中心指定 zk1)Spring.xml<dubbo:registry address="zookeeper://192.168.1.52:2181" check="false"/>2)Maven 依赖 <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --> org.apache原创 2020-07-27 19:29:27 · 178 阅读 · 0 评论 -
锁 篇
先来看一个问题解决线程安全问题有两种方式:方式1: synchronized方式2:可重入锁多读多写:读写锁多读一写:volate【一】隐式锁 和 显式锁一、隐式锁只有synchronized详见:synchronized 篇二、显式锁1、定义:除了隐式锁synchronized,其他都是显示锁。如:Lock接口、ReentrantLock(可重入锁)、ReadWriteLock接口(读写锁)等。2、显式锁使用规范1)lock.lock()一定要在try之外之前,否则遇到异常会原创 2020-05-29 00:44:16 · 151 阅读 · 0 评论 -
2020-05-19
Thread:线程结束后,会自己调用notifyAll方法原创 2020-05-19 20:15:38 · 132 阅读 · 0 评论 -
GiHub:Dependabot:官方的一款自动程序,用来保护pom依赖关系
GitHub:Dependabot:官方的一款自动程序,用来保护pom依赖关系原创 2020-05-16 09:17:36 · 585 阅读 · 0 评论 -
RocketMQ:核心概念、整体流程
RocketMQ:核心概念、整体流程一、RocketMQ:核心概念NameServer:注册中心Broker:生产者消费者消息Topic:主题Tag:子主题Group:组广播模式:每个消费者各消费一次群组模式:只有一个消费者能消费到二、RocketMQ 整体流程...原创 2020-05-13 21:46:32 · 201 阅读 · 0 评论 -
RocketMQ:两种消费方式:pull拉、push推
RocketMQ:两种消息消费方式:pull拉、push推1、推送方式pull模式:拉取,DefaultMQPullConsumer模式。是由客户端主动向MQ请求数据,主动权在客户端,先拉取数据再消费。不会因为推送太快而处理不及时。2、push模式:推送,DefaultMQPushConsumer模式。一般的push是MQ主动推送信息,但是可能会导致消费者跟不上推送速度。RocketMQ采用的是长轮询的方式,客户端访问MQ,有信息就拉取关闭连接消费,然后再请求并拉取。没有信息请求就会等待新信息,原创 2020-05-13 21:45:09 · 2803 阅读 · 0 评论 -
Java系统优化思路:数据库优化
Java系统优化思路:数据库优化原则:自顶向下优化法具体优化:一、单机环境1)Java应用中SQL语句优化2)MySQL软件优化(如:存储引擎等)3)MySQL服务器优化(如:操作系统、硬件)4)Java本地缓存(如JDK自带集合、GuavaCache等)5)热点数据预先缓存起来(如Redis、MemoryCache)6)数据库集群7)数据库由关系型数据库升级为NoSQL数据库(如:MongoDB等)二、Java应用由单机升级集群环境...原创 2020-05-12 23:10:05 · 284 阅读 · 0 评论 -
原则:自顶向下优化法
原则:自顶向下优化法具体优化:一、单机环境1)Java应用中SQL语句优化2)MySQL软件优化(如:存储引擎等)3原创 2020-09-18 19:44:27 · 267 阅读 · 0 评论 -
MySQL:慢日志:如何开启慢日志?如何分析?
MySql:慢日志:如何开启慢日志?如何分析?一、MySQL如何开启 慢查询?1、修改配置文件,开启慢日志Window:my.iniLinux:my.cnf添加配置:#定义慢查询日志的路径:log-slow-queries=xxx/mysql_slow_query.log#来定义查过多少秒的查询算是慢查询long_query_time=52、验证mysql慢查询是否开启show variables like ‘%slow%’;执行结果会把是否开启慢查询、慢查询的秒数、慢查询日志等信息原创 2020-05-12 21:24:58 · 294 阅读 · 0 评论 -
MySQl:子查询和关联查询哪个效率高
MySQL:子查询 和 关联查询 哪个效率高t1:订单表t2:客户表子查询:select t1.id,t1.time,(select t2.id from t,t2 where t1.userId = t2.id)as username from t1关联查询:select t1.id,t1.time,t2.name where t1.userId = t2.id as username from t1,t2子查询就是查询中又嵌套的查询,表连接都可以用子查询,但不是所有子查询都能用表连接替换,原创 2020-05-12 21:19:33 · 11797 阅读 · 3 评论 -
关系型数据库:三大范式
关系型数据库:三大范式一、关系性数据库的 三大范式是什么?设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库。这些规范被称作范式。越高的范式数据库的冗余度就越低。1、第一范式(1NF):无重复的列数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性满足第一范式(1NF)是设计的最低要求。2、第二范式(2NF):属性完全依赖于主键(即:一个表中不能有两个主键)。3、第三范式(3NF):属性不能传递原创 2020-05-12 21:06:07 · 633 阅读 · 0 评论 -
脑裂
为了防止脑裂,一般部署是奇数台服务器,3,5,7,9原创 2020-05-08 21:44:45 · 143 阅读 · 0 评论 -
强一致性、弱一致性、最终一致性
从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。...原创 2020-05-08 21:34:12 · 767 阅读 · 0 评论 -
CAP
CAP原理中,有三个要素:一致性(Consistency)可用性(Availability)分区容忍性(Partition tolerance)CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数web应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。...原创 2020-05-08 21:30:57 · 288 阅读 · 0 评论 -
CAP原则
CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得。...原创 2020-05-07 20:19:45 · 199 阅读 · 0 评论 -
JVM内存屏障
原创 2020-05-03 20:56:41 · 210 阅读 · 0 评论 -
领牌桶和漏桶
如果要让自己的系统不被打垮,用令牌桶。如果保证被别人的系统不被打垮,用漏桶算法。原创 2020-04-30 21:23:57 · 156 阅读 · 0 评论 -
SpringBoot中约定优于配置
SpringBoot中约定优于配置的体现。1.创建的SpringBoot项目的目录结构,默认是Maven工程;2.在Web项目中,默认内置了Tomcat容器;3.默认会有一个application.properties配置文件;4.在Web项目中,默认有resource/static和templates文件夹。 约定是默认的,但是不缺乏灵活性(可选)。...原创 2020-04-28 00:02:45 · 1166 阅读 · 0 评论 -
SpringBoot入门
一、从官方认识 SpringBoothttp://spring.io1、官方简介Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.We take an opinionated view of the Sprin...原创 2020-04-27 22:26:03 · 219 阅读 · 0 评论