七层网络协议
7层是指OSI七层协议模型,主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。 OSI 是Open System Interconnect的缩写,意为开放式系统互联。 OSI 七层协议模型是一个通用的模型,可以用于各种网络。它提供了一个理解和描述网络通信的框架。 OSI七层参考模型的各个层次的划分遵循下列原则: 1、同一层中的各网络节点都有相同的层次结构,具有同样的功能。 2、同一节点内相邻层之间通过接口(可以是逻辑接口)进行通信。 3、七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。 4、不同节点的同等层按照协议实现对等层之间的通信。 高级图示 物理层(Physical Layer)物理层是OSI 模型的最低层,负责数据在物理介质(如电缆、光纤)上的传输。它定义了数据的物理格式、传输速率和电信号的形式。 OSI的物理层规范是有关传输介质的特这些规范通常也参考了其他组织制定的标准。连接头、...
记录支付宝支付开发
支付宝相关概念网站支付DEMO传送门:手机网站支付 DEMO | 网页&移动应用 RSA、加密加签、密钥 对称加密 对称加密:发送方和接收方用的是同一把密钥,存在问题:当某一方将密钥泄漏之后,发送的消息可以被截取获悉并且随意进行通信。 非对称加密 非对称加密:发送方和接收方使用的不是同一把密钥,发送方使用密钥A对明文进行加密,接收方使用密钥B对密文进行解密,然后接收方将回复的明文用密钥C进行加密,发送方使用密钥D进行解密。采用非对称加密的好处是:即使有密钥被泄漏也不能自由的通信。 公钥与私钥 公钥和私钥是一个相对概念 密钥的公私性是相对于生成者而言的。发送方通过密钥A对明文进行加密,密钥A是只有发送方自己知道的,接收方想要解密密文,就需要拿到发送方公布出来的密钥B。 一对密钥生成后,保存在生产者手里的就是私钥(自己持有,不公开) 生成者发布出去让大家用的就是公钥 此时: 密钥A 和 密钥C 就是私钥,私钥用于加密,确保发送的消息不会被他人篡改 密钥B 和 密钥D 就是公钥,公钥用于解密,可以暴露出去。 加密 和 数字签名 签名:为了防止中途传输...
记录docker构建优化
记录一次node项目优化方案优化前: 以ubuntu发行版为基础镜像 不带小版本号 每次构建都从头构建(这里也推荐将package*json先copy过来进行install再copy . .,如果文件没变化,那就使用缓存,不重新构建) 优化后: 建立runtime基础镜像(包含提前安装好的基础依赖和环境, 包括node_modules),并使用alpine为基础镜像发行版 使用nexus管理项目包(docker/npm/maven) 指定具体版本号(只有 major version,没有指定 minor version、patch version。当该基础镜像 minor 或 patch 版本更新后,如果本地的镜像缓存也被清除了,那么打包就会使用新版本的基础镜像) 构建 Docker 镜像的时候,会缓存 Dockerfile 中尚未更改的所有步骤。所以,如果新构建时更改任何指令,将后的指令步骤将会重新来不再使用缓存。举例来说,就是指令 3 发生了变更,其后的 4-n 就会重跑并重新生成缓存。因此,编写 Dockerfile 的时候,就需要将最不可能产生更...
nexus-docker镜像清理
先清理mainfests方法1 - Cleanup Policies查看docker repo 比如你的docker repo名字叫做test-repo,然后在nexus3首页的seatch下面找到docker,点进去随便查看一个已经上传的镜像 记住上面的Name选项,之后要用到 设定清理策略(clean policies) 在nexus3 设置中找到 Cleanup Policies 点击 Create Cleanup Policy 创建一个新的清理策略 注意到Asset Name Matcher区域,这里可以填写RE表达式,过滤的是第一步中得到的Name选项。比如你想要过滤所有以clean结尾的rabbitmq镜像,你可以这么编写你的表达式: 1v2/rabbitmq/manifests/.*-clean 如果你想要清理所有的镜像,而不只是rabbitmq 1v2/.*/manifests/.*-clean 当然你也可以根据情况选择是否设置镜像过期时间一起配合使用(注意这里的三个条件是逻辑与的关系)配置完成后,不要忘了点击下方进行预览,以...
关于mysql死锁
关于MySQL的死锁 MySQL的死锁指的是两个事务互相等待的场景,这种循环等待理论上不会有尽头。 比如事务A持有行1的锁,事务B持有行2的锁,然后事务A试图获取行2的锁,事务B试图获取行1的锁,这样事务A要等待事务B释放行2的锁,事务B要等待事务A释放行1的锁,两个事务互相等待,谁也提交不了。 这种情况下MySQL会选择中断并回滚其中一个事务,使得另一个事务可以提交。MySQL会记录死锁的日志。 制造一个死锁的场景新建一个表,添加两条数据: 创建两个事务,事务执行的sql分别是: 事务A: 1234set autocommit=0;update medicine_control set current_count=1 where id='1';update medicine_control set current_count=1 where id='2';COMMIT; 事务B: 1234set autocommit=0;update medicine_control set current_count=2 where id=&...
自定义监控指标开发(四):配合K8s收集服务指标信息
介绍 在Kubernetes中,Prometheus Operator可以通过两种方式自动发现监控目标:PodMonitor和ServiceMonitor。PodMonitor用于监控由单个Pod定义的服务,而ServiceMonitor用于监控Kubernetes Service中的所有Pod。 要使用PodMonitor和ServiceMonitor,需要在Kubernetes中定义它们,然后Prometheus Operator将从这些定义中自动发现和创建监控目标。 在Kubernetes中,Prometheus Operator可以通过两种方式自动发现监控目标:PodMonitor和ServiceMonitor。PodMonitor用于监控由单个Pod定义的服务,而ServiceMonitor用于监控Kubernetes Service中的所有Pod。 要使用PodMonitor和ServiceMonitor,需要在Kubernetes中定义它们,然后Prometheus Operator将从这些定义中自动发现和创建监控目标。 以下是如何使用PodMonitor和Ser...
限流算法
前言 在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。那么何为限流呢?顾名思义,限流就是限制流量,就像你宽带包了1个G的流量,用完了就没了。通过限流,我们可以很好地控制系统的qps,从而达到保护系统的目的。本篇文章将会介绍一下常用的限流算法以及他们各自的特点。 几种常见的限流方法计数器固定窗口算法计数器算法是限流算法里最简单也是最容易实现的一种算法。 比如我们规定,对于A接口来说,我们1分钟的访问次数不能超过100个。那么我们可以这么做:在一开 始的时候,我们可以设置一个计数器counter,每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个 请求的间隔时间还在1分钟之内,那么说明请求数过多;如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置 counter,具体算法的示意图如下: 伪代码12345678910111213141516171819202122232425public class CounterTest { public long timeSta...
K8s安装部署MongoDB
Mongodb高可用模式mongodb的部署方式有: Standalone单节点部署此种部署方式就是最简单易用并且常见的部署了,直接使用mongod起来一个进程。 Master-Slave主从结构主从架构一般用于备份或者做读写分离。一般有一主一从设计和一主多从设计。 主(Master) 可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。 从(Slave) 只读不可写,自动从Master同步数据。 特别的,对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复,推荐使用Replica Set,后面会有介绍,除非Replica的节点数超过50,才需要使用Master-Slave架构,正常情况是不可能用那么多节点的。 还有一点,Master-Slave不支持链式结构,Slave只能直接连接Master。Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。 Relica Set副本集Mongodb的Replica Set即...
记录各类第三方服务的ldap对接
Rancher测试版本:2.7.x 参考文档:http://ranchermanager.docs.rancher.com/zh/pages-for-subheaders/configure-openldap Nexus3配置步骤登录nexus管理账户,进入配置界面 依次点击Security>>LDAP进入配置页面点击 “Create Connection” 创建LDAP连接 1234567891011121314name:此连接的名称,可自定义LDAP server address Protocol:是否启用SSL,是选用 LDAPS,否则选用 LDAP Hostname:LDAP的服务器地址 Port:LDAP端口号Search base:基本DN,即一般从域的根节点开始搜索,如 dc=test,dc=comAuthentication method:加密方式Username or DN:输入用于获取LDAP用户的账户,建议使用只读账户 用户名:格式为 用户名@域名,如 userget@test.com password:...
GitLab Runner注册
参考链接:https://help.aliyun.com/document_detail/106968.html#title-xfl-dp6-kta 大概过程: 获取runner token -> 进行注册 GitLabRunner 类型 shared : 运行整个平台项目的作业(gitlab) group: 运行特定group下的所有项目的作业(group) specific: 运行指定的项目作业(project) locked: 无法运行项目作业 paused: 不会运行作业 GitLabRunner 注册流程获取runner token获取shared类型runnertoken进入系统设置 -> Runners 获取group类型的runnertoken进入group -> Settings -> CI/CD -> Runners -> Group Runners 获取specific类型的runnertoken进入具体的项目 -> Settings -> CI/CD -> Run...
