自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(306)
  • 资源 (6)
  • 收藏
  • 关注

原创 k8s 容忍和污点

该值定义尽量避免将Pod调度到存在其不能容忍的Taint的节点上,但并不是强制的,也就是说,一个没有配置Toleration的Pod会优先部署至其他节点,没有其他可以调度的节点时,还是可以部署到effect为PreferNoSchedule的节点上的,NoSchedule没有这种机制。如果未被过滤的Taint中不存在effect值为NoExecute的Taint,但是存在effect值为PreferNoSchedule的Taint,则Kubernetes会尝试将Pod分配到该节点。

2024-09-12 17:37:20 928

原创 k8s 资源管理

在生产环境中,可能会有多个Kubernetes集群,面向开发环境、测试环境、预生产环境和生产环境等。身为Kubernetes管理员,必然知道每个环境的规模有多大、可调度资源有多少,并且知道如何合理地为容器分配内存和CPU,所以一个管理员去管理整个Kubernetes集群时,很少会有资源分配超出集群可调度范围的情况。在生产环境中,可能会有多个Kubernetes集群,面向开发环境、测试环境、预生产环境和生产环境等。

2024-09-10 22:11:51 1288

原创 k8s之HPA实践——实现Web服务器的自动伸缩特性

在生产环境中,总会有一些意想不到的事情发生,比如公司网站流量突然升高,此时之前创建的Pod已不足以支撑所有的访问,而运维人员也不可能24小时守着业务服务,这时就可以通过配置HPA,实现负载过高的情况下自动扩容Pod副本数以分摊高并发的流量,当流量恢复正常后,HPA会自动缩减Pod的数量。

2024-09-06 15:02:06 429

原创 docker构建多系统架构

manifest是一个文件,这个文件包含了有关于镜像信息,如层、大小和摘要。docker manifest命令还向用户提供附加信息,比如构建镜像的操作系统和体系结构。而manifest list是一个镜像清单列表,用于存放多个不同os/arch的镜像信息。我们可以创建一个manifest list来指向两个镜像(一个linux 64位和一个指向arm64位的镜像),然后对用户提供一个唯一的镜像名称。

2024-09-05 11:49:41 819

原创 docker镜像多阶段构建

Docker 多阶段构建是为了创建轻量化和更高效的 Docker 镜像而产生的一种技术。通过使用多阶段构建,可以将不同阶段的构建需求分离开来,最终结果只包含实际部署所需要的部分,从而缩小镜像的大小。假设你有一个简单的 Go 应用程序。使用多阶段构建来创建其 Docker 镜像。:从初始阶段复制所需文件,只保留运行时所需的部分。:构建需要完整环境和工具的部分,如编译代码。

2024-09-05 11:21:41 191

原创 java 使用intern()性能对比

JDK 7及其之后的版本,intern()方法可以直接把堆中的字符串对象的地址放到字符串常量池表共享,从而达到节省内存的目的。对于内存占用使用intern方法,可以减少一半左右。时间上也有一半的差距。

2024-08-30 11:46:38 208

原创 字符串版本号转换为整形版本号比较

格式:标准版本号格式为x.y.z.e,其中x代表主版本号,y代表次版本号,z代表补丁号,e代表额外版本号,每个字段之间由.分隔。主版本号:主版本号一般从0或者1开始,可包含修饰信息,如stable_0,dev_v1,fixed_1等,一般当项目进行重大修改,如API兼容性变化时,则版本号加1。次版本号:次版本号是相对于主版本号而言,一般对应的是主版本下局部的调整,如增加功能时(不影响API的兼容性)。补丁号:一般是Bug的修复或者细小的变动。额外版本号。

2024-08-30 11:25:28 169

原创 不同JDK版本string的intern()方法

虽然intern()方法都是指返回字符串常量池中字符串对象引用,但是在不同的JDK版本中,字符串常量池的位置不同,

2024-08-30 11:06:40 320

原创 mybatis plus 使用 nested、 or查询

有多组版本号区间需要查询,同时有需要跟其他条件的关系为and。

2024-08-30 10:38:11 290

原创 java字符串常量池

String是字符串的意思,可以使用一对双引号引起来表示,而String又是一个类,所以可以用new关键字创建对象。因此字符串对象的创建有两种方式,分别是使用字面量定义和new的方式创建。字面量的定义方式以new的方式创建String类声明是加final修饰符的,表示String类不可被继承;String类实现了Serializable接口,表示字符串对象支持序列化;String类实现了Comparable接口,表示字符串对象可以比较大小。String在JDK 8及以前版本内部定义了。

2024-08-29 19:44:04 598

原创 java方法区

