- 博客(75)
- 收藏
- 关注
原创 k8s学习记录(三):Pod基础-Node选择
在上一篇文章中我们学习了Pod的一些基本的知识,今天我们将继续学习Pod。今天我们学习了如何手动控制K8S调度Pod,分别可以通过NodeName和NodeSelector来指定,前者通过名称来指定Node而后者是通过标签来指定。接下来的文章我们会继续学习Pod其他知识希望对你有所帮助。
2025-03-16 17:08:01
1739
原创 k8s学习记录:环境搭建(基于Kubeadmin)
工欲善其事,必先利其器。学习k8s肯定离不开环境的搭建,今天这篇文章将从0到1 搭建一个k8s集群。k8s集群的搭建方式也有很多,例如学习环境的minikube、使用kubeadmin工具安装,再或则是难度最大的通过二进制文件一个一个组件安装,由于文章是站在一个后端开发的角度来编写的,所以不使用二进制方式安装(说白了,难度太大了),这里我们选择使用kubeadmin工具来安装k8s集群。
2025-02-23 18:48:21
808
原创 k8s学习记录(二):Pod基础篇
上一篇文章中,我们对于k8s有了初步的认识,学习了k8s的架构(Master-Worker),同时也简单的了解了k8s中比较重要的的几个组件,Pod、ReplicaSet、Deployment、Service等等(当然了还有更多的组件,后续会一一讲解)今天我们继续站在一个后端开发的角度去详细学习一下其中的Pod组件。本文先假定k8s已经安装完成(具体如何安装后续会有完整的篇幅讲解)Pod是k8s中资源分配的最小单位,k8s通过pod来运行容器,例如Pod里可以运行docker容器。
2025-02-19 21:15:32
896
原创 K8S学习记录(一)
本文用于记录笔者学习kubernetes(下文简称为k8s)的过程,作为一个Java后端开发的角色学习相关知识。同时本文是基于韩先超的《Kubernetes从入门到DevOps企业应用实战》的知识进行学习的。闲言不再赘述。简单来说k8s采用的是主从架构,由一系列的控制节点(Control Plane)或者叫Master节点,管理一个或多个工作节点(Node)。控制面板或者说是Master节点,由一系列的组件构成,用于控制k8s集群的任务,例如任务调度、对外提供API等等,真正工作的是Node节点,这个放到后
2025-02-18 16:24:15
828
原创 ElasticSearch学习笔记把:Springboot整合ES(二)
上一篇文章中我们学习了ES中的Term级别的查询,包括 term、terms、terms_set、rang等,今天我们使用Java代码实现一遍上述的查询。
2024-11-29 14:42:51
664
原创 ElasticSearch学习笔记七:ES查询(二)
在前面的文章我们学习了ES的一些基本查询,同时用Java全部实现了一遍,今天我们继续深入学习一下ES的查询。
2024-11-28 16:30:27
1400
原创 ElasticSearch学习笔记六:Springboot整合
在前一篇文章中,我们学习了ES中的一部分的搜索功能,作为一名Java工程师,更多时候我们是用代码去操作ES,同时对于Java而言时下最流行的就是Springboot了,所以这里我们将ES和Springboot整合将上一篇文章中的所有DSL操作,使用Java代码来操作一遍从而加深记忆。
2024-11-26 18:17:30
1224
原创 ElasticSearch学习笔记五:ES查询(一)
上一篇文章我们学习了ES的基本操作和数据类型,接下来就是ES中比较重要的查询操作了,ES的出现就是为了解决搜索问题,正如他的标语 You Know For Search。当然搜索是一个很复杂的功能,我们也是循序渐进的学习,一开始会是一些比较简单的案例。
2024-11-20 21:44:55
3445
原创 ElasticSearch学习笔记四:基础操作(二)
上一篇文章中我们学习了ES中的基础操作,包括索引和映射,同时也学习了ES中的基础数据类型,今天我们继续学习其他的数据类型。
2024-11-19 16:37:51
822
原创 ElasticSearch学习笔记三:基础操作(一)
上一篇文章中,我们学习了如何使用Java客户端去连接并且简单的操作ES,今天我们将对ES中的基本操作进行学习,包括索引操作、映射操作、文档操作。今天的文章详细讲述了索引和映射的操作,同时也介绍了ES中的基本数据类型,下一篇文章讲继续讲解ES中的复杂数据类型,以及对文档的操作,希望对你有所帮助。
2024-11-18 21:00:58
1308
原创 ElasticSearch学习笔记二:使用Java客户端
在上一篇文章中,我们对ES有了最基本的认识,本着实用为主的原则,我们先不学很深的东西,今天打算先学习一下ES的Java客户端如何使用。
2024-11-16 20:33:00
1739
原创 ElasticSearch学习笔记一:简单使用
该系列的文章用于记录本人从0学习ES的过程,首先会对基本的使用进行讲解。本文默认已经安装了ES单机版本(当然后续也会有对应的笔记),且对ES已经有了相对的了解,闲话少叙,书开正文。ES是Elasticsearch的缩写,是一个基于Lucene的开源全文搜索引擎,提供了分布式、多租户、全文搜索、实时数据分析等功能。ES使用Java语言编写,可以通过RESTful API进行访问和操作,具有快速、可扩展、高可用等特点,是当前最受欢迎的搜索和分析引擎之一。
2024-11-12 21:17:06
1110
原创 Prometheus学习笔记(一)
Prometheus是一款开源的监控系统,用于监控系统的各项指标参数,让开发运维人员能更好的掌控系统的运行状态。是云原生计算基金会项目,是一个系统和服务监控系统。它以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并在观察到指定条件时触发警报。
2024-09-25 15:00:18
955
原创 学习笔记JVM篇(五)
代码解析:首先根据处理器数量来确定创建的线程数量,然后创建线程不断的死循环执行一些逻辑,这样可以让CPU寻思飙高。JPS全称 Java Process Status Tool,这个命令与Liunx的PS很像,下面我们测试一下这个命令,首先编写一段非常简单的Java代码。jstack是java栈的跟踪器,可以打印出java应用程序中所有线程的信息、包含堆栈信息、调用栈信息、锁等信息,所以常用于诊断死锁、内存泄漏等等。使用JPS命令,可以看到我们刚才启动的Java进程,同时进程号为7484。
2024-09-17 23:15:52
1233
原创 学习笔记JVM篇(四)
G1垃圾回收器保留了分代思想,但是取消了新生代和老年代的物理划分,把内存分为多个区域(Region),区域中的逻辑包含了新生代和老年代。区域是动态变化的,原先是老年代的区域,在之后可能会变成新生代,实现更精细化的内存划分。作用于新生代的,在Serial的基础上改为了多线程版本,使用多个线程进行垃圾回收。同时新增了名为Humongous的内存区域用于存储大对象,如果一个H区域装不下则G1会查询连续的H区域去存储该对象,为了找到连续的空间可能会触发Full GC。是一种并发的垃圾回收器,用的是标记-清除法。
2024-09-15 22:48:36
694
2
原创 学习笔记JVM篇(三)
可达性分析算法是通过一些列的GCRoot(后续再介绍),通过引用链的方式找到所有的对象,如果一个对象没有与任何GCRoot相连接,则可以认为该对象为垃圾对象。举个例子,清理了100个垃圾对象,每个对象1M,所以能空闲出100M的内存,但是由于垃圾是分布在内存的不同区域,就导致这些内存是不连续的,虽然总共清理出100M,但是此时如果想要存入一个100M的对象是做不到的。标记复制算法不适合大量存活对象的场景(例如老年代,大多数对象是存活的),因为大量对象存活意味着大量的对象要被复制,这样效率就很低。
2024-09-15 15:50:59
1313
原创 学习笔记JVM篇(二)
所谓的类加载就是把类字节码加载到JVM的方法区(方法区是个抽象的概念,具体实现可以是永久代用也可以是元空间),并将其转化为JVM内部数据结构的过程。自定义类加载器的场景:(1)扩展加载资源:例如可以从网络上加载某个类(2)防止源码泄露:通过自定义类加载器可以加载加密的类文件,从而保护源码(3)实现隔离(Tomcat中):一个Tomcat中运行着多个应用,所以需要隔离开。tips:Tomcat就是重写了loadClass方法从而破坏了双亲委派原则,进而实现了隔离。
2024-09-15 10:48:07
525
原创 学习笔记JVM篇(一)
2、当Eden区满了之后会触发MinorGC用于,此时如果对象还存活会被复制到S1(from)区,当下次一次MinorGC时,如果该对象还存活着,则会从S1移动到S2(to)区。3、虽然老年代的空间比较大,但是也会有满的时候,当老年代满了就会触发FullGC对整个堆的垃圾进行回收,我们优化JVM的关键就是减少FullGC。请注意,不同版本的JVM可能会有不同的默认值和支持的参数,因此在使用时应参考当前JVM版本的官方文档。4、堆内存中的垃圾回收基本使用分代算法,即不同的区域用不同的垃圾回收算法。
2024-09-15 08:51:51
897
原创 学习笔记缓存篇(一)
通过监控日志,结合流式计算,时间范围内统计,计算出超过一定阈值的热点key,时间时间窗口内(比如1分钟)访问增快,预判会成为热点key,放置到网关缓存里。(3)优化存储架构,例如有着一个场景,大V的粉丝列表可能有几十万个用户,而普通用户的粉丝列表就几个,我们可以规定超过一定数量后,标记当前账号存储在不同的地方,避免和业务redis混用。如果有写操作则先写缓存,但是不会立即同步到数据库中,一般会把缓存中的数据更新到磁盘中,等后续有查询操作(或者隔一段时间)后再批量更新到数据库中。但是会带来一致性的问题。
2024-09-14 19:59:30
1077
原创 Netty(零散记录)
Promise是基于netty中的 Future扩展而来, Netty中的future只增加了监听器,整个异步的状态是不能设置和修改的,于是netty的Promise接口扩展了netty的Future接口,可以设置异步执行结果。比如解码出来有12个字节,配置了跳过2个字节,则只会往后传10个字节(舍弃掉了头部的两个字节,注意,解码之后往后面传的数据不再携带length域,只用携带content域,所以要跳过length域)在业务层面我更希望拿到的是 某个 entity、或者dto,所以需要二次编码。
2024-09-14 16:32:55
769
原创 Nginx笔记(一)
Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器 [13],同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。[11]其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。[12]Nginx是一款轻量级的Web。
2024-07-24 22:09:34
840
1
原创 MongoDB自学笔记(四)
与绝大多数数据库一样,MongoDB也有索引。索引是一种加速查询的数据结构,通常是由B树或者B+树。例如我们现在有一个100万个集合的文档,我们要查找出其中name = “hardy”的数据,如果我们并没有在该字段中添加索引,那么MongoDB默认会使用全表扫描的方式来查询,如下图如果没有索引,那么MongoDB只能从第一个文档开始 挨个的比较数据是否匹配,在数据量小的时候比较快,但是随着数据量的增大很明显速度会越来越慢。那么该如何优化呢?此时我们可以很容易的想到加索引。
2024-07-21 22:25:59
1457
原创 MongoDB自学笔记(三)
语法:{ $rename: { < field1 >: < newName1 >, < field2 >: < newName2 >, …含义:设置文档中字段的值,就类似于Mysql中的 update table set = xxxx。上一篇文章中我们学习了更新操作,以及讲解了部分的更新操作符,今天我们继续学习剩余的更新操作符。语法:{ $set: { < field1 >: < value1 >, …语法:{ $unset: { < field1 >: “”, …含义:删除特定字段。
2024-07-17 23:04:46
777
原创 MongoDB自学笔记(二)
接着上一篇文章,在上一篇文章中学习了如何使用数据库、如何创建集合、如何往集合里添加文档,今天我们继续学习一下更新文档,更新文档相对来说比较复杂笔者打算分多次来记录学习过程。
2024-07-15 22:31:21
1363
原创 MongoDB自学笔记(一)
MongoDB是一款基于C++开发的文档型数据库。与传统的关系型数据库有所不同,MongoDB面向的是文档,所谓的文档是一种名为BSON (Binary JSON:二进制JSON格式)是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2024-07-15 17:34:50
1335
2
原创 双因子认证(Two-factor authentication)
简言之,双因素身份验证(也称为“两步验证”)是指身份验证涉及两个阶段——通常是除了常规密码)之外的某种一次性密码(OTP:One-Time Password)。网上银行已经使用这种方法很长一段时间了,最近这种方法也在全网流行起来。还有其他可用的方法,但基于时间的一次性密码(TOTP)非常常用。有几个移动应用程序支持该标准,Google Authenticator就是其中之一(Android、iOS)下图就是一个使用场景。
2023-12-24 20:19:26
7457
原创 【重复造轮子系列】手撸RPC(四):通信协议
在网络通信中,服务端和客户端之间是通过发送数据包来进行通信,所以协议就是规定要发送的数据包是什么样子的。参考Http请求,Http请求就大体分为请求头和请求体两部分,那我们自定义的协议也可以这么做。简单的来说通信协议就是通信双方约定的一种形式,例如我发送0001表示Hello,则对方收到0001的时候就知道我发送的Hello。在上一篇文章中我们简单完成了服务的注册,成功的将服务端暴露的接口添加到注册中心上了,而且也客户端和服务端已经可以进行最基本的通信,接下来要做的就是要定义好通信协议。
2023-08-21 11:09:38
1059
原创 【重复造轮子系列】手撸RPC(三):服务注册
在上一篇文章中我们讲述来一次RPC请求的流程,并且编写了一个简单的服务端和消费端的Netty通信Demo,既然现在可以通信了,那么接下来我们就要开始尝试调用接口了。
2023-08-19 10:14:27
1000
原创 【重复造轮子系列】手撸RPC(二)
在上一篇文章中我们模仿着Dubbo初步搭建了一个RPC框架,虽然目前什么都没有实现,但是万丈高楼平地起,接下来我们会一步步完善我们的框架。
2023-08-15 19:12:23
767
原创 【重复造轮子系列】手撸RPC(一)
本文是笔者学习原动力的手撸Rpc课程的毕竟,并且加上个人的一些理解。推荐一下该课程属实不错。RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。过程是什么?
2023-08-12 09:05:00
836
原创 Spring源码方法解析:obtainFreshBeanFactory
在之前的文章中我们对Spring有的启动流程有了一个大体的了解;学习源码的目的并非要把每一个类每一个方法都搞得十分透彻,学习源码更多的是为了学习一种思想、更好的使用框架。闲言少叙,我们直接进入今天的主题。
2023-04-27 11:09:32
583
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人