2024年2月8日发(作者:)
基于SpringCloud 微服务系统设计方案
微服务系统设计方案
1.微服务本质
微服务架构实际上是一种微服务架构风格,它是分布式架构的一种,由多个小服务组成应用。每个服务运行在独立的进程中,并采用轻量级交互,通常是一个HTTP的资源API。这些服务具备独立业务能力,并且可以通过自动化部署方式独立部署。这种风格使得集中管理最小化,从而可以使用多种不同的编程语言和数据存储技术。对于微服务架构系统,由于其服务粒度小,模块化清晰,因此首先要做的是对系统整体进行功能、服务规划,优先考虑如何在交付过程中,从工程实践出发,组织好代码结构、配置、测试、部署、运维、监控的整个过程,从而有效体现微服务的独立性与可部署性。本文将从微服务系统的设计阶段、开发阶段、测试阶段、部署阶段进行综合阐述。理解微服务架构和理念是核心。
2.系统环境
名称:JDK、Spring Boot、Spring Framework
版本:1.8
说明:Ribbon、XXX、RabbitMQ
3.微服务架构的挑战
微服务架构面临的挑战主要包括可靠性、运维要求高、分布式复杂性、部署依赖性强、性能(服务间通讯成本高)和数据一致性。由于采用远程调用的方式,任何一个节点、网络出现问题,都将使得服务调用失败,随着微服务数量的增多,潜在故障点也将增多。因此,必须有充分的保障机制,否则单点故障会大量增加。此外,微服务架构还需要系统监控、高可用性和自动化技术,以及考虑网络延迟、系统容错、分布式事务等分布式复杂性问题。服务依赖、多版本问题也是部署依赖性强的挑战。无状态性、进程间调用、跨网络调用等问题也会导致性能问题。最后,分布式事务管理需要跨越多个节点来保证数据的瞬时一致性,因此比起传统的单体架构的事务,成本要高得多。
4.架构设计
4.1.思维设计
微服务架构设计的根本目的是实现价值交付,微服务架构只有遵循DevOps理念方可进行的更顺畅,思维方式的转变是最重要的。
为了实现微服务技术架构,我们需要进行技术上的改进和相关配套服务的实现。为此,我们采用了分阶段实施和试点产品优先实施的策略。具体来说,我们的改进和实现包括以下几个方面。
首先是技术上的改进。我们采用了前后端分离的方式,通过Http/Https协议调用微服务的API网关,再通过路由服务调用相应的微服务。不同微服务之间通过REST方式互相调用,通过消息中间件实现消息交互机制。
其次是配套服务与功能实现。我们需要进行相应的自动化服务实现,包括自动化构建、自动化安装部署、自动化测试、自动化平台发布(Docker实现)。同时,我们还需要配套相
应的监控与管理服务、日志管理服务等,以及协作服务,实现开发与运维的一体化。
针对微服务架构设计,我们把整个系统根据业务拆分成若干个子系统或微服务,每个子系统可以部署多个应用,多个应用之间使用负载均衡。我们需要一个服务注册中心Eureka,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。XXX可部署多个,进行高可用保证。
所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置ZUUL网关来判断一个URL请求由哪个服务处理。请求转发到服务上的时候使用负载均衡Ribbon。服务之间采用feign进行调用,使用断路器hystrix,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。
我们还需要一个监控功能,监控每个服务调用花费的时间等。使用SpringCloud Config进行统一的配置管理,需要考虑与公司的配置管理平台如何配合使用。同时,我们可以使用
Hystrix Dashboard监控面板来监控各个服务上的服务调用所消耗的时间等,以及XXX监控聚合,将所有的服务实例的监控信息聚合到一个地方统一查看。
综上所述,我们的微服务技术架构设计可靠性得到了充分保证。
在设计阶段,需要考虑主备和集群部署,以避免单点故障。同时,需要确认如何与公司的CAS和配置管理平台结合使用,以确保功能规划的顺利实施。
在总体设计阶段,需要将产品功能拆分为若干个微服务,并将这些微服务部署在多个服务器节点上,以实现负载均衡。同时,需要设计API接口和为不同的服务分类,以配置不同的资源。
在服务拆分原则方面,需要遵循粒度微小、责任单一、隔离性原则和业务无关优先原则。此外,需要进行服务名的统一规划,以避免服务调用混乱。
在开发策略方面,需要进行物理隔离,并在SVN上创建独立的分支,以确保不同微服务的代码提交不受相互影响。但是,这也会增加维护工作量。
是采用微服务架构下的服务发现和负载均衡工具,如Consul、Zookeeper等。这些工具可以自动发现微服务的实例,并将请求路由到可用的实例上,从而实现负载均衡的效果。同时,这些工具还提供了健康检查、故障转移等功能,可以保证微服务的高可用性。
我们建议采用Consul作为服务发现和负载均衡工具,因为它具有以下优点:
1、支持多数据中心,可以实现全球范围内的服务发现和负载均衡。
2、提供健康检查功能,可以自动将不健康的实例从负载均衡池中剔除。
3、提供故障转移功能,可以自动将请求路由到备用实例上。
4、支持DNS接口,可以方便地与现有的负载均衡工具集成。
总之,采用微服务架构下的服务发现和负载均衡工具,可以提高系统的可靠性、可用性和扩展性,是微服务架构中必不可少的一环。
软负载均衡是将负载均衡功能以库的方式集成到服务消费方的进程内,这种方案也被称为客户端负载均衡。在Spring
Cloud中,Ribbon子项目与Eureka的服务注册功能配合使用,实现了REST客户端的负载均衡。
使用Ribbon进行负载均衡的工作原理可以概括为以下四个步骤:
首先根据所在Zone优先选择一个负载较少的Eureka Server;
2.定期从Eureka Server更新并过滤服务实例列表;
3.根据指定的负载均衡策略,从可用的服务器列表中选择一个服务实例的地址;
4.通过RestClient进行服务调用。
XXX提供了多种负载均衡策略,包括轮询策略、随机选择、最大可用策略、带有加权的轮询策略、可用过滤策略和区域感知策略。
为了优化性能,可以采取网络优化和配置优化两种策略。另外,在微服务的架构中,各微服务可以独立建设,使用不同的技术、语言、框架等,以便更快速地响应特定客户需求,解决单体应用架构更新技术、更新框架时面临的困难或阻碍。
在微服务架构中,各个服务之间可以使用不同的技术和组件,但这也带来了管理、维护和技术共享的困难。因此,需要进行统筹考虑,将所有组件放置在产品仓库中,并在需要共享组件时从仓库中获取。对于特殊服务需要使用特殊的组件或框架的情况,需要提出申请并进行统筹规划后进行决策。
在开发阶段,服务的调用可以通过API网关进行,不允许直接调用微服务提供者。建议使用FeignClient方式进行服务调用。对于异步调用,可以选择rabbitMq、kafka或Spring
Cloud Stream等方案。在服务间调用时,需要进行权限验证,可以通过在登录成功后设置cookie或header token等方式进行验证。
Zuul网关会默认将一些header传递到服务端,例如Cookie、n。这样,客户端请求的相关headers就可以传递到服
务端,服务端设置的cookie也可以传到客户端。如果要禁止某些header透传到服务端,配置中禁用。
有时候,某个服务需要调用另一个服务。这时候,请求的header里面不会有任何验证信息。为了保证服务间调用的接口,可以通过防火墙等设置,只允许某几个地址访问,或者通过某种方式设置header。如果想获得请求的真实IP,可以从headerX-Forwarded-Host中获取。如果想禁用这个header,也可以在Zuul网关中设置。
如果使用RestTemplate的方式调用,ns。也可以通过拦截器的方式设置,它对RestTemplate方式和FeignClient的方式都可以起作用。
服务编排的主要作用是减少项目中的相互依赖。例如,现在有项目a调用项目b,项目b调用项目c,一直到h,是一个调用链。在项目上线时,需要先更新最底层的h再更新g,以此类推,这样才能保证项目的正常运行。
在复杂的业务中,存在着大量的调用链,如果要记住每一个调用链对开发和运维人员来说是一种灾难。为了减少项目的
相互依赖,可以采用服务编排的方式,即一个核心的业务处理项目,负责与各个微服务打交道。比如之前是a调用b,b调用c,c调用d,现在可以统一在一个核心项目W中来处理,W服务使用a的时候去调用b,使用b的时候W去调用c。这可以理解为面向对象的设计,减少方法之间的一层层嵌套调用,而采取一个方法进行业务流程的串联。
在服务之间进行调用时,由于各种原因会导致远程服务不可用或压力过载等异常导致的故障蔓延,此时需要有一种机制进行保护处理。Spring Cloud通过Netflix的Hystrix组件实现熔断和降级处理解决此问题。断路器(Cricuit Breaker)是一种能够在远程服务不可用时自动熔断(打开开关),并在远程服务恢复时自动恢复(闭合开关)的设施,Spring Cloud通过Netflix的Hystrix组件提供断路器、资源隔离与自我修复功能。
不同微服务部署在不同节点上,登录每个节点查看日志是比较麻烦的,同时对于需要关联多个微服务日志联合查看分析的情况将更加麻烦。伴随节点数量的增加,如果没有合适的管理机制与工具,定位问题、发现问题的复杂性将越来越大,将成指数级增长,因此需要进行统一日志管理。具体做法包括建
立统一的日志管理规范,开发并使用统一的日志组件,为所有微服务提供统一的日志服务,由log4j或Blitz4j封装,在每个服务节点上部署日志采集Agent组件,由此Agent进行日志的采集与转发,以及建立统一的日志中心,所有日志写入日志中心。上述日志的实现由公司的“日志管理平台”进行实现,采用的是ELK集合框架。
在监控管理方面,可以使用Hystrix来监控和断路器,只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。同时,还可以使用Hystrix Dashboard,监控面板,它提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。
XXX是一个监控聚合工具,它可以将所有服务实例的监控信息聚合到一个地方,使得我们可以在一个页面上统一查看所有服务实例的监控信息,而不需要逐个打开每个实例的监控页面。使用Hystrix组件进行服务监控,s进行服务器等资源监控。
为实现各微服务的统一参数配置以及版本管理,我们可以采用公司的配置管理平台或者SpringCloud Config配置中心。
Spring Cloud Config是一个配置中心,它将应用原本放在本地文件的配置抽取出来放在中心服务器,从而能够提供更好的管理、发布能力。Spring Cloud Config分为服务端和客户端,服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但是客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过POST方法触发各自的/refresh。
为解决配置信息能及时通知到各服务,同时减少每个微服务处理配置信息更新的复杂度,我们可以通过消息总线来解决此问题。具体方案如下:Git仓库、Config Server、以及微服务“Service A”、“ServiceB”的实例中都引入了Spring Cloud Bus,所以他们都连接到了RabbitMQ的消息总线上。从Git仓库中配置的修改到发起/bus/refresh的POST请求这一步可以通过Git仓库的Web Hook来自动触发。/bus/refresh请求不再发送到具体服务实例上,而是发送给Config Server,n参数来指定需要更新配置的服务或实例。由于所有连接到消息总线上的应用都会接受到更新请求,所以在WebHook中就不需要维护所有节点内容来进行更新,从而解决了通过Web Hook来逐个进行刷新的问题。
n,n的共享组件。
为制定REST资源响应结构规范和解析方法,我们需要考虑接口的可读性、可维护性、可扩展性和易用性等方面。
为实现API调用链追踪,我们可以使用Spring XXX和Zipkin。Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以为服务之间的调用关系生成唯一的ID,同时记录调用链路信息。Zipkin是一个分布式系统跟踪解决方案,它可以收集、存储和查询跨越多个服务的调用链路信息。
In a microservices architecture。services are divided based
on business XXX。multiple services may need to collaborate。and if any service XXX。it can lead to interface call failures。As
businesses expand。service XXX.
XXX and is compatible with Zipkin。You can XXX.
Unit testing is essential to ensure product quality and
development and testing efficiency。XXX where system testing is
complex。Mock testing can be used to simulate testing。XXX.
For single architecture systems。debugging XXX。in a
microservices architecture。XXX is required for interface calls。meaning the called service must be started before it can be called。As the number of microservices increases。debugging and XXX.
Automated testing。including unit testing and business
testing。is XXX.
Dependency testing。also known as interface or contract
testing。is a XXX。A consumer-driven contract testing approach
can be used to isolate testing een consumers and providers。XXX.
XXX。flexibility。and faster time-to-market。However。with the benefits come challenges。and testing microservices is
one of them。In this article。we will discuss the XXX.
One of the XXX is the cost of testing the interfaces。To
address this issue。testing tools such as Pact。Janus。and Pacto
can be utilized to ce the testing cost.
System XXX.
Performance testing is another XXX testing。With the shift
from local API calls to REST remote calls。the performance of the
system is affected。Factors such as ork speed。server
performance。and data size and frequency can impact the system's
performance。XXX.
XXX n should be done using a XXX for testing。development。and n environments can be created。and test
coverage data can be collected using tools such as Jenkins and
Sonar.
XXX Docker images for each microservice。These images
can then be XXX Docker containers.
During the n phase。remote upgrades XXX management
center to ce the XXX n center can be used for n management using
Spring Cloud Config or a n management platform。A centralized
log center can also be used for logging.
本文发布于:2024-02-08 00:17:43,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170732266365951.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |