总结

文章目录

  • 1. GateWay:10010
  • 2. Docker
  • 3. ES:海量数据的存储、搜索、计算
    • 3.1 数据搜索
    • 3.2 数据同步
  • 4. 微服务保护:Sentinel
  • 4. 分布式事务:(二阶段提交)
  • 5. Redis
  • 6. 多级缓存

1. GateWay:10010

在这里插入图片描述

2. Docker

镜像:将代码打包成镜像,镜像中就包含程序所依赖的全部东西
容器:其实就是运行的镜像,读到内存运行起来就是容器

镜像操作:
在这里插入图片描述

容器操作:
在这里插入图片描述

容器数据管理:数据卷
容器与数据分离,数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录。

Docker-Compose:将多个docker run命令写到一个文件,开启多个容器

3. ES:海量数据的存储、搜索、计算

倒排索引:存词条(因为词条有唯一性,像 Hash这样的结构就可以存储),词条对应的文档 id,根据文档 id 到 数据库找到具体信息。
在这里插入图片描述

为什么这么快?
虽然要先查询倒排索引,再查询对应的正排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描

基本操作有:索引库操作、文档操作。原理:根据我们要存的东西的结构创建索引库,创建好之和就可以在索引库操作文档,比如新增、删除、修改等。

索引库操作有哪些?

  • 创建索引库:PUT /索引库名
  • 查询索引库:GET /索引库名
  • 删除索引库:DELETE /索引库名
  • 添加字段:PUT /索引库名/_mapping

文档操作:

  • 创建文档:POST /{索引库名}/_doc/文档id { json文档 }
  • 查询文档:GET /{索引库名}/_doc/文档id
  • 删除文档:DELETE /{索引库名}/_doc/文档id
  • 修改文档:
    • 全量修改:PUT /{索引库名}/_doc/文档id { json文档 }
    • 增量修改:POST /{索引库名}/_update/文档id { “doc”: {字段}}

使用RestHighLevelClient操作ES:

文档操作的基本步骤:

初始化RestHighLevelClient
创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk
准备参数(Index、Update、Bulk时需要)
发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete、bulk
解析结果(Get时需要)

3.1 数据搜索

  • query:查询条件
  • from和size:分页条件
  • sort:排序条件
  • highlight:高亮条件

用ES实现搜索:(用户可以给一些限制搜索的条件、我身边的*********** 、搜出来结果的排序)
用户可以输入想搜索的内容,对用户搜索的用全文检索;当用户对搜索的内容限制时:城市、价格,使用复合查询(布尔查询);用户想实现我身边的**:添加距离排序;酒店竞价排名:有些酒店花钱了做广告,要让这些酒店先展示:给酒店添加一个字段用来标识是不是广告,使用复合查询(得分查询),filter用来选出这些打广告的酒店,选择算分函数和加权方式,让其得分变大。还可以:搜索框自动补齐

3.2 数据同步

同步调用
异步通知 MQ
监听binlog Canal

4. 微服务保护:Sentinel

解决服务雪崩问题的解决办法:

  • 流量控制 ---------- 预防措施

    • 以下为对资源的限流(接口)
    • 直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
    • 关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
      • 使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是优先支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流。
    • 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流
    • 热点参数的限流(秒杀商品)
  • 隔离和降级 ------将故障控制在一定范围,都是保护的调用方

    • 说明:微服务远程调用都是基于Feign来完成的,因此需要将Feign与Sentinel整合,在Feign里面实现线程隔离和服务熔断。
    • 隔离:setinel采用的基于信号量的隔离,用计算器来计数,超过时就限流
    • 降级:断路器统计服务调用的异常比例慢请求比例,如果超出阈值则会熔断该服务,走降级逻辑。它是通过断路器实现的(打开、关闭、半开),打开状态就是熔断了,关闭状态就可以正常请求,半开状态是熔断后出现的,之后隔几秒再尝试放行,看看断路器用不用关闭。

4. 分布式事务:(二阶段提交)

TCC空回滚和事务悬挂
try阶段阻塞时,可能导致全局事务超时而触发二阶段的cancel操作。在未执行try操作时先执行了cancel操作,这时cancel不能做回滚,就是空回滚

对于已经空回滚的业务,之前被阻塞的try操作恢复,继续执行try,就永远不可能confirm或cancel ,事务一直处于中间状态,这就是业务悬挂

业务悬挂解决办法:执行try操作时,应当判断cancel是否已经执行过了,如果已经执行,应当阻止此次try操作,避免悬挂

5. Redis

什么时候执行RDB:

  • 执行save命令
  • 执行bgsave命令
    • fork采用的是copy-on-write技术,当主进程执行读操作时,访问共享内存,当主进程执行写操作时,则会拷贝一份数据,执行写操作。
  • Redis停机时
  • 触发RDB条件时:在 redis.conf 中可以配置

AOF:文件追加的方式,记录的是一个一个命令,可能涉及到Rewrite机制,AOF文件比RDB文件大的多

主从第一次建立连接时,采用RDB持久化进行全量同步,master判断一个节点是否是第一次同步的依据,就是看replid是否一致。


