(完整word版)基于SpringCloud微服务系统设计方案

合集下载

基于SpringCloud的微服务系统设计

基于SpringCloud的微服务系统设计

基于SpringCloud的微服务系统设计随着互联网技术的发展,微服务架构已经成为了现代企业开发的必选方案。

微服务架构通过拆分应用为多个小型服务,使得每个服务都能够独立部署、可扩展和可替换,从而大幅提升了应用的可靠性和弹性。

而SpringCloud作为目前最为流行的微服务框架,不仅提供了一系列成熟的解决方案,还能够轻松地整合其他开源组件,构建一个高可用的、分布式的微服务系统。

本文将以一个基于SpringCloud的微服务系统设计为例,从整体架构、服务注册与发现、负载均衡、断路器、API网关等方面详细介绍如何基于SpringCloud构建一个高效可靠的微服务系统。

1. 整体架构设计在基于SpringCloud构建微服务系统时,我们可以采用统一的高可用架构,如下图所示:[图一]其中Eureka Server作为服务注册中心,Zuul作为API网关,Spring Cloud Config作为配置中心,服务提供方需要注册到Eureka Server上进行服务治理,Zuul则负责路由请求、负载均衡、安全等功能,Spring Cloud Config则负责管理各个服务的配置信息和版本控制。

2. 服务注册与发现在分布式系统中,服务必须进行注册和发现,以便其他服务可以找到它们。

SpringCloud提供了Eureka作为服务注册和发现组件,通过Eureka可以实现服务的自动注册和发现,具有一定的容错能力。

以一个简单的示例来说明Eureka的服务注册与发现的流程:- 服务提供方通过Eureka客户端向Eureka服务器注册服务。

- Eureka服务器更新注册表并将该服务的信息存储在内存中。

- 服务消费方从Eureka服务器上获取需要的服务列表,通过负载均衡算法选择一台服务提供方进行请求。

3. 负载均衡负载均衡是分布式系统中重要的概念,可以有效地提高系统的可用性、稳定性和性能。

SpringCloud通过集成Ribbon实现了负载均衡,它可以根据不同的算法(如随机、轮询、加权等)来选择不同的服务提供方,从而达到负载均衡的目的。

【SpringCloud微服务实战】搭建企业级应用开发框架(一):架构说明

【SpringCloud微服务实战】搭建企业级应用开发框架(一):架构说明

【SpringCloud微服务实战】搭建企业级应⽤开发框架(⼀):架构说明SpringCloud分布式应⽤微服务系统架构图:SpringCloud分布式应⽤微服务系统组件列表:微服务框架组件:Spring Boot2 + SpringCloud Hoxton.SR8 + SpringCloud AlibabaSpring Boot Admin: 管理和监控SpringBoot应⽤程序的微服务健康状态数据持久化组件:MySql + Druid + MyBatis + MyBatis-PlusMycat: 中间件实现数据库读写分离Seata: 分布式事务管理,跨服务的业务操作保持数据⼀致性⾼性能的key-value缓存数据库:Redis + RedissonClient + RedisTemplateAPI接⼝⽂档: Swagger2 + knife4j接⼝参数校验:spring-boot-starter-validationNacos:⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台Sentinel:把流量作为切⼊点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性OpenFeign: 微服务架构下服务之间的调⽤的解决⽅案 + Ribbon实现负载均衡/⾼可⽤重试机制Gateway: 微服务路由转发 + 聚合knife4j微服务⽂档 + 【Gateway+OAuth2+JWT微服务统⼀认证授权】Oauth2:SpringSecurity单点登录功能⽀持多终端认证授权 + RBAC权限框架验证码:集成滑动验证码【AJ-Captcha】 + 图⽚验证码【EasyCaptcha】多租户: 基于Mybatis-Plus【TenantLineInnerInterceptor】插件实现多租户功能数据权限: 基于Mybatis-Plus【DataPermissionHandler】分页插件实现可配置的数据权限功能对象存储服务( OSS):MinIO + 阿⾥云 + 七⽜云 + 腾讯云 + 百度云 + 华为云⼯作流:Flowable轻量级业务流程引擎XXL-JOB:分布式任务调度平台,作业调度系统Ant-design-vue + ElementUI (基础)优秀流⾏的前端开源框架整合uni-app: 可发布到iOS、Android、Web(响应式)、以及各种⼩程序(微信/⽀付宝/百度/头条/QQ/钉钉/淘宝)、快应⽤等多个平台 (本框架中主要⽤于H5、⼩程序) Flutter: 给开发者提供简单、⾼效的⽅式来构建和部署跨平台、⾼性能移动应⽤ (本框架中主要⽤于移动应⽤)EKL: Elasticsearch + Logstash + Kibana分布式⽇志监控平台代码⽣成器:基于Mybatis-Plus代码⽣成插件开发的,便捷可配置的代码⽣成器Keepalived + Nginx: ⾼可⽤ + ⾼性能的HTTP和反向代理web服务器DevOps : kubernetes + docker + jenkins 实现持续集成(CI)和持续交付(CD)数据报表:基于Ant-design-vue + Echarts实现的⾃定义数据可视化报表GitEgg-Cloud是⼀款基于SpringCloud整合搭建的企业级微服务应⽤开发框架,开源项⽬地址:Gitee:GitHub:欢迎感兴趣的⼩伙伴Star⽀持⼀下。

