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

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

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

👀专栏介绍

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

👀本期介绍

主要介绍什么是微服务、微服务的发展史、微服务与云原生的关系
@[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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6天前
|
Kubernetes Cloud Native JavaScript
云原生之旅:从容器到微服务的探索之路
【9月更文挑战第15天】本文将带你踏上云原生技术的探险之旅,从容器技术的核心概念出发,逐步深入到微服务架构的世界。文章不仅涵盖了云原生的理论基础,还通过实际案例展示了如何在真实世界中应用这些理念。无论你是初学者还是有经验的开发者,都能在这次旅程中获得宝贵的知识和启发。
|
6天前
|
Cloud Native Docker 微服务
云原生之旅:从容器化到微服务
【9月更文挑战第15天】在数字化转型的浪潮中,云原生技术如同一股清泉,为传统IT架构带来活力与创新。本文将深入浅出地探讨云原生的核心概念、关键技术及应用实践,带领读者踏上一段探索云原生世界的奇妙旅程。
36 9
|
11天前
|
Kubernetes Cloud Native Docker
探索云原生技术之旅:从容器到微服务
【8月更文挑战第42天】本文将带你踏上一场云原生技术的奇妙之旅,我们将从容器技术的基础出发,逐步深入到微服务架构的世界。你将了解到如何利用Docker和Kubernetes简化应用部署与管理,以及如何通过微服务设计原则构建可扩展、灵活的系统。准备好一起探索这些令人兴奋的技术了吗?让我们开始吧!
49 14
|
3天前
|
运维 Kubernetes Cloud Native
探索云原生技术:容器化与微服务架构的融合之道
【9月更文挑战第18天】在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性成为企业创新的强大引擎。本文将深入探讨云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同推动现代应用的开发与部署。通过实际代码示例,我们将揭示这些技术如何简化运维,加速产品上市时间,并提高系统的可靠性和弹性。无论你是开发人员、架构师还是IT决策者,这篇文章都将为你提供宝贵的洞见和实践指导。
12 2
|
5天前
|
运维 Cloud Native 持续交付
云原生之旅:从容器化到微服务架构的探索
【9月更文挑战第16天】在数字化转型的浪潮中,云原生技术成为推动企业创新和效率提升的关键力量。本文将带你深入了解云原生的核心理念,从容器化技术的入门应用到微服务架构的设计实践,揭示如何利用这些先进技术构建更灵活、更可靠的系统。我们将通过具体案例,探讨云原生技术如何帮助企业实现快速迭代与持续交付,以及在这一过程中可能遇到的挑战和解决方案。
|
3天前
|
Kubernetes Cloud Native Java
云原生技术之旅:从容器化到微服务架构
【9月更文挑战第18天】云原生技术正改变着我们构建、部署和管理应用的方式。本文将通过一次虚拟的旅行,带领读者探索云原生的核心概念,如容器化、微服务、持续集成与交付等。我们将以一个实际案例为线索,逐步展开对Kubernetes集群管理、Docker容器创建和Spring Boot微服务开发的讨论。就像在旅途中不断发现新风景一样,您将了解到这些技术如何协同工作,提升开发效率和应用性能。准备好了吗?让我们启航!
|
7天前
|
Kubernetes Cloud Native Docker
云原生技术之旅:从容器到微服务
【9月更文挑战第14天】随着云计算的蓬勃发展,云原生技术已成为现代软件开发的重要组成部分。本文将深入探讨云原生的核心概念,包括容器化、微服务架构以及它们如何共同推动企业快速创新。通过实际案例,我们将展示如何利用Kubernetes和Docker等工具构建和管理高效的云原生应用。无论你是初学者还是经验丰富的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在云原生时代乘风破浪。
30 5
|
9天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
18 3
|
11天前
|
运维 Kubernetes Cloud Native
云原生之旅:容器化与微服务架构的融合之道
在数字化转型的浪潮中,云原生技术以其高效、灵活的特性成为企业IT架构升级的重要选择。本文将探讨云原生的核心概念——容器化和微服务架构,并阐述它们如何相互融合,共同推动现代应用的开发与部署。通过深入浅出的解释,我们将揭示云原生如何助力企业快速适应市场变化,实现业务的持续创新和价值最大化。
|
11天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 08 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要