什么时候执行全量同步?
slave节点第一次连接master节点时
slave节点断开时间太久,repl_baklog中的offset已经被覆盖时

故障转移选新的master:其实就是执行slaveof no one ,其他slave执行slaveof 自己

6. 多级缓存

参考多级缓存篇:https://blog.csdn.net/qq_51240148/article/details/133556865
在这里插入图片描述
首先用户发一个请求,先经过Nginx(此处Nginx作为静态资源服务器与反向代理服务器)返回一个静态资源,经过浏览器渲染给呈现出来,但是上面的数据都是假的,此时前端会发一些ajax请求后端数据,先吧请求发送给Nginx,因为Nginx中有本地缓存,所以还是将请求路由(这里类似于redis的槽),确保同一个请求路由到同一个Nginx服务器,当Nginx接收到请求时,首先会查看本地缓存有没有,没有的话先在redis缓存中找,当redis中也没有的话才访问Tomcat,此时Tomcat会先在JVM进程缓存中去找,再没有的话才去数据库查,然后针对缓存同步来说的话,用canal监听mysql的binlog日志,其实canal就是伪装成一个slave节点,当监听到binlog变换时,通知给java客户端,然后在程序中进行缓存同步的操作。其实canal在代码中的话就是实现EntryHandler<>这个接口重写里面的insert、update、delete方法,将redis和jvm进程缓存进行更新操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/549516.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化-ECharts Html项目实战(3)

在之前的文章中&#xff0c;我们学习了如何创建堆积折线图&#xff0c;饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 …

MeterSphere和Jmeter使用总结

一、MeterSphere 介绍 MeterSphere 是⼀站式开源持续测试平台&#xff0c;涵盖测试跟踪、接⼝测试、UI 测试和性能测试等&#xff0c;全 ⾯兼容 JMeter、Selenium 等主流开源标准&#xff0c;能够有效助⼒开发和测试团队在线共享协作&#xff0c;实现端到 端的测试管理跟踪…

MPIKGC:大语言模型改进知识图谱补全

MPIKGC&#xff1a;大语言模型改进知识图谱补全 提出背景MPIKGC框架 论文&#xff1a;https://arxiv.org/pdf/2403.01972.pdf 代码&#xff1a;https://github.com/quqxui/MPIKGC 提出背景 知识图谱就像一个大数据库&#xff0c;里面有很多关于不同事物的信息&#xff0c;这…

python知识点总结(四)

这里写目录标题 1、Django 中的缓存是怎么用的&#xff1f;2、现有2元、3元、5元共三种面额的货币&#xff0c;如果需要找零99元&#xff0c;一共有多少种找零的方式?3、代码执行结果4、下面的代码执行结果为&#xff1a;5、说一下Python中变量的作用域。6、闭包7、python2与p…

Github 2024-03-18开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-18统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目7TypeScript项目3非开发语言项目1Solidity项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476 天协议类型…

Apache Doris 2.1 核心特性 Variant 数据类型技术深度解析

在最新发布的 Apache Doris 2.1 新版本中&#xff0c;我们引入了全新的数据类型 Variant&#xff0c;对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列&#xff0c;彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。为了让大家快速…

MS17_010 漏洞利用与安全加固

文章目录 环境说明1 MS17_010 简介2 MS17_010 复现过程3 MS17_010 安全加固 环境说明 渗透机操作系统&#xff1a;kali-linux-2024.1-installer-amd64漏洞复现操作系统: cn_windows_7_professional_with_sp1_x64_dvd_u_677031 1 MS17_010 简介 MS17_010 漏洞后门利用程序 Eter…

【K8S】docker和K8S(kubernetes)理解?docker是什么?K8S架构、Master节点 Node节点 K8S架构图

docker和K8S理解 一、docker的问世虚拟机是什么&#xff1f;Docker的问世&#xff1f;docker优点及理解 二、Kubernetes-K8SK8S是什么&#xff1f;简单了解K8S架构Master节点Node节点K8S架构图 一、docker的问世 在LXC(Linux container)Linux容器虚拟技术出现之前&#xff0c;业…

java8:ArrayList与Vector的实现原理

概述 一上来&#xff0c;先来看看源码中的这一段注释&#xff0c;我们可以从中提取到一些关键信息&#xff1a; Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to…

内网穿透的应用-如何使用Docker安装DockerUI可视化管理工具无公网IP远程访问

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

Flutter-数字切换动画

效果 需求 数字切换时新数字从上往下进入&#xff0c;上个数字从上往下出新数字进入时下落到位置并带有回弹效果上个数字及新输入切换时带有透明度和缩放动画 实现 主要采用AnimatedSwitcher实现需求&#xff0c;代码比较简单&#xff0c;直接撸 import dart:math;import p…

huawei 华为交换机 配置手工模式链路聚合示例

组网需求 如 图 3-21 所示&#xff0c; SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络&#xff0c;SwitchA 和 SwitchB 之间有较大的数据流量。 用户希望SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同 VLAN 间互相通信。 同时用户也希望能够提…