Skip to content

云原生概述

云原生的出现

云计算的发展

云计算的发展大致分为三个阶段: 虚拟化的出现->虚拟化的应用->容器化

虚拟化技术

表示将计算机资源分成逻辑组的技术 同一台物理机器上运行多个虚拟机

虚拟机的市场化应用

亚马逊AWS在2006年公开发布S3存储服务、SQS消息队列及EC2虚拟机服务,正式宣告了现代云计算的到来 云服务的三种模型满足了不同消费者的需求: image * IaaS:基础设施服务,主要提供基础的硬件资源 * PaaS:平台服务,提供软件部署平台,开发者只需关注自己的业务逻辑,不需要关系硬件和操作系统细节 * SaaS:软件服务,提供一系列服务,拿来即用 更多请查看:IaaS、PaaS、SaaS、BaaS、FaaS和Serverless的含义

容器化和容器编排的兴起

容器化:虚拟化的改进版本 区别: * 虚拟化:在硬件级别分离应用程序 * 容器化:在操作系统级别分离硬件程序 2018年起开始占据统治地位。

云计算<->云原生

云原生就是云计算的下半场 云原生不是一种架构,而是一种基础设施,运行在其上的应用称作云原生应用,只有符合云原生设计哲学的应用架构才叫做云原生架构。

云原生出现

由于对业务快速迭代,团队规模不断增大,产品交付速度增大的应对,微服务和云原生开始出现 pivotal是云原生概念的提出者,他提出云原生包括以下四个方面

云原生四要素

微服务:

几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,不然就忒没b格,大概意思是组织架构决定产品形态,不知道跟马克思的生产关系影响生产力有无关系。 微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据DDD来搞。

容器化:

Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡,谷歌搞的,Docker和K8S都采用Go编写,都是好东西

DevOps:

这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见,实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

持续交付:

持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

云原生的优点

  1. 新兴语言编写:go,node.js
  2. 支持持续频繁更新,持续交付
  3. 本地部署的传统应用无法动态扩展,往往需要冗余资源以抵抗流量高峰,而云原生应用利用云的弹性自动伸缩,通过共享降本增效。
  4. 本地部署的传统应用对网络资源,比如ip、端口等有依赖,甚至是硬编码,而云原生应用对网络和存储都没有这种限制。
  5. 部署和运维都是自动化。
  6. 不会硬连接到任何系统环境中,只依赖抽象的基础架构,有很好的移植效果
  7. 模块化更加合理。

云原生的定义

云原生的定义在不断的发展,它实际上是一种理论或者说是方法论。 目前最为系统的云原生应用开发指南:12因素(12-Factors:https://12factor.net) 12因素为任何语言开发的后端应用服务提供好的方法论和核心思想: 1. 使用声明式格式搭建自动化,便于新来者加入 2. 和底层操作系统保持简约的契约,保证可移植性 3. 适合在现代的云平台上部署 4. 最小化开发和生产之间的分歧,实现持续部署以实现最大的灵活性 5. 在工具、架构和开发实践不发生重大变化的前提下实现扩展 image

云原生的基础架构

微服务

image 微服务: * 优点:降低系统复杂度,独立部署,独立拓展,跨语言编程 * 缺点:运维带来挑战,分布式系统复杂性问题

容器

一个操作系统下的多个隔离,每个隔离一个容器,每个容器都有唯一的可写文件系统和资源配额 特点: * 隔离应用依赖 * 创建应用镜像并复制 * 创建容易分发的即启即用的应用 * 支持实例简单 * 快速地拓展 docker:开源应用容器引擎 用户可以将为微服务及其所需的所有配置、依赖关系和环境变量打包成容器镜像,并轻松一直到全新的安装了docker的服务器节点上,运维人员无须关系底层操作系统,且无须重新配置环境,这使得容器成为部署单个微服务的最理想的工具。 因为人为部署麻烦 容器分为两部分: * 运行层:容器的基础设施,包括存储、网络、CPU等 * 编排层:主要是容器集群的管理,包括容器调度,服务注册和发现,资源的管理等 相关工具:Kubernetes Kubernetes目前基本算是统一了容器编排的市场,实现了容器集群的自动化部署,扩缩容和维护等功能,和docker相辅相成。

服务网格

微服务技术架构: * 侵入式架构:服务框架嵌入程序代码,RPC、负载均衡、熔断等 * 非侵入式架构:以代理的形式和应用程序部署在一起,接管应用程序的网络且对其透明,以服务网格为代表。 为解决侵入性问题,引入了 Service Mesh image Service Mesh处理服务间请求/响应的可靠传递,并可用于服务治理、遗留系统的零入侵接入以及异构框架开发的微服务,实现了轻量级的网络代理。

不可变基础设施和DevOps

不可变基础设施: 主要强调基础设施的状态性质 一旦创建基础设施的实例,其将会变成只读状态 如果后续需要修改和升级,则需要使用新的实例替换旧实例 image DevOps的目标是缩短开发周期,增加部署频率更可靠地发布升级系统应用 DevOps和云原生架构的结合能够实现精益产品开发流程帮助软件产品及其开发持续改进,适应快速变化的市场从而为企业提供更小的试错成本

声明式API

  • 声明式设计:指通过向工具描述自己想要让事物达到的目标状态,然后由这个工具自己内部去计算如何令这个事物达到目标状态声明式设计中描述的是目标状态,即How
  • 过程式设计:所描述的是一系列的动作,即 What