-
用:Nginx
- 现在 冗余机器 或 当前机器使用不同的端口,启动新版本
- 没问题,把流量切过来
-
利用注册中心 metadata 搭配 特定的 负载均衡机制
-
整合成一个filter注册到zuul的上下文环境中
-
请求 带上 版本标签 经过路由 访问到相应的服务版本
-
蓝绿发布:
- 绿是以前的
- 蓝是现在的,蓝测试通过,流量由绿切换到蓝
-
滚动发布:
- 将集群 的少量节点进行更新上线,在更新其他节点。
- 每次只更新 少量节点,知道全部更新完毕。
-
灰度发布
- 在线上 环境中 部署一个新版本应用
- 引入一小部分流量,进入其中,如果没有发现问题 就切换上线。
- A/B 测试
- A是稳定,B是迭代版本
- 先部署一个B环境,分一部分流量过来。手机反馈,改进B。
- 直到用户完全接受(A/B 测试关注测试过程,蓝绿发布关注新版本)
- 金丝雀部署
- 矿井中的金丝雀
- 在应用集群中 部署一台 实例 作为 金丝雀,引入一小部分流量。
-
Nepxion Discovery 中国社区核心成员 任浩军:
- 灰度发布
- 黑/白名单的IP地址过滤
- 限制注册
- https://github.com/Nepxion/Discovery
容器化
- devops(过程、方法与系统的统称) -
DevOps(Development和Operations的组合词)
是一组过程、方法与系统的统称,
用于促进开发(应用程序/软件工程)、
技术运营和质量保障(QA)部门之间的沟通、协作与整合。
它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”
之间沟通合作的文化、运动或惯例。
透过自动化“软件交付”和“架构变更”的流程,
来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
它的出现是由于软件行业日益清晰地认识到:
为了按时交付软件产品和服务,
开发和运维工作必须紧密合作。
- 领域驱动设计(DDD:Domain-Driven Design)
为解决场景下的问题而形成的一套模型,然后使用这套模型来解决业务问题。
根据重复劳动经验我们会形成一套模式。领域模型也一样会形成一套模式,
他包括:实体、值对象、模块、领域服务。
埃里克·埃文斯 Eric Evans
Evans DDD是一套综合软件系统分析和设计的面向对象建模方法,
过去系统分析和系统设计都是分离的,正如我们国家“系统分析师” 和“系统设计师” 两种职称考试一样,这样割裂的结果导致,需求分析的结果无法直接进行设计编程,而能够进行编程运行的代码却扭曲需求,导致客户运行软件后才发现很多功能不是自己想要的,而且软件不能快速跟随需求变化。
DDD则打破了这种隔阂,提出了领域模型概念,统一了分析和设计编程,使得软件能够更灵活快速跟随需求变化
- kubernetes
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。
是一个开源的,用于管理云平台中多个主机上的容器化的应用,
Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),
Kubernetes提供了应用部署,规划,更新,维护的一种机制。
- ubuntu113M 压缩后 43M
- centos 7 199M 压缩后73M
- alpine 3.7 版本4.15M,压缩后 2M
- alpine 采用的是 musl libc 的 C标准库
- oracle 或 open JDK 主要是 glibc
- 因此在 alpine上 加上 glibc ,在添加jdk
k8s
- google 开源的 容器集群 管理系统
- 支持 docker和 rocket 容器技术
- 云原生 应用的基础设施
基本概念
- Namespace 划分多个虚拟集群,资源隔离
- 创建:kubectl create namespace springcloud-cn
- Pod 最小调度单元,应用服务的逻辑,宿主机。几个实例,就是几个 pod
- Replication Controller Pod的控制器,监控实例的状态,维持健康个数为指定副本的数量
- 确保 pod 实例数量
- pod 健康
- 弹性伸缩
- 滚动升级
- service: 为一组pod 提供对外访问。pod的 服务发现,路由
- Label: 关联 Pod 及 Service 。 pod 可以定义 label,service 通过 label 去选择服务哪些pod
- Deployment: Replication Controller 的 升级版。更细致的展示及控制,
- 查看升级的详细进度和状态,
- 对 每次 Deployment 进行版本管理,方便回滚
- 对升级行为 进行暂停及 继续
curl命令讲解
$ curl -h
-o, --output <file> 写入到文件,而不是输出到stdout
-O 写入到文件,文件名和远程文件一样
-L 跟随网站的跳转
-x, --proxy [protocol://][user:pwd@]host[:port] 使用代理
-v 打印过程
--trace <file> debug写入到文件,很详细包括二进制数据交换,file使用 - 表示打印到stdout
-c <file> 将服务器设置的cookie写入到文件
-b <data> 发送cookie,从 string/file 获取
-A <name> 发送 User-Agent <name> 到服务器
-e <url> 指定 Referer : <url> , 仿造referer,服务器会以为你是从 url 点击某个链接过来的
-H <header/@file> 将自定义标头传递到服务器
-X <command> 指定请求方法,不带任何参数的请求默认get方法
-s Silent mode 无声模式
-S Show error even when -s is used 即使使用 -s 也打印错误
-i 打印服务器回应的http标头
-I 只打印标头
-k 使用ssl时,允许不安全的服务器连接。跳过ssl检测
-d <data> http post data,使用post方法发送表单,自动添加标头Content-Type : application/x-www-form-urlencoded
-F <name=content> 指定 multipart MIME data , 可以上传二进制文件,自动添加Content-Type: multipart/form-data
-G 把 post data 放进 url 并使用 get 请求,与-d配合
-u <user:password> 指定服务器用户和密码
-T <file> 上传文件,使用 put 请求
- 更新系统yum -y upgrade 或 yum -y update
安装 kubectl
- 下载最新的版本
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
-L 跟随网站的跳转
-O 写入到文件,文件名和远程文件一样
//下载指定的版本:上个语句无需用参数,
/release/v1.19.0/bin 直接这样
- 其他指令
chmod +x ./kubectl
将文件放到 PATH 路径下:
sudo mv ./kubectl /usr/local/bin/kubectl
- 最新的 为 1.19.4
kubectl version
Client Version: version.Info
{
Major:"1",
Minor:"19",
GitVersion:"v1.19.4",
GitCommit:"d360454c9bcd1634cf4cc52d1867af5491dc9c5f",
GitTreeState:"clean",
BuildDate:"2020-11-11T13:17:17Z",
GoVersion:"go1.15.2",
Compiler:"gc",
Platform:"linux/amd64"
}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
安装 Minikube
徒手搭建过k8s的同学都晓得其中的煎熬,复杂的认证,配置环节相当折磨人,出错率相当高,
而minikube就是为解决这个问题而衍生出来的工具,它基于go语言开发,
可以在单机环境下快速搭建可用的k8s集群,非常适合测试和本地开发,现有的大部分在线k8s实验环境也是基于minikube
下载网址:https://github.com/kubernetes/minikube/releases/tag/v1.15.1
- 目前最新为 1.15.1
- 按照是书上下载的是 minikube-darwin-amd64 错了,这个是osx 是mac的,要下载 minikube-linux-amd64
- 复制到/usr/local/bin/下 ,并且 chmod +x
- 如下命令 v1.1.0 改成最新的
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.1.0/minikube-linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
先下载 在赋权限 在复制到目录下 在删除当前的
minikube version
显示:minikube version: v1.15.1
启动 Minikube
minikube start
事务
跨服务 的 业务操作 的 数据一致性
概述
acid
- atomic 原子性。要么全部执行,要么全不执行。
- consistency 一致性。事务提交后,原有的约束及规则 不被破坏(如:唯一约束,外键约束)
- Isolation 隔离性。不同的事务 操作相同的数据时,每个事务是独立 相互不干扰的
- 读未提交
- 读已提交
- 可重复读
- 串行化
- 如果没有事务隔离,会造成
- 更新丢失
- 脏读
- 不可重复读
- 幻读
- Durability 持久性。事务一单提交,对数据的变更应该是持久的,如系统崩溃,重启后 数据依然存在