深入微服务架构,探索最佳设计,实现微服务架构最大优势

Python 微服务架构指南 微服务架构作为一种设计风格,它将应用程序构建为一套小服务的集合,每个服务实现特定的业务功能,这些服务可以独立部署、扩展并围绕特定业务能力构建。Python 凭借其简洁易读的语法和强大的库生态系统成为实现微服务的受欢迎选择。本文将详细介绍如何使用 Python 开发微服务,包括选择框架、创建服务、通信机制以及服务发现等关键方面,并提供充足示例。 阅读详情

前言

在之前咱们有介绍过,使用微服务架构有很多好处,并且在各个方面都有其独特的优势,但是,每一件事情都不是绝对的,使用微服务架构同时也充满着挑战。因此,我们必须在开始进行微服务架构设计时,进行全盘考虑,权衡利弊,才能做出合理的选择,取得最佳的设计效果。

在微服务架构设计中,对复杂系统进行拆分之后,会不会产生一些新的问题呢?比如微服务之间的相互调用和通信会不会很复杂?由于每个微服务都有独立的数据库,那么分散的数据管理怎么保证数据的一致性?如果单个微服务的功能变更,会不会影响到多个微服务的正常运行?诚然,这些问题是确实存在的,总结起来包括如下几点:

  • 微服务的粗细粒度不好把握。
  • 分布式的微服务增加了服务之间相互调用及其通信的复杂性。
  • 分散的数据管理难以保证数据的一致性。
  • 由多个微服务组成的系统会增加集成测试的复杂性。
  • 单个服务的变更可能会影响到多个服务。
  • 部署的复杂性。

那么应该如何做才能解决上面提到的问题,并且能充分发挥微服务架构的优势,以达到一种扬长避短的目的呢?

 

合理划分微服务

微服务架构设计的首要任务就是怎么合理地划分微服务,即怎么围绕业务功能来创建微服务。在进行微服务划分时,有关微服务粗细粒度的考虑,建议在平台创建的初始阶段,可以使用粗粒度的方法按业务功能进行划分。然后,随着业务的发展及其运营的情况,再依据发展规模考虑是否继续细分。下面将使用水平划分法和垂直划分法两种方法相结合的方式来创建微服务。

一方面, 在水平方向上,按业务功能不同来划分微服务,并把这次划分所创建的微服务称为Rest API微服务。Rest API微服务负责业务功能的行为设计,主要完成数据管理方面的工作,并通过使用Rest协议对外提供接口服务。

另一方面,在垂直方向上,再以Rest API微服务为基础实现前后端分离设计,创建Web UI微服务。Web UI微服务不直接访问数据,而只专注于人机交互界面的设计,它的数据存取将通过调用Rest API微服务来完成。

这样,经过两次微服务划分,我们就可以创建出Rest API和Web UI两种类型的微服务,也就是说,我们只要使用两种类型的微服务,就可以构成一个复杂的业务系统。

使用Rest API和Web UI微服务,再结合高性能和高并发的设计,并通过微服务的多副本发布,就可以构成一-个能适应任何规模访问的多维的稳定牢固的网格结构,并且这个网格结构还具有自由伸缩的特性,可以根据业务的发展规模进行缩编或者进行扩充,这样也就可以非常容易地搭建一个可持续扩 展的系统平台。

微服务治理

微服务架构的实施,将会产生出越来越多的微服务,而微服务的独立自主性及其设计的扁平化管理方法,都给每个微服务的开发、部署和更新提供了更大的灵活性,所以微服务的运行环境、服务间的相互调用将会变得越来越复杂。因此必须有一些组件和服务来对运行中的微服务进行有效治理,才能在一个庞大的分 布式环境中保证每个微服务的运行和服务间的调用处在一种有序而不杂乱、稳定而高效的状态之中。

Spring Cloud工具套件使用了基于Netlix OSS的一-些基础组件来实现微服务治理,这些组件主要包括:

