docker的基本使用
一、docker容器与传统虚拟机的区别
docker是在操作系统层面实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机是在硬件层面实现虚拟化。
二、docker基于C/S架构
镜像是构建docker的基石,用户需要通过镜像来运行自己的容器。
Registry用来保存用户构建的镜像,分为公有和私有(https://hub.docker.com)
三、docker的安装
-sudo yum update -sudo yum install -y yum-utils device-mapper-persistent-data lvm2 -sudo yum install docker-ce -docker -v 查看一下docker版本
docker服务器的开启与关闭
镜像操作
-docker images 查看所有镜像 -docker pull 镜像名称 下载镜像 -docker rmi 镜像ID 删除镜像
容器相关命令
-docker ps 查看正在运行的容器 -docker ps –a - docker run -id --name=testscentos7 centos:7 启动容器 -docker exec -it 容器名称 (或者容器ID) /bin/bash 登录容器 -docker stop 容器名称(或者容器ID) -docker start 容器名称(或者容器ID) -copy文件 -目录挂载 -docker run -di -v /home:/home --name=mycentos322 centos:7 -docker inspect 容器id -查看容器信息 -docker rm id 删除容器
其他命令(https://www.cnblogs.com/xiaoyuanqujing/article/11774978.html)
-部署应用 -部署mysql -docker run -di --name=mysqltest -p 33309:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 -迁移与备份 -容器打包成镜像 -docker commit django_3.7 django_3.7_img -Dockerfile -正常构建镜像 docker build -t='xxxyyy' . WORKDIR /home/lqz -私有仓库 -docker pull registry -docker run -di --name=registry123 -p 5000:5000 registry {"insecure-registries":["127.0.0.1:5000"]} -把镜像传到私有仓库 -docker tag ooo 39.100.80.124:5000/ooo 打标签 -docker push 39.100.80.124:5000/ooo 上传
四、提高网站的并发量
-前端: -图片 -七牛云(cdn) -自己搭的文件存储 -使用精灵图 -前端缓存:过期时间 -动静分离 -dns解析---》ip -负载均衡硬件 -nginx -集群化的部署 -进入程序 -django是同步框架 -做异步任务:celery -并发执行 -数据索引优化---查询速度高 -缓存(redis):双写一致性、缓存穿透,缓存雪崩 -主从--读写分离(django) -微服务 -服务拆分,用其它语言写 -api网关 -服务间调用:resful接口 -rpc:远程过程调用 -rpc框架:gRPC -阿里开源一个:Dubbo
五、正向代理与反向代理的区别(https://www.cnblogs.com/Anker/p/6056540.html)
正向代理:代理共享上网;客户端代理权限管理
反向代理:保证内网安全,防止web攻击;负载均衡
六、缓存穿透、缓存雪崩
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,
并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。 解决方案:1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。 2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。【感觉应该用的不多吧】 当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。 解决方案:1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。 2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。 3:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期(此点为补充)
七、用redis实现分布式锁(https://www.cnblogs.com/liuqingzheng/p/11080501.html)
(1)获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此在释放锁的时候进行判断。 (2)获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。 (3)释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放。
八、分布式id(雪花算法)
解决不同机器生成相同id问题(https://www.cnblogs.com/liuqingzheng/p/11074623.html)
九、数据库主从(https://www.cnblogs.com/xiaoyuanqujing/articles/11796376.html)