云架构的一些核心概念
Posted 我是王小贱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云架构的一些核心概念相关的知识,希望对你有一定的参考价值。
云架构的一些核心概念
1. What
1.1 什么是云架构?
云架构是指构建云所需的所有组件和功能如何连接起来,以便交付供应用运行的在线平台。云被视为平台即服务(Pass),因为云提供商为用户提供了平台以及底层IT基础架构。
与传统的服务器相比,云平台可以将物理资源虚拟化为虚拟机资源池,灵活调用软硬件资源,实现对用户的按需访问。而且在运行过程中根据用户并发量的不同,实时迁移虚拟机资源,一方面保证提供高质量的服务,另一方面最小化资源成本,提高CPU,内存等利用率
1.2 云原生
以云计算为主导的技术路线,从IT系统建设的指导思想、方法论、研发管理过程来做出规划,从而形成与之相匹配的,技术组件、资源配置、系统设计模式,人员组织安排、开发部署方式、等一整套的技术组件和管理模式和软件架构的组合;通过最大限度的发挥云计算的优势,让应用程序的研发人员能够聚焦到实现业务逻辑上,而不是管理IT资源上,将资源模块化,进行资源解耦
1.3 微服务
微服务是一种分布式系统架构,是一种思想,是一种设计原则。
核心有两点:1,大的单体要拆小;2,拆小的微服务之间相互协同
将单体应用拆分为更小的组件或模块,这个组件或模块就是微服务。微服务拆分是纵向的,就是从底层的IT基础设施,到数据库,到应用中间件,到软件程序部署包,都能做到完全独立,可以对其进行单独的需求分析,设计、开发、打包、部署等,做到全部独立。实现各个微服务之间彻底松耦合,同时各个微服务之间又能够通过轻量级的Http Rest接口进行交互和协同。
1.3.1 微服务中核心概念
- 服务注册: 服务提供者将所提供服务的信息(服务器IP和端口、服务访问协议等)注册/登记到注册中心
- 服务发现: 服务消费者能够从注册中心获取到较为实时的服务列表,然后根究一定的策略选择一个服务访问
- 负载均衡: 将请求压力分配到多个服务器(应用服务器、数据库服务器等),以此来提高服务的性能、可靠性
- 熔断:熔断即断路保护。微服务架构中,如果下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。
- 链路追踪: 对一次请求涉及的很多个服务链路进行日志记录、性能监控。
- API网关:API请求调用统一接入API网关层,由网关转发请求。API网关更专注在安全、路由、流量等问题的处理上(微服务团队专注于处理业务逻辑即可)。
1.4 DevOps
DevOps(Development Operations),简单来说就是,自动化编译,打包,测试,然后部署。其核心是持续的集成和交付。利用一系列方法,组件,技术手段,通过对应的过程管理,对软件工程实现持续集成和持续部署的思想和方法论。核心内容是实现软件和IT基础设施的对接,自动部署,动态扩容(Pass, Docker);实现不同环境的自动迁移,满足高频的版本发布节奏(持续集成)
1.5 容器云
两个核心:Docker容器 + Kurbernates 的容器资源调度和编排。Docker是一个Laas资源层的组件,是基于虚拟机之上的更轻量化的资源隔离单元,虚拟机是独享一个操作系统,容器是架在操作系统之上的,多个容器可以共享一个操作系统,容器本身的体积会比虚拟机小很多。容器本身的创建销毁和调度的速度比虚拟机更快。
1.5.1 Kurbernates 概念
Kubernetes,简称 k8s,是一个开源的 Linux 容器自动化运维平台,它消除了容器化应用程序在部署、伸缩时涉及到的许多手动操作。换句话说,你可以将多台主机组合成集群来运行 Linux 容器,而 Kubernetes 可以帮助你简单高效地管理那些集群。
Kurbernates 优势: 使用 Kubernetes 的主要优势在于它提供了在物理机或虚拟机集群上调度和运行容器的平台。更宽泛地说,它能帮你在生产环境中实现可以依赖的基于容器的基础设施。而且,由于 Kubernetes 本质上就是运维任务的自动化平台,你可以执行一些其它应用程序平台或管理系统支持的操作,只不过操作对象变成了容器。
Kurbernates 作用:
- 跨主机编排容器。
- 更充分地利用硬件资源来最大化地满足企业应用的需求。
- 控制与自动化应用的部署与升级。
- 为有状态的应用程序挂载和添加存储器。
- 线上扩展或裁剪容器化应用程序与它们的资源。
- 声明式的容器管理,保证所部署的应用按照我们部署的方式运作。
- 通过自动布局、自动重启、自动复制、自动伸缩实现应用的状态检查与自我修复。
docker 在 Kubernetes 中的角色: Docker 技术依然执行它原本的任务。当 kubernetes 把 pod 调度到节点上,节点上的 kubelet 会指示 docker 启动特定的容器。接着,kubelet 会通过 docker 持续地收集容器的信息,然后提交到主节点上。Docker 如往常一样拉取容器镜像、启动或停止容器。不同点仅仅在于这是由自动化系统控制而非管理员在每个节点上手动操作的。
1.6 服务网格(Tencent Cloud Mesh, TCM)
服务网格下的微服务治理,去中性化的微服务治理仍然要有一个中心化的管控节点,其中实际的控制流和接口消息访问的消息流本身实现了分离。控制流,只管理服务的注册和发现,实际的接口调用和服务访问是不经过控制节点的。即使控制中心节点宕机,也不影响接口服务调用。
1.7 ServerLess 无服务器架构
ServerLess的核心思路就是,用户不需要去关注底层的IT基础设施和资源,可以将更多的精力放在自己的业务逻辑上。
ServerLess的核心内容共就是后端即服务(BASS)和函数即服务(FAAS),达到的目标是,后端服务能力完整以后,前端的应用开发足够简单。
特性:弹性伸缩,按量付费的提点。
1.8 不可变基础设施
任何一个应用,我们部署到生产环境,形成一个容器实例以后,这个容器实例本身不需要再做任何的变化,是不可变的。如果业务需求发生了变更,我们需要基于容器镜像,重新生成一个容器实例,同时把旧的容器实例销毁掉即可。
1.9 声明式API
对于生产环境,对软件的修改,都不是直接去操作命令,而是先写好yaml文件后纳入到配置管理,集中做管理。这样在出问题的时候,可以快速进行追溯和定位,方便进行回滚操作。
1.10 什么是docker
Docker是基于Go语言进行开发实现,一个开源的应用容器引擎。采用Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,也可以实现虚拟化,隔离的进程独立于宿主和其他的隔离进程,因此也称其为容器。另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,直接将容器当作应用本身也没有任何问题
1.10.1 docker 的核心概念
- 镜像:镜像类似于虚拟机镜像,可以把它理解为一个只读的模板。
- 容器:Docker 容器类似于一个轻量级沙箱, Docker 利用容器来运行和隔离上层应用。
- 仓库:Docker 仓库类似于代码仓库,是集中存放 Docker 镜像文件的地方。根据所存储的镜像是否公开,我们可以把仓库分为公开仓库 ( Public ) 和私有仓库 ( Private ) 两种形式。
1.11 什么是VM
虚拟机(VM)是一种创建于物理硬件系统(位于外部或内部)、充当虚拟计算机系统的虚拟环境
2. Why
2.1 为什么要使用Docker?
- 快速交付和部署:使用docker,开发人员可以使用功能镜像快速构建一套标准的开发环境。开发完成后,测试和运维人员可以使用完全相同的环境部署代码,可以确保在生产环境无缝运行。也可以进行快速创建和删除容器,实现快速迭代
- 高效的资源利用:运行docker容器不需要额外的虚拟化管理程序支持,docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。
- 轻松的迁移和扩展:docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等,同时支持主流的操作系统发行版本,这种兼容可以让用户在不同的平台间轻松的迁移应用。
- 简单的更新管理:使用Dockerfile生成镜像的方式,只需要小小的配置修改,就可以替代以往大量的更新工作,从而实现自动化且高效的容器管理
2.2 为什么要用虚拟机?
服务整合是使用虚拟机的首要原因。部署到裸机时,大多数操作系统和应用部署都只会使用少量的物理资源。通过虚拟化服务器,我们可以在每个物理服务器上设置大量虚拟服务器,从而提高硬件利用率。
2.3 微服务的优势
- 复杂度可控:即便再复杂的应用开发,我们把它拆分成多个小的微服务,就很简答的进行分组开发,大大的提高效率。
- 独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。
- 容错性能好:因为单个服务,所以即便出了故障,那么我们bug也会仅仅停留在某个服务中,不会影响其他服务的正常使用。
- 扩展性高:我们需要什么功能直接增加服务就好了。
3. How
3.1 SpringBoot与SpringCloud的区别?
- SpringBoot专注于方便的开发单个个体微服务
- SpringCloud是关注于全局的微服务协调治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供配置管理、服务发现、断路器、路由、微代理、事件总线,、决策竞选、分布式会话等集成服务。
- SpringBoot可以离开SpringCloud单独使用,而SpringCloud离不开SpringBoot
4. Samples
云原生Kubernetes—— 认识 k8sk8s 架构核心概念点介绍
目录
一、Kubernetes 简介
Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几年之前就对其应用,通过容器方式进行部署。
k8s 本质上就是用来简化微服务的开发和部署的,关注点包括自愈和自动伸缩、调度和发布、调用链监控、配置管理、Metrics 监控、日志监控、弹性和容错、API 管理、服务安全等,k8s 将这些微服务的公共关注点以组件形式封装打包到 k8s 这个大平台中,让开发人员在开发微服务时专注于业务逻辑的实现,而不需要去特别关系微服务底层的这些公共关注点,大大简化了微服务应用的开发和部署,提高了开发效率。
二、Kubernetes 架构
k8s 总体架构采用了经典的 master slave 架构模式,分 master 节点和 worker 节点,节点可以是虚拟机也可以是物理机。
master 节点由以下组件组成;
- etcd,一种的分布式存储机制,底层采用 Raft 协议,k8s 集群的状态数据包括配置、节点等都存储于 etcd 中,它保存了整个集群的状态。
- API server,对外提供操作和获取 k8s 集群资源的的 API,是唯一操作 etcd 的组件,其他的组件包括管理员操作都是通过 API server 进行交互的,可以将它理解成 etcd 的 “代理人”。
- Scheduler,在 k8s 集群中做调动决策,负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上。
- Controller Manager,相当于集群状态的协调者,观察着集群的实际状态,与 etcd 中的预期状态进行对比,如果不一致则对资源进行协调操作让实际状态和预期状态达到最终的一致,维护集群的状态,比如故障检测、自动扩展、滚动更新等。
worker 节点由以下组件组成:
- Controller Runtime,下载镜像和运行容器的组件,负责镜像管理以及 Pod 和容器的真正运行(CRI)。
- Pod,k8s 中特有的一个概念,可以理解为对容器的包装,是 k8s 的基本调度单位,实际的容器时运行在 Pod 中的,一个节点可以启动一个或多个 Pod。
- kubelet,负责管理 worker 节点上的组件,与 master 节点上的 API server 节点进行交互,接受指令执行操作。
- kube-proxy,负责对 Pod 进行寻址和负载均衡
用户操作 k8s 集群一般是通过 kubectl 命令行工具或者 dashboard;Pod 之间进行通讯是通过集群内部的覆盖网络 Overlay Network,外部流量想要进入集群访问 Pod 则是通过负载均衡 Load Balander 设备进行。
三、Kunbernetes 有哪些核心概念?
1. 集群 Cluster
集群有多个节点组成且可以按需添加节点(物理机/虚拟机),每一个节点都包含一定数量的 CPU 和内存 RAM。
2. 容器 Container
k8s 本身是一个容器调度平台,从宿主机操作系统来看,容器就是一个一个的进程。从容器内部来看容器就是一个操作系统,它有着自己的网络、CPU、文件系统等资源。
3. POD
k8s 也不是直接调度容器的,而是将其封装成了一个个 POD,POD 才是 k8s 的基本调度单位。每个 POD 中可以运行一个或多个容器,共享 POD 的文件系统、IP 和网络等资源,每一个 POD 只有一个 IP。
4. 副本集 ReplicaSet
一个应用发布时会发布多个 POD 实例,副本集可对应一个应用的一组 POD,它可以通过模板来规范某个应用的容器镜像、端口,副本数量等。运行时副本集会监控和维护 POD 的数量,数量过多则会下线 POD,过少则启动 POD。
5. 服务 service
POD 在 k8s 中是不固定的,可能会挂起或者重启,且挂起重启都是不可预期的,那么这就会导致服务的 IP 也随着不停的变化,给用户的寻址造成一定的困难。而 service 就是用来解决这个问题的,它屏蔽了应用的 IP 寻址和负载均衡,消费方可直接通过服务名来访问目标服务,寻址和负载均衡均由 service 底层进行。
6. 发布 Deployment
副本集就是一种基本的发布机制,可以实现基本的或者高级的应用发布,但操作较为繁琐。未来简化这些操作,k8s 引入了 Deployment 来管理 ReplicaSet,实现一些高级发布机制。
7. ConfigMap/Secret
微服务在上线时需要设置一些可变配置,环境不同则配置值不同,有些配置如数据库的连接字符串在启动时就应该配好,有些配置则可以在运行中动态调整。为了实现针对不同环境灵活实现动态配置,微服务就需要 ConfigMap 的支持。
k8s 平台内置支持微服务的配置(ConfigMap),开发人员将配置填写在 ConfigMap 中,k8s 再 将 ConfigMap 中的配置以环境变量的形式注入 POD,这样 POD 中的应用就可以访问这些配置。
Secret 是一种特殊的 ConfigMap,提供更加安全的存储和访问配置机制。
8. DaemonSet
在微服务中,每个节点需要配置一个常驻守护进程。DaemonSet 可支持在每一个 worker 节点上面配置一个守护进程 POD 并且保证每一个节点上有且仅有一个 POD。
9. 核心概念总结
概念 | 作用 |
---|---|
cluster | 超大计算机抽象,由节点组成 |
Container | 应用居住和运行在容器中 |
Pod | Kubernetes 基本调度单位 |
Service | 应用Pods的访问点,屏蔽IP寻址和负载均衡 |
Deployment | 管理ReplicaSet,支持滚动等高级发布机制 |
ConfigMap/Secrets | 应用配置,secret敏感数据配置 |
DaemonSet | 保证每个节点有且仅有一个Pod,常见于监控 |
以上概念点为 Kubernetes 最基本和最重要的概念总结,掌握后可适用于绝大部分云原生场景,还有部分概念本文未作介绍。
以上是关于云架构的一些核心概念的主要内容,如果未能解决你的问题,请参考以下文章
(十四) 整合spring cloud云架构 - Spring Cloud构建分布式电子商务平台
(十四) 整合spring cloud云架构 - Spring Cloud构建分布式电子商务平台
大型医院云HIS系统:采用前后端分离架构,前端由Angular语言JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统