spring cloud微服务系统架构

spring cloud微服务系统架构
携带code获取token
curl -i –d "grant_type=authorization_code&code=p1ancF&client_id=demoApp&client_secret=demoAppSecret“ -X POST http://localhost:8080/oauth/token
将不可用)
服务雪崩效应应对措施
• 流量控制(网关限流、关闭重试) • 改进缓存模式(同步改为异步刷新) • 服务自动扩容 • 服务调用者降级服务(资源隔离、不可用服务调用快速失败) • 同步等待造成的资源耗尽(线程资源耗尽,服务调用者提供的服务也
将不可用)
• 资源隔离
线程 开销
异步 并发
• 熔断器 • 命令模式
八、Spring cloud技术体系
SpringBoot
传统spring框架
1、配置web.xml,加载spring和 spring MVC
2、配置数据库连接,配置 spring事务
3、配置加载配置文件的读取, 开启注解
4、部署tomcat
Spring boot
1、大量自劢化的配置,简化了 原有spring的配置 2、类似模块化的starter poms 的定义,简化maven配置 3、根据不同环境加载配置文件
六、RPC VS REST
1、RPC--远程过程调用,目前框架有thrift、gRPC、RMI、 Hessian、Protobuf 2、Spring Cloud(REST API)
两者比较: 1. 从使用方面看,Http接口只关注服务提供方,对于客户端怎么调用,
调用方式怎样并不关心,而RPC服务则需要客户端接口与服务端保持一致 2.从性能角度看,由于Http携带的信息过多,导致传输速度比RPC低

基于SpringCloud和Docker的分布式微服务架构设计

基于SpringCloud和Docker的分布式微服务架构设计

精品文档供您编辑修改使用专业品质权威编制人:______________审核人:______________审批人:______________编制单位:____________编制时间:____________序言下载提示:该文档是本团队精心编制而成,希望大家下载或复制使用后,能够解决实际问题。

文档全文可编辑,以便您下载后可定制修改,请根据实际需要进行调整和使用,谢谢!同时,本团队为大家提供各种类型的经典资料,如办公资料、职场资料、生活资料、学习资料、课堂资料、阅读资料、知识资料、党建资料、教育资料、其他资料等等,想学习、参考、使用不同格式和写法的资料,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!And, this store provides various types of classic materials for everyone, such as office materials, workplace materials, lifestylematerials, learning materials, classroom materials, reading materials, knowledge materials, party building materials, educational materials, other materials, etc. If you want to learn about different data formats and writing methods, please pay attention!基于SpringCloud和Docker的分布式微服务架构设计一、引言随着互联网的不息进步和应用的普及,越来越多的企业开始关注和接受分布式微服务架构。

基于SpringCloud和Docker的分布式微服务架构设计

基于SpringCloud和Docker的分布式微服务架构设计

基于SpringCloud和Docker的分布式微服务架构设计基于SpringCloud和Docker的分布式微服务架构设计随着云计算和容器技术的快速发展,分布式微服务架构成为了构建大规模应用系统的首选。

而SpringCloud和Docker作为目前最为流行的微服务框架和容器化平台,它们的结合将为分布式微服务架构的设计和部署带来巨大的便利和灵活性。

本文将针对基于SpringCloud和Docker的分布式微服务架构进行详细探讨和设计。

一、架构设计概述我们所设计的基于SpringCloud和Docker的分布式微服务架构,主要包括三个关键组件,即服务注册与发现中心、配置中心和网关服务。

详细的架构设计如下图所示:[插入架构图]1. 服务注册与发现中心:通过使用SpringCloud中的Eureka或Consul等组件,实现服务注册与发现的功能。

