
Springcloud分布式与微服务
文章平均质量分 95
SpringCloud分布式与微服务
张维鹏
这个作者很懒,什么都没留下…
展开
-
常见的服务器架构入门:从单体架构、EAI 到 SOA 再到微服务和 ServiceMesh
1、单体架构:将所有业务的表现层,业务逻辑层,数据访问层放在一个工程中最终部署在一台服务器2、垂直架构:按业务场景拆分为互不相干的单体架构项目3、前后端分离:前端关注页面样式与动态数据的解析及渲染,后端专注于具体业务逻辑4、EAI架构:连通与集成相互独立的异构系统,解决信息孤岛的问题。5、SOA架构:将各系统的不同功能单元抽象为服务,服务间通过标准的接口协议连接,从而到达复用6、微服务:SOA思想的一种提炼,强调业务系统彻底的组件化和服务化7、微服务2.0:由服务网格以代理的方式建立稳定的通信原创 2021-06-01 18:46:12 · 28128 阅读 · 7 评论 -
常见分布式理论(CAP、BASE)和一致性协议(Gosssip协议、Raft一致性算法)
分布式系统只能同时满足CAP中的两种,在设计分布式架构时必须做出取舍,而分区容忍性是基本要求,必须要满足,所以设计分布式系统,就是在一致性和可用性之间取一个平衡。BASE是对CAP中一致性和可用性权衡的结果,核心思想是即使无法做到强一致性,但每个业务根据自身的特点,采用适当的方式来使系统达到最终一致性。原创 2022-01-10 08:15:00 · 17000 阅读 · 5 评论 -
一致性哈希算法原理详解
(1)一致性哈希算法将整个哈希值空间按照顺时针方向组织成一个虚拟的圆环,称为 Hash 环;(2)接着将各个服务器使用 Hash 函数进行哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,从而确定每台机器在哈希环上的位置;(3)最后使用算法定位数据访问到相应服务器:将数据key使用相同的函数Hash计算出哈希值,并确定此数据在环上的位置,从此位置沿环顺时针寻找,第一台遇到的服务器就是其应该定位到的服务器原创 2021-10-17 18:46:56 · 52499 阅读 · 36 评论 -
Nacos注册中心的部署与用法详细介绍
注册中心是微服务架构中的纽带,类似于”通讯录“,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址并进行调用。注册中心本质上是为了解耦服务提供者和服务消费者,除此之外还能对服务进行动态管理,降低服务端负载均衡中间件的压力原创 2022-02-14 07:30:00 · 38903 阅读 · 6 评论 -
Nacos配置中心用法详细介绍
配置中心区别于传统的配置信息分散到系统各个角落的方式,对系统中的配置文件进行集中统一管理,而不需要逐一对单个的服务器进行管理。通过配置中心,可以使得配置标准化、格式统一化;当配置信息发生变动时,修改实时生效,无需要重新重启服务器,就能够自动感知相应的变化,并将新的变化统一发送到相应程序上,快速响应变化;通过审计功能还可以追溯问题原创 2022-02-14 07:45:00 · 85769 阅读 · 6 评论 -
SpringCloud LoadBalancerClient 负载均衡原理
LoadBalancerClient 在初始化时会通过 Eureka Client 向 Eureka 服务端获取所有服务实例的注册信息并缓存在本地,并且每10秒向 EurekaClient 发送 “ping”,来判断服务的可用性。如果服务的可用性发生了改变或者服务数量和之前的不一致,则更新或者重新拉取。最后,在得到服务注册列表信息后,ILoadBalancer 根据 IRule 的策略进行负载均衡(默认策略为轮询)。原创 2022-02-14 07:45:00 · 13850 阅读 · 0 评论 -
SpringCloud Ribbon负载均衡 + OpenFeign远程HTTP调用用法与原理
openFeign 作为微服务架构下服务间调用的解决方案,是一种声明式、模板化的 HTTP 的模板,使 HTTP 请求就像调用本地方法一样,通过 openFeign 可以替代基于 RestTemplate 的远程服务调用,并且默认集成了 Ribbon 进行负载均衡。目标是减少 HTTP API 的复杂性,希望能将 HTTP 远程服务调用做到像 RPC 一样易用。...原创 2022-02-14 08:00:00 · 24037 阅读 · 4 评论 -
什么是RPC?RPC框架dubbo的核心流程
RPC 是一种进程间通信方式,允许像调用本地服务一样调用远程服务,通信协议大多采用二进制方式。RPC 框架的目标就是让远程服务调用更简单、透明,由 RPC 框架负责屏蔽底层的序列化、传输方式和通信的细节,开发者在使用时只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。而 Dubbo 是阿里巴巴开源的基于 Java 的 RPC 分布式服务框架,提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。...原创 2022-01-12 08:15:00 · 29376 阅读 · 7 评论 -
服务容错设计:流量控制、服务熔断、服务降级
单体应用的故障影响面很大,而分布式系统中由于故障的影响面可以被隔离,所以影响面较小,但是因为服务多,出故障的频率也很多。不过我们需要明白:出现故障不可怕,故障影响面过大才可怕;出现故障不可怕,故障恢复时间过长才可怕。所谓 “防火胜于救火”,所以我们更要考虑如何进行防火,这就要求我们在设计或者运维时都要为可能发生的故障考虑,即所谓 “Design for Failure”,面向失败设计,在设计时要考虑如何减轻故障。而容错设计就是面向失败设计一个非常重要的环节,常见的容错设计有:流量控制、服务熔断、服务降级原创 2021-10-18 08:00:00 · 11650 阅读 · 5 评论 -
sentinel 限流熔断神器详细介绍
Sentinel 是一款面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来保障服务的稳定性,核心思想是:根据对应资源配置的规则来为资源执行相应的流控/降级/系统保护策略,原创 2022-01-28 17:43:14 · 35162 阅读 · 6 评论 -
Sentinel 规则持久化到 apollo 配置中心
Sentinel 规则默认是存储在内存中的,只要服务重启之后对应的规则也会消失,实际的生产中肯定是不允许这种操作,因此 Sentinel 官方推荐在生产架构中使用第三方数据源作为永久存储中心,比如 nacos、apollo、zookeeper。因为这几种数据源都是基于 push 模式,也就是由规则中心统一推送,Sentinel Client 只需通过注册监听器的方式时刻监听变化,并负责获取配置中心推送的配置并更新到本地,这种方式能更好的保证实时性和一致性,并且各个微服务的限流、降级规则都可以永久存储。原创 2022-01-28 00:28:04 · 11417 阅读 · 3 评论 -
Sentinel-Dashboard 与 apollo 规则的相互同步
那什么需要对 Sentinel 进行改造呢?主要是因为所有规则都只能通过 Nacos 或 Apollo 控制台来完成修改才能得到持久化存储,而在 Sentinel Dashboard 中修改限流规则虽然可以生效,但是不会被持久化到配置中心。生产环境下推荐采用 push 模式的数据源,push 推送的操作应该由 Sentinel dashboard 和 Config Center Dashboard 控制台统一进行管理和推送,Sentinel Client 仅负责获取配置中心推送的配置并更新到本地。原创 2022-01-24 07:45:00 · 11400 阅读 · 3 评论 -
Spring Cloud Gateway 服务网关的部署与使用详细介绍
网关作为系统的唯一流量入口,封装内部系统的架构,所有请求都先经过网关,由网关将请求路由到合适的微服务,所以,使用网关的好处在于:(1)简化客户端的工作。网关将微服务封装起来后,客户端只需同网关交互,而不必调用各个不同服务;(2)降低函数间的耦合度。 一旦服务接口修改,只需修改网关的路由策略,不必修改每个调用该函数的客户端,从而减少了程序间的耦合性(3)解放开发人员把精力专注于业务逻辑的实现。由网关统一实现服务路由(灰度与ABTest)、负载均衡、访问控制、流控熔断降级等非业务相关功能原创 2022-02-14 08:15:00 · 93938 阅读 · 21 评论 -
Spring Cloud Gateway 整合 sentinel 实现流控熔断
在微服务架构中,网关层可以屏蔽外部服务直接对内部服务进行调用,对内部服务起到隔离保护的作用,网关限流,顾名思义,就是通过网关层对服务进行限流,从而达到保护后端服务的作用。如果已经在网关层面做了限流,那么躲在身后的服务是否就安全了呢?答案是否定的,因此最常见的解决方案是:网关层集群限流+内部服务的单机限流兜底,这样才能保证不被流量冲垮原创 2022-02-14 08:30:00 · 27592 阅读 · 7 评论 -
Spring Cloud Gateway 整合 knife4j 聚合接口文档
当系统中微服务数量越来越多时,如果任由这些服务散落在各处,那么最终管理每个项目的接口文档将是一件十分麻烦的事情,单是记住所有微服务的接口文档访问地址就是一件苦差事了。当如果能够将所有微服务项目的接口文档都统一汇总在同一个可视化页面,那么将大大减少我们的接口文档管理维护工作,为此,我们可以基于 Spring Cloud Gateway 网关 + nacos + knife4j 对所有微服务项目的接口文档进行聚合,从而实现我们想要的文档管理功能原创 2022-02-14 01:28:56 · 24969 阅读 · 9 评论 -
七种常见分布式事务详解(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)
在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。本文详解介绍七种常见分布式事务的原理以及优缺点和适用场景(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)原创 2022-01-10 08:15:00 · 78754 阅读 · 15 评论 -
分布式事务Seata原理
Seata 是一款开源的分布式事务解决方案,致力于提供高性能与简单易用的分布式事务服务,为用户提供了 AT、TCC、SAGA 和 XA 几种不同的事务模式。Seata AT模式是基于XA事务演进而来,需要数据库支持。AT 模式的特点就是对业务无入侵式,用户只需要关注自己的业务SQL,Seata 框架会在第一阶段拦截并解析用户的 SQL,并保存其变更前后的数据镜像,形成undo log,并自动生成事务第二阶段的提交和回滚操作。原创 2022-01-10 08:15:00 · 23704 阅读 · 0 评论 -
分布式事务seate-server的docker镜像的制作与部署
Seata 是一款开源的分布式事务解决方案,致力于提供高性能与简单易用的分布式事务服务。在 Seata 中主要有以下三种角色,其中 TM 和 RM 是作为 Seata 的客户端与业务系统集成在一起,TC 作为 Seata 的 Server 端(下文简称 seata-server)独立部署。而 seata-server 的部署模式支持多种:直接部署,使用 Docker、Docker-Compose、Kubernetes、Helm 等,本文主要介绍如何使用 docker 部署 seata-server原创 2022-01-10 08:15:00 · 2570 阅读 · 0 评论 -
RocketMQ-docker镜像的制作与部署
本文主要介绍下 RocketMQ-docker 镜像的制作与部署,方便在不同环境快速启动RocketMQ,核心操作分为三个:NameServer 镜像的制作与部署、Broker 镜像的制作与部署、console 镜像的制作与部署。原创 2022-01-18 08:00:00 · 3400 阅读 · 1 评论 -
RocketMQ事务消息原理
基于MQ的分布式事务方案,本质上是对本地消息表的一个封装,整体流程与本地消息表一致,唯一不同的就是将本地消息表存在了MQ内部,而不是业务数据库,事务消息解决的是生产端的消息发送与本地事务执行的原子性问题,确保 MQ 生产端正确无误地将消息发送出来,没有多发,也不会漏发,至于发送后消费端有没有正常的消费消息,这种异常场景将由 MQ 消息消费失败重试机制来保证。原创 2022-01-24 08:15:00 · 16581 阅读 · 7 评论 -
Skywalking全链路追踪使用说明
随着系统的复杂度也越来越高,我们软件架构也进入了分布式阶段,一次请求可能横跨多个服务模块、项目,依赖的中间件也越来越多,其中任何一个节点出现异常,都可能导致业务出现波动或者异常。而传统的日志监控等方式无法很好满足调用链路跟踪,排查问题等需求,这就导致定位/诊断服务异常变得异常复杂。因此面对复杂的调用链路,我们需要一款具体如下功能全链路追踪工具,提高我们对业务的掌控度:①请求链路追踪,快速定位故障;②可视化链路各阶段的耗时,进行性能分析;③ 梳理服务依赖关系;④ 系统指标监控,吞吐量、响应时间及错误记录等原创 2022-05-01 08:00:00 · 37618 阅读 · 1 评论 -
集群/分布式环境下5种session处理策略
前言在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器,用户在第一次访问网站时,Nginx通过其负载均衡机制将用户请求转发到A服务器,这时A服务器就会给用户创建一个Session。当用户第二次发送请求时,Nginx将其负载均衡到B服务器,而这时候B服务器并不存在Session,所...转载 2019-03-29 22:03:30 · 2113 阅读 · 0 评论