自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

进化的深山猿

不断进化,总能迎来美好生活

  • 博客(352)
  • 资源 (3)
  • 收藏
  • 关注

原创 Redis的HyperLogLog实现uv统计

uv使用

2022-12-08 09:36:24 250

原创 流量控制算法

漏桶算法需要设定两个参数,一个是桶的容量大小用,用来决定最多可以存放多少水(请求),一个是水桶漏的大小,即出水速率,即出水速率决定单位时间向服务器请求的平均次数。随着时间流逝,系统会按恒定时间间隔往桶里加入制定数量的水,如每100毫秒往桶里加入1000毫升的水,如果桶已经满了就不再加了(说明:令牌桶算法和漏桶算法相反,漏桶算法是按照客户请求的数量往漏桶中加水的,而令牌桶算法是服务器端控制往桶里加水的)。也就是说这些固定数量的可以移动的格子,将会进行计数判断阀值,因此格子的数量影响着滑动窗口算法的精度。

2022-11-22 15:52:08 65

原创 ingress与gateway https秘钥配置

该类型的Service被提交后,Kubernetes 就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP 地址配置给负载均衡服务做后端。所以:isito的ingress和gateway对应的pod是一样的,所以ingress对应的pod的功能主要就是从公网接收请求转到isito内部的gateway。然后vs再引用gateway,gateway将请求分发到不同的vs,vs层再将请求分发到k8s的service,最后到具体的pod。

2022-10-26 09:03:28 986

转载 redis中对象存储内存占用预估和相关对象

redis内存占用评估

2022-05-13 11:54:14 1962

转载 websocket sse http轮询

适用场景:http轮询:单向http请求,且http连接没有复用。客户端主动发起的轮询sse:半双工,后端持续向客户端推送数据。典型的如评测结果的推送,因为需要评测的中间过程,且要能展示最终结果,所以后端主动多次推送和结束websocket:全双工,客户端和后端可以持续相互推送数据。如运行代码,输入时需要客户端将内容推送给后端,执行结果需要推送给客户端。三者区分:https://blog.gdccwxx.com/http/what-is-sse/https://www.bookstack.cn/

2022-05-06 15:51:37 227

原创 pod的内存一直增加原因与解决

channel内存配置:6G-8G容器内top的结果:阿里云memory使用量:https://www.jianshu.com/p/c0d5a40fe9e8channel内存告警的原因:channel负责评测文件的读取,这个是频繁的操作。Linux下经常会遇到buff/cache内存占用过多问题,尤其是使用云主机的时候最严重,由于很多是虚拟内存,因此如果buff/cache占用过大的,free空闲内存就很少,影响使用;通常内存关系是:普通机器:t...

2022-02-07 13:58:51 5489

原创 sentinel、isitio、hystrix 限流熔断降级

限流:统计和限制访问次数熔断:服务出错或响应过慢时,直接返回错误信息,或者返回历史数据、默认数据等。降级:干掉次要功能,保留主要功能sentinel详细文档https://sentinelguard.io/zh-cn/docs/circuit-breaking.htmlistio文档https://istio.io/latest/docs/tasks/traffic-management/circuit-breaking/sentinel vs hystrix发展前景Netflix已

2021-11-17 14:56:16 2426

转载 Server层和存储引擎层

我们先来写一条最普通的SQL查询语句:mysql> select * from T where ID=10;没问题,这个语句只要我们稍微有点数据库基础应该都可以看懂,那就是从表T中找到ID=10的数据,并且输出该行所有字段。那么问题来了,这个语句在MySQL内部是如何执行的?下边通过介绍MySQL的基本逻辑架构图来详细阐述。MySQL基本逻辑架构图: 从上图可以看出,MySQL内部逻辑架构包括Server层以...

2021-11-10 15:15:15 1662

原创 k8s oom告警解决记录

