- 博客(135)
- 收藏
- 关注
原创 nginx的安装
本文详细介绍了在Linux和Windows系统下安装Nginx的方法。重点阐述了Linux环境下两种离线安装方式(rpm包安装和源码编译安装)的完整步骤,包括gcc、pcre、zlib、openssl等依赖组件的安装过程,以及nginx的配置、编译、启动和设置开机自启动等操作。同时对比了在线安装和Windows安装的简易流程,并提供了Nginx服务管理、SSL模块开启等实用技巧。文章内容全面系统,涵盖了从基础安装到高级配置的各个环节,为不同环境下的Nginx部署提供了详细指导。
2025-09-02 11:46:12
861
原创 Elasticsearch的优化
Elasticsearch高效使用与优化指南 【摘要】本文从硬件配置、分片策略、写入优化、内存管理、分页查询、容灾方案六个维度系统总结Elasticsearch核心优化方法。关键点包括:1)使用SSD硬盘并配置多路径存储;2)分片大小控制在10-50GB,遵循"节点数≤主分片数*(副本数+1)"原则;3)写入优化采用批量提交、减少刷新频率、调整translog策略;4)JVM堆内存不超过32GB且低于物理内存50%;5)深度分页推荐search_after+PIT方案替代传统scroll
2025-09-02 10:27:03
828
原创 Elasticsearch操作数据的原理
倒排索引:通过词项字典和倒排列表实现高效全文搜索,支持跳表、前缀压缩等优化技术。 数据操作:采用路由算法定位分片,写入需主分片确认后同步副本,读取可轮询主/副本分片。关键词检索采用两阶段查询机制(Query+Fetch)。 持久化机制:通过内存缓冲区、Translog日志和定期刷新/提交操作实现数据可靠性,默认1秒近实时可见。 并发控制:基于_seq_no和_primary_term的乐观锁机制,避免写冲突。 集群管理:包含Master选举流程和防脑裂策略。
2025-09-01 17:10:12
697
原创 Elasticsearch的查询操作
本文介绍了在JDK8和ES6.5.4环境下使用Java进行ES文档查询的完整流程。主要内容包括:1. 环境搭建和测试数据准备,包括创建索引结构、构建SMS日志测试数据;2. 基础查询方法实现,包括term精确查询、terms多值查询、match匹配查询等;3. 高级查询功能,如复合查询(bool、boosting)、分页查询(from+size、scroll)、聚合查询(分桶聚合、指标聚合)等;4. 特殊查询场景处理,包括高亮显示、范围统计、去重计数等;5. 性能优化建议,如scroll深分页。
2025-09-01 12:01:30
1128
原创 Elasticsearch的基本操作
本文介绍了Elasticsearch(ES)的基本结构和操作方式。主要内容包括:1.ES核心概念:索引(Index)、类型(Type)、文档(Doc)和字段(Field)的结构特性,以及各版本差异;2.RESTful API操作语法,涵盖索引/文档的增删改查;3.Java客户端操作示例,包括连接ES、索引管理、文档CRUD和批量操作。文章详细说明了ES数据类型、分片机制,并提供了完整的Java代码示例,帮助开发者掌握ES的基本使用和Java集成方法。
2025-08-31 11:32:29
1031
原创 Elasticsearch的安装
Elasticsearch(ES)是基于Lucene的分布式全文搜索引擎,提供RESTful API接口。本文详细介绍了如何在Linux和Windows系统上安装ES及其配套工具(Kibana、IK分词器、head插件)。重点讲解了两种Linux安装方式(Docker独立安装和docker-compose编排安装),包括镜像配置、目录挂载、权限设置等关键步骤,并提供了集群健康状态检查方法。文章还涉及Windows环境下的安装注意事项和常见问题解决方案,如SSL配置修改、跨域访问设置等。
2025-08-31 11:01:14
556
原创 Elasticsearch的基本概念
Elasticsearch (ES) 是一个基于 Lucene 的分布式全文搜索引擎,提供近实时数据存储、检索和分析功能。其核心架构包含索引(类似数据库表)、文档(类似数据行)、分片(数据水平分割)、副本(数据冗余备份)等概念。ES 通过 RESTful API 隐藏了 Lucene 的复杂性,支持结构化搜索、聚合分析等功能。与 ELK Stack(Elasticsearch/Logstash/Kibana)结合可实现日志收集、存储和可视化。集群由多个节点组成,包括主节点、数据节点等角色。
2025-08-31 09:54:31
591
原创 kubernetes简单使用之高级调度与Helm包管理器
Kubernetes高级调度部分介绍了CronJob定时任务、InitContainer初始化容器、污点(Taint)与容忍度(Toleration)机制,以及节点/Pod亲和性调度策略。其中,污点机制通过NoSchedule、PreferNoSchedule和NoExecute三种效果控制Pod调度。Helm作为Kubernetes包管理器,通过Chart(应用模板)、Config(配置参数)和Release(运行实例)三大概念实现应用打包和版本管理。支持命令行参数覆盖(--set)和配置文件(-f)两种
2025-08-30 19:39:17
959
原创 kubernetes简单使用之持久化存储
Kubernetes提供多种持久化存储方案,满足不同场景需求: emptyDir:临时存储,生命周期与Pod绑定,适用于容器间数据共享 hostPath:直接挂载宿主机目录,开发调试适用但存在安全风险 NFS:网络共享存储,支持多Pod并发读写,需配置exports文件 PV/PVC:解耦式存储管理,支持静态/动态供给,生产环境首选 云存储:深度集成云平台,支持动态扩容和快照 关键特性对比: 持久性:PV/PVC和云存储最佳 共享性:NFS支持RWX多节点读写,生命周期:PV独立于Pod存在。
2025-08-30 17:56:56
985
原创 kubernetes简单使用之服务发现与配置管理
Kubernetes服务发现与配置管理详解 一、服务发现 Service:提供Pod固定访问入口和负载均衡,支持ClusterIP/NodePort/LoadBalancer三种类型 Ingress:管理HTTP/HTTPS路由规则,需配合Ingress Controller实现,支持SSL终止等高级功能 两类对象协同工作:Ingress处理外部流量路由 → Service完成内部负载均衡 → Pod 二、配置管理 ConfigMap:存储非敏感配置数据,支持环境变量注入和文件挂载。
2025-08-30 17:32:36
638
原创 kubernetes简单使用之资源调度
本文系统介绍了Kubernetes中的核心资源管理机制。Label和Selector是Kubernetes资源分类与关联的核心工具,通过键值对实现资源分组和动态关联。Deployment管理无状态应用,支持滚动更新、版本回滚和弹性伸缩功能。StatefulSet针对有状态服务,提供稳定的网络标识和持久化存储,支持有序部署和灰度发布。DaemonSet确保每个节点运行指定Pod,适用于日志收集等系统服务。HPA(HorizontalPodAutoscaler)基于CPU/内存指标实现Pod自动扩缩容。
2025-08-30 17:07:00
1019
原创 kubernetes简单使用之Pod详解
本文详细介绍了K8s中Pod的创建方式、探针机制和生命周期管理。Pod创建可通过kubectl命令或YAML文件直接创建,推荐使用控制器(Deployment/StatefulSet/DaemonSet)进行生产环境管理。探针机制包括startupProbe、livenessProbe和readinessProbe,分别用于检测应用启动、存活和就绪状态,需合理配置参数以确保应用健康。Pod生命周期包含创建、运行、退出和终止四个阶段,可通过postStart和preStop钩子实现初始化和清理操作。
2025-08-30 16:23:13
851
原创 搭建kubernetes集群
本文详细介绍了Kubernetes集群的安装配置过程,主要包括: 环境准备:关闭防火墙、SELinux、swap,设置主机名、时间同步等基础配置 安装Docker和Kubernetes组件:配置阿里云镜像源,安装kubeadm、kubelet、kubectl 集群部署:初始化Master节点,配置kubectl,验证集群状态,添加Node节点 网络插件安装:部署和配置Calico网络插件 集群测试:通过部署Nginx服务验证集群可用性 kubectl工具详解:包括常用命令分类、语法格式和运维场景速查表。
2025-08-30 16:02:22
554
原创 kubernetes组件和基本概念
Kubernetes(K8s)是由Google开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它支持多种部署方式,包括传统部署、虚拟化部署和容器化部署,其中容器化部署具有轻量、快速启动和高效编排等优势。K8s的核心组件包括控制平面(如APIServer、etcd)和节点组件(如kubelet、kube-proxy),并支持无状态和有状态服务的管理。通过声明式配置(YAML)定义资源对象,K8s确保实际状态与期望状态一致,提供自动化运维、高效资源管理和服务治理能力。
2025-08-30 12:00:03
1208
原创 Docker compose与swarm
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过 YML 文件配置应用程序所需的所有服务,只需一个命令即可创建并启动所有服务。主要步骤包括:使用 Dockerfile 定义环境,通过 docker-compose.yml 定义服务,最后执行 docker-compose up 启动应用。Docker Swarm 则是 Docker 的集群管理工具,支持多节点部署,通过管理节点和工作节点架构实现高可用性。两者结合可高效管理容器化应用的构建、编排和扩展。
2025-08-30 11:12:54
936
原创 Docker的常用命令及简单使用
本文总结了Docker的常用命令和核心概念,主要包含以下内容: Docker基础命令:包括帮助命令、镜像管理(搜索/下载/删除镜像)和容器操作(启动/停止/删除容器)等常用指令。 数据卷管理:介绍了目录挂载的三种方式(指定目录挂载、匿名挂载和具名挂载)以及数据卷容器实现数据共享的方法。 Docker镜像原理:解析了UnionFS联合文件系统和镜像分层结构,说明镜像构建过程。 Dockerfile构建:详细说明如何编写Dockerfile文件构建自定义镜像,包括基础镜像选择、环境变量配置和端口暴露等。
2025-08-29 22:45:04
979
原创 Docker的安装
Docker是一个开源的容器化平台,可将应用及其依赖打包为轻量级、可移植的容器。其核心组件包括镜像(应用模板)、容器(运行实例)和仓库(镜像存储)。安装步骤包括卸载旧版本、配置依赖、设置镜像源(推荐阿里云)以及启动服务。通过运行hello-world镜像可验证安装成功。相比虚拟机,Docker直接使用宿主机内核,启动更快且资源占用更少。还支持配置镜像加速提升下载效率。卸载时需要清除引擎和资源文件。
2025-08-29 21:46:22
805
原创 SpringCloud Alibaba实战之Seata
本文介绍如何使用Seata实现分布式事务管理。主要包括: Seata安装与配置,微服务架构搭建:构建包含多个服务的分布式系统,各服务独立数据库。事务实现关键点: 使用@GlobalTransactional标注全局事务入口,各服务数据库需创建undo_log表记录事务日志。原理说明:基于两阶段提交协议,通过TC协调全局事务,RM管理分支事务,TM控制事务边界。Seata支持AT、TCC、SAGA等多种事务模式,本文示例采用AT模式,通过自动生成反向SQL实现事务回滚,有效解决分布式环境下的数据一致性问题。
2025-08-16 18:10:02
781
原创 SpringCloud Alibaba实战之Gateway
本文介绍了Spring Cloud Gateway网关的基本使用和扩展功能。主要内容包括:1) 网关基础配置,通过YML文件定义路由规则实现请求转发和负载均衡;2) 自定义路由断言工厂,通过继承AbstractRoutePredicateFactory实现登录校验等业务逻辑;3) 自定义网关过滤器,继承AbstractGatewayFilterFactory;4) 全局跨域配置方法。文中详细展示了代码实现和配置示例,该方案可用于构建微服务架构中的API网关层,实现路由转发、权限控制、请求过滤等核心功能。
2025-08-16 17:14:52
737
原创 SpringCloud Alibaba实战之Sentinel
Sentinel是阿里巴巴开源的一款微服务流量控制组件,提供流量控制、熔断降级、系统保护等功能。本文详细介绍了Sentinel的核心功能和使用方法: 包括Sentinel控制台安装、微服务集成、资源定义和规则配置,针对不同类型资源(Web接口、@SentinelResource注解、OpenFeign)的异常处理方案。各种规则详解: 流量控制、熔断降级、热点参数限流、授权规则、系统规则。规则持久化:通过Nacos实现配置持久化,避免应用重启后规则丢失。
2025-08-16 16:46:46
958
原创 SpringCloud Alibaba实战之OpenFeign
本文介绍了Spring Cloud中三种微服务远程调用方式:1)RestTemplate基础调用,通过DiscoveryClient获取服务实例;2)负载均衡调用,使用LoadBalancerClient或@LoadBalanced注解实现;3)FeignClient声明式调用,通过接口注解简化远程调用。详细说明了FeignClient的进阶用法,包括日志打印、超时控制、重试机制(间隔指数增长)和拦截器实现。最后演示了Fallback熔断降级功能,结合Sentinel在服务不可用时返回兜底数据。
2025-08-16 15:26:51
1060
原创 SpringCloud Alibaba实战之Nacos
本文介绍了SpringCloudAlibaba作为替代Netflix组件的企业级微服务解决方案,重点讲解了Nacos的核心功能与使用方式。主要内容包括:1)Nacos的两种核心功能(服务注册发现与配置中心)及两种部署模式(单机/集群);2)通过示例项目展示了Nacos的服务注册发现功能,包括服务注册、服务发现及集群测试;3)深入讲解了Nacos配置中心的使用,包括配置管理、动态刷新、多环境隔离等特性;4)提供了SpringBoot与Nacos的最佳实践,包括版本兼容、配置优先级、监听配置变更等关键知识点。
2025-08-16 11:49:40
607
原创 Git的安装和常用命令
Git是一种分布式版本控制系统,通过快照流管理项目状态,支持多人协作开发。其核心架构包括工作区、暂存区、本地仓库和远程仓库。主要操作流程:git init/clone初始化仓库,git add将修改加入暂存区,git commit提交到本地仓库,git push/pull同步远程代码。分支管理支持并行开发,通过git branch/checkout/merge实现。Git还提供撤销修改(git checkout/reset)、查看历史(git log)等功能。配置SSH密钥可实现安全认证。
2025-08-16 10:57:04
823
原创 安装MySQL
本文详细介绍了Windows和Linux系统下MySQL数据库的安装配置方法。在Windows中,重点讲解了免安装版MySQL的配置步骤,包括修改my.ini文件、环境变量设置、初始化安装、启动服务及用户授权等操作;在Linux系统中,分别介绍了使用yum安装和压缩包安装两种方式,涵盖环境准备、初始化配置、密码修改、远程访问设置等关键环节。文章还针对两种系统安装过程中可能遇到的常见问题提供了解决方案,如初始化失败、密码策略修改、防火墙设置等,为数据库管理员和开发人员提供了全面的MySQL安装指导。
2025-08-11 16:01:12
721
原创 Spring监听器
Spring通过ApplicationListener接口和@EventListener注解实现基于观察者模式的事件监听。核心原理包括事件发布、广播器分发和监听器处理三步骤。Spring提供多种内置事件类型:容器生命周期事件(如ContextRefreshedEvent)、SpringBoot特有事件(如ApplicationReadyEvent)及Web相关事件(如ServletRequestEvent),ContextRefreshedEvent和ApplicationReadyEvent的适用场景。
2025-07-19 22:57:30
951
原创 Redis的模式
Redis架构模式解析:提供单机、主从、哨兵、集群和发布订阅5种模式,分别适用于不同规模和可用性需求。单机模式简单易用但缺乏容错;主从模式实现读写分离;哨兵模式提供自动故障转移;集群模式支持水平扩展;发布订阅模式适合实时消息场景。文章详细对比了各模式特点,并针对数据一致性问题提出WAIT命令、主库强制读取等解决方案,强调不同业务场景下的选型策略(如金融系统推荐强一致性方案)。最后给出了Redisson的Java实现示例,涵盖配置管理、分布式锁和自动续期等核心功能。
2025-07-07 21:01:02
820
原创 Springcloud简单使用
Springcloud简单使用。微服务的特点:1. 每个微服务可独立运行在自己的进程里;2. 一系列独立运行的微服务共同构建起了整个系统;3. 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理、用户管理等;4. 微服务之间通过一些轻量的通信机制进行通信,例如通过REST API或者RPC的方式进行调用。
2025-06-08 20:56:56
884
原创 Springcloud底层原理
在微服务架构中Spring Cloud核心组件(Eureka、Feign、Hystrix、Zuu)分别扮演的角色:Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里。Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台。Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求。
2025-06-08 17:37:24
870
原创 redis分布式锁
针对Redis分布式锁的实现,详细介绍了三种方案并给出了详细示例:1)SET原子操作;2)Redisson框架;3)Redlock多节点容错算法。重点剖析了Redis锁的三大核心要素(加锁、解锁、超时)及常见问题(误删、续期、主从切换),并对比了Redisson与Zookeeper锁的特性。最后分析了Redis是单线程为什么这么快的原因。
2024-12-21 21:14:55
924
原创 redis如何保证缓存与数据库一致性
假设线程1执行修改数据的工作,在执行完第一步后,用完了CPU时间片,CPU开始运行线程2执行读取数据的工作,线程2先查询缓存,发现为空,就去查询数据库(注意:这时数据库中的数据还是旧数据),然后更新到缓存并返回给用户。假设先淘汰缓存,再写数据库:第一步淘汰缓存成功,第二步写数据库失败【如下图:cache中无数据,db中是旧数据】。假设先写数据库,再淘汰缓存:第一步写数据库操作成功,第二步淘汰缓存失败,则会出现DB中是新数据,Cache中是旧数据,数据不一致【如下图:db中是新数据,cache中是旧数据】。
2024-12-21 21:02:39
906
3
原创 Redis缓存穿透、击穿、雪崩
简单来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;一个一定不存在缓存且在数据库查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。假设位数组的长度为m,哈希函数的个数为k。
2024-12-21 15:06:41
1076
原创 redis过期删除及淘汰机制
4)volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存。(2)惰性删除:键过期了就过期了,不管。然后,Redis检查内存使用情况,如果已使用的内存大于maxmemory,则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。
2024-12-20 22:16:24
1657
原创 redis如何持久化
什么是持久化?简单来讲就是将数据放到断电后数据不会丢失的设备中,也就是我们通常理解的硬盘上。首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程:1>客户端向服务端发送写操作(数据在客户端的内存中)。2>数据库服务端接收到写请求的数据(数据在服务端的内存中)。3>服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。4>操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。5>磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。
2024-12-20 21:59:10
1064
原创 Redis的数据结构和使用场景
Redis是一个开源的Key-Value内存数据库,支持多种数据结构(字符串、列表、哈希、集合、有序集合),适用于高并发场景。它采用内存存储保证高性能,同时支持持久化和主从同步。Redis的有序集合(ZSet)底层采用ziplist(小数据量)或skiplist+dict(大数据量)实现,能高效支持范围查询和排序操作。相比关系型数据库,Redis能更好应对秒杀、排行榜等高并发场景,通过原子操作保证数据一致性,是提升系统性能的重要缓存中间件。
2024-12-20 21:51:03
808
原创 文件系统简介
文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。Linux最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。Linux。
2024-12-01 21:11:33
817
原创 TCP/IP协议
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。
2024-12-01 20:37:19
978
原创 OSI七层参考模型
肯定要知道对方的IP地址,这是最基本的,就像你要访问百度,肯定得知道百度的域名,域名就是百度的IP地址。在讲网络层之前,其实基于广播的这种通信就可以实现全世界通信了,你吼一声,如果全世界是一个局域网,全世界的计算机肯定可以听得见,从理论上似乎行得通,如果全世界的计算机都在吼,你想一想,这是不是一个灾难。实际上这个七层是不存在的。数据链路层中会把网络层的数据包封装到数数据链路层的数据位置,然后再添加上自己的包头,再发给物理层,物理层发给网关,网关再发给对方教室的网关,对方教室的网关收到后在那个教室做广播。
2024-11-30 23:21:31
638
原创 零拷贝与内存映射
先简单介绍一下磁盘与内存之间数据传输的方式:硬盘(磁盘)和内存之间数据传送的两种方式:PIO模式和DMA模式PIO(Programming Input Output,编程输入输出)模式下通过CPU来控制硬盘和内存之间的数据传输,是一种通过CPU执行I/O端口指令来进行数据的读写的数据交换模式。显然这种方式是不合理的,因为它需要占用大量的CPU时间来读取文件,造成文件访问时系统几乎停止响应。DMA(Direct Memory Access,直接内存访问)取代了PIO,它可以不经过CPU而直接进行磁盘和内存(内
2024-11-30 22:10:29
811
原创 计算机基础
在对CPU、缓存、内存、硬盘等概念进行详细介绍之前,先通过一个流程图来直观了解一下这几个组件之间的关系。主存就是狭义上的内存,广义上的内存包括主存和缓存。按照与CPU的接近程度,存储器分为与,简称内存与外存。内存储器又常称为主存储器(简称主存),属于主机的组成部分;外存储器又常称为辅助存储器(简称),属于外部设备。CPU不能像访问内存那样,直接访问外存,外存要与CPU或I/O设备进行数据传输,必须通过内存进行。在80386以上的高档微机中,还配置了高速缓冲存储器(cache),这时内存包括主存与两部分。
2024-11-24 23:16:41
1006
原创 mybatis连接数据库底层原理
这行代码中的child.evalNode("dataSource")方法,该方法的作用就是解析< dataSource >标签及其子标签的属性值,获取数据库连接属性,如下图所示。这三种连接数据库属性的配置方式,任选一种即可,也可以三种方式混合使用。Mybatis在加载这些属性时,首先读取第一种方式配置的,其次读取第二种方式配置的,最后读取第三种方式配置的,如果三种方式中存在同名属性,先读取的属性会被后读取的属性覆盖,即第三种配置方式的优先级高于第二种方式,第二种方式的优先级高于第一种方式。
2024-11-24 22:57:36
1091
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人