运行时常量池相对于class文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是说,并非预置入class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可以将新的常量放入池中,这种特性被开发人员利用得比较多的便是String类的intern()方法。上面我们讲了class文件中的常量池,接下来我们再讲一下什么是运行时常量池。加载该类的类加载器已经被回收,这个条件除非是经过精心设计的可替换类加载器的场景,如OSGi、JSP的重加载等,否则通常是很难达成的。

2024-08-27 19:32:07 852

原创 java直接内存

直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。直接内存是在Java堆外的、直接向操作系统申请的内存区间。直接内存来源于,可以通过ByteBuffer类操作。ByteBuffer类调用方法可以申请直接内存,方法内部创建了一个对象,对象存储直接内存的起始地址和大小,据此就可以操作直接内存。直接内存和堆内存之间的关系如图所示。

2024-08-26 18:11:05 804

原创 java修改常量值

【代码】java修改常量值。

2024-08-26 18:06:55 155

原创 JVM对象在堆、栈、TLAP上的分配

一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB对象经过逃逸分析,有可能把对象分配到栈上。也就是说如果将对象分配到栈,需要使用逃逸分析手段。逃逸分析是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java HotSpot编译器能够分析出一个新对象引用的使用范围,从而决定是否要将这个对象分配到堆上。

2024-08-16 19:54:06 700

原创 ios解析系统符号表

下载完dyld源码后,解压,打开进入launch-cache打开dsc_extractor.cpp文件,将预处理指令从0改为1,执行该命令,会生成。需要通过之前准备的dsc_extractor来解压获取,使用方法。源码,我使用了dyld-519.2.2.tar.gz。使用其中的dsc_extractor工具,下载地址。该网址可以下载系统库beta系统库符号表。解压后可以双击打开dmg文件,在其中的。类似这样的文件,这些就是压缩的系统库。下载对应版本的固件。

2024-08-11 09:55:22 317

原创 ios手动符号表解析

内存地址(Memory Address):内存中每个数据单元的唯一标识符,用于在运行时访问数据,即 0x0000000103164eb2。基地址(Base Address):内存块或内存区域的起始地址,用于表示数据段或代码段的起始位置。即 0x103163000。结束地址(End Address):内存块或内存区域的终止地址,用于表示该内存块的范围。即 0x103166fff。解析符号表使用bugly提供的jar执行,即可。

2024-08-06 14:05:50 457

原创 springboot 实现kafka多源配置

实际开发中,不同的topic可能来自不同的集群,所以就需要配置不同的kafka数据源,基于springboot自动配置的思想,最终通过配置文件的配置,自动生成生产者及消费者的配置。

2024-06-02 15:03:09 945 1

原创 kafka 发送文件二进制流及使用header发送附属信息

需要使用kafka发送文件二进制以及附属信息。

2024-06-02 14:06:00 708

原创 springboot kafka 提高拉取数量

如果 Kafka 仅仅参考 fetch.min.bytes 参数的要求,那么有可能会因为获取不到足够大小的消息而一直阻塞等待,从而无法发送响应给 Consumer,显然这是不合理的。消费者从服务器获取记录的最小字节数,broker 收到消费者拉取数据的请求的时候,如果可用数据量小于设置的值,那么 broker 将会等待有足够可用的数据的时候才返回给消费者,这样可以降低消费者和 broker 的工作负载。开发过程中,使用kafka批量消费,发现拉取数量一直为1,如何提高批量拉取数量,记录下踩坑记录。

2024-06-01 08:12:56 801

原创 kafka配置消费者重要参数

这个属性的默认值为5分钟。如果消费者没有在session.timeout.ms指定的时间内发送心跳给群组协调器,则会被认为已“死亡”,协调器就会触发再均衡,把分区分配给群组里的其他消费者。它的默认值是latest,意思是说,如果没有有效的偏移量,那么消费者将从最新的记录(在消费者启动之后写入Kafka的记录)开始读取。如果使用轮询策略为消费者C1和消费者C2分配分区,那么消费者C1将分配到主题T1的分区0和分区2以及主题T2的分区1,消费者C2将分配到主题T1的分区1以及主题T2的分区0和分区2。

2024-05-22 00:07:37 1225

原创 Elasticsearch检索的原理

也就是说,假设一个索引中有5个主分片,每个分片一个副本分片,则一共10个分片(5主分片+5副本分片),一次搜索请求会由5个分片来完成(这5个分片可能是主分片,也可能是副本分片)。它是一个用于负载平衡的策略,可以适应不同的请求类型和当前系统状态的变化,并选择最佳的副本分片来响应请求。举例来说,对于需要更多资源的请求,自适应副本选择策略可以选择资源更充足的副本分片,而对于需要更快响应的请求,它可以选择负载更轻的副本分片。3)选择要在查询中使用的索引,根据路由机制选择待检索的分片(主分片或者副本分片)。

2024-05-20 06:31:57 399 1

原创 Elasticsearch段合并的原理