注册管理服务组件Eureka,提供服务注册和发现的功能。负载均衡服务组件Ribbon,提供负载均衡调度管理的功能。边缘代理服务组件Zul,提供网关服务和动态路由的功能。断路器组件Hystrix,提供容错机制、服务降级、故障转移等功能。聚合服务事件流组件Turbine,可用来监控集群中服务的运行情况。日志收集组件Sleuth,可以通过日志收集提供对服务间调用进行跟踪管理的功能。配置管理服务组件Config,提供统- -的配置管理服务功能。通过Spring Cloud的工具组件进行微服务治理,微服务的运行就将处在一种有序可控的范围之中,微服务之间的相互调用和通信就会变得非常简单,并且快速而高效。

Rest API微服务设计

 

通过围绕业务功能使用水平划分方法划分出来的Rest API 微服务是一个独立的小应用,这种小应用具有独立的数据库,可以独立部署和独立运行。也就是说,每个Rest API微服务是完全独立自主的。

Rest API微服务需要实现两方面的功能:一方面,对内实现数据管理的功能;另一方面,对外提供API调用。

Rest API微服务的实现所体现出来的设计容易、开发简单、访问高效的特点,非常适合使用敏捷开发方法,也可以适应快速迭代和多副本发布的要求。

在我们的微服务架构设计中,Rest API微服务就相当于数据库调用的一个中间件,它的调用性能将对整个系统的性能起到决定性的作用。所以,高性能的Rest API微服务设计,就是微服务架构最佳设计中的一个重点所在。

Web UI微服务设计

Web UI微服务是一个前端设计, 它也可以使用Node.js、Angularjis或Vuejis等前端设计工具来进行开发。这里推荐使用Spring- Boot-Web来开发Web UI 微服务,因为这样会更为简便和快速,并且与Spring Cloud工具也能够取得更多的默契和更多方面的搭配。

Web UI微服务的设计,包含了两个方面的功能:一方面实现对Rest API微服务的调用;另一方面是用户界面设计。Web UI微服务将面对最终用户,所以它必须能够适应规模化的访问。

微服务之间调用规则设计

 

为了保证各个微服务的独立性,并减少通信的复杂性,提高微服务之间的调用效率,我们对微服务之间的调用,做出了如下几种约定。

1.通过Web UI调用Rest API

服务之间的调用,主要是指Web UI微服务对Rest API微服务的调用。一个Web UI在一次调用之中,可以同时调用多个Rest API,并且这种调用将通过高并发设计来实现,即多个调用将会由不同的线程所执行,所以即使是多个调用,也不会影响程序的执行效率。

2. Rest API之间只能通过MQ进行互相通信

为了保证Rest API的高性能特性,同时避免因为一个Rest API的功能变更对其他Rest API的影响,所以禁止在Rest API之间进行相互调用。Rest API之间如果需要进行通信,可以使用异步消息来实现,即通过消息总线实现异步通信。

3. Web UI之间可使用与之对应的实例进行相互跳转

Web UI之间不进行相互调用,但可以进行相互跳转,这种跳转不是直接使用地址栏的链接来进行的,而是通过注册实例实现跳转,当一个注册实例有多个副本时,将可进行负载均衡管理。

数据最终一致性设计

集中式的数据管理可以在一个事务中完成,所以能保证数据的高一致性。对于微服务的多服务架构,数据将由不同的微服务进行分散管理,所以要保证数据的一致性,必须有合理的设计。

假如我们有商品和订单两个微服务,那么在订单服务中生成订单时,将需要在商品服务中进行库存减少的操作,而在订单服务中进行订单查询时,将有可能需要在商品服务中查询订单相关的商品信息,这就涉及不同微服务中数据一致性的问题。

我们可以依据CAP原理的BASE理论来实现数据最终一致性设计。CAP ( Consistency, Availability, Partition tolerance)即一致性、可用性、分区容错性三者不可兼得。

BASE ( Basically Available, Soft state, Eventually consistent)即基本可用、软状态、最终一致性。

BASE 是对CAP中一致性和可用性进行权衡的结果。

数据最终一致性设计具体的实现主要由两种类型的操作完成: 一种是通过调用各个Rest API实现实时同步操作;另一种是使用消息通道以事件响应的方式进行异步处理。

