从单体到高可用集群
文章平均质量分 63
逸羽菲
热爱技术,热爱生活。
展开
-
【集群分布式问题】session共享问题及解决方案
文章目录一、session共享问题还原二、解决方案1.Nginx的 IP_Hash 策略(可以使⽤)2. Session复制(不推荐)3. Session共享,Session集中存储(推荐)一、session共享问题还原以登录为例,比如输入用户名和密码,然后会重定向到另一个界面,刚开始登录请求在节点1上,然后第二次业务请求会跑到节点2上,因为节点2上没有节点1上的session信息,所以会登录失败。Http协议是⽆状态的协议。客户端和服务端在某次会话中产⽣的数据不会被保留下来,所以第⼆次请求服务端原创 2021-10-06 10:53:34 · 13564 阅读 · 21 评论 -
【集群分布式问题】分布式集群时钟同步问题及解决方案
文章目录一、 时钟不同步导致的问题二、集群时钟同步配置1. 分布式集群中各个服务器节点都可以连接互联⽹2. 分布式集群中一个节点或每个节点都不能访问互联网一、 时钟不同步导致的问题时钟此处指服务器时间,如果集群中各个服务器时钟不⼀致势必导致⼀系列问题,试想 “集群是各个服务器⼀起团队化作战,⼤家⼯作都不在⼀个点上,岂不乱了套!”举⼀个例⼦,电商⽹站业务中,新增⼀条订单,那么势必会在订单表中增加了⼀条记录,该条记录中会有“下单时间”这样的字段,往往我们会在程序中获取当前系统时间插⼊到数据库或者直接原创 2021-10-06 10:36:19 · 12913 阅读 · 13 评论 -
【Eureka】全网最形象生动的服务治理简介,5分钟带你入门eureka
什么是服务治理?服务治理就像是白羊座宫殿,它是通向微服务架构圣殿的第一关,是所有微服务应用要考虑的第一个问题。本节将带大家深入浅出,从“提出问题-解决问题”的思路出发,让大家对服务治理领域的核心功能有个直观的感受。这就像相亲见姑娘的第一面,不求深入了解,但求心中有数,为后面的章节开一个好头。Let’s Go!服务治理的伟大目标服务治理这个名字乍一听很唬人,其实他很低调,能做的事情无非就是专治分布式系统各种不服。呦,你看这口气还挺大,既然牛已经吹出来了,那就先给自己定几个小目标吧!高可用性 换成通俗原创 2021-07-14 13:50:56 · 281 阅读 · 4 评论 -
分布式事务系列之事务补偿机制
1.什么是事务补偿机制例子:A的补偿就相当于+200元。原创 2021-07-02 10:50:47 · 1074 阅读 · 0 评论 -
垃圾回收详解
1. 什么场景下该使用什么垃圾回收策略主要回收堆和方法区线程共享的部份。2. 对象什么时候被回收1. 引用计数法通过对象的引用计数器来判断对象是否被引用A引用B,B的程序计数+1,B引用C,C的程序计数+1.循环引用就不行了。2. 可达性分析图表表示如下根对象包括哪些呢什么是 强引用什么是软引用什么是弱引用什么是虚引用一个对象不可达,也不一定被回收...原创 2021-06-25 17:26:43 · 109 阅读 · 0 评论 -
索引树详解
b-treeB+Treememory支持hash索引最左匹配原则索引失效的场景原创 2021-06-25 17:00:41 · 1405 阅读 · 1 评论 -
编译器优化
一、方法内联把目标方法的代码复制到发起调用的方法当中,避免真实的方法调用。二、方法内联的条件三、方法内联的注意点四、方法内联的相关参数原创 2021-06-20 16:51:16 · 132 阅读 · 1 评论 -
编译器优化详解
文章目录一、解释vs编译二、c1编译器三、c2编译器四、分层编译五、如何找到热点代码一、解释vs编译Java是混合模式执行的二、c1编译器三、c2编译器c1编译器比较适合客户端带图形界面。c2编译器比较适合服务端四、分层编译默认情况下jdk8是开启了分层编译jvm可以设置开启什么模式编译如果上图的数字是3,那么只使用0 1 2 3级别的进行编译。五、如何找到热点代码基于采样的热点检测,当发现某一个方法总是出现在栈顶,就是热点代码了。基于计数器的热点检测。原创 2021-06-20 10:29:11 · 648 阅读 · 0 评论 -
sql调优之join优化
1.join种类?彼此的区别?还有一种是cross join,使用笛卡尔进行连接,不需要进行连接,如果 带有on进行连接,相当于inner join2. join算法1. Nested-Loop Join 嵌套循环1. Block Nested-Loop Join 块嵌套循环使用条件...原创 2021-06-09 09:47:38 · 691 阅读 · 4 评论 -
sql优化详解(长字段sql优化,前缀索引,单索引,组合索引,覆盖索引....)
文章目录一、长字段的sql优化1. 新增加一个字段作为长字段的hash,用`CRC32()`来解决问题。2. 前缀索引(长字段的调优)二、单列索引vs组合索引三、覆盖索引四、重复索引1. 重复索引2. 冗余索引3. 未使用索引一、长字段的sql优化1. 新增加一个字段作为长字段的hash,用CRC32()来解决问题。为什么要带上and first_name=“Facello”,这就保证了在hash冲突的时候也能够正确的返回结果。2. 前缀索引(长字段的调优)上图表示了只对first_name的原创 2021-06-09 09:06:43 · 527 阅读 · 0 评论 -
【Java】系列之线程池 ThreadPoolExecutor
概述线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池的方法,但都有其局限性,不够灵活;另外由于前面几种方法内部也是通过ThreadPoolExecutor方式实现,使用ThreadPoolExecutor有助于大家明确线程池的运行规则,创建符合自己的业务场景需要的原创 2021-04-29 10:25:23 · 181 阅读 · 1 评论 -
【mysql】之主从配置详解
文章目录一、MySQL主从1. 进入etc/my.cnf,修改如下配置2. 备份账户并授权3. 主进行锁表4. 主 找到 bin-log的位置 show master status5. 主备份数据6. 从配置一、MySQL主从1. 进入etc/my.cnf,修改如下配置配置如下主配置:从配置2. 备份账户并授权命令详解 链接命令:CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;说明:username:你原创 2021-04-23 11:00:22 · 1150 阅读 · 1 评论 -
【mycat】系列 之 简介
文章目录一、分库分表概述1. 数据切分方式1.1 垂直切分1.2 水平切分二、mycat配置1. server.xml配置2. schema.xml配置一、分库分表概述1. 数据切分方式1.1 垂直切分按照业务切分,比如把订单、商品进行切分。每种业务一个数据库不同业务之间,禁止跨库联查,非常消耗性能优点缺点1.2 水平切分同一的数据,切分到不同的数据库。例如订单为奇数的存到1库,为偶数的存到2库。需要确定分片的规则使用分片字段查询时,可确定实体库,其原创 2021-04-23 09:13:17 · 150 阅读 · 1 评论 -
【RabbitMQ】系列之整合Springboot
文章目录一、整合SpringBoot1. 发送消息2.监听消费消息二、保证消息可靠性一、整合SpringBoot1. 发送消息操作非常简单添加队列添加交换机把交换机和队列进行绑定其中order.#代表可以匹配多个词,比如order.a.border.*代表匹配一个词,比如order.a新建测试类2.监听消费消息手工签收,最后一定要调用channel.basicAck,告诉mq以收到消息,可以把消息清空了二、保证消息可靠性消息确认模式,当消息发出去后,异步等待原创 2021-04-14 15:53:26 · 106 阅读 · 1 评论 -
【rabbitMQ】系列一之简介及安装
文章目录一、RabbitMQ简介及AMQP协议1、 初识2、 简介3.AMQP二、RabbitMQ安装及入门将mq的tcp监听端口和网页管理端口都设置成允许远程访问root权限三、核心概念1. 整体架构2. mq是如何流转消息的呢一、RabbitMQ简介及AMQP协议1、 初识跨平台、跨语言基于AMQP协议erLang语言编写2、 简介用erlang编写,低延迟很多大的互联网公司都在用开源、性能优秀、稳定性保障与SpringbAMQP完美整合、、API丰富3.AMQPAM原创 2021-04-14 11:13:12 · 190 阅读 · 0 评论 -
【kafka系统】之pagecache和zeroCopy
文章目录kafka1. 什么是pagecache?2. 集群模式kafka1. 什么是pagecache?是操作系统主要实现的磁盘缓存,目的是减少对磁盘io的操作,把磁盘的数据缓存到内存中,把对磁盘的访问转化成对内存的访问。传统的操作:经历了4次copykafka实现了0copy,pagecache2. 集群模式...原创 2021-04-13 14:37:12 · 292 阅读 · 0 评论 -
【linux】性能调优之常用命令
文章目录一、top二、PS三、pgrep四、meminfo四、free五、vmstat六、df七、du七、netstat八、查看路由表九、lsof一、top第一行:10:01:23 — 当前系统时间126 days, 14:29 — 系统已经运行了126天14小时29分钟(在这期间没有重启过)2 users — 当前有2个用户登录系统load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load ave原创 2021-04-13 10:15:52 · 275 阅读 · 0 评论 -
【RabbitMQ】系列之四种模式
文章目录一、RabbitMQ四种集群模式1. 主备模式2. 远程模式3. 镜像模式4. 多活模式(异地数据复制的主流模式)一、RabbitMQ四种集群模式1. 主备模式主备模式:主节点提供读写,从节点不提供读写服务,只是负责提供备份服务,备份节点的主要功能是在主节点宕机时,完成自动切换 从–>主主从模式:主节点提供读写,从节点只读主节点挂了后,由HaProxy进行选择备份节点来做主节点。配置listen rabbitmq_cluster 监听rabbitmq集群bind原创 2021-04-13 08:57:33 · 1165 阅读 · 2 评论 -
【JVM调优】理论篇之JVM内存结构及类的加载机制
文章目录一、JVM内存结构1. 堆2. 虚拟机栈3. 本地方法栈(C语言实现的)4. 程序计数器5. 方法区二、类的加载机制1. 加载详解2. 链接3. 初始化一、JVM内存结构1. 堆元空间不是堆的一部分,而是本地内存。2. 虚拟机栈线程独享,但创建一个线程的时候,就会创建一个虚拟机栈。由栈帧组成,每次方法调用,都会创建一个栈帧,然后去压栈,当方法返回的时候,则对应栈帧的出栈操作。操作数栈,可以当做存放临时变量的地方。3. 本地方法栈(C语言实现的)4. 程序计数器从字节码的执行原创 2021-04-13 08:12:59 · 225 阅读 · 0 评论 -
【ES】之数据同步
logstash数据同步以id作为同步边界,比如主键是自增的,刚开始的时候数据库中有1千条数据,会把这1000条数据全部同步到ES中,然后定时任何隔了一段时间,发现数据库中id>1000,会把大于1000的数据同步到ES中,这样会有弊端,更新操作不知道。所以推荐使用update_time下载上传上面那3个都会用到解压文件进入到目录中,创建一个sync文件夹在文件夹里新建个文件,比如llogstash-db-sync.conf,后缀是.conf拷贝数据库驱动到当前文件夹sync原创 2021-04-12 15:41:48 · 1607 阅读 · 0 评论 -
【ES】之整合SpringBoot
文章目录一、ES整合Springboot(环境配置)整合相关的链接二、ES整合Springboot(索引操作测试)三、ES整合Springboot(文档操作测试)1. 更新文档2. 查询文档3. 根据id删除文档数据4. 分页实现四、ES整合Springboot(实现高亮)五、ES整合Springboot(实现排序)一、ES整合Springboot(环境配置)引入依赖注意:这里的2.2.2对应的是6.4.3版本,我们的ES版本是7.4,不匹配,这时候我们需要降级,降到6.4.3修改配置文件原创 2021-04-12 09:41:16 · 3204 阅读 · 0 评论 -
【ES】之集群详解
文章目录ES的集群(3台服务器)概念实现测试集群脑裂(老版本可能出现)什么是脑裂如何解决?文档读写原理文档写原理文档读原理ES的集群(3台服务器)概念实现配置集群名称,保证每个节点的名称相同,如此就能都处于一个集群之内了 cluster.name: imooc-es-cluster每一个节点的名称,必须不一样 node.name: es-node1http端口(使用默认即可) http.port: 9200主节点,作用主要是用于来管理整个集群,负责创建或删除索引,管理其他非ma原创 2021-04-12 08:14:29 · 2658 阅读 · 2 评论 -
【ES】之深度分页和批量操作
文章目录一、深度分页二、滚动搜索三、批量查询四、批量操作1. 批量新增2.批量更新3. 批量删除一、深度分页当我们取出第9999到10009的数据的时候,他会在每个分片中取出10009条数据,然后重新排序分页,这样对性能有很大的影响。如何解决呢?可以控制搜索结果在100页以内,这样对性能就不会有太大的影响了。通过设置index.max_result_window来突破10000页的限制二、滚动搜索一次性查询1万+数据,往往会造成性能影响,因为数据量太多了。这个时候可以使用滚动搜索,也原创 2021-04-11 17:50:54 · 422 阅读 · 0 评论 -
【ES】查询详解
文章目录一. dsl搜索数据准备1. mapping准备2. 查入数据二、dsl搜索1. 通过url构建(QueryString方式)1. 通过post构建(DSL方式)3. 查询所有4. 查询关键字term、terms(不分词)4. 查询关键字match_phrase4. 查询关键字operator4. 查询关键字minimum_should_match5. 根据id就行查询ids6. 根据词语搜索多个字段里是否包含(multi_match)7. 布尔查询8. 过滤器(post_filter)9. 排序1原创 2021-04-11 16:20:08 · 1829 阅读 · 0 评论 -
【ES2】分词器
一、分词与内置分词器默认的standard分词器。能够把英文单词进行拆分,同时会把大小的字母自动转化成小写。urlhttp://47.107.41.60:9200/_analyze psot传入的json{“analyzer”:“standard”,“text”:“My name is Xiaohei”}返回的结果{“tokens”: [{“token”: “my”,“start_offset”: 0,“end_offset”: 2,“type”: “”,原创 2021-04-11 12:12:52 · 590 阅读 · 1 评论 -
【ES一】文档的map映射,查询修改,版本控制
mappings自定义创建映射发送请求{ "mappings":{ "properties":{ "username":{ "type":"text", "index":true }, "idcard":{ "type":"keyword", "index":false原创 2021-04-11 10:23:27 · 465 阅读 · 0 评论 -
ES安装详解
在官网下载安装包,并传到linux中,解压。移动解压后的文件到 /usr/local进入config目录,打开elasticsearch.yml文件修改ES的名字修改节点名称-修改数据和路径的地址-配置network相关配置节点相关(这里要和节点名称一致)可以修改jvm的配置因为es的启动不可以在root用户,所以要新添加一个用户进行启动useraad esuser # 添加用户chown -R esuser /usr.原创 2021-04-09 16:34:17 · 345 阅读 · 0 评论 -
ES简介
文章目录一、优势二、什么是分布式搜索引擎1. 什么是搜索引擎2. 什么是分布式搜索3. Lucene Solr ES区别1.Lucene2.Solr3.Elasticsearch三、ES核心术语(相当于数据库的什么)四、ES集群相关五、倒排索引1. 正排索引2. 倒排索引一、优势空格支持拆词查询 提高容错率搜索内容不能高亮海量数据查询二、什么是分布式搜索引擎1. 什么是搜索引擎对数据源中的信息数据进行处理,处理完后放到搜索引擎的节点上,为用户提供一定的检索服务;目的是为了优化用户的搜原创 2021-04-08 16:54:11 · 240 阅读 · 0 评论 -
分布式拦截器
一、如何在springboot中使用创建一个类,实现handlerInterceptor里面的方法preHandle原创 2021-04-08 14:37:28 · 361 阅读 · 0 评论 -
分布式会话
文章目录一、分布式会话1. 什么是会话2. 无状态会话3. 有状态会话4. 单tomcat会话5. 为什么要使用无状态会话6. 动静分离会话二、实现分布式会话的方法1. springSession2. redis分布式 会话三、以上两种分布式会话的区别一、分布式会话1. 什么是会话2. 无状态会话3. 有状态会话4. 单tomcat会话5. 为什么要使用无状态会话6. 动静分离会话二、实现分布式会话的方法1. springSession导入依赖spring原创 2021-04-06 17:02:40 · 400 阅读 · 2 评论 -
【redis三之哨兵】
一、哨兵模式简介主要解决master分支挂掉后,其他slave分支该怎么整的问题相当于有多个哨兵集群,在监控master和slave分支,当master分支挂掉后,就会把另外的一个slave分支变成主master分支。如何配置打开sentinel.conf把protected-mode 设置为no设置可以后台运行设置日志位置哨兵工作空间主配置sentinel monitor 名字 master主分支的地址 端口号 哨兵的数量设置密码认为master分支挂掉的时间点原创 2021-04-01 18:31:20 · 108 阅读 · 0 评论 -
【redis系列二】
文章目录一、reids结合springboot二、发布与订阅三、redis的缓存机制1. RDB2. AOF三、主从架构四、主从架构(搭建主从架构)五、无磁盘复制六、redis缓存过期及内存淘汰机制1.缓存过期3. 内存淘汰机制一、reids结合springboot使用redistemplate可能会出现乱码(序列化的问题),这个时候可以使用StringRedisTemplate。JsonUtils.objectToJson // 把对象转化成json(String)JsonUtils.jsonT原创 2021-04-01 17:39:51 · 167 阅读 · 0 评论 -
【redis系列一】分布式架构及redis安装和常用数据类型
文章目录一、分布式架构1. 特点2. 优势3. 缺点4. 设计原则二、redis1. 图解2. 什么是nosql3. 什么是分布式缓存?4. 什么是redis5. redis安装6. redis-cli的使用7. redis数据类型1. string2.hash3. list4. set5. zset(有序的set)一、分布式架构1. 特点不用的业务分散在不同的服务器每个子系统负责一个或多个不同的业务模块服务之间可以相互 通信(RPC、webservice、http)分布式系统对用户透明每个原创 2021-03-31 13:51:44 · 240 阅读 · 1 评论 -
【nginx系列二】负载均衡
文章目录使用nginx构建tomcat集群负载均衡之轮询负载均衡 加权轮询(权重)upstream指令参数使用keepalive提交吞吐量负载均衡之ip_hashhash算法hash算法带来的问题一致性hash算法负载均衡之url_hash最小连接数负载均衡缓存nginx控制浏览器缓存nginx控制上游服务器缓存使用nginx构建tomcat集群负载均衡之轮询平均分配负载均衡 加权轮询(权重)使用weight=数字,就可以实现upstream指令参数max_connssl原创 2021-03-30 19:15:19 · 117 阅读 · 1 评论 -
【nginx系列一】简介
什么是nginx是一个高性能的http和反向代理的web服务器主要功能反向代理实现集群、负载均衡及url路由通过配置就可以实现集群和负载均衡还可以实现热加载静态资源虚拟化什么是正向代理什么是反向代理路由nginx的进程模型**master进程模型:**主进程**worker进程模型:**工作进程以下这条命令是检查java 进程是否存在:ps -ef |grep java可以在nginx.config配置worker_processesmaster会监控原创 2021-03-30 09:37:10 · 179 阅读 · 1 评论 -
【集群】
单体架构所面临的困难单节点宕机造成所有的服务不可用(通过集群实现高可用)耦合度太高(迭代、测试、部署)(通过拆分,分布式或微服务解决)单节点并发能力有限(负载均衡,降低服务器压力)集群概念单个任务让不同的人去做,叫做集群。集群是由一些互相连接在一起的计算机构成的一个并行或分布式系统。这些计算机一起工作并运行一系列共同的应用程序,同时,为用户和应用程序提供单一的系统映射。从外部来看,它们仅仅是一个系统,对外提供统一的服务。集群内的计算机物理上通过电缆连接,程序上则通过集群软件连接。这些连原创 2021-03-29 09:57:34 · 103 阅读 · 2 评论