前言

你的努力,终将成就无可替代的自己

本科毕业后就一直从事Java开发的工作,和多数人一样,最开始从事crud的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。

一年半后开始沪漂生活,又摸爬滚打了一年半,薪资基本上在16K。疫情在家开始了系统的学习,目的就是为了进大厂,得到更多的学习机会,也是为了自己到所谓的“35岁”之后,也能在老家恰一口好饭。

努力也没有白费,8个月时间的系统性学习成功上岸Alibaba,直接涨薪14K,下面分享一下我的学习指南,面试真题以及个人心得体会。(晒一下入职offer)

metadata:

name: hotupgrade-sidecarset

spec:

selector:

matchLabels:

app: hotupgrade

containers:

  • name: sidecar

image: openkruise/hotupgrade-sample:sidecarv1

imagePullPolicy: Always

lifecycle:

postStart:

exec:

command:

  • /bin/sh

  • /migrate.sh

upgradeStrategy:

upgradeType: HotUpgrade

hotUpgradeEmptyImage: openkruise/hotupgrade-sample:empty

  • **upgradeType **: HotUpgrade 代表该 sidecar 容器的类型是 Hot upgrade ,即热升级方案。

  • **HotUpgradeEmptyImage **: 当热升级 Sidecar 容器时,业务须要提供一个 empty 容器用于热升级过程中的容器切换。Empty 容器同 Sidecar 容器具有相同的配置(镜像地址除外),例如 command , lifecycle , probe 等。

SidecarSet 热升级机制主要包含注入热升级 Sidecar 容器和 Mesh 容器平滑升级两个过程。

