自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 kubernetes-pod的更新策略与回滚策略

kubernetes的更新回滚策略

2022-11-11 20:00:00 1774

原创 kubernetes-scheduler调度

对于nodeAffinity无论是硬策略还是软策略方式,都是调度 Pod 到预期节点上,而Taints恰好与之相反,如果一个节点标记为 Taints ,除非 Pod 也被标识为可以容忍污点节点,否则该 Taints 节点不会被调度Pod。preferredDuringSchedulingIgnoredDuringExecution:软策略,如果你没有满足调度要求的节点的话,Pod就会忽略这条规则,继续完成调度过程,说白了就是满足条件最好了,没有满足就忽略掉的策略。In:label 的值在某个列表中。

2022-11-10 22:53:32 551 1

原创 kubernetes-pod的驱逐策略

kubernetes提供了pod eviction,在某些情况下node出现NotReady,资源不足的时候,需要将node上面的pod驱逐至其他节点,用于保障业务的正常运行,但是驱逐的行为并不是“立即”执行,给了一段的缓冲时间,超过这个时间才会将pod驱逐。Kube-controller-manager会周期性的检查所有node的状态,当node处于NotReady状态一定时间后将node上面的pod进行驱逐。NotReady 状态node超过该时间后,执行驱逐,默认 5 min。

2022-11-09 22:14:15 2020

原创 kubernetes-如何解决环境变量中敏感信息带来的安全隐患

k8s提供两类资源,configMap和Secret,可以用来实现业务配置的统一管理, 允许将配置文件与镜像文件分离,以使容器化的应用程序具有可移植性 。

2022-11-09 21:43:55 533

原创 Go编程源码分析channel

在go中经常谈到的一句话是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。在Goroutine之间通过channel传递数据,作为Go语言的核心数据结构和Goroutine之间的通信方式,channel是支撑Go语言高性能并发编程模型的重要结构。channel在运行时的内部表示是runtime.hchan,该结构体中包含了用于保护成员变量的互斥锁,从某种程度上说,channel是一个用于同步和通信的有锁队列。

2022-10-01 11:02:24 837

原创 一文解读Go并发编程

要搞清楚Go并发编程,就需要先清楚操作系统的线程库,因为真正的“跑腿的”是系统线程。先介绍线程实现的相关概念。

2022-10-01 10:39:47 594

原创 beego跨域问题解决方案-亲试成功

beego跨域请求解决方案

2022-07-03 00:51:14 552

原创 golang文件操作

1.使用Openfile对文件进行读写1.1 使用Openfile对文件写入os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能。func OpenFile(name string, flag int, perm FileMode) (*File, error) { ...}name:要打开的文件名flag:打开文件的模式os.O_WRONLY 只写os.O_CREATE 创建文件os.O_RDONLY 只读os.O_RDWR 读写os.

2022-04-25 21:09:44 1791

原创 03.golang常用包-md5

