【秒懂·云原生】微服务篇 —— 微服务究竟是什么?

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【秒懂·云原生】微服务篇 —— 微服务究竟是什么?

🔎这里是【秒懂·云原生】,关注我学习云原生不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

👀专栏介绍

【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。

👀本期介绍

主要介绍什么是微服务、微服务的发展史、微服务与云原生的关系
@[TOC]

👀微服务架构介绍

近年来,微服务架构一直是互联网技术圈的热点之一,越来越多的互联网应用都采用了微服务架构作为系统构建的基础,很多新技术和理念如Docker、Kubernetes、DevOps、持续交付、Service Mesh等也都在关注、支持和跟随微服务架构的发展。

👀微服务架构的发展

从单体应用架构发展到SOA架构,再到微服务架构, 应用架构经历了多年的不断演进。微服务架构不是凭空产生的,而是技术发展的必然结果,分布式云平台的应用环境使得微服务代替单体应用成为互联网大型系统的架构选择。目前,虽然微服务架构还没有公认的技术标准和规范草案,但业界已经有了一些很有影响力的开源微服务架构解决方案,在进行微服务化开发或改造时可以进行相应的参考。

🍖单体应用架构

与微服务架构对比的是传统的单体应用。Web应用程序发展的早期,大部分Web工程是将所有的功能模块打包到一起部署和运行,例如Java应用程序打包为一个war包,其他语言(Ruby、Python或者C++)编写的应用程序也有类似的做法。单体应用的实现架构类似于图中的电影售票系统。

在这里插入图片描述

这个电影售票系统采用分层架构,按照调用顺序,从上到下为表示层、业务层、数据访问(DAO)层、DB层。表示层负责用户体验;业务层负责业务逻辑,包括电影、订单和用户三个模块;数据访问层负责DB层的数据存取,实现增删改查的功能。业务层定义了应用的业务逻辑,是整个应用的核心。在单体应用中,所有这些模块都集成在一起,这样的系统架构就叫做单体应用架构,或称为巨石型应用架构。单体应用是最早的应用形态,开发和部署都很简单。在中小型项目中使用单体应用架构,能体现出其优势,且单体应用的整体性能主要依赖于硬件资源和逻辑代码实现,应用架构自身不需要特别关注。

🍖SOA(面向服务架构)

🎨1、什么是SOA

面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型。

🎨2、为什么要使用SOA

SOA旨在将单个应用程序功能彼此分开,以便这些功能可以单独用作单个的应用程序功能或“组件”。这些组件可以用于在企业内部创建各种其他的应用程序,或者如有需要,对外向合作伙伴公开,以便用于合作伙伴的应用

🎨3、SOA的工作原理

在这里插入图片描述

SOA架构中有三种角色:

服务提供者: 发布自己的服务,并且对服务请求进行响应。
服务注册中心: 注册已经发布的web service,对其进行分类,并提供搜索服务。
服务请求者: 利用服务中心查找所需要的服务,然后使用该服务。

🎨4、面向服务架构的特点

1) 多个单体服务
2)服务间通过ESB间接通讯
在这里插入图片描述
缺点也显而易见:

1)仅垂直方向拆分,每个服务还是单体;

2)引入了ESB庞然大物;

🍖微服务架构

微服务最早是由Martin Fowler与James Lewis于2014年共同提出,需要了解细节的读者可以阅览 https://martinfowler.com/articles/microservices.html。其实Martin先生并没有给出明确的微服务定义,根据其描述,微服务的定义可以概括如下︰微服务架构是一种使用一系列粒度较小的服务来开发单个应用的方式;每个服务运行在自己的进程中;服务间采用轻量级的方式进行通信(通常是HTTP API)﹔这些服务是基于业务逻辑和范围,通过自动化部署的机制来独立部署的,并且服务的集中管理应该是最低限度的,即每个服务可以采用不同的编程语言编写,使用不同的数据存储技术。
如今,微服务架构已经不是一个新概念了,很多业界前沿互联网公司的实践表明,微服务是一种渐进式的演进架构,是企业应对业务复杂性,支持大规模持续创新行之有效的架构手段。

在这里插入图片描述

🎨1、组成

