重新定义cloud 第21-24章 版本控制和灰度发布 cloud容器化 事务

  • 用: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

  1. 下载最新的版本
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 直接这样
  1. 其他指令
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. 目前最新为 1.15.1
  2. 按照是书上下载的是 minikube-darwin-amd64 错了,这个是osx 是mac的,要下载 minikube-linux-amd64
  3. 复制到/usr/local/bin/下 ,并且 chmod +x
  4. 如下命令 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

  1. atomic 原子性。要么全部执行,要么全不执行。
  2. consistency 一致性。事务提交后,原有的约束及规则 不被破坏(如:唯一约束,外键约束)
  3. Isolation 隔离性。不同的事务 操作相同的数据时,每个事务是独立 相互不干扰的
    1. 读未提交
    2. 读已提交
    3. 可重复读
    4. 串行化
    5. 如果没有事务隔离,会造成
    6. 更新丢失
    7. 脏读
    8. 不可重复读
    9. 幻读
  4. Durability 持久性。事务一单提交,对数据的变更应该是持久的,如系统崩溃,重启后 数据依然存在
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值