什么是云原生?
关于云原生的定义没有确切的定义,云原生一直在变化,解释权不归某个人或组织所有,未来还会变!那我们如何理解这云原生呢?
通过下列介绍可以看到云服务提供商提供的功能越来越多,而软件开发者需要管理的功能越来越少,各种中间件、依赖的运行环境被下沉到基础设施中去了,一句话总结:应用原生被设计在云上以最佳方式运行,开发者无需关心其他与业务需求无关的技术实现!
XaaS
2000年前后得易于虚拟化和云计算技术的成熟云服务提供商平台陆续提出大量XaaS形式的概念:IaaS/PaaS/FaaS 等
IaaS:Infrastructure as a Service(基础设施即服务)
从上面的架构图可以看出,IaaS处于最底层,服务商提供底层/物理层基础设施资源(服务器,数据中心,环境控制,电源,服务器机房),客户自己部署和执行操作系统或应用程序等各种软件。
PaaS:Platform as a Service(平台即服务)
PaaS处于中间层,服务商提供基础设施底层服务,提供操作系统(Windows,Linux)、数据库服务器、Web服务器、域控制器和其他中间件,以及服务模型中的备份服务等中件层服务。例如IIS,.NET,Apache,MySQL …,客户自己控制上层的应用程序部署与应用托管的环境。
SaaS:Software as a Service(软件即服务)
SaaS处于最上层,服务商提供基于软件的解决方案,满足客户最终需求;如OA、CRM、MIS、ERP、HRM、CM、Office 365、iCloud、G Suite等应用,客户不需考虑任何形式的专业技术知识,获得完整的软件包,使他们的日常工作和生活变得更轻松。
Faas:Function as a Service(函数即服务)/ Serverless(无服务器架构)
是一种在无状态容器中运行的事件驱动型计算执行模型,这些功能将利用服务来管理服务器端逻辑和状态。两者都是无服务器计算的实现方法,藉此开发人员可以编写业务逻辑,然后在完全由云端平台管理的 Linux 容器中执行这些业务逻辑。
其他技术发展的支持
DevOps:
-
当新版本已经准备就绪的时候,代码将被提交到 Gitlab 中。
-
通过 Gitlab,提交会自动触发 Jenkins 构建。
-
在 持续集成中,新的代码版本通过 Chai 和 Mocha进行了测试,以检测是否运行正常。
-
当测试通过,持续部署阶段 将会开始并创建一个可用的 Docker 镜像并上传到 Sonatype 的 Nexus。(这是 Sonatype 公司的的一个开源工具)
-
最后,新版本应用会通过 Nexus 下载并且部署到线上环境中,例如 Docker容器 (持续部署阶段)
容器化:
2013~2017年容器化技术docker 和 容器编排工具kubernetes 先后出现成为运维部署的主流技术,SaaS、Faas等上层软件服务开始向docker、k8s转型。
总结
目前常见的具体云原生技术(一直在变):
DevOps + CI/CD
微服务(microservice)
容器化封装
服务网格(Service Mesh)
声明式API
Serverless Native