自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 聊聊服务的接口认证

当我们在提供一个服务时,除了面向用户提供界面操作外,还会面向各种三方开发者,那么此时服务的接口认证就很重要了。下面来简单说说怎么设计一个接口的认证:API签名机制API签名可以理解为就是对API的调用进行签名保护。是在进行API调用时,加了一个调用者及其调用行为的指纹信息,以帮助服务端更好的识别用户及其调用行为的合法性。其直接目的归纳为:(1)明确调用者的身份(确认调用者是谁)(2)明确调用者的调...

2024-02-20 15:03:27 913

原创 如何构建无侵入的可观测平台

使用opentelemetry开源标准协议实现:搭建trace、metric、log三种观测信号的服务端通过opentelemetry提供的SDK库封装业务侧操作通过切面编程的方式获取业务服务相关信息建立跟服务端的通信,发送信息到服务端下面简单聊聊第二点的实现启动Exporterexporter, err := otlptracehttp.New(context.Background(), otl...

2024-02-19 09:49:57 364

原创 OPA—云原生策略模型

简介OPA,全称 Open Policy Agent(开放策略代理),官网是openpolicyagent.org。OPA 主要为了解决云原生应用的访问控制、授权和策略。OPA 是通用的,与平台无关。请求和响应是以 JSON 格式发送的。OPA将决策与策略执行解耦。当你的软件需要做出决策时,它查询 OPA 并提供结构化数据(例如,JSON)作为输入。OPA 通过评估查询输入并对照策略和数据来生成...

2023-12-09 16:07:06 254

原创 Kelemetry-Kubernetes全局可观测

背景作为分布式异步声明式 API,与传统的基于 RPC 的服务相比,Kubernetes 的可解释性较低,因为事件之间没有明确的因果关系;一个对象的变化会间接影响其他对象的变化,过去在 Kubernetes 中进行可观测的尝试要么仅限于单个组件,要么过度侵入单个组件。于是诞生了kelemetry项目,用于对Kubernetes进行全局的观测监控。原理kelemetry以对象操作为监控粒度,区别于传...

2023-12-05 13:35:00 130

原创 RPC框架思考

调研在开发一个RPC 框架之前,一般需要搞清楚以下几个问题1、开发效率问题开发效率是所有的框架都需要解决的基础问题,框架的初衷几乎都是为了提高开发效率,避免每次 RPC 调用都要进行重复的 socket 操作、序列化与反序列化处理、解析协议、寻址处理、异常处理等等。因此,一个好的RPC框架应该是对开发友好的,不能让开发进行重复性的工作2、通信效率问题作为一款高性能的 RPC 框架,通信效率肯定是要...

2023-11-28 16:10:20 124

原创 GraphQL—构建多服务架构的数据层

简介作为 Facebook 在 2015 年推出的查询语言,GraphQL 能够对 API 中的数据提供一套易于理解的完整描述,使得客户端能够更加准确的获得它需要的数据现在的web系统大多是基于restful的,我们知道,REST强调以资源来划分系统,通过URL规范来操作相应的资源:一个系统中的资源有关联关系,通过URL规范就不太好定义一个很好的url接口每个操作都需要对应一个url接口前端在获取...

2023-11-24 13:39:09 316 1

原创 ETCD中MVCC的运用

MVCC并发与锁从来都是密不可分的两个东西,在一个请求的过程中,难免会操作各种各样的资源,那么在多个请求同时到来的时候,各个请求处理资源是无序的,肯定就会造成干扰,那么普遍的做法就是加锁。但是,这势必会导致系统性能下降,因此出现了各种优化的方案:控制锁的粒度;乐观锁等等。另一个方面,伴随着锁的出现,针对锁的处理,开始有了事务,说到事务,那么就会想到MVCC(多版本控制),相信大家对MVCC开始了解...

2023-11-17 13:41:55 670

原创 Prometheus扩展思想

不足Prometheus 本身只支持单机部署,没有自带支持集群部署,也就不支持高可用以及水平扩容,在大规模场景下,最让人关心的问题是它的存储空间也受限于单机磁盘容量,磁盘容量决定了单个 Prometheus 所能存储的数据量,数据量大小又取决于被采集服务的指标数量、服务数量、采集速率以及数据过期时间。在数据量大的情况下,我们可能就需要做很多取舍,比如丢弃不重要的指标、降低采集速率、设置较短的数据过...

2023-11-11 15:30:26 60

原创 Istio-EnvoyFilter配置浅谈

EnvoyFilterEnvoyFilter提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 来修改某些字段的值,添加特定的过滤器,甚至添加全新的 listener、cluster 等。这个功能必须谨慎使用,因为不正确的配置可能破坏整个网格的稳定性。对于特定命名空间中的特定工作负载,可以存在任意数量的 EnvoyFilter。这些 EnvoyF...

2023-11-07 18:06:06 232

原创 Envoy的配置浅谈

今天来简单说说envoy的配置想象一下网络代理程序的流程,比如作为一个代理,首先要能获取请求流量,通常是采用监听端口的方式实现;其次拿到请求数据后需要对其做微处理,例如附加Header或校验某个Header字段的内容等,这里针对来源数据的层次不同,可以分为L3/L4/L7,然后将请求转发出去;转发这里又可以衍生出如果后端是一个集群,需要从中挑选一台机器,如何挑选又涉及到负载均衡等。脑补...

2023-11-04 15:24:43 105

原创 Terraform—基础设施即代码(Iac)

简介IAC(基础设施即代码),是指通过编写代码来进行基础设施的定义,部署,更新与销毁。让基础设施的变更同代码一样,具有版本控制的能力,同时可以通过codeReview 进行审阅,保障其可靠性与一致性。只需要做好基础设施可变与不可变部分的划分,即可通过流水线工具及相关策略对可变部分进行动态调整,完成基础设施的自动化编排与管理。Terraform 是 Hashicorp 公司开源的一种多云资源编排工具...

2023-10-14 16:55:36 101

原创 Apisix-Ingress服务发现详解

apisixApache APISIX 是一个基于微服务 API 网关,其不仅可以处理南北向的流量,也可以处理东西向的流量即服务之间的流量。Apache APISIX 集成了控制面板和数据面,与其他 API 网关相比,Apache APISIX 的上游、路由、插件全是动态的,修改这些东西时都不用重启。并且 Apache APISIX 的插件也是热加载,可以随时插拔、修改插件。Apache APIS...

2023-10-11 14:33:00 1003

原创 Mongo聚合分析命令浅析

在很多时候,我们需要临时统计下数据库中的数据,一般的做法是写一个脚本,通过代码来统计分析。在mongo中,其实可以直接使用命令就可以实现,主要得益于其非常强大的统计命令支撑。下面通过一个例子来看下mongo中强大的统计分析命令。有这样一个集合,test集合字段示例如下:cmgo-dho4eog7_0:PRIMARY> db.resource_f57ddf3fa743426b93cd6390e...

2023-09-23 18:43:40 101

原创 Crossplane-云基础架构管理平台

背景Crossplane(跨平面,意思是可以跨越多个 公有云平台) 是一个开源的 Kubernetes 插件,它允许平台团队组装来自多个供应商的基础设施,并向应用程序团队公开更高级别的自助服务 api,而不需要编写任何代码。Crossplane 扩展您的 Kubernetes 集群,为您提供任何基础设施或托管服务的 crd。将这些细粒度资源组合成更高级别的抽象,这些抽象可以使用您喜欢的工具,也可以...

2023-09-18 18:41:51 177

原创 跟着Kubernetes学设计—声明式or命令式

我们知道k8s是基于声明式设计的系统,我们只管告诉k8s我们想要达到的系统状态,至于怎么达到,是k8s自身需要处理的事情,比如下面的yaml:apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:selector:matchLabels:app: nginxrep...

2023-09-10 12:08:51 87

原创 大规模场景下对Istio的性能优化

简介当前istio下发xDS使用的是全量下发策略,也就是网格里的所有sidecar(envoy),内存里都会有整个网格内所有的服务发现数据。这样的结果是,每个sidecar内存都会随着网格规模增长而增长。Aeraki-meshaeraki-mesh项目下有一个子项目专门用来处理istio配置分发性能问题,我们找到该项目:https://github.com/aeraki-mesh/lazyxds从...

2023-08-30 13:57:02 837

原创 OAM—云原生下的应用模型

OAM概述OAM (Open Application Model)是一个专注于描述应用的标准规范,OAM的愿景是在应用的维护生命周期内,提供一种标准化的沟通方式。将应用开发者、应用运维人员和基础设施运维人员,以一种标准化的方式连接起来,并且强化了应用生命周期中各个角色的职责。对于平台开发人员来说,我们都知道Kubernetes的抽象层级:容器和基础设施API资源。但是对于平台的终端用户而言还是太过...

2023-08-23 13:39:08 120

原创 CloudEvents—云原生事件规范

我们的系统中或多或少都会用到如下两类业务技术:异步任务,用于降低接口时延或削峰,提升用户体验,降低系统并发压力;通知类RPC,用于微服务间状态变更,用户行为的联动等场景;以上两种场景,都十分适合使用事件驱动来实现。但是对于事件的描述,现在还缺乏一种统一描述,服务使用方和提供方往往要花费大量的时间沟通字段定义,凭直觉设计事件属性,并在将来的使用过程中会因为新增或修改事件的属性而增加很大的额外工作量。...

2023-08-14 18:08:08 1428

原创 BFF—服务于前端的后端中间层

BFF简介BFF一词来自Sam Newman的一篇博文《Pattern:Backends For Frontends》,指的是服务于前端的后端。提出这个概念的目的是为了解决什么问题呢?从大的方向来说,主要有以下两个方面:随着电子设备的发展,一个系统可能需要同时在各种设备上展示,比如PC、手机、平板等,但是因为多端的展示要求不同,前端对于数据的获取和组装就会有很大差异其实不止多端数据的问题,对于在微...

2023-08-13 13:20:58 176

原创 可观测之调用链Skywalking

简介分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。多个语言自动探针。包括 Java,.NET Core 和 Node.JS。轻量高效。无需大数据平台,和大量的服务器资源。模块化。UI、存储、...

2023-07-23 16:23:23 900

原创 聊聊Golang中的单元测试

对外接口对于向外提供的接口来说,一般需要提供mock接口给使用方:安装这两个库go get github.com/golang/mock/gomockgo get github.com/golang/mock/mockgen然后通过mockgen 命令生成mock接口文件怎样mock1、对于提供了mock接口文件的接口mock,可以直接使用:ctrl := gomock.NewControlle...

2023-07-18 13:44:06 91

原创 Django请求处理流程

源码地址:https://github.com/django/django请求流Socketserver.py#StreamRequestHandler -> http/server.py#BaseHTTPRequestHandler -> wsgiref/simple_server.py#WSGIRequestHandler -> django/core/servers/bas...

2023-07-15 10:15:13 490

原创 名字服务Polaris中服务发现详解

源码地址:https://github.com/polarismesh/polaris-controller/blob/main/README-zh.md通过mesh配置文件设置controller的配置管理对象https://fankangbest.github.io/2017/10/12/kubernetes-client%E5%88%86%E6%9E%90(%E4%B8%80)-kubeco...

2023-07-12 18:06:27 795

原创 谈谈名字服务Polaris的sidecar模式

源码地址:https://github.com/polarismesh/polaris-sidecarpolaris-sidecar 作为 polaris 的本地边车代理,提供两个可选功能模式:本地 DNS:使用 DNS 解析的方式访问北极星上的服务服务网格:通过劫持流量的方式实现服务发现和治理,开发侵入性低解释器接口typeNamingResolver interface{// Na...

2023-07-10 20:48:50 116

原创 名字服务Polaris之Spring中服务注册原理

简介Polaris名字服务作为服务治理的一员,具有服务注册,服务发现,路由等相关特性。广泛应用于微服务开发中。在现代微服务架构中,对于服务发布来说,需要有灰度发布、蓝绿部署、金丝雀部署等等场景,那么对于一个系统来说,怎么做呢?这对于一个服务治理框架来说,支持各种各样的路由策略是必要的。Polaris就具有非常灵活的路由转发功能:1. 支持常规的url路由2. 支持header路由3. 支持各种自定...

2023-07-07 12:36:36 385

原创 Nginx代理出现403问题分析

背景最近在处理一个业务场景问题:项目需要调用某个系统的接口,但是那个系统因为比较历史了,对接口调用来源ip有严格限制,需要将来源ip添加为白名单,但是我们项目的这个工具是使用的serverless平台,无法知道具体的机器 ip,scf是即时性资源,因此来源ip肯定是变化的,因此决定通过一个代理来转发。nginx配置通过nginx来进行接口转发(nginx采用statefulset的固定ip部署),...

2023-07-06 12:19:22 1361

原创 Pyproject-新一代python项目管理工具

简介pyproject.toml是在 PEP 518 中提出并在 PEP 621 中扩展的新配置文件 。目的是管理构建依赖,同时也可以存储 Python 项目的任何工具配置。使用pyproject的目的:在一个 Python 项目中,我们需要管理requirements.txt.flake8等等的配置文件,当一个项目中使用的工具越多,根目录就越杂乱,管理成本越高,对新人也就越不友好将诸多工...

2023-06-30 12:55:01 550

原创 Python的site钩子机制

Site简介我们知道:Pythonimport时会首先寻找sys.path中列出的路径,类似下面:sys.path['', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-pack...

2023-06-29 12:12:22 217

原创 Containerd容器管理机制

简介containerd 是一个来自 Docker 的高级容器运行时,并实现了 CRI 规范。它是从 Docker 项目中分离出来,之后 containerd 被捐赠给云原生计算基金会(CNCF)为容器社区提供创建新容器解决方案的基础。当前k8s在创建容器的时候,是通过containerd来创建一个容器,containerd 收到请求后,会创建一个叫做containerd-shim的进程,...

2023-06-22 16:46:29 457

原创 基于Istio的灰度发布改造流程

背景在多人开发的应用团队中,每个人需要基于发布分支(master分支)拉出自己的特性开发分支,那么如何做到发布到测试环境中而互不干扰呢。对于k8s开发环境来说,即使每个版本启动一个pod来隔离,但是也无法做到前端请求精确的分配到指定的pod里面。此时可以引入今天的主角istio,istio是干嘛的这里就不详细的说了,简单来说,今天要用到的是它的路由功能。规范分支名为了对不同分支特性进行灰度,我们需...

2023-06-20 12:58:20 664

原创 CNI之Flannel网络原理

简介flannel是 coreos 开源的Kubernetes CNI实现。它使用etcd或者Kubernetes API存储整个集群的网络配置。每个 kubernetes节点上运行flanneld组件,它从etcd或者Kubernetes API获取集群的网络地址空间,并在空间内获取一个subnet,该节点上的容器 IP都从这个subnet中分配,从而保证不同节点...

2023-06-19 12:16:35 838

原创 Etcd数据恢复机制

WAL简介使用过存储软件的都知道,为了应对写入性能和灾难恢复,各个存储软件都有相关的机制来保障, 比如:mysql的redo log 和undo logzookeeper的事务日志etcd的wal日志等等,那为啥都需要额外写入这样一种日志呢?因为离散写的场景下会造成过多的随机写,更合理的方式是顺序 io 写到一个日志文件里,然后等待时机把数据进行合并后变更数据文件,这个日志就是 wal ( wri...

2023-06-17 17:18:44 1454

原创 源码级分析Mongo升级断连问题

问题描述server selection error: server selection timeout, current topology: { Type: ReplicaSetNoPrimary, Servers: [] }操作记录集群信息:三个节点(一主两副)当前版本4.2升级到版本4.4问题排查通过google也没有找到任何有用的信息,只能从源码入手,下面先从各个部分分开看,最后会来一个总...

2023-06-16 12:17:59 483

原创 Mongo数据一致性浅析

一致性简介根据CAP理论的一致性(Consistency)问题,即在读写发生在不同节点的情况下,怎么保证每次读取都能获取到最新写入的数据。这个一致性即是我们今天要讨论的MongoDB 可调一致性模型中的一致性,区别于单机数据库系统中经常提到的 ACID 理论中的一致性。可调性具体指的是什么呢?这里就不得不提分布式系统中的另外一个理论,PACELC。PACELC 在 CAP 提出 10 年之后,...

2023-06-15 12:18:34 1465

原创 Mongo之ChangeStream详解

简介Change Stream可以直译为"变更流",也就是说会将数据库中的所有变更以流式的方式呈现出来。用户可以很方便地对数据库建立一个监听(订阅)进程,一旦数据库发生变更,使用change stream的客户端都可以收到相应的通知。使用场景可以包括但不限于以下几种:多个MongoDB集群之间的增量数据同步;高风险操作的审计(删库删表);将MongoDB的变更订阅到其他关联系统实现离线分析/计算等...

2023-06-14 12:20:22 2152

原创 Etcd控制标识介绍

名称含义Raftetcd 使用的一致性算法WAL预写Log, 持久化数据, 防止节点重启等导致数据丢失Snapshot快照, 数据更新超过阈值时, 会通过快照的方式来压缩WAL文件大小MVCC多版本并发控制DBboltdb/bboltdb, 实际存储etcd v3的数据Revision版本号, 作为etcd数据的逻辑时钟Auth revision鉴权操作所用的版本号, 为了避...

2023-06-13 12:28:26 1070

原创 超实用的K8S命令行工具

当我们有多个集群需要操作的时候,如果是只使用原生的kubectl会比较麻烦,要不断的切来切去,下面就来介绍几个实用的工具。合并多集群配置1. 下载工具:kubecm# curl -Lo kubecm.tar.gz https://github.com/sunny0826/kubecm/releases/download/v0.21.0/kubecm_v0.21.0_Darwin_x86_64.ta...

2023-06-11 11:35:40 374

原创 Nginx Ingress解析

负载均衡负载均衡(Load Balancer,简称 LB)是指把客户端访问的流量通过负载均衡器,然后根据指定的一些负载均衡策略进行转发,最终可以均匀的分摊到后端上游服务器上,然后上游服务器进行响应后再返回数据给客户端。负载均衡的最常见应用是充当反向代理,通过负载均衡,可以大大的提高服务的响应速度、提高并发请求、提高稳定性(防止单点故障)。负载均衡的基本实现方案,从业界来看,一般分为软件和硬件两大类...

2023-06-10 11:50:08 1515

原创 微服务框架与服务网格

背景互联网系统的演进,正在经历这样一个路线:单体-SOA-分布式-微服务在docker-k8s掀起的云原生浪潮下,使得微服务更加的蓬勃发展。那么要管理一个由众多微服务架构起来的系统,将是一个复杂而严肃的话题。也是首先催生了如spring cloud、dubbo、grpc等众多微服务框架,以及在云原生背景下诞生的service mesh服务网格。那么对于这两种形式的服务治理,到底应该怎么去选择他们呢...

2023-06-06 18:32:28 368

原创 聊聊云原生监控模式

我们都知道,在监控领域,常见的数据采集方式分为push:数据源服务主动向监控平台推送数据pull:监控平台轮训向数据源服务拉取数据push 和 pull 组合模式下面先来看看业界比较流行的两大监控平台PrometheusPrometheus是在微服务和容器化的过程中兴起,算是当前监控领域的经典,尤其是与K8s的搭配也是成为了云原生体系组件的事实标准。其中对于指标数据的定义也是被大家所接受。一开始的...

2023-06-02 13:55:33 337

空空如也

空空如也

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

TA关注的人

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