【笔记】云原生

参考书籍:《Go 语言高并发与微服务实战》

云原生是近年来一个很火的词,它并不是一个全新的概念,而是云计算发展的一个阶段,云计算是分布式计算的一种,指的是通过网络将巨大的数据计算处理程序分解成无数个小程序,然后通过多部服务器组成的系统进行处理和分析这些小程序得到的结果并返回给用户。云原生则是云计算的下半场,它是基于分布式部署和统一运营的分布式云,以容器、微服务、DevOps 等技术为基础建立的一套云技术产品体系。

移动互联网时代是业务高速发展的时期,不同于传统应用,移动互联网提供了新的用户体验,即以移动端为中心,通过软件对各行各业的渗透和对世界的改变。移动互联网时代巨大的用户基数下快速变更和不断创新的需求对软件开发带来的巨大推动力,使得传统软件开发的方式收到巨大挑战。面对业务的快速迭代,团队规模不断扩大、降低沟通协作成本、加快产品的交付速度以及为用户呈现更好的体验是各个互联网公司都在努力的方向。在这样的背景下,微服务和云原生的概念开始流行。

企业在数字化转型中普遍面临IT系统架构缺乏弹性,业务交付周期长,运维效率低,高可靠性低等痛点,将软件迁移到云上是应对这一挑战的自然演化方式。从物理机到虚拟机到容器,从 IaaS 诞生到 PaaS、SaaS、FaaS 一路演进,应用的构建和部署变得越来越轻,越来越快,而底层基础设施和平台则越来越强大,以不同形态的云对上层应用提供强力支撑。所以企业可以通过云原生的一系列技术,例如基于容器的敏捷基础设施、微服务架构等解决企业面临的这些IT痛点。

对于开发者来说,他只需要将应用极其运行环境,打包成标准的格式来发布,不需要担心应用运行的各种环境差异,以及同时运行带来的潜在的干扰问题。对于云原生的平台来说,它只需要围绕标准来将这些容器化的应用统一地调度管理以及最终运行。这种分工明确的模式,让各个角色的人群可以聚焦他们自己的工作,省去了很多不必要的麻烦。

云原生是一系列云计算技术体系和企业管理方法的集合,既包含了实现应用云原生化的方法论,也包含了落地实践的关键技术。云原生应用利用微服务、服务网格、容器、DevOps 和声明式 API 等代表性技术,来构建容错性好、易于管理和便于观察的松耦合系统。

为了解决单体的复杂度问题,我们引入微服务架构。在单体应用的时代,虽然开发简单,但随着业务复杂度的提升,单体应用的益处逐渐减少。它们变得更难理解,而且失去了敏捷性,因为开发人员很难快速理解和修改代码。对付复杂性最好方法之一是将明确定义的功能分成更小的服务,并让每个服务独立迭代。微服务是指将大型复杂软件应用拆分成多个简单应用,每个简单应用描述着一个小业务,系统中各个简单应用可被独立部署。各个微服务之间是松耦合的,这样就可以独立地对每个服务进行升级、部署、扩展和重新启动等,从而实现频繁更新而不会对最终用户产生任何影响。相对传统的单体架构,微服务架构具有降低系统复杂度、独立部署、独立扩展和跨语言编程等优点。但是,从另一个角度看,微服务架构的灵活、开发的敏捷也带来了运维的挑战和分布式系统的复杂性。单体应用可能只需部署一小片应用服务器集群,而微服务架构则需要构建、测试、部署、运行多个独立的服务,并可能需要支持多种语言和环境;微服务还引入了分布式系统的复杂性,如网络延迟、容错性、消息序列化、不可靠的网络、异步机制、版本化和差异化的工作负载等,开发人员需要考虑以上这些分布式系统问题。其他的问题,如微服务的可测试性、异步机制、调用链过长等,也需要在架构设计时考虑。