md5的简单使用Sum 将字节切片转化为MD5值write 可以写入多个数据返回的值要进行转化package mainimport ( "crypto/md5" "encoding/hex" "fmt")func main() { data := md5.Sum([]byte("我是lei")) d := hex.EncodeToString(data[:]) fmt.Println(d) hasher := md5.New() hasher.Write([]byte

2022-04-19 21:11:10 436

原创 02.golang常用包-log

创建log两步骤设置日志格式关键位置输出格式package mainimport ( "log" "os")func main() { //设置格式 //设置flags log.SetFlags(log.Flags() | log.Ldate | log.Ltime | log.Lshortfile) //设置prefix log.SetPrefix("main:") //输出日志 log.Println("这是我的第一条日志") //log.Fatalln("这是

2022-04-18 23:54:26 270

原创 01.golang常用包-flag

1.flag使用五步骤定义变量接收参数绑定参数创建默认帮助函数解析flag使用参数package mainimport ( "flag" "fmt")func main() { var ( host string port int help bool h bool ) flag.StringVar(&host, "H", "127.0.0.1", "连接地址") flag.IntVar(&port, "P", 22, "连接端口")

2022-04-18 23:22:10 234

原创 kubernetes的pod如何在yaml文件中设置环境变量?

1.在containers下的使用env,或者args

2022-03-15 00:18:10 968

原创 二进制部署kubernetes

2.基础环境准备2.1 系统基础设置(所有机器都要执行)2.1.1 设置主机名hostnamectl set-hostname hdss7-xx.host.com2.1.2 设置网卡~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO=noneDEFROUTE="yes"IPV4_FAILURE_FATAL="no"

2022-03-14 20:14:45 2541

原创 17.每日一读-kafka为什么这么快?

0、Kafka对于大吞吐量设计是最佳选择1、磁盘顺序读写2、页缓存直接使用操作系统的页缓存特性提高处理速度Kafka采用字节紧密存储,避免产生对象,这样可以进一步提高空间利用率3、零拷贝4、批量处理...

2022-02-27 23:20:47 914

原创 15.每日一读-RabbitMQ的六种队列模式与应用场景

1.MQ的组件:生产者:消息提供者消费者:消息使用者MQ服务器:管理队列、消息及相关信息消息:程序间通讯的数据队列:消息存放的容器,消息是先进先出的交换机:用于分发消息2.RabbitMQ工作模式2.1 简单模式无交换机参与。实际工作中几乎用不到。生产者通过MQ将消息放入队列,队列发送给消费者。2.2 工作队列类似负载均衡。在多个消息的情况下,工作队列模式会将消息分发给不同的消费者,每个消费者会收到不同的消息,并且根据处理消息的速度来接收消息的数量,进而让消费者程序发挥最大性

2022-02-24 22:38:24 1030

原创 14.每日一读-到底什么是蓝绿、红黑、灰度发布

1.科学部署的意义尽可能减少服务停机时间控制新版本带来的质量风险2.全量发布与增量发布3.蓝绿发布1.我有两个应用集群,应用集群A与应用集群B,这两个集群的版本都是v1.0,现在使用蓝绿部署的方法进行升级上线2.在网关中设置,先断开应用集群A的连接3.将应用集群A升级到V1.14.设置网关对应用集群A的连接5.设置网关断开应用集群B的连接6.升级应用集群B到v1.17.设置网关连接应用集群B3.红黑发布红黑发布针对的是一个集群1.有一个应用集群Av1.0需要对其升

2022-01-28 22:07:22 5556

原创 13.每日一读-分清脏读、幻读、 不可重复读

脏读:指读取到其他事务正在处理的未提交数据不可重复读:指并发更新时,另一个事务前后查询相同数据时的数据不符合预期幻读:指并发新增、删除这种会产生数量变化的操作时,另一个事务前后查询相同数据时的不符合预期事务隔离级别MySQL默认Repeatable Read(RR)-可重复读MySQL 5.1以后默认存储引擎就是InnoDB因此MySQL默认RR也能解决幻读问题...

2022-01-27 21:07:21 876

原创 12.每日一读-Redis Cluster集群模式

1.Redis Cluster 集群模式Cluster集群模式是redis3.0开始推出的Cluster模式是无中心结构,每个节点都保存数据和整个集群的状态,每个节点都和其他所有节点连接官方建议:至少有六个节点才能保证集群的高可用(至少3主3从)各个节点之间采用gossip协议进行通信数据分散存储在各个节点上2.集群模式与哨兵模式的不同哨兵模式:每个节点都持有全量数据,并且数据保持一致,为系统Redis高可用集群模式:每个节点数据不同,是整个数据的子集,利用多台服务器构建集群提高超大

2022-01-27 20:53:18 1718

原创 11.每日一读-公共表在分布式架构下该如何访问?

1.那些是公共表?被其他业务模块共享的基础数据表,被称为公共表比如:系统用户表、行政区划、组织机构、系统配置2.分布式环境下公共表会遇到哪些新问题?假如用户表有4000万数据,在查询时不小心没有索引,导致磁盘IO直接拉满,其他表访问就会出现高延迟。实时数据,将公共表下沉为基础服务业务模块上浮为业务服务业务应用通过RPC、RESTful API访问数据层面解耦,有独立的服务器资源支撑团队之间解耦,谁的模块谁负责开发起来真的麻烦如何屏蔽底层复杂度是架构设计的难点...

2022-01-26 21:59:35 894

原创 kubernetes-kubectl操作实例

1.创建资源对象根据YAML配置文件一次性创建Service和RC:kubectl create -f my-service.yaml -f my-rc.yaml根据目录下所有.yaml、.yml、.json文件的定义进行创建:kubectl create -f <directory>2.查看资源对象查看所有的Pod列表:kubectl get pods查看RC和Service列表:kubectl get rc,service3.描述资源对象显示Node的详细信息

2022-01-22 02:36:41 784

原创 10.每日一读-Redis哨兵模式简讲

1.Redis主从复制过程1.在生产工作中Redis一般采用一主多从的架构2.Redis主从复制的过程2.Redis Sentinel高可用集群3.Sentinel节点挂了怎么办?

2022-01-19 21:35:54 862

原创 9.每日一读—MHA:MySQL高可用架构方案

1.什么是MHA,mysql的高可用架构方案mysql的架构方案在互联网公司mysql的架构方案一般采用的是主从复制,一主多从的方案。在默认情况下mysql架构方案是不具备高可用性的,当主节点挂掉以后从节点是没有“感知”不会采取“行动”的。MHA就是最成熟的mysql高可用方案2.MHA:故障发现与转移判断master已经挂掉:MHA manager ping 三次master,当ping不通的时候可以判断有两种情况。a.MHA manager 到master的通信断掉。b.master挂

2022-01-17 21:24:18 1165 2

原创 8.每日一读—Canal实现mysql异构数据同步

1.什么是异构数据MySQL中存储的数据,elasticsearch中存储的数据。这两种数据就是异构数据。2.身处漩涡中心的mysql团队举个栗子:在一个商城的开发项目中有一个mysql团队,使用mysql来保存商品的信息。现在需要增加一个“全文检索”的功能,成立了Elasticsearch团队。mysql中新增加一条信息,就需要mysql团队调用Elasticsearch团队的接口新建商品信息。这样就出现了一个严重的问题,代码出现了强耦合。mysql团队必须了解elasticsearch团队

2022-01-17 20:47:28 1544

原创 7.每日一读一CAP定理

一致性C代表更新操作成功后,所有节点在同一时间的数据完全一致。可用性A代表用户访问数据时,系统是否能在正常响应时间返回预期的结果。分区容错性P代表分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务AP表现为订单创建后不等待库存减少直接返回处理结果CP表现为订单创建后一直等待库存减少后才返回结果AC表现为不再拆分数据系统,在一个数据库的一个事务中完成操作,也就是单体应用...

2022-01-12 20:49:38 653

原创 6.每日一读—IP直连的问题

1.IP直连有什么问题?1.1 什么是IP直连举个栗子:在写代码时连接数据库使用的IP地址1.2 IP直连带来的问题强耦合:2.如何解决IP直连的问题?2.1 使用内部DNS简单粗暴但没有故障发现与转移多IP只有轮询规则2.2 注册中心支持故障发现与故障转移多种负载均衡规则架构复杂度增加...

2022-01-12 20:39:59 1397

原创 5.每日一读—布隆过滤器的应用

1.什么是布隆过滤器巴顿.布隆于一九七零年提出的,其主旨是采用一个很长的二进制数组,通过一系列的Hash函数来确定该数据是否存在。本质就是一串二进制数组2.举一个栗子解释布隆过滤器以京东举例,京东的每一个商品都有一个唯一的SDK编号。当用户请求该商品的流程是系统使用redis缓存服务器提高性能,商品的数据会加载到缓存服务器中,用户访问商品,如果缓存里面存在就会直接返回给用户,不会走数据库。但是当有人使用爬虫恶意请求缓存中不存在的数据(缓存穿透攻击),少量的缓存穿透是没有影响的。缓存穿透

2022-01-11 22:39:13 528 1

原创 4.每日一读—大表的自增主键问题

1.思考为什么大厂严禁使用自增主键1.1 在分布式数据环境下有严重的问题资源浪费(表分片后无法动态扩展)必须提前做好分片规划,造成资源浪费自增主键必须连续,只能采用”范围分片”形式,会产生“尾部热点”效应1.2 使用UUID可以替代自增主键吗?不可以!使用UUID是无序的,作为主键会涉及大量索引重排1.3 雪花算法(Snowflake)Twitter 公司分布式项目采用的 ID 生成算法。实现雪花算法时要注意时间回拨带来的影响。...

2022-01-11 22:01:12 208

原创 3.每日一读—多级缓存

1.为什么需要缓存?提升性能最直接的方法原始数据存放在MySQL数据库上,MYSQL将数据存放在硬盘上,防止数据丢失硬盘比内存设备在IO层面上慢了不止一个数量级在多数互联网应用都是读多写少的场景,使用读写分离。数据写入mysql然后同步到redis中让用户进行读写,这里的redis就是缓存了2.分布式缓存讲解2.1客户端浏览器将一些静态资源保存到本地(设置有过期时间),从而减少重复请求静态资源。响应头:Expires与Cache-Control的区别Expires是指定具体某个时

2022-01-10 21:46:31 1379

原创 5.kubernetes的GUI资源管理插件-仪表盘

1.kubernetes的GUI资源管理插件-仪表盘hdss7-200上下载dashboard镜像[root@hdss7-200 ~]# docker pull k8scn/kubernetes-dashboard-amd64:v1.8.3[root@hdss7-200 ~]# docker images|grep dashboard[root@hdss7-200 ~]# docker tag fcac9aa03fd6 harbor.od.com/public/dashboard:v1.8.3[

2022-01-02 23:05:13 539

原创 4.kubernetes的服务暴露插件-Traefik

1.kubernetes的服务暴露插件-TraefikK8S的DNS实现了服务在集群"内"被自动发现,如何使得服务在Kuberneters集群"外"被使用和访问呢,有二种方法1)使用NodePort型的Service​ 注意:无法使用kube-proxy的ipvs模型,只能使用iptables模型2)使用Ingress资源注意:Ingress只能调度并暴露7层应用,特指http和https协议,一般建议用在http协议上Ingress是K8S API的标准资源类型之一,也是一种核心资源

2022-01-02 22:12:37 304

原创 3.kubernetes的服务发现插件-CoreDNS

1.kubernetes的服务发现插件-CoreDNS1.1 部署kubernetesubernetes的内网资源配置清单在运维主机上(hdss7-200.host.com上)准备Coredns镜像文件,以docker镜像文件的方式部署到Kubernetes集群中去。[root@hdss7-200 ~]# vi /etc/nginx/conf.d/k8s-yaml.od.com.confserver { listen 80; server_name k8s-yaml.o

2022-01-02 21:29:39 555

原创 2.kubernetes的CNI网络插件-Flannel

1.安装CNI网络插件Flannel (hdss7-21、hdss7-22)1.1 下载软件,解压,做软链接root@hdss7-21 ~]# cd /opt/src/[root@hdss7-21 src]# wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz[root@hdss7-21 src]# mkdir /opt/flannel-v0.11.0

2022-01-02 20:32:14 10385

原创 1.ElasticSearch-docker安装ElasticSearch

1.下拉镜像docker pull elasticsearch:7.10.12.查看镜像docker images3.创建Elasticsearch容器挂在的文件3.1创建所需文件mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/dataecho "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml注意

2021-12-14 16:23:47 195

原创 2.每日一读-为什么需要垂直分表?

通过将重要字段单独剥离出一张小表,让每一页能够容纳更多的行,进而缩小数据扫描的范围,达到提高执行效率的目的。

2021-12-14 16:10:38 2153

原创 1.每日一读-MySQL模式与应用场景

1.单库模式1.1 优点简单粗暴适合数据量千万一下小型应用企业网站、创业公司首选。1.2 缺点不具备可用性与并发性2.读写分离集群模式2.1 读写分离带来的问题架构复杂度提升,成本提高所有节点数据需要保持同步适用于读多写少的情况,表单不能过千万级的互联网应用需要配合MHA中间件方案实现高可用3.分库分表集群模式(分片)3.1 分库分表(分片)模式带来的问题架构复杂度提升,成本提高每个节点数据是所有数据的子集适合于十亿级数据总量的应用不具备高可用性3

2021-12-13 16:48:29 1571

原创 2.配置中心-基于go实现nacos配置中心

package mainimport ( "OldPackageTest/nacos_test/config" "encoding/json" "fmt" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo")func mai

2021-12-04 22:44:09 803

原创 1.配置中心-nacos安装

1.中文文档中文文档2.docker安装nacosdocker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -eJVM_XMN=256m -p 8848:8848 -d nacos/nacos-server:latest2.1 web登录http://192.168.1.5:8848/nacos/index.html#/login账号:nacos 密码:nacos3.nacos

2021-12-04 22:36:33 851

原创 4.服务注册与发现-go操作consul(grpc服务的注册与发现)

1.grpc服务的健康检查imporet ( "google.golang.org/grpc/health" "google.golang.org/grpc/health/grpc_health_v1")func main(){ server := grpc.NewServer() proto.RegisterUserServer(server, &handler.UserServer{}) lis, _ := net.Listen("tcp", ip ,port)

2021-12-04 13:03:07 755

原创 3.服务注册与发现-go操作consul(HTTP服务的注册与发现)

package mainimport ( "fmt" "github.com/hashicorp/consul/api")func Register(address string, port int, name string, tags []string, id string) error { cfg := api.DefaultConfig() cfg.Address = "192.168.1.103:8500" client, err := api.NewClient(cfg)

2021-12-04 12:53:29 263

原创 2.服务注册与发现-consul的api接口

1.添加服务添加服务2.删除服务删除服务3.设置健康检查健康检查4.同一个服务注册多个实例5.获取服务获取服务

2021-12-04 12:47:35 593

空空如也

空空如也

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

TA关注的人

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