每个微服务在启动时会向注册中心注册自己的地址和端口信息,同时从注册中心获取其他微服务的地址信息,以实现服务之间的通信和调用。

2. 配置中心:利用SpringCloud Config等组件,实现统一的配置管理和更新。

配置中心将所有微服务的配置文件集中管理,每个微服务在启动时会从配置中心获取自己的配置信息,并可以通过配置中心动态修改、更新配置。

3. 网关服务:使用SpringCloud Gateway或Zuul等组件,作为所有外部请求的入口,对请求进行路由和过滤。

网关服务可以实现微服务之间的相互隔离、负载均衡、安全控制等功能,同时也可以对外提供统一的API接口。

除了以上三个核心组件外,每个微服务还可以根据具体需求进行拆分和设计。

每个微服务可以独立管理和部署,同时可以通过Docker容器进行封装和管理,以实现更好的弹性伸缩和高可用性。

二、微服务拆分和设计在设计基于SpringCloud和Docker的分布式微服务架构时,需要对系统进行合理的拆分和设计。

下面以一个电子商务系统为例,介绍如何拆分和设计微服务。

SpringCloud微服务架构的设计和实现要点

SpringCloud微服务架构的设计和实现要点

SpringCloud微服务架构的设计和实现要点在当前互联网产品的快速发展潮流中,传统的单体应用已经逐渐无法满足业务需求,微服务架构成为了一种新的选择。

而SpringCloud作为微服务架构的开源框架,已经成为了市面上较为主流的解决方案之一。

本文将从设计和实现两个方面来探讨SpringCloud微服务架构的要点。

一、设计要点1、服务拆分在微服务架构中,最重要的概念就是服务拆分。

将原来的单体应用按照业务模块划分成若干个服务,每个服务完成自己的部分功能,通过一定的方式来实现服务的调用和协作。

服务拆分不仅需要考虑业务的需求,还需要考虑服务之间的依赖关系。

拆分过程中需要抓住业务模型和数据交互流程的关键点来制定服务边界,避免服务过细、服务过重,以及服务之间的过度依赖。

2、服务注册与发现在微服务架构中,每个服务都是独立的进程,服务与服务之间需要进行通信,如果每个服务单独配置服务IP和端口,将会是一个灾难性的问题。

因此SpringCloud提供的注册中心来管理各个服务的信息,便于服务互相发现和调用。

使用注册中心能够有效地隔离服务端口和物理地址,让服务更加灵活和易于管理。

3、分布式配置在微服务架构中,服务往往是分布式部署的,如何进行统一的配置管理成为了一个问题。

SpringCloud的分布式配置模块提供了一种解决方案,将配置信息集中在一个地方,然后在运行期间向每个服务节点分发相应的配置内容。

这种方式能够保证服务配置的一致性、灵活性和可维护性。

4、服务网关在微服务架构中,很多服务间的调用都是基于Http的Restful 接口,因此服务网关的作用就在于验证和转发服务请求。

服务网关能够统一管理域名和端口等一些公共信息,隔离客户端与服务端的逻辑,同时还能够提供安全验证和限流功能,帮助提高服务的可靠性和安全性。

二、实现要点1、SpringBoot作为基础SpringBoot是Spring家族的一个子项目,它通过自动化配置来简化了程序的开发过程,提供了标准化的解决方案。

(完整word版)基于SpringCloud微服务系统设计方案

(完整word版)基于SpringCloud微服务系统设计方案

微服务系统设计方案1.微服务本质微服务架构从本质上说其实就是分布式架构,与其说是一种新架构,不如说是一种微服务架构风格。

简单来说,微服务架构风格是要开发一种由多个小服务组成的应用。

每个服务运行于独立的进程,并且采用轻量级交互。

多数情况下是一个HTTP的资源API。

这些服务具备独立业务能力并可以通过自动化部署方式独立部署。

这种风格使最小化集中管理,从而可以使用多种不同的编程语言和数据存储技术。

对于微服务架构系统,由于其服务粒度小,模块化清晰,因此首先要做的是对系统整体进行功能、服务规划,优先考虑如何在交付过程中,从工程实践出发,组织好代码结构、配置、测试、部署、运维、监控的整个过程,从而有效体现微服务的独立性与可部署性。

本文将从微服务系统的设计阶段、开发阶段、测试阶段、部署阶段进行综合阐述。

理解微服务架构和理念是核心。

