- 博客(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 931
原创 k8s 资源管理
在生产环境中,可能会有多个Kubernetes集群,面向开发环境、测试环境、预生产环境和生产环境等。身为Kubernetes管理员,必然知道每个环境的规模有多大、可调度资源有多少,并且知道如何合理地为容器分配内存和CPU,所以一个管理员去管理整个Kubernetes集群时,很少会有资源分配超出集群可调度范围的情况。在生产环境中,可能会有多个Kubernetes集群,面向开发环境、测试环境、预生产环境和生产环境等。
2024-09-10 22:11:51 1289
原创 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 820
原创 docker镜像多阶段构建
Docker 多阶段构建是为了创建轻量化和更高效的 Docker 镜像而产生的一种技术。通过使用多阶段构建,可以将不同阶段的构建需求分离开来,最终结果只包含实际部署所需要的部分,从而缩小镜像的大小。假设你有一个简单的 Go 应用程序。使用多阶段构建来创建其 Docker 镜像。:从初始阶段复制所需文件,只保留运行时所需的部分。:构建需要完整环境和工具的部分,如编译代码。
2024-09-05 11:21:41 192
原创 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 321
原创 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 853
原创 java直接内存
直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。直接内存是在Java堆外的、直接向操作系统申请的内存区间。直接内存来源于,可以通过ByteBuffer类操作。ByteBuffer类调用方法可以申请直接内存,方法内部创建了一个对象,对象存储直接内存的起始地址和大小,据此就可以操作直接内存。直接内存和堆内存之间的关系如图所示。
2024-08-26 18:11:05 806
原创 JVM对象在堆、栈、TLAP上的分配
一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB对象经过逃逸分析,有可能把对象分配到栈上。也就是说如果将对象分配到栈,需要使用逃逸分析手段。逃逸分析是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java HotSpot编译器能够分析出一个新对象引用的使用范围,从而决定是否要将这个对象分配到堆上。
2024-08-16 19:54:06 702
原创 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 318
原创 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 950 1
原创 springboot kafka 提高拉取数量
如果 Kafka 仅仅参考 fetch.min.bytes 参数的要求,那么有可能会因为获取不到足够大小的消息而一直阻塞等待,从而无法发送响应给 Consumer,显然这是不合理的。消费者从服务器获取记录的最小字节数,broker 收到消费者拉取数据的请求的时候,如果可用数据量小于设置的值,那么 broker 将会等待有足够可用的数据的时候才返回给消费者,这样可以降低消费者和 broker 的工作负载。开发过程中,使用kafka批量消费,发现拉取数量一直为1,如何提高批量拉取数量,记录下踩坑记录。
2024-06-01 08:12:56 803
原创 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 1226
原创 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 1076 1
原创 ElasticSearch 查询优化之skipped shards
生产环境中大数据量的查询可以通过skipped shards 时间来过滤分片来提高查询效率。通过timeDate可以跳过149个分片。待查询的分片数大于 128。
2024-05-19 15:28:59 301 1
原创 Elasticsearch写入的核心概念
也就是说,新插入的文档在刷新到段(内存中)之前是不能被搜索到的,如图所示。使用倒排索引的坏处是更新了词典词库后,老的索引不能生效,如果要使其可搜索,则必须重建整个索引或者借助reindex操作迁移索引。为了防止Elasticsearch集群宕机造成数据丢失,为了保证可靠存储,一个文档被索引之后,Elasticsearch就会将其添加到内存缓冲区,并且同时写入事务日志文件(translog)中。❑如果设置了副本,则数据会先写入主分片,主分片再同步到副本分片,同步操作会加重磁盘IO负担,间接影响写入性能。
2024-05-17 06:37:45 590
原创 Elasticsearch的并发控制策略
这两个参数共同提供了一种强大的控制机制,确保只有当所提供的版本信息与文档的最新状态一致时,才会执行写入操作。
2024-05-16 07:42:14 515
原创 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 849
原创 Elasticsearch分词及其自定义
业务需求是这样的:有一个作者字段,比如Li,LeiLei;Han,MeiMei以及LeiLei Li……现在要对其进行精确匹配。对此,你有什么想法?你可能会考虑用自定义分词的方式,通过分号分词。但是这样的话,如果检索Li,LeiLei,那么LeiLei Li就不能被搜索到,而我们希望LeiLei Li也被搜索到。并且对于这种分词,Li,LeiLei中间不加逗号也不能匹配到。但是为什么在映射里面添加停用词也是无效的呢?
2024-05-15 05:59:27 1942
原创 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 1497 1
原创 基于docker安装flink
注意:当你在流式查询上使用这种模式时,Flink 会将结果持续的打印在当前的控制台上。如果流式查询的输入是有限数据集,那么 Flink 在处理完所有的输入数据之后,作业会自动停止,同时控制台上的打印也会自动停止。滚动窗口可以定义在事件时间(批处理、流处理)或处理时间(流处理)上。Tableau模式(tableau mode)更接近传统的数据库,会将执行的结果以制表的形式直接打在屏幕之上。表格模式(table mode)在内存中物化结果,并将结果用规则的分页表格的形式可视化展示出来。
2024-05-09 08:47:58 1142
原创 基于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 1195 2
原创 centos 部署harbor并整合jenkins发布springboot
前面在部署项目时,我们主要采用Jenkins推送jar包到指定服务器,再通过脚本命令让目标服务器对当前jar进行部署,这种方式在项目较多时,每个目标服务器都需要将jar包制作成自定义镜像再通过docker进行启动,重复操作比较多,会降低项目部署时间。我们可以通过Harbor作为私有的Docker镜像仓库。让Jenkins统一将项目打包并制作成Docker镜像发布到Harbor仓库中,只需要通知目标服务,让目标服务统一去Harbor仓库上拉取镜像并在本地部署即可。
2024-05-03 12:06:06 970
原创 jenkins 部署springboot 项目
基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署。
2024-05-03 09:04:42 843
原创 docker 构建 gitlab、jenkins
Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K8s作为实现。准备好GitLab仓库中的项目,并且通过Jenkins配置项目的实现当前项目的。一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。
2024-05-01 22:40:54 973
apache-skywalking-apm-6.5.0.tar.gz
2020-04-03
lombok-plugin-0.28-2019.3.zip
2020-01-27
Navicat.for.MongoDB.12.1.7.rar
2020-01-06
Navicat for MySQL v12.0.29.zip
2020-01-05
Xshell.zip
2020-01-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人