自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 你真的了解Innodb存储引擎?

前言前几篇记录了如何查看SQL执行计划、数据库事务相关的知识点除了这两个,数据库还有两个是非常重要的,必须要考的就是存储引擎和索引今天先记录以下InnoDB存储引擎相关的知识点MySQL存储引擎在MySQL存储引擎中,最为广知的存储引擎是InnoDB和MyISAM存储引擎而这两个存储引擎的区别应该大家都清楚:而MySQL目前默认的存储引擎就是InnoDB「如何查看表使用的是哪种存储引擎?」showtablestatuslike'table_name...

2021-04-11 21:29:00 253 1

原创 数据库事务锁详解

前言上篇说到数据库事务中的特性ACID和4个隔离级别,今儿就来看一下事务中的锁。MySQL中的锁锁是MySQL在服务器层和存储引擎层的并发控制,锁可以保证数据并发访问的一致性、有效性;锁冲突也是影响数据库并发访问性能的一个重要因素MySQL有三种级别的锁:「表级锁、行级锁、页级锁」表级锁行级锁业级锁特点开销小、加锁快开销大、加锁慢加锁时间介于其余两者之间是否会死锁否是是并发度粒度大、锁冲突概率最高、并发低粒度小、锁冲突概率低、并发高粒度介于其余两者之间、并发一般存储引擎Innodb

2021-03-17 22:07:52 2480

原创 面试官:说说数据库事务吧

前言上一篇说了如何查看MySQL的执行计划,今天就来看一下数据库的事务相关的知识点。面试官在数据库这方面最常问的除了sql优化,还有数据库事务、存储引擎等相关知识。上期有人说没有自动门,所以这一期我特地造了自动门,这门没有四五块造不下来。注意:只是CRUD的搬砖工就不需要看了,看了也忘了,只需要拉到最后,点赞、在看、分享,一键三连然后收藏起来就行了。什么是事务事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。通俗点说就是要么

2021-03-10 22:14:18 301

原创 面试官:不会sql优化?出门右转顺便带上门,谢谢

导读作为一个后端程序员,数据库这个东西是绕不开的,特别是写sql的能力,如果您参加过多次面试,那么一定会从面试复盘中发现面试官总是会考察到sql优化这个东西。我在之前的多次面试中最常遇到的一个问题的sql优化,不论是大厂还是小厂。但我之前没有详细去了解过这些东西啊,我就瞎鸡儿吹了,毕竟我也干过两三年的crud,sql还是写过不少的,也遇到过一些特别长的sql,执行时间特别长的sql,所以以前经常牺牲午睡时间给客户出报表还是有点效果的,mmp的。我是这样说的:Sql优化,首先就是看sql的执行计划

2021-03-06 21:06:27 229 1

原创 构建Docker私有仓库

一、Docker私有仓库上一篇说了如何利用Dockerfile在已有镜像的基础上构建自己的镜像,那么如果需要让镜像在一个团队中使用,就需要一个仓库,有几种方式可以共享私有镜像。1、将镜像上传至Docker Hub中2、利用第三方Docker Harbor3、创建私有镜像仓库第一种方式需要在Docker Hub中注册一个账号,然后在本地登陆账号进行上传,但这种方式不安全,因为谁都可以共享你的镜像。不推荐。第二种方式需要下载Docker Harbor安装,其是用于存储和...

2021-02-24 22:09:48 166

原创 一文学会Dockerfile语法

接应上篇,续讲前文。今天咱来聊一下Dockerfile的使用 。虽然可以通过docker commit命令来手动创建镜像,但是通过Dockerfile文件,可以帮助我们自动创建镜像,并且能够自定义创建过程。本质上,Dockerfile就是一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像,简化了从头到尾的构建流程并极大地简化了部署工作。使用Dockerfile的优点:像编程一样构建镜像,支持分层构建及缓存。 可以快速而精确的重新创建镜像以便于维护和升级。 便于持续.