自动刷新流程每秒会创建一个新的段(由动态配置参数refresh_interval决定),导致短时间内段数量暴增。而段数目太多会带来众多问题,包含但不限于如下几点。❑资源消耗:每一个段都会消耗文件句柄、内存和CPU运行周期。❑搜索变慢:每个搜索请求都必须轮流检查每个段,所以段越多,搜索也就越慢。Elasticsearch通过在后台进行段合并来解决上述问题。小段被合并到大段,这些大段再被合并到更大的段。段合并的时候会将那些旧的已删除文档从文件系统中清除。

2024-05-20 06:27:04 1075 1

原创 ElasticSearch 查询优化之skipped shards

生产环境中大数据量的查询可以通过skipped shards 时间来过滤分片来提高查询效率。通过timeDate可以跳过149个分片。待查询的分片数大于 128。

2024-05-19 15:28:59 301 1

原创 Elasticsearch8.x 向量搜索实现图搜图及文搜图

【代码】Elasticsearch8.x 向量搜索实现图搜图及文搜图。

2024-05-19 15:19:15 442

原创 Elasticsearch写入的核心概念

也就是说,新插入的文档在刷新到段(内存中)之前是不能被搜索到的,如图所示。使用倒排索引的坏处是更新了词典词库后,老的索引不能生效,如果要使其可搜索,则必须重建整个索引或者借助reindex操作迁移索引。为了防止Elasticsearch集群宕机造成数据丢失,为了保证可靠存储,一个文档被索引之后,Elasticsearch就会将其添加到内存缓冲区,并且同时写入事务日志文件(translog)中。❑如果设置了副本,则数据会先写入主分片,主分片再同步到副本分片,同步操作会加重磁盘IO负担,间接影响写入性能。

2024-05-17 06:37:45 589

原创 Elasticsearch的并发控制策略

这两个参数共同提供了一种强大的控制机制,确保只有当所提供的版本信息与文档的最新状态一致时,才会执行写入操作。

2024-05-16 07:42:14 513

原创 elasticsearch如何定位红色或黄色的索引

在这个例子中,它被设置为n(节点名称)、index(索引名)、shard(分片编号)、prirep(是否为主分片)、state(分片状态)、sto(存储方式)、sc(分片大小)、unassigned.reason(未分配原因)和unassigned.details(未分配详细信息)。该API用于查询集群中的所有分片信息,包括节点名称、索引名、分片编号、是否为主分片、分片状态、存储方式、分片大小、未分配原因和详细信息,并按照存储方式和索引名称进行排序。为此,让集群进一步返回给定分片的当前分配情况和逻辑。

2024-05-16 07:21:12 925

原创 elasticsearch使用Ngram实现任意位数手机号搜索

当对keyword类型的字段进行高亮查询时,若值为123asd456,查询sd4,则高亮结果是<em>123asd456<em>。那么,有没有办法只对sd4高亮呢?用一句话来概括问题:明明只想查询ID的一部分,但高亮结果是整个ID串,此时应该怎么办?Ngram是一种基于统计语言模型的算法。Ngram基本思想是将文本里面的内容按照字节大小进行滑动窗口操作,形成长度是N的字节片段序列。此时每一个字节片段称为gram。

2024-05-15 06:39:40 848

原创 Elasticsearch分词及其自定义

业务需求是这样的:有一个作者字段,比如Li,LeiLei;Han,MeiMei以及LeiLei Li……现在要对其进行精确匹配。对此,你有什么想法?你可能会考虑用自定义分词的方式,通过分号分词。但是这样的话,如果检索Li,LeiLei,那么LeiLei Li就不能被搜索到,而我们希望LeiLei Li也被搜索到。并且对于这种分词,Li,LeiLei中间不加逗号也不能匹配到。但是为什么在映射里面添加停用词也是无效的呢?

2024-05-15 05:59:27 1935

原创 Elasticsearch解决字段膨胀问题

