自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Wang的专栏

Name: wangqiangqiang | Email : [email protected] | Github : github.com/johnnynode

  • 博客(1001)
  • 收藏
  • 关注

原创 K8s: 在Pod中将configmap数据注入容器

文档:Kubernetes 为我们提供了 ConfigMap,可以方便的配置一些变量是一个存储键值对 key-value 对象的metadata:data:---kind: Podmetadata:labels:spec:resources:limits:envFrom:这里只在 data 中配置一个 db-url 如果需要多个,自行配置创建查看 configmap这里可以看到,配置的字段写入了环境变量这样应用程序就可以读取环境变量了,实现了应用的解耦。

2024-04-19 21:15:00 104

原创 K8s: 在Pod中使用亲和性调度节点

它有一个节点亲和性配置 requiredDuringSchedulingIgnoredDuringExecution , disktype=ssd。这意味着 pod 只会被调度到具有 disktype=ssd 标签的节点上。依据强制的节点亲和性调度 Pod, 下面清单描述了一个 Pod。2 )场景2: 将数据库类型的应用部署到 db 类型的节点上。如果有移除相关label, 参考: $亲和性有很多类型,这里是一种节点亲和性。可以看到非常准确的部署到 设置了。创建 affinity.yaml。

2024-04-19 19:30:00 146

原创 K8s: 在Pod里面对容器进行配额管理和相关原理

需要让资源在受控的环境下运行,一般都是加上 resources limits 的配置才能达到最佳实践。在生产环境中,内存占用通常很大,如果里面有死循环,会导致内存和cpu过大导致影响其他pod运行资源。默认cpu是0.5个cpu, 一般定义的时候参数是最高的门槛,不会超过这个设置。创建一个命名空间,以便将 本练习中创建的资源与集群的其余部分资源隔离。1 )Docker namespace 隔离。创建 cpu-limit.yaml。2 )CGroups 实现资源配额。

2024-04-19 12:45:00 325

原创 K8s: 在Pod里面配置容器启动的命令参数及容器间依赖的环境变量

在 Pod 配置文件中设置了一个命令与两个参数。现在,创建一个只包含单个容器的 Pod。2.2 将环境变量作为命令参数。以上是打印出来了几个环境变量。创建 args.yaml。

2024-04-19 07:30:00 413

原创 K8s: 在Pod里面创建init容器与健康检查

kubelet会向容器内运行的服务(服务会监听 8080 端口)发送一个 HTTP GET 请求来执行探测。如果服务器上 /healthz 路径下的处理程序返回成功代码,则 kubelet 认为容器是健康存活的。同时pod中和容器中打印的时间相差 20s,这两个相差的时间一定是 大于 睡了的10s的。容器存活的最开始 10 秒中, /healthz 处理程序返回一个 200 的状态码。这样,通过探针的健康检查,可以判断pod的运行健康状态。下面的例子定义了一个有 init 容器和一个业务容器。

2024-04-18 23:30:00 592

原创 K8s: 关于Kubernetes中的Pod的生命周期(状态)以及生命周期的钩子函数处理

在上述配置文件中,可以看到 postStart 命令在容器的 /usr/share 目录下写入文件 message。创建一个包含一个容器的 Pod,该容器为 postStart 和 preStop 事件提供对应的处理函数。在Pod配置文件中,定义 postStart 和 preStop 处理函数。创建一个 pod, 新建一个 lifecycle-demo.yaml 文件。命令 preStop 负责优雅地终止 nginx 服务。当因为失效而导致容器终止时,这一处理方式很有用。查看文件是否被写入内容。

2024-04-18 20:45:00 493

原创 K8s: 关于Kubernetes中的Pod的创建,实现原理,Job调度pod以及pod网络

Pod 是最小部署的单元,Pod里面是由一个或多个容器组成,也就是一组容器的集合一个pod中的容器是共享网络命名空间,每个Pod包含一个或多个紧密相关的用户业务容器Pod 是 k8s 系统中可以创建和管理的最小单元是资源对象模型中由用户创建或部署的最小资源对象模型也是在 k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展 Pod 对象功能的, 比如控制器对象是用来管控 Pod 对象的Service 或者 Ingress 资源对象是用来暴露 Pod 引用对象的。

