单体地狱

随着时间 越长 ,迭代 代码越来越大 。

单体 -捆绑 ,模块与模块之前 高耦合 ,

脱离 单体地狱,分布式系统开发

微服务

是一种思想,而真正起到作用的是 分布式系统的开发
把每一个模块 升级成每个服务,用来提供其他 服务 所需要的api,运行在 云虚拟机 ,或者Docker容器
三大指标
高可用,高性能,高并发

优点

1解耦 ,解决复杂度,更容易理解和维护
2可以由一个团队独立专注开发 ,技术选型 很容易,很轻盈,很小巧
3每个服务独立部署,不需要协调其他模块
4可以独立扩展,部署适合自己部署资源的服务器,避免服务器浪费

缺点

1分布式事务(因为分布式 每个服务是 每个数据库) 不好做到回滚
2依赖与别人服务数据库中数据 ,不好调控
3服务存在依赖 ,怎么部署
4多服务部署 ,可以使用paas

怎么解决多服务 部署问题

沙箱机制
Docker容器

cap

cap指 三种里面 最多可以同时完成两种
c 一致性,更新操作完成后,并成功返回客户端,所有节点上的同一时间的数据一致性
强一致性,要不一起成功 ,要不一起失败
弱一致性
顺序一致性
a可用性,服务一致可用,并保证正常相应时间
p分区一致性,某节点 不能提供服务,保证一致性和 可用性
但是不能保证 原来的一致性 ,因为cdn会判断用户进行网络访问, 所以分区节点 有问题或网络故障时 ,分区数据转移到了别的节点,但是 服务可用,数据不一定 百分百同步,同步需要时间

cap权衡

一般为
cp系统 强一致系统,金融类系统 ,不保证的 话 就是(双花系统) ,宁可 不提供服务 ,也不能出错
ap系统 好可用系统 ,不跟钱相关 都可以用, 要保证可用性

BASE

cap衍生
基本可用:出现故障的时候,允许损失部分可用,保证 核心用户可用
软状态:分布式 存储一般会有 3个副本,允许不同节点之间的延时
最终一致性:所有的数据副本经过一段时间后,最终达到一致的状态,是弱一致性的一种特殊情况
当出现故障的时候 ,务必保证核心功能可用
ACID 传统 设计理念。强一致性
BASE大型分布式理念

分布式 id

因为分布式 库之间 主键 可能 会冲突 ,所以不能 用自增 ,也不能用uuid 因为 uuid是字符串 ,影响性能,所以需要用到,分布式id

高并发

响应时间 系统作出的相应时间
吞吐量 单位时间内,处理的数量
每秒请求数QPS
并发用户数

怎样提高

垂直扩展

1提升 单机硬件 性能
2提升 单机架构 性能 ,多使用缓存之类的,使用异步

水平扩展

增加 服务器数量,负载均衡

互联网架构

image.png
image.png

dns的轮询机制 实现, 在入口 分担压力 。自动分流 ,层层拆分

数据库拆分

按照范围水平拆分

每个库存放一定量的值
优点 容易扩展,规则简单
缺点 :新注册用户 ,比旧库用户活跃 ,请求均衡性不好

按照哈希范围拆分

每一个库存放,哈希后的部分数据,比如 能不能被2 整除
优点:数据均衡性 ,和请求均衡性好
缺点:不容易扩展

水平拆分与主从同步

水平拆分:拆分到n个服务器 理论上 读写都提升
主从同步:区域间总量大 ,每个库都是全集 ,读性能 增加了n倍,写性能不变
应该结合

分库 分表 表分区

user 库下 ,根据id尾数 来分表 ,0 入 0 表 ,可以分开压力 ,也可以10位分开压力
库 按照 十位分,表按 个位分,表内 还可以分区域 按照区域 去查找

Linux

Linux 内核,系统 有多种 操作系统
Ubuntu 安全
RedHat付费
CentOS稳定

操作指令

ls 当前文件夹内容 (全部)
cd / 根目录
pwd 当前所在位置
ls -al 查看内容
bin 二进制可执行文件(应用程序 命令)
etc 系统配置文件
usr/local 软件存放路径 (手动放软件 的目录)
var 存放数据
mkdir创建目录
touch 创建一个空文件
find 查找文件
tar 压缩文件
-c 打包
-x 解压
-z gzip 有算法的 zip
-v显示过程
-f 压缩后的名称(放在最后)

系统管理命令

image.png

vim编辑器

vi 开始编辑
i插入模式
:wq! 强制写入并退出

云部署

image.png
设备 被vmware 联合起来 , vmos 虚拟化操作系统 来 ,在上面安装虚拟机 ,最后在虚拟机上 安装操作系统 (付费)

消息传输流程

image.png

ssh

收费
openssh
基于口令的安全验证 用户名密码
基于密钥的安全验证 建立一个 密钥 ,远程服务器放公钥 ,本地放私钥 ,最后对比

XShell远程操控工具

功能大,方便快捷收费

FinalShell

免费
使用的时候 , 新建ssh链接 输入 虚拟机 ip ,建立链接 ,虚拟机 后台运行就可以 ,控制远程软件就可以

root账号

sudo passwd root 设置 root密码
su 切换到 root权限
su 自己的用户名 切换到自己的账户

要用root账户不允许 远程连接
先切换到 root
image.png

image.png

image.png

chmod 706 文件 就可以改权限了

软件包管理

配置数据源 (可以在安装的时候配置 阿里源)
image.png

在 use/local下 装 jdk 的包
image.png

还需要配置 用户 变量

然后安装tomcat
安装 mysql
通过IP建立 mql 视图工具,要是遇到错误 ,就按照 错误码解决问题

项目部署

mvn clean package -Dmaven.test.skip=true
先压缩 项目压缩文件中的文件,传到服务器 ,解压 ,然后 看看 有没有需要改的配置文件 ,数据库啥的,启动项目,就可以部署成功了

LVM的基本概念

分组的概念 ,就是 通过逻辑卷 把 磁盘(物理卷) 结合在一起
实际上 新买硬盘来扩容
虚拟机上 新建一个磁盘,然后fdisk -l 查看
然后创建新分区 fdisk /dev/sdb1
格式化 mkfs -t ext4 /dev/sdb1
创建物理卷pvcreate /dev/sdb1
查看卷组pvscan
扩容vg vgdisplay 查看vg
vgextend vg名称 /dev/sdb1
扩容lv 按大小 增加 lvextend -l +10G vgdisplay里的pathname
按照百分比增加 lvextend -l +100%FREE vgdisplay里的pathname

热插拔热备份

不用担心空间不足