[](()注入热升级 Sidecar 容器


针对热升级类型的 Sidecar 容器,在 Pod 创建时 SidecarSet Webhook 将会注入两个容器:

  • {Sidecar.name} -1: 如下图所示 envoy -1,这个容器代表正在实际工作的 sidecar 容器,例如:envoy :1.16.0

  • {Sidecar.name} -2: 如下图所示 envoy-2,这个容器是业务提供的 HotUpgradeEmptyImage 容器,例如:empty :1.0

上述 Empty 容器在 Mesh 容器运行过程中,并没有做任何实际的工作。

[](()Mesh 容器平滑升级


热升级流程主要分为一下三个步骤:

  1. Upgrade: 将 Empty 容器替换为最新版本的 Sidecar 容器,例如:envoy-2.Image = envoy:1.17.0

  2. Migration : 执行 Sidecar 容器的 PostStartHook 脚本,完成 mesh 服务的平滑升级

  3. Reset: Mesh 服务平滑升级后,将老版本 Sidecar 容器替换为 Empty 容器,例如:envoy-1.Image = empty : 1.0

仅需上述三个步骤即可完成热升级中的全部流程,若对 Pod 执行多次热升级,则重复执行上述三个步骤即可。

[](()Migration 核心逻辑


SidecarSet 热升级机制不仅完成了 Mesh 容器的切换,并且提供了新老版本的协调机制( PostStartHook ),但是至此还只是万里长征的第一步,Mesh 容器同时还需要提供 PostSartHook 脚本来完成 Mesh 服务自身的平滑升级(上述 Migration 过程),如:Envoy 热重启、Mosn 无损重启。

Mesh 容器一般都是通过监听固定端口来对外提供服务,此类 Mesh 容器的migration 过程可以概括为:通过 UDS 传递 ListenFD 和停止 Accpet 、开始排水。针对不支持热重启的 Mesh 容器可以参考此过程完成改造,逻辑图如下:

[](()热升级 Migration Demo


不同 Mesh 容器对外提供的服务以及内部实现逻辑各有差异,进而具体的 Migration也有所不同,上述逻辑只是对其中一些要点做了一些总结,希望能对有需要的各位有所裨益,同时在 Github 上面我们也提供了一个热升级 Migration Demo 以供参考,下面将对其中的一些关键代码进行介绍。

1. 协商机制

Mesh 容器启动逻辑首先就需要判断第一次启动还是热升级平滑迁移过程,为了减少Mesh 容器沟通成本,Kruise 在两个 sidecar 容器中注入了两个环境变量 **SIDECARSET_VERSION 和 SIDECARSET_VERSION_ALT ,**通过判断两个环境变量的值来判断是否是热升级过程以及当前 sidecar 容器是新版本还是老版本。

// return two parameters:

// 1. (bool) indicates whether it is hot upgrade process

// 2. (bool ) when isHotUpgrading=true, the current sidecar is newer or older

func isHotUpgradeProcess() (bool, bool) {

// 当前sidecar容器的版本

version := os.Getenv(“SIDECARSET_VERSION”)

// 对端sidecar容器的版本

versionAlt := os.Getenv(“SIDECARSET_VERSION_ALT”)

// 当对端sidecar容器version是"0"时,表明当前没有在热升级过程

if versionAlt == “0” {

return false, false

}

// 在热升级过程中

versionInt, _ := strconv.Atoi(version)

versionAltInt, _ := strconv.Atoi(versionAlt)

// version是单调递增的int类型,新版本的version值会更大

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

小米商场项目实战,别再担心面试没有实战项目:

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

[外链图片转存中…(img-MjSjKO0z-1649750042170)]

小米商场项目实战,别再担心面试没有实战项目:

[外链图片转存中…(img-huq1XGsY-1649750042171)]

阿里P7熬夜整理的《Java全套学习手册》,火爆IT圈

OpenKruise :SidecarSet 助力 Mesh 容器热升级,TCP的三次握手、四次挥手相关推荐

  1. OpenKruise :SidecarSet 助力 Mesh 容器热升级

    作者| 赵明山(立衡) ​ 前言 ​ OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation ( CNCF ) ...

  2. 在深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Interne ...

  3. tcp 二次握手时延_一篇搞懂TCP的三次握手 四次挥手

    TCP的三次握手四次挥手,估计大家都听过.但是真的能把每一步说明白的人比较少.我还记得在之前面试的时候被面试官一顿问,然后一脸懵B... 都是大学没好好上课 ,这篇文章就跟大家讲讲到底这三握四挥是在搞 ...

  4. 再深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP

    转载地址: https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2015_0708_65.html 如果对网络 ...

  5. HTTP HTTPS WEB的cookie机制 TCP UCP(三次握手四次挥手)

    1.HTTP 与 HTTPS 的区别 理解: 1.HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用.(以前网易官网 ...

  6. 计算机网络之UDP与TCP协议(三次握手, 四次挥手)

    ⭐️前面的话⭐️ 本文介绍计算机网络中有关传输层协议的知识--UDP与TCP协议,在TCP协议中,为了保证数据的可靠传输,引入了十大保证可靠性的机制,即确认应答,超时重传,连接管理(三次握手,四次挥手 ...

  7. java tcp 三次握手_用Java代码分析TCP的三次握手四次挥手过程

    (1)客户端发送一个带SYN标志的TCP报文到服务器.这是三次握手过程中的报文1. (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志.因此它表示对刚才客户 ...

  8. 了解TCP协议,IP协议、ICMP协议和ARP协议(TCP报文,TCP的分成管理,TCP与UDP,TCP的三次握手四次挥手原理)

    文章目录 了解TCP/IP协议 TCP报文格式 TCP/IP 的分层管理 TCP与UDP TCP的三次握手与四次挥手 为什么要三次握手? 为什么要四次挥手? IP数据包格式 ICMP协议 ICMP协议 ...

  9. tcp状态机-三次握手-四次挥手以及常见面试题

    TCP状态机介绍 在网络协议栈中,目前只有TCP提供了一种面向连接的可靠性数据传输.而可靠性,无非就是保证,我发给你的,你一定要收到.确保中间的通信过程中,不会丢失数据和乱序.在TCP保证可靠性数据传 ...

最新文章

  1. PAT(甲级)2018年冬季考试 7-1 Google Recruitment
  2. 2021陇南高考成绩查询,2021年陇南中考成绩公布查询时间 陇南中考成绩查询方式入口...
  3. hdu 1115(多边形重心)
  4. nyoj-619 青蛙过河
  5. VS2010 教程:创建一个 WPF 应用程序 (第一节)
  6. 软件工程敏捷开发01
  7. tomcat和apache的区别
  8. Dubbo的微内核机制
  9. gz 解压 linux_linux下cpio.gz文件的解压方法
  10. Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源
  11. [VC] 通过IHTMLDocument2-DC把网页保存为图片
  12. android 投屏原理图,什么是投屏功能,手机投屏原理介绍
  13. php纯文本源码,[PHP源码]文章原创度检测源码
  14. x86 android 显卡 tablet2,Re: android4.4.2将tablet更改为phone
  15. 什么是运行时应用程序自我保护(RASP)Runtime Application Self-Protection
  16. 全球及中国电子级硅烷(SiH4)行业动态分析及发展前景预测报告2021~2026年
  17. Navicat 15注册时报错“Rsa Public key not find“的解决办法
  18. python做数据分析时缺失值填补、缺失值填充方法汇总
  19. 移动硬盘安装ubuntu 20.04 (主机win10)
  20. mldonkey设置!看图(转载)

热门文章

  1. PDF是什么格式?如何在电脑上编辑PDF文件
  2. Java-好玩的猜数小游戏
  3. HTML知识点学习(二)
  4. simulink半桥逆变电路仿真
  5. 图形处理(八)点云重建(上)点云滤波、尖锐特征边增采样、移除离群点
  6. 旷视科技面试——算法岗
  7. 标品与非标品的定义 标品与非标品的区别,以及标品与非标品直通车运营方案
  8. 苏世民,我的经验和教训(五)
  9. java jfreechart 柱状图,JFreeChart -- 柱状图
  10. mvn assembly:single打包报错:Error reading assemblies: No assembly descriptors found.