2024-04-18 19:15:00 837

原创 Go微服务: 服务限流原理, 负载均衡与API网关

go 微服务保稳三剑客: 熔断,限流,负载均衡限流的作用限制流量,在服务端生效注意:熔断是客户端生效保护后端服务餐厅吃饭排队的问题,提供凳子,让等候,这就是限流操作如果不限流,每个客户都吃不上饭与熔断互补go 微服务保稳三剑客: 熔断,限流,负载均衡负载均衡的作用提高系统可扩展性如果漏桶算法中的处理速度存在瓶颈不满足需求,我们就要通过负载均衡来弥补如果客户端请求,服务端压力比较大的时候,也可以用负载均衡支持 HTTP, HTTPS, TCP, UDP 请求。

2024-04-16 12:45:00 1311

原创 Go微服务: 服务熔断hystrix原理

go 微服务保稳三剑客:熔断,限流,负载均衡微服务熔断(hystrix-go) 与 服务雪崩效应在服务里面,有服务A调用服务B, 会有依赖调用关系,同时服务C被B依赖如果依赖关系在生产环境中多的话,C挂了之后服务B原本正常,也会因为C导致不正常同时,A因为依赖B导致A也出了问题这时候,会级联反应,就是服务雪崩效应,如下图微服务熔断 (hystrix-go) 目标组织故障的连锁反应快速失败并迅速恢复它会走一个熔断的逻辑回退并优雅降级。

2024-04-16 07:45:00 900

原创 Go微服务: go-micro集成链路追踪jaeger

链路追踪数据写入的过程可以加入 kafaka 缓冲压力我们可以通过链路追踪开发发现我们是否有循环调用在链路中非必要尽量避免带入异步场景的span异步场景,比如写入日志,操作数据库把这些操作加入span, 也没有一个明确返回的时间特别不利于排错

2024-04-15 08:45:00 250 1

原创 Go微服务: 链路追踪jaeger原理和环境搭建

著名的管理学大师彼得·德鲁克曾说过“If you can’t measure it, you can’t improve it”意思是:如果你不能度量它,你就无法改进它在微服务开发后期,服务会越来越多,调用链过多,进行链路追踪时,心态会崩溃这时候,我们就要引入一个链路跟踪的工具:jaegerjaeger 是用来监视和诊断基于微服务的分布式系统用于服务依赖性分析,辅助性能优化里面反应出来依赖关系之间的调用时间 (开始和结束时间)

2024-04-15 06:15:00 694

原创 Go微服务: go-micro集成consul的注册中心和配置中心

1 )consul 集群 2 )consul 中设置mysql的配置文件 2 )common 核心代码参考 3 )main.go 核心代码

2024-04-14 20:47:42 597 2

原创 K8s: 将一个节点移出集群和相关注意事项

如果在执行 kubectl cordon 和 kubectl drain 命令后,节点的状态变为 NotReady,SchedulingDisabled。此外,如果你在生产环境中操作,请务必先在测试环境中验证所有步骤,以确保操作的正确性和安全性。但尚未成功将所有Pod驱逐到其他节点或节点本身存在某些问题导致它无法进入Ready状态。请注意,在执行这些操作之前,确保已经备份了所有重要的数据和配置,以防万一出现意外情况。可以通过执行以下命令来检查集群中的节点列表:$3 ) 从集群中移除节点。

2024-04-14 17:42:16 787

原创 K8s: 裸机初始化Kubernetes集群环境

目前可用的 k8s版本在 1.29,每个版本配置不一样,最新版本基于 containerd.io 的, 删除了docker运行时。也可以使用 docker 的运行时,但配置比较麻烦,所以,我们使用 1.22.4版本,这是一个简单的版本。如果在 阿里云等云产品上,还需要配置安全组, 配置安全组类似于这样。还有需要了解 master 节点不跑任务,都是在 工作节点来跑。删除之前服务器上的一些 相关软件,(裸机的话,不用执行)现在工作节点上,也有这个文件了, 在工作节点上 执行。配置 Docker 安装源。

2024-04-13 13:56:35 652