oom告警问题背景:容器中执行运行和评测,如存在如下代码:#include <stdio.h>#include <malloc.h>#include <string.h>#include <unistd.h>int main (){ char *p = NULL; int count = 1; int n = 1024*1024*100; while(1){ p = (char *)malloc...

2021-11-09 14:18:11 2278

原创 容器化中的k8s技术

56 容器化技术虚拟机和容器对比:技术:虚拟机依赖的是 KVM,容器依赖的是 namespace 和 cgroup 对进程进行隔离。虚拟机更重,需要虚拟出客户机的cpu、内存、存储、网络等资源;容器则很轻量,直接使用宿主机的各种资源。虚拟机的隔离性更高,容器则较低。效率上容器更高。容器用到了什么技术?1)namespace,隔离,每个namespace中的应用看到的,都是不同的IP地址、用户空间、进程ID等、2)cgroup,资源限制,,即明明整台机器有很多的 CPU、内存,但是一个应

2021-10-25 19:45:44 817

原创 虚拟化技术和原理

49 虚拟机为什么需要虚拟机?linux服务器越来越强大,但是有时候并需要很大的服务器。三种虚拟化方式完全虚拟化虚拟化软件会模拟出假的CPU、内存、网络、硬盘等资源,实际资源的获取需要虚拟化软件向物理机申请。虚拟化软件执行转手工作,所以会比较慢硬件辅助虚拟化借助Intel-VT,AMD-V等,并整合kvm技术,设置虚拟机状态,虚拟机内核可以在CPU上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率。半虚拟化..

2021-10-21 20:11:06 614

原创 操作系统之网络系统

43 预习:Socket通信之网络协议基本原理网络协议:一台机器将内容按照约定好的格式发送出去,另外一台机器收到后能按照约定格式解析,获取到信息。两种网络协议,osi标准七层模型:物理层 数据链路层 网络层 传输层 会话层 表示层 应用层TCP/IP模型:物理层 mac层 ip层 传输层 应用层(dns http)具体如下图:为什么要分层呢?同一套网络协议栈通过切分成多个层次和组合,来满足不同服务器和设备的通信需求。网络协议层次介绍物理层:即物理设备,如连着电脑的网线、wifi.

2021-10-11 20:42:03 1265 2

原创 进程间通讯-管道、信号、内存与信号量

36 进程间通讯方式梳理进程间通讯的方式管道模型如:ps -ef | grep java其中"|"就是一个管道,将前一个命令的输出作为另一个命令的输入。管道是一种单向创术数据的机制,它其实是一段缓存,数据只能从一端写入,另一端输出。且会自动创建自动输出。管道分类:1 匿名管道,这个类型的管道没有名字,用完了就销毁了。2 命名管道创建名称为hello的管道:mkfifo hello向管道中写东西:echo "hello world" > hello 说明:管道里面的内容没有被读出,这.

2021-10-09 11:28:14 228

原创 操作系统之输入输出系统

31 输入与输出系统输入输出设备很多,如键盘、鼠标、显示器、网卡、硬盘、打印机等。对于操作系统,这些用法、功能不同的设备怎么统一管理起来呢?设备控制器屏蔽设备差异cpu和设备通过设备控制器来打交道,如磁盘对应的磁盘控制器、USB对应的USB控制器、显示器的视频控制器等。设备控制器像代理商一样屏蔽设备的差异性,且类似于小电脑,有自己的小cpu、寄存器,这样cpu可以对控制器下发指令、查看控制器对设备的操作状态。输入输出设备可以大致分为两类:块设备、字符设备块设备将信息存储在固定大小的块中,每个

2021-09-29 15:17:34 2839

原创 k8s命令汇总

kubuctl修改当前命名空间kubectl config set-context $(kubectl config current-context) --namespace=peiyou-xiaohoucode事件相关kubectl get events -A // 获取命名空间所有kubectl describe deployment coding-judge-judge-test // 获取某个deployment的详情,包括事件资源创建kubectl create -f my-se.

