云计算发展过程:

    在学习k8s的过程中接触到了Serverless的概念,这里先对云计算的发展历程做一个简单的总结,以便引入Serverless,2006年,Google董事长 Eric Schmidt 在搜索引擎大会首次提出云计算(Cloud Computing)的概念,一转眼十多年过去了,云计算的发展势如破竹,从传统的IDC到现在的FaaS,逐渐快捷,愈发高效

    • IDC( Internet Data Center ):互联网数据中心。自建或者租用,自建自己干全套,租用就是服务器自己买,租人家的机柜,硬件安装和调试都由被托管方负责

    • IaaS(Infrastructure as a Service):基础设施即服务,IaaS提供商给你提供硬件, 想怎么用自己搞

    • PaaS(Platform as a Service):平台即服务,PaaS提供商给你提供硬件并装好操作系统、相关中间件及运行库等基础环境,至于要装什么应用看需求

    • SaaS(Software as a Service):软件即服务,所有的东西都由IaaS提供商提供,用户只管用

    • FaaS(Function as a Service):函数即服务,将应用程序抽象成函数,只有当程序被调用时才会执行函数启动,平时不启动不占用资源

    Serverless:

    Serverless是无服务器架构,这并不是说不用服务器了,而是通过技术手段将服务器透明化了,让开发者减少对服务器资源的关注,能够更加专注于自己的开发工作(业务),Faas就是Serverless概念的一种体现

    • 低成本

      • Serverless将用户的服务器,数据库,中间件委托于FaaS,用户不再参与基础设施及软件的维护,而是直接使用相关的资源,大大节约了维护成本,降低了开发难度
    • 按需计费

      • 不同于以往云计算的计费方式,FaaS是按照请求次数及运行时间计费,最大程度利用了资源并降低了成本
    • 简化管理

      • 自动化的弹性扩展、减小了打包和部署的复杂度、可以快速发布出去

    容器化演变过程:

    • 传统服务

    • 在微服务和容器化还没有盛行的时候,系统服务架构如下图,这种单体架构的好处就是便于管理和初次部署,但是当后续产品规模越来越大时,坏处就体现出来了

      • 项目过于臃肿,大大小小的模块都几种在同一个项目中,开发者不易维护
      • 资源无法隔离,如果其中一个模块出现内存泄漏,整个系统都会被拖垮
      • 无法灵活扩展,有时并不是产品的每个模块都会提供对外访问,访问量大做集群负载时无法轻易水平扩展

    image.png

    • 微服务

      • 微服务是近几年流行的一种架构思想,它提倡化整为零,将单一应用程序划分为一个一个的小服务,每个小服务运行在一个单独的环境中,互不影响却又能相互协调、相互配合达到化零为整的效果
      • 微服务有以下特点:
        • 独立测试、部署、升级、发布,可以单独只测试某一个模块
        • 便于扩展,比如商品模块访问量比较大,一个节点扛不住,那就再弄一台服务器部署一个商品模块,前端做LB
        • 提高了容错,比如某个模块出问题了,不会影响到其它模块
        • 提高了管理的复杂度,当你单个服务过多时,互相之间的调用就是问题,如果单个写静态配置文件的话对运维人员会是一个不小的挑战,这时候就需要一个叫服务注册中心的东西,每个单服务实例在启动的时候,向注册中心注册自己的IP地址等信息,这样别的服务调用它时,都会先去注册中心查询,然后根据查询到的信息再去调用,比如订单模块之前调用的是支付模块A,支付模块A的服务挂了,那一定时间内注册中心就会移除支付模块A的注册信息,订单模块连接不上原本的支付模块A了,就会再次向注册中心查询有没有其他的支付模块。
        • 客户端调服务端都需要一个统一的入口,就是API Gateway,此处的客户端是一个相对的说法,除去外部访问,内部访问A调用B,相对B来说A就是客户端,API Gateway有身份验证、请求分片、负载均衡等功能,个人理解有限,想深入了解的自行查资料

    image.png

    • 容器化

      • 容器概念的出现是要比微服务晚不少的,近几年流行的docker,为微服务架构提供了有效的容器,资源的有效隔离是微服务的设计原则之一,而docker恰好可以实现
        • 一般情况下一个容器一个服务
        • 容器的资源隔离(PID、IPC、UTS等)、限制(CPU、Mem等)
        • 可扩展性、可移植性

    image.png

    容器编排工具:

    • 容器编排工具概念

    • 当容器数量达到一定规模,就需要编排工具去管理,就是容器生命周期管理工具,容器编排工具提供调度和管理集群的技术,提供用于基于容器应用可扩展性的基本机制,这些工具使用容器服务,并编排他们以决定容器之间如何进行交互

    • 容器编排工具的核心价值

    • 准备和部署容器

    • 容器的高可用和负载均衡
    • 应用规模的自动扩缩容
    • 底层硬件故障,能够把容器迁移到其他节点上,用户无感知。
    • 容器资源分配
    • 容器的注册与自动发现
    • 容器和宿主机的健康检查
    • 容器配置和存储管理

    • 容器编排工具种类

    • Docker Swarm:docker自己的容器编排工具

    • Apache Mesos and Marathon:Mesos是一个数据中心的资源统一管控的工具,本身没有编排容器的功能,需要和Marathon结合使用,后来Apache Mesos自己说不但支持Marathon也支持Kubernetes,且当时docker也说不但原生支持docker swarm也支持k8s,k8s的地位已经显而易见了