原创 设计模式: 行为型之解释器模式(23)

解释器模式(Interpreter Pattern)是一种行为型设计模式,用于给定一门语言,定义它的文法的一种表示并定义一个解释器,该解释器使用该表示来解释语言中的句子这种模式按照规定的文法(语法)进行解析,使得一些重复出现的问题可以用一种简单的语言进行表达我们首先要定义语言的文法表示,这通常涉及到定义语言的语法规则和句子结构然后,我们设计一个解释器,它能够读取这些语法规则和句子,并根据这些规则进行解释或执行相应的操作。

2024-04-13 08:15:00 827

原创 设计模式: 行为型之访问者模式(22)

访问者模式(Visitor Pattern)是一种行为设计模式,它封装了一些作用于某种数据结构各元素的操作可以在不改变数据结构的前提下定义作用于这些元素的新的操作访问者模式适用于需要对一个对象结构中的对象进行很多不同操作同时需要避免让这些操作“污染”这些对象的类。

2024-04-13 06:45:00 612

原创 设计模式: 行为型之中迭代器模式(21)

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式它提供了一种方法顺序访问一个聚合对象中各个元素,而又无须暴露该对象的内部表示,这种模式属于行为型模式迭代器模式的核心思想是将集合对象的迭代行为抽象到迭代器中,提供一致的接口使得不同的容器可以提供一致的遍历行为,而不用关心容器内元素的组成结构这种设计方式解耦了迭代与集合,使得集合对象本身无需关心遍历的逻辑,而迭代器对象则专注于遍历的实现。

2024-04-12 23:45:00 561

原创 设计模式: 行为型之中状态模式(20)

状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为状态模式通过为每个状态定义一个类,使得对象在其内部状态改变时,可以改变其行为。

2024-04-12 21:45:00 631

原创 设计模式: 行为型之中观察者模式(19)

观察者模式(Observer Pattern)是一种行为设计模式它定义了对象之间的依赖关系,当一个对象(被称为主题或发布者)的状态改变时所有依赖于它的对象(被称为观察者)都会得到通知并自动更新。

2024-04-12 20:30:00 758

原创 设计模式: 行为型之中介者模式(18)

中介者模式(Mediator Pattern)是一种行为设计模式,它用于减少对象之间的直接交互,从而使其可以松散耦合中介者模式通过引入一个中介者对象来协调多个对象之间的交互,使得这些对象不需要知道彼此的具体实现,只需与中介者进行通信中介者模式结构中介者(Mediator)定义了一个接口,用于与各同事对象通信具体中介者实现中介者接口,协调各个同事对象之间的交互并可以维护同事对象之间的引用关系同事类每一个同事对象都知道中介者对象,并与它通信。

2024-04-12 19:30:00 726

原创 设计模式: 行为型之命令模式(17)

由于命令模式引入了额外的命令对象,可能会导致请求处理的时间变长。:命令模式可以方便地实现请求的撤销与重做,只需将命令对象保存到历史记录中,然后按需执行撤销或重做操作。:客户端无需了解复杂的业务逻辑,只需调用命令对象的执行方法即可,降低了客户端的复杂性。:由于命令对象相对独立,增加新的命令比较容易,只需实现新的命令类即可,符合开闭原则。:命令模式支持命令的组合,即多个命令可以组合成一个复合命令,从而一次性执行多个操作。:如果命令的执行速度至关重要,命令模式的间接调用机制可能会引入额外的性能开销。

2024-04-12 12:45:00 775

原创 设计模式: 行为型之策略模式(16)

策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的行为该模式定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

2024-04-12 08:45:00 365

原创 设计模式: 行为型之模板方法模式(15)

模板方法模式(Template Method Pattern)是一种行为设计模式它在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤// 定义抽象类,它包含了算法的框架或者说模板方法// 模板方法,定义了算法的骨架// 原语操作,留给子类去实现// 具体子类,实现抽象类中未实现的原语操作// 使用示例// 输出:// ---是抽象类,它定义了算法的模板方法和几个抽象方法。

2024-04-12 07:45:00 226

