云原生概念
云原生的核心思想是要实现从资源到服务的不断向上抽象,在这个过程中对于开发人员来说,越来越不会接触到底层的it基础设施,只会接触到技术服务能力。
微服务+DevOps+容器云是云原生的重要组成部分。
1.微服务
本质是传统大单体应用拆分为小的单体组件。这里组件即为微服务。拆分为纵向拆分,从底层基础设置,数据库,应用中间件,到部署包都能完全独立。
2.DevOps
持续集成+持续交付 = DevOps
需要将软件生命周期过程中的,从需求,到程序设计开发,编译构建打包部署,从测试环境到生产环境整个过程能完全实现自动化 。
3.容器云
容器云的两个核心为Docker容器和Kurbernets提供的容器资源调度和编排能力。
Docker容器本质提供的是Iaas基础资源层的能力,相较于虚拟机更轻量级的资源隔离单位。多个容器可共享同一个操作系统。基于此,容器本身体积比虚拟机小,创建调度销毁速度也比虚拟机更快。
Kurbernets负责容器的资源调度和编排,向上层提供paas层能力。
这里还有几个云原生发展带来的概念,服务网格,serverless,不可变基础设施,声明式API。
首先服务网格,一个去中心化的服务治理框架。区别于esb总线,api网关,这种中心化的架构。中心化架构下,所有的流量请求,很容易对流量进行拦截,对拦截后的流量进行安全,日志,限流熔断和管控治理。
去中心化的服务治理架构下没有这种集中化流量的管控点, 对流量的拦截下沉到各个微服务组件中。一般通过在微服务组件内增加一个代理包,通过这个代理包来做流量拦截,同时实现对流量的管控。
然后是serverless,本意是通过代码片段的组合来 实现复杂的业务流程,这是serverless希望达到的效果。功能函数即服务+后端即服务。达到上层应用的足够简单,屏蔽框架,中间件的选择。
不可变基础设施
传统软件程序的部署,当部署到tomcat后,如果做代码或配置的变更,都会在原来的生产环境上重新部署,或对配置直接修改。
云原生下的思想是,任何应用被部署到生产环境,形成容器实例后,这个容器实例不应再做任何变化是不可变的。如果程序配置发生修改,应基于新配置重新生成实例,将旧实例销毁。
声明式API
对于容器的创建,首先是构建一份yaml文件,在配置文件里声明做什么事情。底层拿到这个配置文件,解释并执行声明式api文件的内容。