2021-09-27 17:16:26 165

原创 操作系统之文件系统

27 文件系统文件系统:和项目运行生命周期无关的地方,可以永久保存,并且空间大。文件系统的功能规划第一点,文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。第二点,文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。第三点,如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应该有缓存层。第四点,文件应该用文件夹的形式组织起来,方便管理和查询。第五点,Linux内核要在自己的内存里面维护一套数据结构,来保存哪些文件被哪些进程打开和使用。文件系

2021-09-24 11:05:06 1542

原创 容器化问题:优雅停机、websocket关闭变慢

问题1: 服务发版等导致的服务间接性不可用问题原因1:请求需要10s完成,但是服务所在pod在第8秒被干掉解决:设置preStop和延迟销毁pod, sleep时间要小于terminationGracePeriodSeconds.且sleep之后不会再有请求进入该pod imagePullPolicy: Always lifecycle: preStop: exec: comm...

2021-09-16 16:38:44 169

原创 操作系统内存空间管理:物理虚拟与映射

20 内存管理:规划进程内存空间布局进程间为什么需要内存的隔离?怎么隔离的?假设使用的是物理内存,那同是计算器的进程,使用相同的物理地址,如果打开了三个,三个程序分别数据10\100\1000,那么此时物理地址就不知道保存哪个数据了。隔离方法:进程不直接操作物理地址,操作系统给进程分配虚拟地址。所有进程看到的这个地址都是一样的,里面的内存都是从 0 开始编号。同时操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。程序要访问虚拟地址的时候,由内核的数据结构进行转换,转换成

2021-09-01 09:47:03 1050

原创 重复数据产生原因:分布式锁超时与主从延迟

原本的逻辑如下:针对一个题目,学生只可以插入或更新记录,插入的前提是答题结果不存在,所以按照正常流程应该是一个学生针对一个题目肯定只有一条记录的。但是发现,偶尔会产生一个学生针对同一个题目有多条记录。原因1:可能表执行了alter等语句,阻塞了insert,然后分布式锁超时自动释放,此时用户再次点击保存就会执行插入操作;原因2:没有alter阻塞insert,insert是正常执行,执行完毕后释放分布式锁;由于主从延迟,select的是从库,如果两次保存操作非常近,时间间隔小于了数据库的主.

2021-08-26 15:24:10 1170

原创 白名单导致的rpc调用超时问题

异常日志如下:2021-08-19 12:27:28.687[ERROR][ XNIO-2 task-19]-0RspW c.t.c.p.a.a.ExceptionAspect : catch the throwable:[接口调用失败[Connect to test-class-api.*****.com:80 [test-class-api.haibian.com/112.126.75.31] failed: Connect timed out]] by exception a...

2021-08-24 17:24:22 1425

原创 系统初始化

06 x86架构x86架构统一了计算机的硬件环境,避免了linux操作系统适配不同的硬件平台。硬件图和计算机的逻辑图如图:cpu:中央处理器,是最核心的组件。总线:连接了cpu和其他设备(如内存、显卡、网卡、磁盘、USB),其实就是主板上的集成电路,可以划分为:地址总线:根据地址从内存中获取那个位置的数据数据总线:传输真正的数据数据总线的位数:决定了一次能拿多少个数据进来。例如只有两位,那 CPU 一次只能从内存拿两位数。要想拿八位,就要拿四次。位数越多,一次拿的数据就越多,.

2021-07-19 20:21:47 575

原创 服务容器化踩坑

upstream connect error or disconnect/reset before headers. reset reason: connection failure通过istio访问容器内服务:https://test-practice.xiaohoucode.com/api/practice/platform/project/X1503upstream connect error or disconnect/reset before headers. reset reason:

2021-07-15 19:47:16 975

原创 k8s分享下-service 网络 卷

