自己对网络的理解
网络分层OSI七层模型
七层模型的结构清晰,每一层该干什么事。降低复杂性,统一标准,模块化。
物理层:很重要的一层,最底层,就像一个地基。保证双向传输,双向通讯。
数据链路层:①提供MAC地址;②负责数据帧的转发;③提供错误检查机制(交换机会对数据进行检测,如果发现有丢失,就会通知发送方重传数据)
网络层:①提供IP地址;②连接不同的媒介类型;③根据路由器运行的不同选择最佳路径;④在选择好的路径上路由数据包
传输层:传输层提供了端口号的概念。建立端口到端口的通信
会话层:在用于程序之间建立并维护会话连接
表示层:负责数据加密。比如对称加密、非对称加密…
应用层:给用户提供一个接口,用户可以通过用于程序来使用6层模型
七层模型虽然结构清晰,但是比较复杂并且不怎么实用,运行效率偏低。于是四层模型出现了
OSI四层模型
应用层:提供两个终端设备上的应用程序信息交换的服务,定义消息交换的格式,将消息交给传输层传输
传输层:使用TCP和UDP协议对消息进行传输
网络层:给分组交换网上不同主机提供通信服务
物理层:使用物理手段将电脑等设备连接起来 比如光纤线路
TCP和UDPTCP(传输控制协 ...
记一次github22端口连接超时
今天一大早发现github的文件推不上去,错误如下,提示22端口连接超时。寻思着前几天也好好的,科学上网也开了,就是连不上。
解决办法也很简单,我们只需要将22改为443就可以
首先我们使用下面这条命令来看一下是否能连接上github
1ssh -T git@github.com
连接不上,还是超时。现在我们去.ssh文件夹下新建config文件**(注意没有后缀名)**,开始修改端口号
config文件里配置好我们的参数
123456Host github.comUser MyEmail(邮箱)Hostname ssh.github.comPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsaPort 443
再次使用命令查看是否可以连接上
1ssh -T git@github.com
问题解决
手写单例模式以及保证安全性
单例模式的几个特点
为了确保全局只有一个类的实例,所以类的构造器要私有化
单例类必须由自己创建自己的唯一实例
单例类必须给其他对象提供这一个实例
单例模式是一个最简单的设计模式,属于创建型结构。比如我们window中的任务管理器,回收站,操作系统就是一个单例的设计。也就是说我们使用的对象永远是同一个。程序中的单例大致可以分为4大类。饿汉式、懒汉式、双重锁和静态内部类。我们先来说饿汉式
饿汉式饿汉式是一个简单的写法,和名字一样。他很饿,饿的话救急着要东西。所以他会在类加载的时候就初始化。是一个线程安全的操作。但因为不是懒加载,所以不管我们用没用这个实例。他都会实例化。可能会造成一些不必要的内存。浪费内存资源。
1234567891011121314151617/** * @className: Singleton * @description: 饿汉式 * @date: 2022/08/25 * @author: Sora33 */public class Singleton { // 饿汉 private static Singleton singleton; ...
自己写了个一键搭建Redis哨兵脚本
最近在家中无聊写了一个一键搭建Redis哨兵的脚本,是基于Docker搭建的,使用非常简单。
下载地址
https://wwu.lanzout.com/ieaAu09pjrsj
安装脚本流程
先开放阿里云ICMP(Ipv4)端口,让服务器之间可以建立通信
只需要安装Docker,Docker安装跳转https://soora33.github.io/posts/2733575.html
不需要搭建主从,更不需要安装redis,脚本都会帮你完成
复制权限,直接执行,输入三个参数,哨兵搭建完成
1.哨兵介绍大家设想一下,如果我们在生产环境部署一个Redis,宕机了怎么办,一瞬间访问不到缓存的请求全部打在数据库上,数据库表示你行你上啊。很容易数据库就会崩,数据库一崩,用户数据做不了持久化,连锁反应造成了我们的服务崩溃了,所以,Redis官方在2.8版本加入了Sentinel模式,也就是哨兵机制
2.哨兵机制下面是Redis官方对哨兵的描述
监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常自动故障转移(Automatic failover):当主节点不能正 ...
RabbitMQ消息确认机制和消息重发机制
一.机制首先我们要知道一条消息的传递过程。
生产者 -> 交换机 -> 队列
我们的生产者生产消息,生产完成的消息发送到交换机,由交换机去把这个消息转发到对应的队列上。这其中我们可能在生产者 -> 交换机丢失消息,也可能在 交换机 -> 队列上丢失消息。因此我们需要引入2个概念。
1: 生产者到交换机的可靠保证 (confirmCallback ) 确认回调机制
2: 交换机到队列的保证 (returnCallback ) 返回回调机制
二. 保证生产者到交换机的可靠传递因为我们的消息都要经过路由,然后去对应的队列,所以第一条线路至关重要。我们使用confirm机制。这个confirm机制是一个异步的,也就是说我们发送一条消息之后可以继续发送下一条消息。比自带的事务好很多。
使用confirm机制首先需要在配置文件中开启confirm机制
12345678rabbitmq: host: localhost port: 5672 virtual-host: / username: admin password: password # 开启生产者消息 ...
docker容器内部设置vim镜像
我们有时候要进入到Docker容器内部修改一些文件,vi用不了,vim更不用说了…这次主要分享下容器内部设置vim镜像,从之前的10分钟缩短到现在的1分钟。
1.首先备份一下我们之前的镜像
1cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
2.接下来,换成国内163的镜像
1sed -i 's#http://deb.debian.org#http://mirrors.163.com#g' /etc/apt/sources.list
3.使用apt-get指令,安装vim
12apt-get updateapt-get install -y vim
安装完成,就可以使用vim了,方便快速的搞定
Docker搭建Nacos高可用集群
文章结构
安装docker
拉取nacos镜像
创建nacos的持久化数据库
修改nacos配置文件
编写nacos安装脚本
安装nginx
使用nginx做负载均衡
使用三台阿里云服务器:
第一台: 47.101.102.10第二台: 47.101.102.20第三台: 47.101.102.30
1.安装dockerdocker的安装可以参考我之前的一篇博客
https://soora33.github.io/posts/2733575.html
2.拉取nacos镜像使用docker pull 命令拉取镜像。这里使用2.0.4版本
拉取nacos镜像docker pull nacos/nacos-server:v2.0.4查看docker镜像docker images
3.创建nacos的持久化数据库我们只使用三台服务器中其中一台的数据库就可以,这里使用第一台服务器来作为持久化数据库。直接使用可视化工具创建一个数据库,名字叫nacos_config然后运行以下SQL语句
1234567891011121314151617181920212223242 ...
K8s搭建
安装方式
minikube 只有一个几点的集群 只为测试用 master和worker在一起
云平台
重点裸机安装
开始搭建k8s集群
三台服务器修改主机名称
123hostnamectl set-hostname masterhostnamectl set-hostname node1hostnamectl set-hostname node2
修改每台节点hosts文件
12345vim /etc/hostsxxx.xxx.xxx.xxx masterxxx.xxx.xxx.xxx node1xxx.xxx.xxx.xxx node2
所有节点关闭 setLinux
12setenforce 0sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
每个节点添加k8s数据源
1234567891011121314# 添加 k8s 安装源cat <<EOF > kubernetes.repo[k ...
RabbitMQ延迟队列的使用
这次打算说一下rabbitmq的延迟队列。
延迟队列,名字中有个队列,队列是先进先出的。所以说延迟队列是一个有方向性的。
其次,延迟队列和普通队列最大的区别就是,普通队列里的消息是希望自己早点被取出来消费。而延迟队列中的消息都是由时间来控制的。也就是说,他们进入队列的时候,就已经被安排何时被取出了
rabbitmq实现延迟队列主要有种方式。
第一种是使用普通队列和死信队列来模拟实现延迟的效果。大致上是将消息放入一个没有被监听的队列上,设置TTL(一条消息的最大存活时间)为延迟的时间,时间到了没有被消费,直接成为私信。监听私信队列来进行操作。
第二种是使用rabbitmq官方提供的delayed插件来真正实现延迟队列。本文对第二种进行详解
应用场景
订单超时支付取消订单
用户发起退款卖家3天不处理自动退款
预约抢购活动,活动开始前10分钟短信通知用户
安装延迟插件默认交换机是有4种模式的
现在我们去安装延迟插件
https://www.rabbitmq.com/community-plugins.html
前往官网去下载延迟插件
下载完成之后,上传到我们的服务器。使用下面的命 ...
RabbitMQ六大模式的理解及应用
基本介绍rabbitmq是一个基于Erlang语言开发且非常好用的一款开源的amqp(高级消息队列)。主要的业务场景有秒杀、消息的订阅分发,抢优惠卷等高并发场景。主要的亮点有三个
三大亮点
**解耦:**一个系统调用多个模块。互相调用的关系很复杂很麻烦。如果没有消息队列,每当一个新业务接入,我们都要在主系统调用新接口。使用消息队列,我们只需要关心是否送达。服务自己订阅想要的信息即可
**削锋:**高峰时期对服务器的压力。比如下单的时候,大量的数据直接访问过来根本没时间处理,不妨先把他们存到消息队列里,让服务器不至于崩溃的同时尽可能的快速执行队列中的任务
**异步:**对于不是特别重要的一些请求。假如说有一个操作,要调用三个服务,a200ms,b300ms,c200ms,如果不使用mq的话,用户至少要等700ms,使用mq的话,直接发送3条消息到mq里,大大减少了耗时时间,同时用户体验也上个档次
说完优点,来说说缺点
三大缺点
**系统可用性降低:**mq也会出问题,没使用mq之前,a系统调用b系统,b系统调用c系统。这样虽然耦合高,但是可以正常工作。如果把mq引进来,把数据都发给mq ...