微服务架构是一种比较复杂、内涵丰富的架构模式,它包含很多支撑"微"服务的具体组件和概念,其中一些常用的组件及其概念如下:

  • · 服务注册与发现:
    服务提供方将己方调用地址注册到服务注册中心,让服务调用方能够方便地找到自己;服务调用方从服务注册中心找到自己需要调用的服务的地址。
  • ·负载均衡:
    服务提供方一般以多实例的形式提供服务,负载均衡功能能够让服务调用方连接到合适的服务节点。并且,服务节点选择的过程对服务调用方来说是透明的。
  • ·服务网关: 服务网关是服务调用的唯一入口,可以在这个组件中实现用户鉴权、动态路由、灰度发布、A/B测试、负载限流等功能。
  • ·配置中心:
    将本地化的配置信息(Properties、XML、YAML等形式)注册到配置中心,实现程序包在开发、测试、生产环境中的无差别性,方便程序包的迁移。
  • ·集成框架:
    微服务组件都以职责单一的程序包对外提供服务,集成框架以配置的形式将所有微服务组件(特别是管理端组件)集成到统一的界面框架下,让用户能够在统一的界面中使用系统。
  • ·调用链监控: 记录完成一次请求的先后衔接和调用关系,并将这种串行或并行的调用关系展示出来。在系统出错时,可以方便地找到出错点。
  • ·支撑平台:
    系统微服务化后,各个业务模块经过拆分变得更加细化,系统的部署、运维、监控等都比单体应用架构更加复杂,这就需要将大部分的工作自动化。现在,Docker等工具可以给微服务架构的部署带来较多的便利,例如持续集成、蓝绿发布、健康检查、性能健康等等。如果没有合适的支撑平台或工具,微服务架构就无法发挥它最大的功效。

🎨2、优点

微服务架构模式有很多优势可以有效解决单体应用扩大之后出现的大部分问题。

  • 首先, 通过将巨大单体式应用分解为多个服务的方法解决了复杂性问题。在功能不变的情况下,应用分解为多个可管理的模块或服务。每个服务都有一个用RPC或者消息驱动API定义清楚的边界。微服务架构模式为采用单体式编码方式很难实现的功能提供了模块化的解决方案。由此,单个服务变得很容易开发、理解和维护。
  • 其次, 微服务架构模式使得团队并行开发得以推进,每个服务都可以由专门开发团队来开发。不同团队的开发者可以自由选择开发技术,提供API服务。这种自由意味着开发者不需要被迫使用之前采用的过时技术,他们可以选择最新的技术。甚至于,因为服务都是相对简单的,即使用新技术重写以前的代码也不是很困难的事情。
  • 再次, 微服务架构模式中每个微服务独立都是部署的。理想情况下,开发者不需要协调其他服务部署对本服务的影响。这种改变可以加快部署速度。UI团队可以采用AB测试,快速地部署变化。微服务架构模式使得持续化部署成为可能。
  • 最后, 微服务架构模式使得每个服务易于独立扩展。

👀微服务架构的流派

常见的微服务架构方案有四种,分别是ZeroC lceGrid、基于消息队列、DockerSwarm和Spring Cloud。下面分别介绍这四种方案。

🍖1、ZeroC lceGrid

  • ZeroC lceGrid是基于RPC框架lce发展而来的一种微服务架构,lce不仅仅是一个RPC框架,它还为网络应用程序提供了一些补充服务。lce是一个全面的RPC框架,支持C++、C#、Java、JavaScript、Python等语言。IceGrid具有定位、部署和管理lce服务器的功能,具有良好的性能与分布式能力,下面具体介绍IceGrid的功能。
  • lce的DNS。DNS用于将域名信息映射到具体的IP地址,通过域名得到该域名对应的IP地址的过程叫做域名解析。lceGrid为lce提供了类似的服务∶它允许lce客户端通过简单的名称来查找Ice对象。lce客户端可以通过提供此对象的完整寻址信息来访问服务器中的Ice对象,例如chatRoom1:ssl-h demo.zeroc.com-p10000。这样的硬编码虽然很简单,但缺乏灵活性。因为需要为lce服务器(本例中端口为10000)选择一个固定的端口号,因此将Ice服务器移到不同的主机上需要更新其客户端。
  • lceGrid提供了对这种寻址信息使用符号名称的选项,例如chatRoom1@chatRoomHost。当lce客户端尝试访问chatRoomHost中的对象时,它会要求lceGrid提供与此符号名称关联的实际地址。例如,lceGrid返回-hdemo.zeroc.com-p 65431,客户端就可以直接并透明地连接到服务器。lceGrid架构如图