service为什么需要Service?因为直接通过pod的IP+port获取服务存在如下两个问题:1)调用地址不稳定,pod可能出现故障,那么新的pod产生的IP和port都会发生变化2)集群(多pod实例)场景无法自动实现负载均衡service怎么解决的问题?service本身有固定的Ip和port,且内部有负载均衡的实现,所以解决了上述问题service的实例和创建一个提供Web服务的RC:webapp-rc.yamlapiVersion: v1kind: Replicati

2021-07-12 10:12:19 563

原创 k8s存储器

pod容器共享Volume同一个pod中的多个容器能够共享Pod级别的存储卷Volume。即定义一个卷,然后将该卷挂在为多个容器的内部目录。如下pod实例,pod-volume.yml内容如下:apiVersion: v1kind: Podmetadata:name: volume-podspec:containers:- name: tomcat image: tomcat ports: - containerPort: 8080 volumeMounts: -...

2021-07-03 17:53:05 130

原创 k8s控制器 详解statefulSet

无状态与有状态的应用:无状态应用:应用的所有 Pod,是完全一样的。所以,它们互相之间没有顺序,也无所谓运行在哪台宿主机上。有状态的应用:分布式应用,它的多个实例之间,往往有依赖关系,比如:主从关系、主备关系。还有就是数据存储类应用,它的多个实例,往往都会在本地磁盘上保存一份数据。而这些实例一旦被杀掉,即便重建出来,实例与数据之间的对应关系也已经丢失,从而导致应用失败。k8s有了新的控制器:StatefulSet应用状态被抽象为两类:1拓扑状态应用的多个实例之间不是完全对等的关系。这

2021-07-03 17:48:39 1267

原创 docker的实现与进程

容器落地中的问题:什么容器里只能跑“一个进程”?为什么我原先一直在用的某个 JVM 参数,在容器里就不好使了?为什么 Kubernetes 就不能固定 IP 地址?容器网络连不通又该如何去 Debug?Kubernetes 中 StatefulSet 和 Operator 到底什么区别?PV 和 PVC 这些概念又该怎么用?原因在于:从过去以物理机和虚拟机为主体的开发运维环境,向以容器为核心的基础设施的转变过程,并不是一次温和的改革,而是涵盖了对网络、存储、调度、操作系统、分布式原理等各个方

2021-07-01 21:19:16 796

原创 linux系统入门与基本指令

技术人员的基础东西:网络 linux系统 数据结构与算法 编译原理 相关课程已经收藏,看完继续学习。趣谈网络协议趣谈linux系统1 为什么学习linux操作系统编程世界中,linux是主流,很多技术,例如云计算、虚拟化、容器等都是基于linux技术linux中很多东西数数据结构和设计模式的落地实践很多技术都是先适配linux,学习新技术更快Linux 的学习过程中,要爬的坡有六个,分别是:熟练使用 Linux 命令行、使用 Linux 进行程序设计、了解 Linux 内核机制、阅读 L

2021-06-28 17:29:42 86

原创 jar升级解决安全漏洞 与 maven的jar包版本的依赖关系

今天被告知系统存在安全漏洞,需要解决下,记录下过程。漏洞说明说明:mybatis 在3.5.6以下的版本存在CVE-2020-26945漏洞,所以需要进行升级但是我们的项目是springboot项目,通过mybatis-spring-boot-starter引入的mybatis,所以就需要知道把mybatis-spring-boot-starter的版本调整到什么级别,以及和mybatis版本之间的依赖关系。mybatis 3.5.6解决了该漏洞但是项目是springboot项目,引入的是

2021-05-24 16:44:58 1691 1

原创 Sidecar机制和istio多集群服务治理

