- 博客(110)
- 资源 (1)
- 收藏
- 关注
原创 GIT进行代码仓库完整迁移
例如: git remote set-url --push origin http://gitee.com/demo.git。例如: git clone --mirror http://gitee.com/test.git。git remote set-url --push origin 新代码仓库地址。至此,旧仓库已经完整推送到了新的代码仓库,commit记录和代码分支完整。3、将仓库中的旧的远端地址更改为新仓库地址。4、将修改后的Git镜像仓库推送到新的仓库。2、进入本地镜像仓库。
2023-06-27 18:09:04
785
原创 Nginx反向代理https报错The plain HTTP request was sent to HTTPS port解决办法
400 Bad Request、nginx、https
2022-10-12 08:59:51
24383
原创 GrayScale灰度切量系统 【AB测试】
AB测试中的痛点新功能上线,产品要求按照规则进行AB测试,但是规则随着业务的推进不断变化(上线前也无法完全确定)。例如:第一天要求产品价格>100的走A场景,第二天要求:在上午10到下午18之前的走B场景,第三天要求产品编码为(1001,1002,1003)的走A场景… 传统方案:修改规则后发版,这就导致开发工作量增加,频繁上线,时效性也很差。 在这种情况下GrayScale 应运而生…介绍com-grayscale-annotation (注解模块,快速下线是使用)com-graysca
2022-03-09 15:11:24
3873
原创 lombok详解
@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法作用于成员变量上,生成该成员变量的getter/setter方法Getter(lazy=true) 懒加载public @interface Getter { AccessLevel value() default AccessLevel.PUBLIC; Getter.AnyAnnotation[] onMethod() default {}; boolean lazy() de
2021-03-10 08:58:12
273
原创 k8s-09-集群安全机制
集群的认证 鉴权 访问控制 原理及其流程k8s使用了认证(Authentication)、鉴权(Authorization)、准入控制(Adminssion Control)三步来保证API Sserver的安全AuthenticationHTTP Token认证:通过一个Token来识别用户客户端携带一个token来请求server端,如果server端含有这个token,那么认证成功否则失败HTTP Base认证:用户名+密码的方式认证 (比较原始的方式,在k8s中基本很少使用)最严
2021-02-08 09:12:56
331
原创 k8s-08-调度器
掌握调度器原理 能够根据要求把Pod 定义到想要的节点运行kube-scheduler是kubernetes系统的核心组件质疑,主要负责整个集群资源的调度功能,根据特定的调度算法和策略,将Pod调度到最优的一个工作节点上面去,从而更加的合理、更加充分的利用集群的资源。调度主要分为以下几个部分预选过程 过滤不满足条件的节点,这个过程称为Predicates优选过程 对通过的节点按照优先级排序,称之为Priorities最后从中选择优先级最高的节点其中Predicates过滤有一系列的算法
2021-02-07 10:05:00
365
原创 k8s-07-存储
掌握多种存储类型的特点 并且能够在不同环境中选择合适的存储方案(有自己的见解)一、ConfigMaphttps://kubernetes.io/zh/docs/concepts/configuration/configmap/1.2版本中引入,主要功能是为了解决应用程序会从配置文件、环境变量中获取配置信息,ConfigMap API为我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制对象。ConfigMap 是为了方便的处理不
2021-02-03 08:44:32
302
原创 k8s-06-服务发现
掌握 SVC 原理及其构建方式Pod、RC、Service关系ServiceService定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实力。 Service与其后端Pod副本集群之间则是通过Label Selector来实现"无缝对接"。而RC的作用实际上是保证Service 的服务能力和服务质量处于预期的标准。Service能够提供负载均衡能力,但是在使用上还有以下限制:只提供4层负载,没有7层功能,但有时我们可能需要更多的匹配规
2021-01-28 14:25:12
505
2
原创 k8s-05-Pod控制器
掌握各种控制器的特点以及使用定义方式每个Pod都有一个特殊的被称为“根容器”的Pause容器。除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的VolumeKubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP的直接通讯(采用虚拟二层网络技术来实现),一个Pod里的容器与另外主机上的Pod容器能够直接通信。Pod 的分类( 1 )普通 Pod 【控制器管理】普通 Pod 一旦
2021-01-28 14:02:14
277
原创 k8s-04-资源清单
资源介绍资源 掌握资源清单的语法 编写 Pod 掌握 Pod 的生命周期***名称空间级别-n 指定命名空间 (默认命名空间 -n default);k8s系统组建放在kube-system 空间下工作负载型资源(workload):pod 、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob、ReplicationController(1.11版本中被废弃)服务发现及负载均衡型资源(ServiceDiscovery
2021-01-28 13:51:08
328
原创 k8s-03-4-kubectl命令详解
kubernetes集群命令行工具kubectl [command] [type] [name] [flags]kubectl --help(1)comand:指定要对资源执行的操作,例如 create、get、describe 和 delete(2)TYPE:指定资源类型,资源类型是大小写敏感的,开发者能够以单数、复数和缩略的 形式。例如:kubectl get podkubectl get podslubectl get po(3) NAME:指定资源的名称,名称也大小写
2021-01-28 13:40:27
242
原创 k8s-03-3-安装dashboard
kubernetes-dashboard简介kubernetes中管理集群中资源的方式通常有四种:命令行、YAML、API和图形界面,四种不同的方式适用于不同的人群和场景,对比如下:命令行kubectl,kubectl提供了命令行管理kubernetes资源优点:使用方便、便捷、快速管理集群资源缺点:功能相对有限,部分操作无法支持,有一定的门槛YAML资源定义,kubernetes中最终转换形式,推荐使用方式优点:功能齐备,能够定义kubernetes的所有对象和资源缺点:门槛较
2021-01-28 13:39:58
422
1
原创 k8s-03-2-kubeadm安装
系统规划节点信息Kubeadm 是一个 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。,这个工具能通过两条指令完成一个 kubernetes 集群的部署:第一、创建一个 Master 节点 kubeadm init第二, 将 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >官方地址:https://kubernetes.io/docs/refer
2021-01-28 13:39:39
341
1
原创 k8s-03-1-安装准备
目前生产部署 Kubernetes 集群主要有两种方式:(1)kubeadm (推荐)Kubeadm 是一个 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部署 Kubernetes 集群。官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/(2)二进制包从 github 下载发行版的二进制包,手动部署每个组件,组成 Kubernetes 集群。Kubeadm 降低部署门
2021-01-28 13:39:25
248
原创 k8s-02-基础概念
Kubernetes Service(1) 拥有一个唯一指定的名字(比如mysql-server)(2) 拥有一个虚拟IP (Cluster IP、ServiceIP或VIP)和端口号(3) 能够提供某种远程服务能力(4) 被映射到了提供这种服务能力的一组容器应用上PodPod运行在一个我们称之为节点Node的环境中,每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和volume挂载卷,因此他们之间的通讯和数据交换更为高.
2021-01-28 13:38:59
332
原创 k8s-01-简介
Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统MESOS APACHE 分布式资源管理框架 2019-5 Twitter 》 KubernetesDocker Swarm 2019-07 阿里云宣布 Docker Swarm 剔除Kubernetes 源自 Google 10年容器化基础架构 borg 系统 由 GO 语言开发特点: 轻量级:消耗资源小 开源 弹性伸缩 负载均衡:IPVSBorg系统架构
2021-01-28 13:38:40
18450
1
原创 8-并发编程-定时任务&定时线程池
ScheduledThreadPoolExecutor用来处理延时任务或定时任务。它接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三种提交任务的方式:schedulescheduledAtFixedRatescheduledWithFixedDelay它采用DelayQueue存储等待的任务DelayQueue内部封装了一个PriorityQueue,它会根据time的先后时间排序,若time相同则根据sequenceNumber排序;DelayQ
2021-01-16 09:51:32
704
原创 7-并发编程-Future&ForkJoin框架原理分析
超线程:虚拟出多个核并发与并行并发可认为是一种程序的逻辑结构的设计模式可以用并发的设计方式去设计模型,然后运行在一个单核系统上可以将这种模型不加修改地运行在多核系统上,实现真正的并行并行是程序执行的一种属性对Java而言,对支持Concurrency(并发)/Parallelism(并行)的不断完善,明显地体现在优化并发与并行•Java 1 支持threads, locks, condition queues•Java 5 引入了 thread pools, blocking queu
2021-01-16 09:51:17
328
1
原创 6-并发编程-Executor线程池原理
线程池“线程池”,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行统一分配、调优和监控线程池介绍在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线程上花费
2021-01-16 09:50:59
272
原创 5-并发编程-Collections&Queue体系分析
BlockingQueue通常用链表或者数组实现一般而言队列具备FIFO先进先出的特性,当然也有双端队列(Deque)优先级队列主要操作:入队(EnQueue)与出队(Dequeue)1、ArrayBlockingQueue 由数组支持的有界队列队列基于数组实现,容量大小在创建ArrayBlockingQueue对象时已定义好(默认创建非公平锁)import bean.Ball;import java.util.concurrent.ArrayBlockingQueue;impor
2021-01-16 09:50:46
259
原创 4-并发编程-Atomic&CAS&Unsafe魔法类详解
原子操作原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。处理器如何实现原子操作首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。奔腾6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器不能自动
2021-01-16 09:50:26
293
原创 3-并发编程-CountDownLatch&Semaphore&CyclicBarrie原理与应用
Semaphore 是什么?Semaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目。Semaphore 基本能完成 ReentrantLock 的所有工作,使用方法也与之类似,Semaphore 也实现了可轮询的锁请求与定时锁的功能,Semaphore的锁释放操作也由手动进行. 可以用来构建一些对象池,资源池之类的,比如数据库连接池怎么使用 Semaphore?1 构造方法public Semaphore(int permits)public Semaphore(in
2021-01-16 09:50:12
200
原创 2-并发编程-Lock&AQS
设计同步器的意义多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改引出的问题:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问那么我们怎么解决线程并发安全问题?实际上,所有的并发模式在解决线程安全问题时,采用的方案都是 序列化访问临界资源。即在同一时刻,只能有一个线程访问临界资源,也称作同步互斥访问。Java
2021-01-16 09:49:58
225
原创 1-并发编程-JMM&volatile详解
现代计算机理论模型与工作方式现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存^储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指 令。程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提 出来的,故称为冯.诺依
2021-01-16 09:49:46
380
原创 0-并发编程-多线程
JAVA 线程实现/ 创建1.继承 Thread 类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。public class MyThread extends Thread { public void run() { System.out.println.
2021-01-16 09:49:30
305
原创 0-并发编程-EMSI
处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器中,多个核会共享一些数据,MESI协议就包含了描述共享的状态。在MESI协议中,每个Cache line有4个状态,可用2个bit表示,它们分别是:M(Modif
2021-01-16 08:19:32
1168
原创 5-JVM-调优工具详解
JVM参数-Xms 初始堆大小-Xmx 最大堆大小-Xmn 年轻代大小,此处的大小是:eden+2survivor(1.4or lator)-Xss 每个线程的堆栈大小-XX:MaxPermSize 设置持久代最大值-XX:MetaspaceSiz 配置元空间内存(1.8+)-XX:MaxMetaspaceSize 配置元空间最大内存(1.8+)-XX:+DoEscapeAnalysis JDK7之后默认开启逃逸分析,如果要关闭使用参数(-XX:-DoEscapeAnalysis)-XX
2021-01-15 09:56:16
446
原创 4-JVM-垃圾收集器详解
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应用场景选择适合自己的垃圾收集器。1 Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)Serial(串行)收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。它的 “单线程”的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在..
2021-01-15 09:42:19
166
原创 3-JVM-内存分配机制与垃圾回收算法
1 对象优先在Eden区分配大多数情况下,对象在新生代中 Eden 区分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次Minor GC 我们先来看看 Minor GC和Full GC 有什么不同呢?Minor GC/Young GC:指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。Major GC/Full GC:一般会回收老年代 ,年轻代,方法区的垃圾,Major GC的速度一般会比Minor GC的慢10倍以上。/添加运行JVM参数: -XX
2021-01-15 09:28:34
179
原创 2-JVM-内存模型
程序计数器:记录的是正在执行的字节码的指令地址,如果执行的是native方法,计数器的值为空,此内存区域是是唯一一个在java虚拟机中没有规定任何oom情况的区域,为了程序切换后能够恢复到正确的执行,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,这类内存区域为“线程私有”的内存】虚拟机栈(也会发生oom)线程私有、局部变量表存放了编译期可知的各种基本数据类型、对象应用类型如果线程请求的栈深度大于虚拟机所允许的深度,将会抛出StackOverFlorError;如果.
2021-01-15 09:13:00
259
原创 1-JVM-类加载机制深度剖析
Class文件每个Class文件的头4个字节被称为魔数(Magic Number)紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(MinorVersion),第7和第8个字节是主版本号(Major Version)紧接着主、次版本号之后的是常量池入口量池结束之后,紧接着的2个字节代表访问标志(access_flags)类索引、父类索引与接口索引集合字段表集合方法表集合属性表集字节码指令加载和存储指令 用于将数据在栈帧中的局部变量表和操作数栈
2021-01-15 08:49:49
284
原创 docker-05-部署实战
一 部署jar目录树结构如下:├── docker-compose-java.yml└── demo ├── Dockerfile └── demo.jar1.创建Dockerfile# vim DockerfileFrom java:8ADD demo.jar /app.jarENTRYPOINT ["java","-jar","/app.jar"]生成镜像(测试是否可用) # docker build -t config:0.1 .2.然后在docker-co
2021-01-12 18:00:51
1901
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人