![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一步一步成为架构师
文章平均质量分 57
一如既往的坚持
这个作者很懒,什么都没留下…
展开
-
docker初识
Docker环境搭建下载get.docker.com并命名为get-docker.shcurl -fsSL get.docker.com -o get-docker.sh运行脚本sh get-docker.sh --mirror Aliyun //指向源重启配置文件systemctl daemon-reload启动dockersystemctl restart docker查看docker版本docker versionDocker容器生命周期管理切换镜像源{"re原创 2021-05-29 13:09:09 · 150 阅读 · 0 评论 -
数据库读写分离,分库分表
海量数据的存储与访问瓶颈解决方案-数据切分垂直切分垂直切分就是按照不同的表或者Schema切分到不同的数据库中,如:订单表和商品表在同一个数据库中,而我们现在要对其切分,使得订单表和商品表分别落在不同的数据库中,使其完全隔离,从而达到降低数据库负载的效果。优点:拆分之后业务清晰,拆分规则明确;系统之间容易扩展和整合数据维护简单缺点部分业务表无法join,只能通过接口调用,提升了系统的复杂度跨事务难以处理垂直切分后,某些业务数据过于庞大,仍然存在单体性能瓶颈水平切分它需要将一原创 2021-05-16 16:43:47 · 444 阅读 · 2 评论 -
接口幂等性
什么是幂等性幂等性设计的核心思想select,update,delete,insert和混合操作的接口幂等性提交订单按钮如何防止重复提交表单录入页如何防止重复提交微服务接口,客户端重试时,会对业务数据产生影响吗幂等性:f(f(x))=f(x)幂等元素运行多次,还等于它原来的运行结果在系统中,一个接口运行多次,与运行一次的效果是一致的什么情况下需要幂等性重复提交,接口重试,前端操作抖动等业务场景:多次点击提交订单,后台应只生成一个订单支付时,由于网络问题重发,应该只扣一次前幂等性的原创 2021-05-13 21:40:16 · 139 阅读 · 3 评论 -
基于zookeeper的瞬时节点实现分布式锁
zookeeper的数据结构zookeeper的观察器可设置观察器的3个方法:getData();getChildren();exists();节点数据发生变化,发送给客户端观察器只能监控一次,再监控重新设置zookeeper分布式锁原理利用zookeeper的瞬时有序节点的特性多线程并发创建瞬时节点时,得到有序的序列序号最小的线程获得锁其他的线程则监听自己序号的前一个序号前一个线程执行完成,删除自己序号的节点下一个序号的线程得到通知,继续执行以此类推创建节点时,已经确定了原创 2021-05-09 21:02:55 · 172 阅读 · 0 评论 -
基于分布式锁解决定时任务重复问题
在任务执行之前去获取锁,哪个服务获取到锁,哪个服务去执行任务@Service@Slf4jpublic class SchedulerService { @Autowired private RedisTemplate redisTemplate; @Scheduled(cron = "0/5 * * * * ?") public void sendSms(){ try(RedisLock redisLock = new RedisLock(redis.原创 2021-05-09 10:40:17 · 195 阅读 · 0 评论 -
基于Redis的Setnx实现分布式锁
实现原理获取锁的Redis命令set resource_name my_random_value NX PX 30000resource_name:资源名称,可根据不同的业务区分不同的锁my_random_value:随机值,每个线程的随机值都不同,用于释放锁的校验。NX:key不存在时设置成功,key存在则设置不成功PX:自动失效时间,出现异常情况,锁可以过期失效利用NX的原子性,多个线程并发时,只有一个线程可以设置成功设置成功获得锁,可以执行后续的业务处理如果出现异常,过了锁的有效期原创 2021-05-09 09:46:03 · 634 阅读 · 5 评论 -
基于数据库实现分布式锁
基于数据库实现分布式锁多个进程/多个线程访问共同组件数据库通过select…for update 访问同一条数据,for update锁定数据,其他线程只能等待Select For update语句该语句用来锁定特定的行(如果有where子句,就是满足where条件的那些行)。当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。mysql默认是自动提交事务的,将窗口1设置为手动提交事务在窗口1中执行select原创 2021-05-07 08:34:23 · 112 阅读 · 0 评论 -
mysql提交事务的方式
查看 MySQL 客户端的事务提交方式命令:select @@autocommit;修改 MySQL 客户端的事务提交方式为手动提交命令:set @@autocommit = 0;(注:0 表示手动提交,即使用 MySQL 客户端执行 SQL 命令后必须使用commit命令执行事务,否则所执行的 SQL 命令无效,如果想撤销事务则使用 rollback 命令。1 表示自动提交,即在 MySQL 客户端不在需要手动执行 commit 命令。)MySQL 在自动提交模式下,每个 SQL 语句都是一个独立的原创 2021-05-07 07:57:34 · 1804 阅读 · 0 评论 -
分布式一致性 Session
单机部署的时候,登录之后将会把用户登录信息放在 Session 中, 用户每次操作首先先校验 Session 是否存在用户信息,如果不存在 将会强制让用户先去登录。 所有操作都在一台 Tomcat 上,这当然没有什么问题。 集群部署之后,由于 Nginx 使用默认负载均衡策略(轮询),请求将 会按照时间顺序逐一分发到后端应用上。也就是说刚开始我们在 Tomcat1 登录之后,用户信息放在 Tomcat1的 Session里。过了一 会...原创 2021-04-15 22:13:55 · 83 阅读 · 0 评论 -
Logstash数据同步
将数据库表中的数据同步到elasticsearch中环境准备logstash-7.4.2jdk1.8logstash-db-sync.conf配置文件input { jdbc { # 设置 MySql/MariaDB 数据库url以及数据库名称 jdbc_connection_string => "jdbc:mysql://192.168.2.252:3306/shop?useUnicode=true&characterEncoding=UT原创 2021-04-10 13:51:55 · 331 阅读 · 0 评论 -
springboot整合Elasticsearch
pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org原创 2021-04-05 09:16:03 · 107 阅读 · 1 评论 -
elasticsearch读写原理
elasticsearch写原理客户端选择一个 node 发送请求过去,这个 node 就是 coordinating node(协调节点)。coordinating node 对 document 进行路由,将请求转发给对应的 node(有 primary shard)。实际的 node 上的primary shard 处理请求,然后将数据同步到 replica node。 coordinating node 如果发现primary node 和所有 replica node 都搞定之后,就返回原创 2021-04-03 22:17:50 · 149 阅读 · 0 评论 -
集群脑裂
Elasticsearch集群脑裂现象探讨我们都遇到过这个 - 在我们开始准备一个elasticsearch集群的时候,第一个问题就是“集群需要有多少节点?”。我想大家都知道,这个问题的答案取决于很多因素,例如期望的负载,数据大小,硬件等。这篇博文不会深入解释如何调整集群大小的细节,而是去关注另一个同样重要的事情 - 如何避免脑裂问题。什么是脑裂?让我们看一个有两个节点的elasticsearch集群的简单情况。集群维护一个单个索引并有一个分片和一个复制节点。节点1在启动时被选举为主节点并保存主分片原创 2021-04-03 19:15:23 · 286 阅读 · 0 评论 -
elasticsearch集群搭建
操作系统:centos7三台虚拟机192.168.2.251192.168.2.252192.168.2.253配置文件elasticsearch.yml公共配置:cluster.routing.allocation.disk.threshold_enabled: falsecluster.name: immoc-es-clusternode.name: es-node1path.data: /usr/local/elasticsearch-7.4.2/datapath.logs.原创 2021-04-03 17:01:18 · 109 阅读 · 0 评论 -
redis持久化
什么是持久化持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化Redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上。持久化的实现方式快照方式持久化快照方式持久化就是在某时刻把所有数据进行完整备份。例:Mysql的Dump方式、Redis的RDB方式。写日志方式持久化写日志方式持久化就是把用户执行的所有写指令(增删改)备份到文件中,还原数据时只需要把备份的所有指令重新执行一遍即可。例:Mysql的Binlog、Red.原创 2021-03-02 23:05:13 · 100 阅读 · 0 评论 -
http图解cookie和session
session当与服务端进行会话时,服务端就会为该用户分一块新的内存空间,用以存放该用户的信息。服务器端就会把代表这块内存的sessionId发送给客户端存放到本地的浏览器cookie中。当浏览器被关闭就被清空。sessionId在tomcat中就叫jsessionId。之后,只有你浏览器没有关闭,你每向服务器发请求,服务器就会从你发送过来的cookies中拿出这个session id,然后根据这个session id到相应的内存中取你之前存放的数据。 但是,如果你退出登陆了,服务器会清掉属于你的内存区原创 2021-02-03 23:17:54 · 177 阅读 · 0 评论 -
前后端项目跨域问题
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源(域名,协议,端口)策略造成的,是浏览器对JavaScript施加的安全限制。当前端调用处于不同域名或者端口的时候,就会出现跨域问题。浏览器先根据同源策略对前端页面和后台交互地址做匹配,若同源,则直接发送数据请求;若不同源,则发送跨域请求。服务器解析程序收到浏览器跨域请求后,根据自身配置返回对应文件头。若未配置过任何允许跨域,则文件头里不包含Access-Control-Allow-origin字段,若配置过域名,则返回Access-Cont原创 2021-01-31 21:48:06 · 361 阅读 · 0 评论