2021-02-22 22:02:58 161

原创 Docker使用指南

上文简单介绍了docker,这边记录一下docker的使用。一、Docker启停1、启动dockersystemctl start docker2、关闭dockersystemctlstopdocker3、重启dockersystemctl restart docker二、运行docker应用程序docker run --name 容器名字 --rm -it -p [ip:]主机端口:容器端口 镜像名称 [命令]run命令:如果本地有镜像,则直接运行...

2021-02-19 22:10:20 2820

原创 一文带你认识Docker

Docker是一个容器技术的应用,而底层是由于Linux容器实现的,Docker只是实现层。一、Linux容器1、隔离与共享一台服务器运行着多个逻辑隔离的服务器进程,谁的运行环境都不希望影响到谁,也就是一个物理机需要虚拟出多个环境或容器,Linux提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。2、实现基础Linux容器功能是基于cgroups和Namespace实现的。(1)cgroups(control groups 控.

2021-02-07 20:08:17 123

原创 k8s之集群管理

导读经过前面k8s系列的文章,这一系列已经基本完成,现在就用几篇文章说一下日常的集群维护。目录更新资源对象的LabelNamespace:集群环境共享与隔离部署集群监控部署Web UI管理集群:Dashboard更新资源对象的Label比如对Pod进行Label的增删改。新增:kubectllabelpodpod-namekey=value修改:kubeletlabelpodpod-namekey=value--overwrite...

2021-01-31 21:13:18 515

原创 k8s之PV、PVC、StorageClass详解

导读上一篇写了共享存储的概述以及一个简单的案例演示。这一篇就写一下PV和PVC。PV是对底层网络共享存储的抽象,将共享存储定义为一种“资源”,比如Node也是容器应用可以消费的资源。PV由管理员创建和配置,与共享存储的具体实现直接相关。PVC则是用户对存储资源的一个“申请”,就像Pod消费Node资源一样,PVC能够消费PV资源。PVC可以申请特定的存储空间和访问模式。StorageClass,用于标记存储资源的特性和性能,管理员可以将存储资源定义为某种类别,正如存储设备对于自身的配置描述(

2021-01-27 22:08:16 2820

原创 k8s之共享存储概述以及演示

共享存储机制k8s对有状态的容器应用或者需要对数据进行持久化的应用,在之前的篇章说过,可以将容器内的目录挂载到宿主机的容器目录或者emptyDir临时存储卷。另外,k8s还开放了两个资源,分别是PersistentVolume(PV)和PersistentVolumeClaim(PVC),这两个资源对象可允许k8s使用外部的存储设备。比如在生产环境中有一个专门的文件服务器,那么就可以使用PV对文件服务器的资源进行定义,比如总共有多少容量等,然后用PVC对PV资源进行申请,申请多少容量,然后再容器里引用P

2021-01-25 22:29:50 630

原创 k8s之Pod安全策略

导读Pod容器想要获取集群的资源信息,需要配置角色和ServiceAccount进行授权。为了更精细地控制Pod对资源的使用方式,Kubernetes从1.4版本开始引入了PodSecurityPolicy资源对象对Pod的安全策略进行管理。Pod特权模式容器内的进程获得的特权几乎与容器外的进程相同。使用特权模式,可以更容易地将网络和卷插件编写为独立的pod,不需要编译到kubelet中。PodSecurityPolicy官网定义Pod 安全策略(Pod Security Polic

2021-01-20 22:41:38 1536

原创 k8s之Secret

导读上一篇说了ServiceAccount,这一篇就来看一下Secret。SecretSecret的主要作用是保管私密数据,比如密码、OAuth Tokens、SSH Keys等信息。上一篇说到,默认的Secret主要包含三个东西,分别是token、ca.crt、namespace当然,也可以包含其他信息,例如:创建一个SecretapiVersion:v1kind:Secretmetadata:name:secrettype:Opaquedat...

2021-01-18 22:07:31 500

原创 k8s之ServiceAccount

导读上一篇说了k8s的RBAC授权模式,今天就来简单看一下其中涉及到的ServiceAccount。简介k8s创建两套独立的账号系统,原因如下:(1)User账号给用户用,Service Account是给Pod里的进程使用的,面向的对象不同(2)User账号是全局性的,Service Account则属于某个具体的Namespace(3)User账号是与后端的用户数据库同步的,创建一个新用户通常要走一套复杂的业务流程才能实现,Service Account的创建则需要极轻量级的实现

2021-01-17 20:47:18 12892 4

原创 k8s之RBAC授权模式

导读上一篇说了k8s的授权管理,这一篇就来详细看一下RBAC授权模式的使用RBAC授权模式基于角色的访问控制,启用此模式,需要在API Server的启动参数上添加如下配置,(k8s默然采用此授权模式)。--authorization-mode=RBAC/etc/kubernetes/manifests/kube-apiserver.yaml(1)对集群中的资源及非资源权限均有完整的覆盖(2)整个RBAC完全由几个API对象完成,同其他API对象一样,可以用kube.

2021-01-13 22:20:30 998

原创 k8s之API Server认证

集群安全性在生产环境中,必须保障集群用户的角色以及权限问题,不能给所有用户都赋予管理员权限。1、集群的安全性必须考虑如下几个目标(1)保证容器与其所在宿主机的隔离(2)限制容器给基础设置或其他容器带来的干扰(3)最小权限原则:合理限制所有组件的权限,确保组件只执行它被授权的行为,通过限制单个组件的能力来限制它的权限范围(4)明确组件间边界的划分(5)划分普通用户和管理员的角色(6)在必要时允许将管理员权限赋给普通用户(7)允许拥有Secret(Keys、Certs、Pas

2021-01-10 21:46:08 837

原创 k8s之HTTP请求负载分发

一、导读对于基于HTTP的服务来说,不同的URL地址经常对应不同的后端服务或者虚拟服务器,通常的做法是在应用前添加一个反向代理服务器Nginx,进行请求的负载转发,在Spring Cloud这个微服务框架中,使用zuul网关实现此功能。而对于k8s集群来说,当然也是可以用Nginx实现请求的转发,但对于一个成熟的容器编排工具,k8s内置了一个HTTP请求负载分发的组件,就是Ingress Controll。另外,k8s的Service也是具有负载均衡能力的组件。二、用法在定义Ing.

2021-01-06 21:31:15 531

原创 k8s之DNS服务器搭建

一、导读在使用k8s部署springboot+redis简单应用这篇文章中,spring boot连接redis是直接使用的IP连接,那么可不可以直接使用服务名称进行连接呢?答案是可以的,这就是k8s集群范围内的DNS服务来完成服务名到ClusterIP的解析,接下来就一起看一下如何搭建DNS服务器。二、搭建DNS服务器(1)简介k8s提供的DNS服务是skydns,由四个组件组成etcd:DNS信息存储 kube2sky:监控k8s中Service资源的变化,根据Service的名.

2021-01-03 23:06:46 414

原创 k8s重器之Service

Service是k8s的核心,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到各个容器应用上。目录:Service定义详解Service基本用法集群外部访问Pod和Service一、Service定义详解Service的定义比Pod简单。apiVersion: v1kind: Servicemetadata: name: string labels: name: string annotations:

2020-12-28 22:27:29 218

原创 服务器挂掉导致需要对k8s新增节点

【导读】今日是周六,本想午休起来之后写篇有关kubernetes service的文章,没想到两台虚拟机接连挂掉,所以又重新创建了两台虚拟机。新建时又一直黑屏,所以只能克隆。由于虚拟机是新建的,所以就面领着需要重新安装的问题,接下来就这个问题记录一下把。一、删除服务器上残留信息由于两台虚拟机是从主节点进行克隆的,所以需要删除docker和kubernetes相关信息1、删除kubenetes相关信息(1)先获取虚拟机上已经安装的kube服务(2)然后使用如下命令删..

2020-12-27 16:01:10 356

原创 k8s之深入解剖Pod(三)

目录:Pod的调度Pod的扩容和缩容Pod的滚动升级一、Pod的调度Pod只是容器的载体,通常需要通过RC、Deployment、DaemonSet、Job等对象来完成Pod的调度和自动控制功能。1、RC、Deployment全自动调度RC的主要功能之一就是自动部署一个容器应用的多份副本,以及持续监控副本的数量,在集群内始终维持用户指定的副本数量。2、NodeSelector:定向调度Master上的Schedule负责实现Pod的调度,但无法知道Pod会调度到哪个节点.

2020-12-23 23:45:10 423

原创 k8s之深入解剖Pod(二)

目录:Pod配置管理:ConfigMap容器内获取Pod信息:Downward APIPod生命周期和重启策略Pod健康检查一、ConfigMap将应用所需的配置信息与程序进行分离,可以使应用程序更好的被复用,通过不同的配置实现更灵活的功能。如果将应用打包成镜像,再用环境变量或者外挂文件的方式挂载配置,在大型容器集群中会变得异常繁琐,所以出现了统一的配置管理:ConfigMap(1)ConfigMap:容器应用的配置管理典型用法如下:1、生成为容器内的环境变量2、设置

2020-12-21 22:20:32 176

原创 k8s之深入解剖Pod(一)

上文说了一下k8s的简单使用,接下来就让我们来具体深入了解一下Pod。为了避免篇幅太长,所以会分成几篇。目录:Pod定义详解 静态Pod Pod容器共享Volume一、Pod定义详解先看一个简单的nginx的Pod定义:apiVersion: v1kind: Podmetadata:nam:nginx-testlabels: app:nginx-testspec: containers:-name:nginx-testimage:...

2020-12-20 22:02:25 368

原创 k8s基本使用

导读前几篇写了k8s的概念以及使用k8s进行简单的应用部署,今天写一下k8s的基本使用。由于k8s的资源都是可以使用yaml文件进行描述,所以也顺便写一下yaml的使用。YAML语法YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等,YAML的配置文件后缀为.yml,如:runoo.

2020-12-16 23:58:41 1479

原创 k8s基础概念及术语

上一篇简单介绍了一下k8s是什么以及如何使用kubeadm快捷安装,今儿来聊一下k8s的几个基础概念及术语。k8s中的资源都可以使用yaml文件进行描述。(文章内容来源于《kubernetes权威指南 第四版》)Master集群控制节点,负责整个集群的管理和控制,负责命令的执行过程,运行着以下四个关键进程。(1)Kubernetes API Service(Kube-apiservice):提供了Http Rest 接口的关键服务进程,是K8s里所有资源的CRUD的唯一操作入口,也是集.

2020-12-09 22:38:21 936

原创 使用k8s部署springboot+redis简单应用

准备本文将使用k8s部署一个springboot+redis应用,由于是示例,所以功能比较简单,只有设置值和获取值两个api。(1)设置值(2)获取值构建Web应用(1)创建一个springboot工程(2)引入redis和jedis的maven依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spri...

2020-12-07 22:21:40 664 4

原创 初识Kubernetes及快速安装

如果想要在Docker上部署大型应用,首先就是要解决网络的问题,还有一系列复杂的问题,包括集群管理,负载均衡等。此时就需要容器编排部署工具来解决这些问题。一、容器编排部署工具容器管理工具可以完成容器的基础管理,但是容器的应用并不是只能进行简单应用部署的,可以使用容器完成企业中更加复杂的应用部署,当需要对多应用的系统进行部署时,就需要更加复杂的工具来完成对容器运行应用的编排,这就是容器编排部署工具。容器编排部署工具有:(1)docker三剑客:docker machine、docker com

2020-12-06 22:47:36 406 1

原创 设计模式之装饰者模式

【导读】在很多场景中,已有核心组件,此时需要对组件的功能进行扩展,此时就需要用到装饰者模式,例如建房子,核心组件就类似于房屋的架构,想要进行装修,就得聘请装修团队。一、定义在不改变原有对象的基础之上,将功能附加到对象上,也就是说是继承的补充,接口与接口之前是有层次关系的。也就是说新增功能需要创建另外一个对象,此对象功能实现需要依赖原有对象的功能。二、实例还在读大学的时候,每次从健身房出来就会买一个炒粉,有时会加一个鸡蛋,有时会加一根香肠,加上小米辣,别提多想了,怀念!此时炒粉就是一个

2020-10-30 23:14:05 82

原创 设计模式之门面模式

学校的学生信息相关系统大家都用过,比如门户网、教务系统、图书管理系统等,一般需要用到某个系统,需要单独去登录,比如同时想去门户网和教务系统查询信息,需要在两个网站都进行登录。此时需要有一个统一用户管理系统,登录了此系统之后,想看其他网站就无需再次登录,这就是门面模式的例子。门面模式属于结构型模式。类似与在平时给前端提供一个接口,接口里面调用了很多其他的服务。一、定义定义了一个高层接口,包含了对各个子系统的引用,客户端可以通过它访问各个子系统的功能。二、实例比如去购物网站下单的时候,会涉及

2020-10-28 22:22:29 160

原创 设计模式之原型模式

有些场景中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效。比如王者里面的小兵,只需创建一个小兵的原型,之后就只需要进行克隆复制就行了。一、定义原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型类必须实现cloneable接口,实现clone方法。二、实例创建一个小兵的原型public class BatmanPrototype implements Cloneable{ //横坐标

2020-10-25 22:22:19 50

原创 设计模式之单例模式

今天来说一下同样属于创建型模式的单例模式,相信这个模式普遍都清楚,因为平时在编码的时候都会进行相应的使用,我这边就当做日志记录一下。免得以后忘了还得去搜,我发现我记忆里非常差,很多东西很快就忘记了,年纪大了没办法。一、定义保证一个类仅有一个实例,并提供全局访问点。就是打死也不会生成第二个实例。一般用在工具类上,可以降低内存消耗二、实例单例模式有几种,分别是饿汉式、懒汉式、静态内部类单例以及枚举类单例。(1)饿汉式顾名思义,饿汉式就是整个项目在启动的时候进行创建。此时可以使用静态代码块

2020-10-20 22:46:44 77

原创 建造者模式还能这么用

一、定义将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。类似组将一台电脑,有主机、屏幕、鼠标、键盘等,你将这些组件的型号给组装店说好,他就会根据你的需求组装电脑,但是你不会看见具体的组装过程。建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。二、实例像上面说的电脑组装实例,就有三个对象,一个是电脑,一个是组装者,一个是客户。电脑对象:public class C

2020-10-18 21:29:44 130

原创 【设计模式-工厂相关模式】

工厂相关模式有两种,分别是:(1)工厂方法模式(2)抽象工厂模式接下来分别说下这两种工厂模式:一、工厂方法模式(1)定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。其实就是专职专产,比如某条产品线就只生产一种产品。(2)实例:比如车辆厂商有保时捷、法拉利等,他们的厂就专门生产一种品牌的车,这是就会有两个抽象的对象,一个是车,一个是厂,什么厂就生产什么样的车。车对象:1、车的抽象对象public abs

2020-10-15 22:13:34 115

原创 CyclicBarrier原来是这样的

上一篇聊了一下Semaphore信号灯的用法及源码,这一篇来聊一下CyclicBarrier的用法及解析。官网解释:允许一组线程全部等待彼此达到共同屏障点的同步辅助。循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。屏障被称为循环,因为它可以在等待的线程被释放之后重新使用。意思就是每个线程都得执行到等待点进行等待,直到所有线程都执行到等待点,才会继续往下执行。相当于日常开会,只有等每个参会的人都到之后才会开始会议。用法:(以开会举例)1、会议需要三个人..

2020-10-13 22:37:06 67

原创 Semaphore最详细解析

官方解释:一个计数信号量。在概念上,信号量维持一组许可证。如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它。每个release()添加许可证,潜在地释放阻塞获取方。但是,没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。信号量通常用于限制线程数,而不是访问某些(物理或逻辑)资源我记得考科目一的时候有一个大教室,这个教室只能同时允许两百人考试,当有一个考完之后,下一个才能进去进行考试。门口会有安检人员进行安检,这个Semaphore就相当于这个安

2020-10-12 21:52:32 1088 2

原创 CountDownLatch解析

CountDownLatch是JUC包下的一个工具类,允许一个或多个线程等待,直到其他线程中执行的一个放行操作完后,等待线程才会继续往下执行的同步辅助。可用于一个或多个线程中等待其他线程完成某项操作后再运行的场景。首先看一下其用法:1、先创建一个CountDownLatch的实例参数是计数器(可以设置大于1的),也就是必须要设定的线程执行完后等待线程才会往下执行。设置一个共享变量sharedNum,初始值为0 int sharedNum = 0;CountDownLatch coun

2020-10-10 22:32:15 127

原创 Java锁机制

上一篇简略说了一下Synchronized和Lock,今天就来说一下Java的锁机制。Java的锁机制主要分为四种,分别是(1)公平锁、非公平锁(2)可重入锁(3)自旋锁(4)共享锁、独占锁接下来一一说一下这四种锁一、公平锁、非公平锁(1)公平锁:指多个线程按照申请锁的顺序来获取锁,类似于日常的排队(2)非公平锁:多个线程获取锁的顺序并不是按照申请锁的顺序来,通俗来说就是插队(3)ReentrantLock默认是非公平的public ReentrantLock(

2020-10-09 22:56:46 842 1

原创 锁:Sychronized、Lock

锁是用来在多线程并发阶段保障数据同步的重要手段,防止出现脏数据,加锁代码在某个时间点只能由一个线程运行,其他线程等待。普遍熟知的锁是synchronized关键字和Lock类。一、synchronized关键字这个在同步中是最常用的,分成对象锁和类锁,可以对方法和代码块进行加锁。1、对象锁,锁住的是对象,用于synchronized(this){}synchronized(Object){}2、类锁,锁住的是该类的所有实例 synchronized(Object.class){}

2020-10-01 22:32:38 223

原创 Set源码解析(红黑树)

之前粗略看了一下List和Map,今咱来聊一下Set。主要看以下几个:(1)HashSet(2)Collections.synchronizedSet(3)LinkedHashSet(4)CopyOnWriteArraySet(5)TreeSet一、HashSetHashSet是日常搬砖中最常用的,如果有了解过HashMap的实现,那么HashSet你也就理解了。(1)HashSet底层就是用HashMap实现的,也就是非线程安全。private transient

2020-09-30 19:12:03 386

原创 Map源码解析

聊一下Map。主要有以下几个类:(1)HashMap(2)Hashtable(3)ConcurrentHashMap(4)LinkedHashMap(5)WeakHashMap环境是java8,上述hashMap和ConcurrentHashMap在java7的时候实现会有不同。Map主要是用来存储<K,V>键值对,那么现在来一个一个看一下底层是如何进行实现的。一、HashMap这是平常最常用的一个类,也是非线程安全的。都知道是数组+链表实现的,那具体是如何实

2020-09-29 23:00:17 242

空空如也

空空如也

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

TA关注的人

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