比如在商品服务和订单服务的例子中,当用户下单时,即同时调用两个服务的RestAPI,一方面,通过订单服务的Rest API生成订单,另一方面通过商品服务的Rest API更新库存数量。而当订单状态修改时,即由订单服务的Rest API发布一个异步消息,商品服务的Rest API通过订阅消息来执行相应的更新操作。

分布式集群架构设计

通过微服务的治理环境,使用多副本发布的每个微服务,最终都将被自动纳入到微服务的负载均衡管理体系之中,这些微服务应用与我们搭建的数据库集群、分布式文件系统等集群一起构成一个分布式架构的集群体系

微服务分布式集群体系结构

这个集群体系将由很多不同的服务器所组成,这些服务器既可以分布在同一个局域网之中,也可以进行跨区域、跨机房分布,组成一个庞大的分布式体系结构。总之,使用分布式集群架构设计,可以搭建一个稳定可靠并可持续扩展的系统平台。

微服务运行环境安全设计

系统的安全设计包括防火墙设计、防攻击设计、访问控制设计、数据保密设计等各个方面的内容。而防火墙设计是系统安全的第一道屏障,我们将使用防火墙为微服务架构的服务器组建提供-一个安全可靠的分布式环境

微服务运行环境安全设计网络拓扑结构

使用防火墙,我们可以组建一个局域网环境,在这个局域网环境之中,各种服务器的组建将会更加容易,服务器的配置会更加简单,服务之间的通信也会更加方便和快速。

使用防火墙,我们还可以将不同区域、不同地房的服务器通过VPN连接起来,提供一种更加安全的访问方式。

后记

本文介绍了怎么围绕业务功能来进行合理地划分微服务的方法,并在此基础上创建了两种类型的微服务,即专门用来存取数据的Rest API微服务和主要实现前端设计的Web UI微服务,使用这两种类型的微服务,通过微服务治理,并结合使用数据库集群设计、缓存设计、分布式文件系统设计、微服务的集群设计、安全的分布式环境设计等一系列分布式的架构设计,就可以构建成一个微服务架构的最佳设计,并在微服务架构本身所体现出来的优势和缺点之间进行权衡与调整,最终充分发挥微服务架构的绝对优势。

予人玫瑰,手有余香。喜欢小编的整理的话,请多多点赞评论分享啊,关注小编,你们的支持就是小编最大的动力!!!

架构设计系列 2 : 软件架构设计演化史 为了解决这一问题,基础设施进行了第二次演进,即服务网格(Service Mesh)的边车代理模式(Sidecar Proxy),边车即在基础设施中由系统自动地在服务的资源容器(比如 Kubernetes 中的 prod)中注入一个通信代理服务器,用类似网络安全里中间人攻击的方式进行流量劫持,在应用无感知的情况下,接管应用所有对外通信。由于硬件限制,将系统拆分到不同的机器上引发了一系列的问题,包括服务发现、跟踪、通讯、容错、隔离、配置、传输、数据一致性和编码复杂度等多方面的挑战。 阅读详情

相关推荐

银行业微服务实践探索

本文介绍一个全数字化银行的微服务实践案例,涵盖DevOps、Kubernetes、持续集成与交付等关键技术。通过特性小组与能力小组结合的组织模式,实现高自主性与并行开发。采用API优先、事件驱动架构及自动化运维,提升交付效率与系统可维护性,为传统银行数字化转型提供参考。

k8s6orchestrator的博客 350

Python微服务架构设计&使用asyncio提升性能

与单体架构相比,微服务架构有几个好处,包括但不限于独立的可扩展性和灵活部署特性。BFF 是一种微服务模式,它聚合了来自多个下游服务的调用。我们已经学习了如何将微服务架构应用到电子商务用例中,如何使用 FastAPI 创建多个独立的服务。使用 asyncio 实用函数(如 wait)来确保 BFF 服务保持弹性,并对下游服务的故障做出响应。创建了一个实用程序,管理 HTTP 请求的重试。实现了一个基本的断路器模式,以确保服务故障不会对其他服务产生负面影响。

kobe_okok的博客 2449