2.系统环境3.微服务架构的挑战➢可靠性:由于采用远程调用的方式,任何一个节点、网络出现问题,都将使得服务调用失败,随着微服务数量的增多,潜在故障点也将增多。

也就是没有充分的保障机制,则单点故障会大量增加。

➢运维要求高:系统监控、高可用性、自动化技术➢分布式复杂性:网络延迟、系统容错、分布式事务➢部署依赖性强:服务依赖、多版本问题➢性能(服务间通讯成本高):无状态性、进程间调用、跨网络调用➢数据一致性:分布式事务管理需要跨越多个节点来保证数据的瞬时一致性,因此比起传统的单体架构的事务,成本要高得多。

另外,在分布式系统中,通常会考虑通过数据的最终一致性来解决数据瞬时一致带来的系统不可用。

➢重复开发:微服务理念崇尚每个微服务作为一个产品看待,有自己的团队开发,甚至可以有自己完全不同的技术、框架,那么与其他微服务团队的技术共享就产生了矛盾,重复开发的工作即产生了。

没有最好的,只有最适合自己的。

4.架构设计4.1.思维设计微服务架构设计的根本目的是实现价值交付,微服务架构只有遵循DevOps理念方可进行的更顺畅,思维方式的转变是最重要的。

基于SpringCloud微服务系统设计方案

基于SpringCloud微服务系统设计方案

基于SpringCloud微服务系统设计方案Spring Cloud是基于Spring Boot的微服务架构,它提供了一套全面的解决方案,用于构建分布式系统的各个组件。

本文将介绍基于Spring Cloud的微服务系统设计方案。

1.服务拆分与注册中心:将系统按照业务功能进行拆分,每个拆分后的业务模块作为一个独立的微服务。

通过Spring Cloud提供的注册中心(如Eureka、Consul等),将每个微服务注册到注册中心,实现服务的动态发现与调用。

2.服务网关与路由:使用Spring Cloud Gateway作为服务网关,实现对外的统一访问入口。

服务网关可以处理认证、授权、限流、负载均衡等功能,同时可以根据请求的URL路由到相应的微服务。

3.服务间通信:微服务之间通过HTTP或者RPC进行通信。

可以使用Spring Cloud提供的Feign或者RestTemplate进行服务间的调用,也可以使用Spring Cloud的Dubbo集成组件进行RPC调用。

4.熔断与限流:使用Spring Cloud提供的Hystrix组件实现熔断与限流。

熔断器可以监控服务的状态,并在服务出现故障时进行自动熔断,避免故障扩散。

限流策略可以控制每个微服务的访问频率,防止一些微服务被过度请求。

5.配置中心:使用Spring Cloud Config作为配置中心,将各个微服务的配置集中管理。

通过配置中心,可以实现配置的版本管理、配置的动态刷新等功能。

6.服务监控与链路追踪:使用Spring Cloud提供的Actuator组件对微服务进行监控。

通过Actuator可以获取微服务的运行状态、性能指标、日志等信息。

同时,使用Zipkin等链路追踪工具可以对微服务间的调用链进行跟踪和分析,帮助定位问题。

7.安全与认证:使用Spring Security进行微服务的安全与认证。

可以实现用户登录、权限控制等功能,保证微服务系统的安全性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微服务系统设计方案1.微服务本质微服务架构从本质上说其实就是分布式架构,与其说是一种新架构,不如说是一种微服务架构风格。

简单来说,微服务架构风格是要开发一种由多个小服务组成的应用。

每个服务运行于独立的进程,并且采用轻量级交互。

多数情况下是一个HTTP的资源API。

这些服务具备独立业务能力并可以通过自动化部署方式独立部署。

这种风格使最小化集中管理,从而可以使用多种不同的编程语言和数据存储技术。

对于微服务架构系统,由于其服务粒度小,模块化清晰,因此首先要做的是对系统整体进行功能、服务规划,优先考虑如何在交付过程中,从工程实践出发,组织好代码结构、配置、测试、部署、运维、监控的整个过程,从而有效体现微服务的独立性与可部署性。

本文将从微服务系统的设计阶段、开发阶段、测试阶段、部署阶段进行综合阐述。

理解微服务架构和理念是核心。

2.系统环境3.微服务架构的挑战➢可靠性:由于采用远程调用的方式,任何一个节点、网络出现问题,都将使得服务调用失败,随着微服务数量的增多,潜在故障点也将增多。

也就是没有充分的保障机制,则单点故障会大量增加。