在这里插入图片描述

🍖2、基于消息队列

在微服务架构的定义中讲到,各个微服务之间使用“轻量级"的通信机制。所谓轻量级,是指通信协议与语言无关、与平台无关。微服务之间的通信方式有两种:同步和异步。同步方式有RPC,REST等;除了标准的基于同步通信方式的微服务架构外,还有基于消息队列异步方式通信的微服务架构。

🍖3、Docker Swarm

Swarm项目是Docker公司发布的三剑客中的一员,用来提供容器集群服务,目的是更好地帮助用户管理多个Docker Engine,方便用户使用。通过把多个Docker Engine聚集在一起,形成一个大的Docker Engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。

🍖4、Spring Cloud

  • Spring Cloud是一个基于SpringBoot实现的云应用开发工具,是一系列框架的集合,当添加这些工具库到应用后会增强应用的行为。SpringBoot秉持约定优于配置的思想,因此可以利用这些组件基本的默认行为来快速入门,并在需要的时候可以配置或扩展,以创建自定义解决方案。
  • Spring Cloud利用Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以基于Spring Boot组件进行开发,做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前比较成熟、经得起实际考验、优秀的开源服务框架组合起来,通过Spring Boot进行封装,屏蔽掉复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

以下为Spring Cloud的核心功能:

  • 分布式/版本化配置
  • 服务注册和发现
  • 服务路由
  • 服务和服务之间的调用
  • 负载均衡
  • 断路器
  • 分布式消息传递

还有很多基础的功能没有列出,每个功能对应Spring Cloud中的一个组件,包括Spring Cloud Config、Spring Cloud Netflix (Eureka、Hystrix、Zuul、Archaius...) . Spring Cloud Bus等组件。

👀云原生与微服务

提及云原生,首先需要了解一下CNCF,即云原生计算基金会,2015年由谷歌牵头成立,基金会成员目前已有一百多个企业与机构,包括亚马逊、微软、思科等巨头。目前CNCF所托管的应用已达14个,知名的项目有Kubernetes、Prometheus、Envoy等。

CNCF宪章中给出了云原生应用的三大特征,概括如下:

  • 容器化封装: 以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。
  • 动态管理: 通过集中式的编排调度系统来动态管理和调度。
  • 面向微服务: 明确服务间的依赖,互相解耦。

云原生包含了一组应用的模式,用于帮助企业快速、持续、可靠、规模化地交付业务软件。如图所示,云原生由微服务架构、DevOps和以容器为代表的敏捷基础架构组成。

在这里插入图片描述

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
10天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
8天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
31 5
|
9天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
26 5
|
9天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
8天前
|
Cloud Native API 持续交付
云原生之旅:从容器到微服务的演进之路
【10月更文挑战第39天】在这篇文章中,我们将一起探索云原生技术的奥秘。通过浅显易懂的语言和生动的比喻,我们将了解云原生技术如何改变软件开发的世界。文章将带领读者从容器的基本概念出发,逐步深入到微服务架构的实践,揭示这些技术如何助力现代应用的快速迭代与可靠部署。准备好,让我们启程进入云原生的精彩世界吧!
|
11天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
11天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
18天前
|
Kubernetes Cloud Native 微服务
云原生之旅:从容器到微服务
【10月更文挑战第29天】在这篇文章中,我们将一起探索云原生的奥秘。云原生不仅仅是一种技术,更是一种文化和方法论。我们将从容器技术开始,逐步深入到微服务架构,最后探讨如何在云平台上实现高效的服务部署和管理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的技能。让我们一起踏上这段激动人心的云原生之旅吧!
|
19天前
|
运维 Kubernetes Cloud Native
云原生之旅:容器化与微服务的融合
【10月更文挑战第28天】 在数字化转型的浪潮中,云原生技术如星辰般璀璨,引领着企业IT架构的未来。本文将带你穿梭于云原生的世界,探索容器化技术和微服务架构如何携手共舞,打造灵活、高效的应用部署和运维模式。我们将通过实际代码示例,揭示这股力量背后的奥秘,并展现它们是如何为现代软件开发带来革新。准备好了吗?让我们启航,驶向云原生技术的深海。
下一篇
无影云桌面