高精度计算Π的值(C语言)

题目要求 限制使用双向链表作存储结构,请根据用户输入的一个整数(该整数表示精确到小数点后的位数,可能要求精确到小数点后500位),高精度计算PI值。可以利用反三角函数幂级展开式来进行计算。 输入5 输出3.14159 思路分析 反三角函数幂级展开式 由公式可以看出,只要计算出来每一个R(n)的值再相加取二倍就可以得到Π的值。 经过推算,要是令R(1)=2,只需要将每个R(n),相加即可。 因...

weixin_46251155的博客 8031

Python 微服务架构

微服务架构旨在提高开发效率、系统的可扩展性与维护性,并且每个微服务都可以用不同的编程语言和技术栈实现。在微服务架构中,每个服务都是独立的,并且服务实例的数量和位置可能会不断变化。通过将功能模块进行拆分,微服务能够避免过于庞大的单体应用,提升了应用的可维护性、可扩展性和灵活性。它能够管理微服务的容器化应用,并提供服务发现、负载均衡、自动扩展等功能。它广泛用于简单的微服务和小型应用的开发,尤其适用于需要灵活定制的项目。如果一个服务的响应变得非常慢或失败,熔断器会切断对该服务的请求,防止故障扩展到其他服务。

switch616的博客 2837

多机器人协同:水下机器人集群的分布式控制与ROS仿真实践

本文探讨了多自主水下机器人(AUV)集群的分布式控制方法,重点分析了欠驱动6自由度AUV模型的反馈线性化技术。通过ROS/Gazebo仿真平台,详细介绍了系统架构设计、通信延迟补偿策略及环境扰动应对方案,为水下协同作业提供实用参考。

jupi8的博客 686

168、运动控制中的标定:编码器零点标定

文章摘要 运动控制系统中的编码器零点标定是确保精确控制的关键基础步骤。文章通过实际案例说明,即使0.3度的零点偏移也会导致电机异常抖动。详细介绍了三种标定方法:反电动势法(需示波器)、电流注入法(适合量产)和霍尔传感器法(粗标定),并指出常见陷阱如忽略极对数、Z脉冲重复性问题和温度漂移。提供了基于STM32的嵌入式实现代码片段,强调标定后的静态、动态和负载验证的重要性。作者建议量产产品设置自动标定工位,研发样机采用更精确的方法,并强调标定数据应与电机序列号绑定。

m0_50546716的博客 135

使用Python构建微服务

什么是基于微服务的架构?它是一种架构风格,将复杂的软件系统构建为一组松散耦合的服务,并通过预定义的标准(API) 相互通信。这种架构风格具有敏捷性、可扩展性以及适应不断变化的业务需求的能力等优点。

尼古拉斯的AI笔记 2248

基于STM32XX的LCD液晶显示屏(HS19264G06A、驱动芯片:ST7525)驱动C程序设计

define USE_HW_SPI 1 // 1:使用硬件SPI, 0:使用软件模拟SPI。

myron6688的博客 234

使用Python进行微服务架构的设计与实现

在当今软件开发领域中,微服务架构已经成为了一种流行的设计范式。它通过将应用程序拆分为一系列小型、自治的服务,每个服务都围绕着特定的业务功能进行构建,从而实现了更高的灵活性、可扩展性和可维护性。Python作为一种简单易用且功能强大的编程语言,能够很好地支持微服务架构的设计与实现。本文将介绍如何使用Python语言来设计和实现微服务架构,并通过案例代码进行说明。

一键难忘的博客 3849

【YOLOv8全方位学习手册】第四章 数据增强:从扩充数据到塑造模型的认知边界

"""使用 Albumentations 做自定义增强,兼容 YOLO 格式"""])# 转成 numpy# boxes 必须是 [[x_min,y_min,x_max,y_max], ...]# 在数据加载时调用你可以把集成到 PyTorch 的 Dataset 类里,或使用 Ultralytics 自带的DataLoader。

VectorShift的博客 211

游戏客户端开发工程师笔试题