➢运维要求高:系统监控、高可用性、自动化技术➢分布式复杂性:网络延迟、系统容错、分布式事务➢部署依赖性强:服务依赖、多版本问题➢性能(服务间通讯成本高):无状态性、进程间调用、跨网络调用➢数据一致性:分布式事务管理需要跨越多个节点来保证数据的瞬时一致性,因此比起传统的单体架构的事务,成本要高得多。

另外,在分布式系统中,通常会考虑通过数据的最终一致性来解决数据瞬时一致带来的系统不可用。

➢重复开发:微服务理念崇尚每个微服务作为一个产品看待,有自己的团队开发,甚至可以有自己完全不同的技术、框架,那么与其他微服务团队的技术共享就产生了矛盾,重复开发的工作即产生了。

没有最好的,只有最适合自己的。

4.架构设计4.1.思维设计微服务架构设计的根本目的是实现价值交付,微服务架构只有遵循DevOps理念方可进行的更顺畅,思维方式的转变是最重要的。

实现微服务技术架构,现有产品需要进行技术上的改进以及相关配套服务的实现,采用分阶段实施、以及试点产品优先实施的策略,主要包括如下:一、技术上的改进:1、前后端分离,web前端通过Http/Https协议调用微服务的API网关,由API网关再经过路由服务调用相应的微服务2、不同微服务之间通过REST方式互相调用3、微服务之间通过消息中间件实现消息交互机制二、配套服务与功能实现:1、需要进行相应的自动化服务实现,包括自动化构建、自动化安装部署、自动化测试、自动化平台发布(Docker实现)2、管理服务,对于微服务架构,必须配套相应的监控与管理服务、日志管理服务等3、协作服务,运用DevOps思想提升开发、测试、运维的高效沟通与协作,实现开发与运维的一体化4.2.微服务架构设计1、我们把整个系统根据业务拆分成若干个子系统或微服务。

2、每个子系统可以部署多个应用,多个应用之间使用负载均衡。

3、需要一个服务注册中心Eureka,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。

Eureka可部署多个,进行高可用保证。

4、所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置ZUUL网关来判断一个URL请求由哪个服务处理。

请求转发到服务上的时候使用负载均衡Ribbon。

5、服务之间采用feign进行调用。

6、使用断路器hystrix,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。

7、还需要一个监控功能,监控每个服务调用花费的时间等。

8、使用SpringCloud Config进行统一的配置管理,需要考虑与公司的配置管理平台如何配合使用。

9、Hystrix,监控和断路器。

我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。

10、Hystrix Dashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。

11、Turbine,监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。

而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。

这样就不需要挨个打开一个个的页面一个个查看。

架构的可靠性保证:在关键节点做主备、集群部署,防止单点故障。

待后续确认问题:1、Access Control:Zuul网关提供了相关控制功能,与我司CAS如何结合使用2、Config Server:Spring Cloud提供了远程配置中心,与我司的配置管理平台如何结合使用5.设计阶段5.1.总体设计1、功能规划:对产品功能进行拆分,拆分为若干个微服务;一个功能可以创建多个微服务并部署在多个服务器节点上,以便进行负载均衡。

2、设计原子服务层,梳理和抽取核心应用、公共应用,作为独立的服务下沉到核心和公共能力层,逐渐形成稳定的服务中心,使应用能更快速的响应多变的客户需求。

3、为每个服务设计API接口(REST方式)4、为不同的服务进行分类,不同类型的服务需要的资源不同,可以配置不同的资源,包括CPU、内存、存储等。

5.2.服务拆分原则1、粒度微小:根据业务功能划分服务粒度,总的原则是服务内部高内聚,服务之间低耦合。

2、责任单一:每个服务只做一件事,即单一职责原则。

3、隔离性原则:每个服务相互隔离,且不互相影响4、业务无关优先原则:基础服务,是一些基础组件,与具体的业务无关。

比如:短信服务、邮件服务。

这里的服务最容易划分出来做微服务,也是我们第一优先级分离出来的服务。

5.3.服务规划为实现负载均衡,允许相同的服务在多个节点注册相同的服务名,不同的端口。

如果没有前期的规划,不同的服务提供者可能会注册相同的服务名,导致消费者调用服务时产生调用混乱。

因此,需进行服务名的统一规划:1、规划期统一制定每个服务提供者的服务名或者模块标示。

2、服务名的命名规则:ModuleName_ServiceName,且所有字符小写,不同单词之间以下划线分隔。

如用户管理模块提供了获取用户信息的服务,则命名为:user_get_info。