原创 设计模式: 行为型之责任链模式(14)

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许对象或对象集合以链式的方式组织在一起,以处理请求在责任链中,每个对象都包含对下一个对象的引用,并且都有机会处理请求当某个对象无法处理请求时,它会把请求传递给链中的下一个对象通过这种方式,请求会沿着责任链传递,直到被某个对象处理为止责任链模式的主要角色包括:抽象处理者(Handler)角色定义一个处理请求的接口。它包含一个指向下一个处理者的引用(即下一个处理者对象的链接)

2024-04-12 06:30:00 746

原创 设计模式: 行为型之备忘录模式(13)

备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态这样以后就可将该对象恢复到原先保存的状态。这种类型的设计模式属于行为模式在备忘录模式中,主要涉及三种角色:发起人(Originator)角色记录当前时刻它的内部状态,并可使用备忘录恢复内部状态发起人可以根据需要决定备忘录存储发起人的哪些状态备忘录(Memento)角色负责存储发起人对象的内部状态,并可防止发起人以外的其他对象访问备忘录。

2024-04-11 23:45:00 576

原创 设计模式: 结构型之装饰器模式(12)

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变现有类的情况下,动态地给对象添加新的职责或功能在 TypeScript 中,装饰器模式可以通过装饰器(Decorators)这一特性来实现装饰器在 TypeScript 中是一种特殊的声明,它可以附加到类声明、方法、属性或参数上装饰器使用 @expression 的形式,其中 expression 必须求值为一个函数,该函数将在运行时被调用,并且会被传入有关其装饰的声明的信息。

2024-04-11 21:45:00 771

原创 设计模式: 结构型之外观模式(11)

外观模式(Facade Pattern)是一种结构型设计模式,它为复杂的系统、程序库或框架提供一个简单(但有限)的接口这种模式的核心理念是隐藏系统的复杂性,仅对外暴露一个简化的接口,使得外部代码能够更容易地与系统进行交互。

2024-04-11 19:15:00 511

原创 设计模式: 结构型之代理模式(10)

代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一种将类的功能委托给另一个类的机制在代理模式中,代理类(Proxy)充当客户端与被代理类(Real Subject)之间的中介,客户端通过代理类来间接地访问被代理类1 ) 代理模式的核心思想代理模式的核心思想是为其他对象提供一个代理以控制对这个对象的访问代理类负责在客户端与被代理类之间建立一种关系,使得客户端能够间接地访问被代理类通过这种方式,我们可以在不修改原有代码的情况下,增加额外的功能,如权限校验、日志记录、性能监控等。

2024-04-11 12:30:00 664

原创 设计模式: 结构型之桥接模式(9)

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与它的实现部分分离,使得它们都可以独立地变化在TypeScript中,这种模式可以通过接口和类的组合来实现,下面将详细解释桥接模式及其在TypeScript中的应用1 ) 桥接模式的核心思想桥接模式的核心在于将抽象与实现解耦,使得它们可以独立变化通过组合的方式,而不是继承,建立抽象类与实现类之间的联系这种模式使得抽象部分和实现部分可以沿着各自的维度进行扩展,而不会相互影响2 ) 桥接模式的结构。

2024-04-11 08:45:00 1010

原创 设计模式: 结构型之适配器模式(8)

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一种接口,从而使得原本不兼容的类可以一起工作在开发中,适配器模式经常用于解决接口不兼容、第三方库或组件的集成等问题适配器模式通常用于以下几种情况当你想使用现有的类,但是其接口不符合你的需求当你想创建一个可以重复使用的类,可以与其他不相关的类或遗留系统协同工作。

2024-04-11 07:00:00 840

原创 设计模式: 结构型之享元模式(7)

享元模式(Flyweight Pattern)是一种用于优化性能的结构型设计模式,它通过共享对象来减少内存中对象的数量享元模式通常用于当系统中存在大量相同或相似对象时,通过共享这些对象的状态来减少内存消耗我们会充分利用类型系统的优势来确保内部分享状态和外部状态的有效区分。

2024-04-11 00:00:00 1421