第6章 透明的Sidecar机制Sidecar Injector只在创建Pod时进行Sidecar容器注入,在Pod的创建请求到达Kube-apiserver 后,首先进行认证鉴权,然后在准入控制阶段,Kube-apiserver以REST的方式同步调用Sidecar Injector Webhook服务进行init与istio-proxy容器的注入,最后将Pod对象持久化存储到etcd中。如图:第7章 多集群服务治理云原生应用会越来越多地面向跨云、跨区域、跨集群的部署场景,因此支持多集群是I

2021-05-01 14:14:00 435

原创 第5章 istio可插拔的服务安全

第5章 可插拔的服务安全istio提供的安全功能可以解决类似如下的问题:◎ 项目要发布了,做安全稽查时却发现不满足某项安全标准, 导致项目延期、苦不堪言;◎ 因为要处理某项安全要求,所以不得不在干干净净的业务代码里引入各种安全库,并添加各种安全处理,导致部分代码面目全非;◎ 好不容易给服务提供了双向TLS认证,在运行一段时间后服务访问却出问题了,调查很久后才发现原来是证书过期了。5.1 Istio服务安全的原理Istio的安全功能以一种安全基础设施方式提供的,不用修改业务代码就能提供服务访问安

2021-04-30 15:41:55 235 3

原创 4 istio的策略和遥测 与适配器

Istio中策略和遥测要解决的问题、实现原理和使用方式;并讲解Istio基于Adapter机制提供的Prometheus、Fluentd、Quota 等策略和遥测功能,包括这些Adapter的工作机制和使用方法等;并基于这种扩展机制在不修改代码的情况下收集服务的运行数据和 执行策略。4.1 istio策略和遥测的原理4.1.1 应用场景除了需要具备服务治理功能,还需要知道服务运行的怎么样、有没有问题、以及哪里有问题等。这一班是APM的职能,设计数据采集、存储、检索。1、传统的遥测数据收集方式

2021-04-29 17:50:54 348 2

原创 destinationRule\Gateway\ServiceEntry\SideCar配置详解

3.3 destinationRuledestinationRule 和 VirtualService的联系和区别1)两者之间的关系在讲解virtualService中,路由目标对象destination中会包含Service子集的subset字段,这个服务子集就是通过DestinationRule定义的。2) 两者都是用于流量治理,那应用场景有什么区别?virtualService是一个虚拟的service,描述的是满足什么条件的流量被那个后端处理。类似于根据路径去匹配方法,是更开放的martc

2021-04-28 16:30:44 958

原创 istio的流量治理(负载均衡 熔断 故障注入 灰度)与各种配置实例 与VIrtualService(路由规则配置)

服务治理要解决的问题:1) 服务的负载均衡2)同一个服务有两个版本在线,将一部分流量切到某个版本上3)服务保护,如限制并发连接数、请求数、隔离有故障的服务实例等4)动态修改服务中的内容istio流量治理目标:提供非侵入的流量治理,用户仅仅关注自己的业务逻辑,无须关注服务访问管理。流量治理的流程:控制面:1)管理面创建流量规则2)pilot将流量规则转换为envoy的标准格式3)pilot将规则下发给envoy数据面:1)envoy拦截Pod上本地容器的Inbound和outbo

2021-04-22 16:27:47 1686

原创 isito的相关组件和工作机制概述

2.1 istio的工作机制istio架构分为控制面和数据面两部分。控制面:包括pilot、mixer、citadel等组件数据面:由伴随每个应用程序部署的代理程序envoy组成,执行针对应用程序的治理逻辑从fronted服务访问forecast服务来看istio内部的组件都做了什么如图:1)sidecar自动创建与注入:创建应用程序时自动注入sidecar代理。在k8s场景下创建Pod时,在创建业务容器的同时会创建sideCar容器,然后kube-apiserver调用管理面组件的sid

2021-04-21 20:52:11 677

原创 istio概述,与微服务、云原生、k8s的关系