1、已知有一个关键字序列:(27,23,34,14,1,55, 20,19,85,83,10,68)散列存储在一个哈希表中,若散列函数为H(key)=key%7,并采用链地址法来解决冲突,则在等概率情况下查找成功的平均查找长度为(4、出现死锁时,除了可以采用资源剥夺的方法解决死锁问题外,还可以使用的方法是()是被限定只能在表的一端进行插入运算,在另一端进行删除运算的线性表.5、大端模式,是指数据的高字节保存在内存的(3、在二叉查找树中, 最好情况下复杂度为。)地址中,而数据的低字节保存在内存的(

博客 1870

Java最全深入微服务架构,探索最佳设计,实现微服务架构最大优势,程序员如何应对中年危机

面试题文档来啦,内容很多,485页!由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

2301_76348344的博客 649

YOLOv8 改进:使用 MobileNetV3 轻量化架构改进特征提取网络

通过使用 MobileNetV3 作为 YOLOv8 的特征提取器,能够显著降低模型复杂度和运行时资源消耗,同时在一定程度上保持检测精度。这种方法特别适合需要高效计算的边缘设备和嵌入式系统。

走向CTO的路上... 1275

一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

微服务架构下,数据被分隔到 N 个独立的微服务中,如何应对市场、业务对大量数据的查询、分析就变的非常急迫,利用 Spring Boot 和 MongoDB 可以轻松的解决这个问题,通过技术手段将分裂到 N 个微服务的数据同步到 MongoDB 集群中,在同步的过程中进行数据清洗,来满足公司的各项业务需求。随着微服务架构的落地,人们发现微服务架构虽然改进了开发模式,但同时也引入了一些问题,在这所有的问题中,最重要的也是马上要面临的一个问题就是数据的问题。2、如何对数据进一步的分析挖掘?

2301_79727522的博客 1227

Android SurfaceFlinger——概述(一)

对于系统渲染流程的理解是指导 SurfaceFlinger 设计的核心思想,从 Android 4.1 一直到 Android 9.0 都没有太大的变化。只要抓住这五个核心思想,我们阅读 SurfaceFlinger 的难度就会下降不少。下面看一下 SurfaceFlinger 的体系和 Skia 以及 View的绘制流程的关系。framework 面向开发者所有的 View 是便于开发的控件,里面仅仅只是提供了当前 View 各种属性以及功能。

小旭的专栏 2584

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo )首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发者屏蔽了底层的远程通信细节。同时 Dubbo 也是一款服务治理框架,它为分布式部署的微服务提供了服务发现、流量调度等服务治理解决方案。 在这篇文章中,我们将以以上基础能力为背景,尝试突破 Dubbo 体系自身,探索如何利用 Dubbo 对...

阿里云云栖号 1265

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring Boot、微服务架构和大数据治理三者之间的故事

微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物。互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户的增加,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。   如果还按照以前传统开发模式,开发一个大型而全的系统已...

大数据工程师 249

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

.NET 微服务设计模式(一)

嗨,大家好!我们在这里是为了探索在设计和发展模式中我们可以利用的,当我们使用 .NET 构建微服务应用程序时。微服务架构涉及将可能复杂的应用程序分解成更小、更易于维护的服务,这些服务必须协同工作。本质上,我们取一个大的应用程序并将其分解成更小的部分。这种方法在应用程序的设计中引入了一系列新的复杂性,因为这些现在分离的服务需要协作以向最终用户提供统一体验。因此,我们需要了解这种架构方法的缺点,并制定策略来解决各种问题。我们将专注于使用 .NET,因为微软在发布和支持顶级工具和支持最新技术方面有着良好的记录,这

龙哥盟 847

一文透析 Spring Boot、微服务架构和大数据治理三者之间的故事

微服务架构微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物。互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户的增加,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。如果还按照以前传统开发模式...

weixin_34416754的博客 102

Dubbo 如何成为连接异构微服务体系的最佳服务开发框架?

作者 | 刘军责编 | 屠敏从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo)首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发...

优快云资讯 3340
上一篇: 2020年了,还不知道NoSQL数据库?一文带你深入解析
下一篇: 程序员的福音——Java核心技术大集合,带你深入探索程序开发世界
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值