云架构的一些核心概念
- 1. What
- 1.1 什么是云架构?
- 1.2 云原生
- 1.3 微服务
- 1.3.1 微服务中核心概念
- 1.4 DevOps
- 1.5 容器云
- 1.5.1 Kurbernates 概念
- 1.6 服务网格(Tencent Cloud Mesh, TCM)
- 1.7 ServerLess 无服务器架构
- 1.8 不可变基础设施
- 1.9 声明式API
- 1.10 什么是docker
- 1.10.1 docker 的核心概念
- 1.11 什么是VM
- 2. Why
- 2.1 为什么要使用Docker?
- 2.2 为什么要用虚拟机?
- 2.3 微服务的优势
- 3. How
- 3.1 SpringBoot与SpringCloud的区别?
- 4. Samples
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