1.1简单介绍istio与k8s紧密结合,适用于云原生场景,service mesh形态,服务治理的开放平台服务治理,包括:连接、安全、策略执行和可观察性。连接:通过配置的流量规则控制服务间的流量和调用,实现负载均衡,熔断,故障注入,重试,重定向等服务治理安全:提供认证机制、通道加密、服务访问授权等,增强服务访问的安全性策略执行:通过可动态插拔,可扩展的策略,实现访问控制,速率限制,配额管理,服务计费等能力可观察性:动态获取服务运行数据和输出,提供强大的调用链,监控,和调用日志收集与输出的能力。

2021-04-19 17:29:40 7242 2

原创 k8s六:k8s运维指南

5.1 k8s集群管理指南主要包括:node管理 label管理 namespace资源共享 资源配额管理 集群master高可用 集群监控等5.1.1 node的隔离与恢复如果某些node需要进行硬件升级、维护等,需要将某些node进行隔离与恢复,有如下三种方法:方式一: 通过node的yaml文件修改node的状态1)定义配置文件如下:unsechedule_node.yamlapiVersion: v1kind: Nodemetadata:name: k8s-node-1la..

2021-03-12 17:40:43 1247 2

原创 k8s五: 深入理解Service

为什么需要Service?因为直接通过pod的IP+port获取服务存在如下两个问题:1)调用地址不稳定,pod可能出现故障,那么新的pod产生的IP和port都会发生变化2)集群(多实例)场景无法自动实现负载均衡service怎么解决的问题?service本身有固定的Ip和port,且内部有负载均衡的实现,所以解决了上述问题service的实例和创建一个提供Web服务的RC:webapp-rc.yamlapiVersion: v1kind: ReplicationController

2021-03-12 17:31:33 435 2

原创 k8s四:深入理解Pod

pod、容器和service的关系pod与容器是包含关系,通常一个pod包含了多个容器,在pod对应的定义文件中会有具体的定义。pod本质上是一个最小部署单元,不是一个程序/进程,是一个环境,包括容器\存储、网络ip:port为什么有了pod还要有service?pod是临时性的,当pod中的进程结束、node故障、资源短缺时,pod都有可能被干掉,即pod的ip:port也是动态变化的,所以不能作为服务提供方。service会被分配一个固定的集群ip2.3.1 pod的定义详解https:/

2021-03-12 16:59:54 1094 1

原创 k8s三:k8s安装与kubectl指令

2.1 k8s的安装与配置2.1.1 准备工作以centOs为例查看Linux系统版本的命令1、cat /etc/issue,此命令也适用于所有的Linux发行版。  [root@S-CentOS home]# cat /etc/issue  CentOS release 6.5 (Final)  Kernel \r on an \m2、cat /etc/redhat-release,这种方法只适合Redhat系的Linux:  [root@S-CentOS home]# cat /et

2021-03-12 15:05:30 343 1

原创 k8s二:资源初步介绍

k8s的管理角色master负责整个集群的管理和控制,基本上k8s的所有控制命令都由它来执行。通常占据一个(高可用是3个)独立的服务器,因为其很重要,并且会启动一个etcd服务,用于存储k8s的资源对象数据。master节点上的关键进程:kube-apiserver:k8s中资源的增删改查的唯一入口,也是集群控制的入口进程。kube-controller-manager:k8s中资源对象的自动化控制中心kube-schedular:负责资源调度的进程nodek8s集群中的工作负载节点,每

2021-03-12 14:38:32 459

bootstrap-tagsinput-master.zip

tagsinput相关的组件,包括必须的js和css文件;解压后在dist文件夹下,放到自己的项目中就可以使用了

2019-08-14

select2-4.0.8.zip

select2相关的组件,包括必须的js和css文件;解压后在dist文件夹下,放到自己的项目中就可以使用了

2019-08-14

复选下拉框

下拉复选框需要的相关组件,详细可以在https://developer.snapappointments.com/bootstrap-select/里面下载

2018-10-29

空空如也

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

TA关注的人

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