为了解决微服务架构下大量应用部署的问题,我们引入容器。容器是一种轻量级的虚拟化技术,能够在单一主机上提供多个隔离的操作系统环境,通过一系列的命名空间进行进程隔离,每个容器都有唯一的可写文件系统和资源配额。容器技术分为运行时和编排两层,运行时负责容器的计算,存储、网络等,编排层负责容器集群的调度、服务发现和资源管理。容器服务提供高性能、可伸缩的容器应用管理能力,容器化应用的声明周期管理可以提供多种应用发布方式。容器服务简化了容器管理集群的搭建工作,整合了调度、配置、存储、网格等,打造云端最佳容器运行环境。Docker 是一个开源的应用容器引擎,使用容器技术,用户可以将微服务及其所需的所有配置、依赖关系和环境变量打包成容器镜像,轻松移植到全新的服务节点上,而无需重新配置环境,这使得容器成为部署单个微服务的最理想工具。但是,仅仅有容器还是不够的,因为人力运维部署成本太大,为了解决容器的管理和调度问题,又引入 Kubernetes。Kubernetes 是 Google 开源的容器集群管理系统,可以实现容器集群的自动化部署、自动伸缩容和维护等功能。我们用 Kubernetes 去管理 Docker 集群,可以将 Docker 看成 Kubernetes 内部使用的低级别组件。另外,Kubernetes 不仅仅支持 Docker,还支持 Rocket 等其他容器技术。

微服务技术架构实践中主要有侵入式架构和非侵入式架构两种实现形式。侵入式架构是指服务框架嵌入程序代码,开发者组合各种组件,如 RPC、负载均衡、熔断等,实现微服务架构。非侵入式架构则是需要以代理的形式,与应用程序部署在一起,接管应用程序的网络且对其透明,开发者只需要关注自身业务即可,以服务网格为代表。为了解决微服务框架的侵入性问题,引入 Service Mesh,它的存在和具体工作模式,对于运行于其上的云原生应用来说是透明无感知的,但是在运行时这些能力都动态赋能给了应用,从而帮助应用在轻量化的同时依然可以继续提供原有的功能。Service Mesh 使得系统架构的技术栈下移,降低了整个微服务入门的门槛,对于开发者更加友好。它提供了一个方案,就是将整个服务间通信的解决方式以及整个中间件层的技术栈全部下移。从应用当中下移到底层的基础设施,通过加强基础设施的方式提供一个统一的解决方案。Service Mesh 处理服务间请求、响应的可靠传递,并可用于服务治理、遗留系统的零侵入接入以及异构框架开发的微服务。它作为服务间通信的基础设施层,是应用程序间通信的中间层,实现了轻量级网络代理,对应用程序透明,解耦了应用程序的重试、超时、监控、追踪和服务实现。除此之外,Service Mesh 提供了专业化的解决方案,其中所涉及的服务通信、容错、认证等功能,都是专业度极高的领域,这些领域应该出现工业级成熟度的制成品,这对于中小企业来说是一个降低成本的选择。

DevOps 是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作与整合。目前对 DevOps 有太多的说法和定义,不过它们都有一个共同的思想:解决开发者与运维者之间曾经不可逾越的鸿沟,增强开发者与运维者之间的沟通和交流。DevOps 的出现时由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。市场瞬息万变,同时机会转瞬即逝。互联网公司要实现生存,必须拥有快速试错和迭代产品的能力。而 DevOps 就是一个面向业务目标,助力业务成功的最佳实践,它包含了三部分:开发、测试和运维。与敏捷一样,DevOps 将软件程序分解成更下的部分,以提高软件交付速度和质量,它的一个标志是持续实践,包括持续继承、持续测试、持续交付和持续部署,所有这些都有助于软件产品和软件相关实践的持续改进。DevOps 的目标是缩短开发周期,增加部署频率,更可靠的发布。用户可通过完整的工具链,深度集成代码仓库、制品仓库、项目管理、自动化测试等类别中的主流工具,实现零成本迁移,进行快速实践。DevOps 帮助开发者和运维人员打造了一个全新空间,构建了一种通过持续交付实践去优化资源和扩展应用程序的新方式。微服务使 DevOps 团队能够并行开发独立的功能片段,跨功能团队协作构建、测试、发布、监控和维护应用程序。DevOps 和云原生架构的结合能够实现精益产品开发流程,适应快速变化的市场,更好地服务企业的商业目的。

云原生应用可充分利用云平台服务优势,并快速构建部署到平台上,平台提供了简单快捷扩展能力并与硬件解耦,提供了更大的灵活性、弹性和跨云环境的可移植性。云原生将云计算作为竞争优势,原生云意味着将云目标从 IT 成本节约转向业务增长引擎。

猜你喜欢

转载自blog.csdn.net/weixin_45922876/article/details/121085913