3、新增服务名时,需要提出申请,审批通过后方可使用,为减少审批复杂度,可只审批ModuleName,即在模块内部可以自由增加服务名,不需要进行审批。

5.4.开发策略总体原则:不同的微服务需进行物理隔离。

1、SVN策略:SVN上创建独立的分支,不同微服务的代码提交不受相互影响;---由配置管理员统一控制。

问题:开发分支与集成分支,都将增加很多,维护工作量增加。

2、编译策略:代码编译时,各个微服务独立编译、打包,杜绝直接的依赖;3、工程构建:代码开发时,各微服务创建独立的工程,工程之间不能产生直接依赖4、持续集成:每个微服务独立执行持续集成。

5、版本集成:由统一的集成工具,实现自动化的版本集成,将所有微服务集成到统一的版本发布包中。

5.5.版本策略每个微服务可以独立制作版本,伴随着服务的增多,SVN分支增多,版本也将增多,版本管理的复杂度将成指数级增加。

在服务之间依赖较多时,每个服务的升级或降级都将影响其他服务的正常运行。

因此需执行如下策略:1、所有服务的版本制作交由专业的版本管理员执行。

2、采用自动化的版本制作策略,最大程度的减少人工操作。

3、每个服务的版本必须有详细的版本计划、版本说明,对于版本说明要制定模板,明确需要提交的内容、版本号、SVN标签等。

4、对项目经理的要求提升,需对整体的版本计划有严格的制定,尤其是版本之间的依赖关系要非常明确,版本升级、降级的风险评估需完全充分。

5、接口管理:严格执行接口管理制度,任何接口的变更必须进行审批、发公告等流程。

5.6.数据库挑战与策略每个微服务都有自己独立的数据库,那么后台管理的联合查询怎么处理?这应该是大家会普遍遇到的一个问题,有三种处理方案。

1)严格按照微服务的划分来做,微服务相互独立,各微服务数据库也独立,后台需要展示数据时,调用各微服务的接口来获取对应的数据,再进行数据处理后展示出来,这是标准的用法,也是最麻烦的用法。

2) 将业务高度相关的表放到一个库中,将业务关系不是很紧密的表严格按照微服务模式来拆分,这样既可以使用微服务,也避免了数据库分散导致后台系统统计功能难以实现,是一个折中的方案。

3)数据库严格按照微服务的要求来切分,以满足业务高并发,实时或者准实时将各微服务数据库数据同步到NoSQL数据库中,在同步的过程中进行数据清洗,用来满足后台业务系统的使用,推荐使用MongoDB、HBase等。

第一种方案适合业务较为简单的小公司;第二种方案,适合在原有系统之上,慢慢演化为微服务架构的公司;第三种适合大型高并发的互联网公司。

建议,我们当前采用第二种方案。

5.7.负载均衡不再采用一般的增加负载均衡服务器的方式进行负载均衡,如F5、Nginx、LVS等,而是把负载均衡的功能以库的方式集成到服务消费方的进程内,这种方案称为软负载均衡(Soft Load Balancing)或者客户端负载均衡。

在Spring Cloud中配合Eureka的服务注册功能,Ribbon子项目则为REST客户端实现了负载均衡。

使用Ribbon进行负载均衡,其工作原理可以概括为下面四个步骤:1.Ribbon首先根据其所在Zone优先选择一个负载较少的Eureka Server;2.定期从Eureka Server更新并过滤服务实例列表;3.根据指定的负载均衡策略,从可用的服务器列表中选择一个服务实例的地址;4.然后通过RestClient进行服务调用。

Ribbon本身提供了下面几种负载均衡策略:•RoundRobinRule:轮询策略,Ribbon以轮询的方式选择服务器,这个是默认值。

所以示例中所启动的两个服务会被循环访问;•RandomRule:随机选择,也就是说Ribbon会随机从服务器列表中选择一个进行访问; •BestAvailableRule:最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的;•WeightedResponseTimeRule:带有加权的轮询策略,对各个服务器响应时间进行加权处理,然后在采用轮询的方式来获取相应的服务器;•AvailabilityFilteringRule:可用过滤策略,先过滤出故障的或并发请求大于阈值一部分服务实例,然后再以线性轮询的方式从过滤后的实例清单中选出一个; •ZoneAvoidanceRule:区域感知策略,先使用主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使用次过滤条件列表中的过滤条件对主过滤条件的结果进行过滤,判断最小过滤数(默认1)和最小过滤百分比(默认0),最后对满足条件的服务器则使用RoundRobinRule(轮询方式)选择一个服务器实例。

相关文档
最新文档