原创 设计模式: 结构型之组合模式(6)

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构组合模式使得客户端对单个对象和复合对象的使用具有一致性在 TypeScript 中,组合模式通常涉及到一个接口(或抽象类),它定义了用于操作组件的方法然后,有两个具体的类实现这个接口一个是叶子节点类,它表示树形结构中的基本对象另一个是组合类,它表示包含其他组件的复合对象。

2024-04-10 21:45:00 874

原创 consul: 集群搭建和数据中心通信

对于当前的两台机器和单机部署的场景,每台机器上的Consul实例已经是其数据中心内的唯一服务器节点,因此它们不会通过WAN Gossip层进行通信。在大多数情况下,server节点需要这些配置来确保跨数据中心的通信,而client节点则主要关注与本地server节点的通信。在多数据中心的Consul配置中,client和server的配置会有所不同,具体取决于它们在架构中的角色和功能。同样的,并在 dc2 的 server.json 中添加指向dc1的配置,这里不再赘述。

2024-04-05 00:55:18 819

原创 nginx: 集群环境配置搭建

在构建和管理NGINX集群时,有许多关键的注意事项,如下。从这里可以看到,每个端口都可以自行配置管理。4 )服务器的硬件与配置。2 ) 目录结构配置。3 )网络带宽与延迟。

2024-04-04 19:30:00 1124 2

原创 Nginx: proxy_set_header 与 add_header 区别

proxy_set_header 和 add_header 是 Nginx 配置中两个不同的指令, 它们各自有不同的用途proxy_set_header 指令用于修改转发到代理服务器(通常是后端应用服务器)的 HTTP 请求头它允许您设置或覆盖请求头中的字段,以便后端服务器能够接收正确的信息或根据这些信息做出响应例如,有时可能会使用 proxy_set_header 来设置 Host 头,这样后端服务器就知道它正在为哪个域名提供服务有时候,还可以设置 X-Real-IP 和 X-Forwarded-

2024-04-01 20:59:42 657

原创 Typescript高级: 函数重载和constructor重载

在 TypeScript 中,类的重载主要涉及到方法的重载(Overloading),而很少涉及构造函数的重载因为 TypeScript 的类构造函数不支持像一些其他语言(如 C++ 或 Java)那样的传统意义上的重载类的构造函数(constructor)本身并不支持传统意义上的重载,因为构造函数只有一个实际的实现但是,可以通过为构造函数提供不同的参数类型或数量来模拟构造函数的重载效果这通常是通过使用联合类型(union types)和类型守卫(type guards)来实现的。

2024-03-27 21:08:40 822

原创 Typescript高级: is 类型守卫

在 TypeScript 中,is关键字主要用于类型守卫(Type Guards)类型守卫是一种表达式,它执行一些运行时检查,并缩小变量的类型范围is关键字通常与类型断言一起使用,以提供更精确的类型信息。

2024-03-27 20:36:34 325

原创 Github: Github actions自动化工作原理与多workflow创建和部署

参考:https://docs.github.com/en/actions/learn-github-actions/environment-variables。可以看到,在里面可以使用环境变量和自定义变量, 同时,类似 jobs 下可定义多个任务,比如 再加一个 Test2。在项目目录下新建 .github/workflows 目录, 在里面 新建 test.yml。如果没有触发,可能由于提交到真实的主机上,或workspaces 目录或具体配置错误。上面的简单示例可以很明白的看清楚会发生什么。

2024-03-17 11:20:30 863

原创 Jenkins: 配合docker来部署项目

测试将jenkins构建后的项目部署到docker的nginx镜像中nginx 镜像内的默认目录在 /usr/share/nginx/html将待部署项目存放在 /usr/share/nginx/html 项目名称目录在Mac环境下的 jenkins系统 中,工程项目默认的路径在 ~/.jenkins/workspace/项目名称目录

2024-03-16 21:38:41 550

原创 Jenkins: 配置自动化发布脚本

在Jenkins的 一个工程项目任务中, 点击左侧 配置 栏在下面的 Build Steps 中,点击上面的 可用的环境变量列表找到里面有一个 WORKSPACE 的变量这个变量指向我们的jenkins下工程项目源码的目录需要把这个变量利用起来

2024-03-16 17:49:31 644

空空如也

空空如也

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

TA关注的人

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