"host": {Flattened的本质是将原来一个复杂的Object或者Nested嵌套多字段类型统一映射为扁平的单字段类型。这里要强调的是:不管原来内嵌多少个字段、内嵌多少层,利用Flattened类型都能一下“拉平”

2024-05-14 07:01:36 1030

原创 elasticsearch 动态映射

在以上实战中,对应第一种情况,Object对象可以添加新的属性,添加了last字段。举例:string类型匹配为text和keyword两种类型,但实际用户极有可能只期望排序和聚合的keyword类型,或者只需要存储text类型,如网页正文内容只需要全文检索,不需要排序和聚合操作。答:boolean类型、float类型、long类型、Object类型、Array类型、date类型、字符串类型。获取映射发现,create_date是text和keyword组合类型,不是我们期望的date类型。

2024-05-14 06:41:25 808

原创 Elasticsearch映射定义

映射类似于关系型数据库中的Schema(模式)。Schema在关系型数据库中是指库表包含的字段及字段存储类型等基础信息。映射定义由两部分组成:元字段、数据类型字段。

2024-05-13 18:04:21 529

原创 基于docker 的elasticsearch冷热分离及生命周期管理

我们可以清晰看到,插入第6条数据会触发max_docs:5的条件,原来的索引my-index-20250709-000001会继续保留,而新写入的第6条数据滚动到了新索引my-index-20250709-000002中。目前采用冷热集群架构,其中热节点使用SSD,并具有良好的索引和搜索性能,将数据保存4天后推送到温节点中,并使用HDD进行存储。某客户的线上业务场景如下:系统每天增加6TB日志数据,高峰时段的写入和查询频率都很高,导致Elasticsearch集群压力大,经常出现查询缓慢的问题。

2024-05-13 07:50:12 1496 1

原创 基于docker安装flink

注意:当你在流式查询上使用这种模式时,Flink 会将结果持续的打印在当前的控制台上。如果流式查询的输入是有限数据集,那么 Flink 在处理完所有的输入数据之后,作业会自动停止,同时控制台上的打印也会自动停止。滚动窗口可以定义在事件时间(批处理、流处理)或处理时间(流处理)上。Tableau模式(tableau mode)更接近传统的数据库,会将执行的结果以制表的形式直接打在屏幕之上。表格模式(table mode)在内存中物化结果,并将结果用规则的分页表格的形式可视化展示出来。

2024-05-09 08:47:58 1134

原创 基于K8S构建Jenkins持续集成平台

NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。我们可以利用NFS共享Jenkins运行的配置文件、Maven的仓库依赖文件等Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/inbound-agent:4.13.3-1。

2024-05-05 10:07:44 1307 2

原创 Jenkins集成Kubernetes 部署springboot项目

在尝试用kubernetes的yml文件启动pipeline服务时,会出现Kubernetes无法拉取镜像的问题,这里需要在kubernetes所在的Linux中配置Harbor服务信息,并且保证Kubernetes可以拉取Harbor上的镜像。配置Jenkins的目标服务器,可以将yml文件传输到K8s的Master上。设置执行kubectl的脚本到Jenkinsfile。将pipeline.yml配置到Gitlab中。

2024-05-04 10:24:08 681 2

原创 Jenkins流水线部署springboot项目

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。所以Pipeline相对自由风格或者其他的项目风格更容易操作。

2024-05-03 21:33:00 1193 2

原创 centos 部署harbor并整合jenkins发布springboot

前面在部署项目时,我们主要采用Jenkins推送jar包到指定服务器,再通过脚本命令让目标服务器对当前jar进行部署,这种方式在项目较多时,每个目标服务器都需要将jar包制作成自定义镜像再通过docker进行启动,重复操作比较多,会降低项目部署时间。我们可以通过Harbor作为私有的Docker镜像仓库。让Jenkins统一将项目打包并制作成Docker镜像发布到Harbor仓库中,只需要通知目标服务,让目标服务统一去Harbor仓库上拉取镜像并在本地部署即可。

2024-05-03 12:06:06 968

原创 jenkins 部署springboot 项目

基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署。

2024-05-03 09:04:42 841

原创 docker 构建 gitlab、jenkins

Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K8s作为实现。准备好GitLab仓库中的项目,并且通过Jenkins配置项目的实现当前项目的。一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。

2024-05-01 22:40:54 967

apache-skywalking-apm-6.5.0.tar.gz

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响,所以会深深的感受到 “银弹” 这个词是不存在的,每种架构都有其优缺点 。

2020-04-03

lombok-plugin-0.28-2019.3.zip

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。官方地址:https://projectlombok.org/,github地址:https://github.com/rzwitserloot/lombok

2020-01-27

Navicat.for.MongoDB.12.1.7.rar

Navicat for MongoDB 的高效图形用户界面,用于管理和开发 MongoDB 数据库。它能连接本地或远程的 MongoDB 服务器,以及与 MongoDB Atlas、阿里云、腾讯云和华为云兼容。为管理、监控、查询和可视化数据提供了卓越的功能,轻松提高日常 MongoDB 操作的效率。

2020-01-06

Navicat for MySQL v12.0.29.zip

1.Navicat for MySQL支持创建工具或编辑器数据模型工具 2.支持数据传输/导入/导出、数据或结构同步等 3.Navicat for MySQL支持查询参数 4.Navicat for MySQL支持SSH密钥等 5.界面设计直观简洁,兼容性强 6.专业:适合专业人士,也非常适合入门新手使用

2020-01-05

Xshell.zip

Xshell [1] 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案以及样式选择。

2020-01-05

redis集群搭建所需要文件

搭建redis少走弯路,就来这里吧。搭建redis少走弯路,就来这里吧。

2017-11-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除