![](https://img-blog.csdnimg.cn/20201117174348407.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
分布式和微服务理论与实践
文章平均质量分 75
分布式和微服务理论与实践
ZWZhangYu
这个作者很懒,什么都没留下…
展开
-
本地启动时避免将服务注册到Eureka网关
在某些情况下,我们获取的配置都是远程配置中心的,即使本地开发也不能随意修改影响别人,针对于此可以通过本地修改代码的方式,例如可以限制获取本地的操作系统属性,如果是windows或者mac则不进行注册。当在本地开发时,有时你可能想要避免将服务注册到网关,这样可以更轻松地进行单独的服务测试。在使用Eureka注册服务时,你可以通过配置来控制服务是否注册到Eureka服务器。这样配置后,服务启动时将不会向Eureka注册自己,也不会从Eureka获取服务注册信息。这对本地开发和测试来说是非常方便的。原创 2023-12-10 11:47:42 · 880 阅读 · 0 评论 -
分布式配置中心Apollo中Namespace的类型整理
公共类型的Namespace具有public权限。公共类型的Namespace相当于游离于应用之外的配置,且通过Namespace的名称去标识公共Namespace,所以公共的Namespace的名称必须全局唯一。原创 2023-06-19 19:51:23 · 808 阅读 · 0 评论 -
关于前后端分离的Cookie的事项
同源策略主要是由浏览器实施的一种安全机制,用于限制不同源(协议,域名,端口)之间的客户端脚本访问。同源策略确实会限制浏览器中前端应用程序对不同源服务器的访问,但在服务器与服务器之间的通信中,同源策略并不适用。原创 2023-06-11 10:25:28 · 4049 阅读 · 1 评论 -
RabbitMQ消息属性详解
在AMQP规范中,message-id和correlation-id是“应用级别使用”的属性,并没有提供正式的行为定义。这意味着就规范而言,你可以利用它们实现任何目的。这两个字段允许多达255个字节的UTF-8编码数据,并以未压缩的方式存储在Basic.Properties数据结构中。原创 2023-05-31 21:26:46 · 2676 阅读 · 0 评论 -
一次Navicat执行带注释的DDL导致canal异常的问题分析 以及相关知识扩展总结
【1】在进行了多次的测试下,也仅仅发现只有当使用navicat并存在空行注释的情况下才会出现问题,因为日常开发中这样的情况不多并且可以避免,也就没有过多的去深究了,以后避免这样写法。【2】本次的问题值得反思的是在日常开发中,对于注释这些细节问题也需要重视起来,比如上面的空行注释,还有上面参考案例XML中的SQL注释等等,在平常的开发中要尽可能的保持标准写法,删除无用的注释。【3】本次实践中所使用的Druid的SQL解析工具,以及围绕着该工具介绍的一些SQL操作方法,确实是一个很好辅助工具...原创 2022-08-28 11:17:50 · 992 阅读 · 0 评论 -
Spring Cloud Gateway网关——过滤器
全局过滤链的执行顺序是,当Gateway接收到请求时,Filtering Web Handler处理器会将所有的GlobalFilter实例及所有路由上所配置的GatewayFilter实例添加到一条过滤器链中。该过滤器链里的所有过滤器都会按照@Order注解所指定的数字大小进行排序。原创 2021-05-29 14:32:10 · 4482 阅读 · 1 评论 -
Spring Cloud Gateway网关实战
文章目录介绍基础示例spring-cloud-gateway-servicespring-cloud-gateway-sample网关介绍Spring Cloud Gateway是Spring官方团队研发的API网关技术,它的目的是取代Zuul为微服务提供一种简单高效的API网关。一般来说,Spring团队不会重复造轮子,为什么又研发出一个Spring Cloud Gateway呢?有以下几方面原因。1:Zuul 1.x采用的是传统的thread per connection方式来处理请求,也就是针原创 2021-05-29 11:00:29 · 1953 阅读 · 1 评论 -
分布式系统日志追踪实现
全服务唯一的traceId,可以使用uuid生成,正常来说不会出现重复的;关于服务间传递,对于调用者,在协议头加上traceId,对于被调用者,通过前置拦截器或者过滤器统一拦截;关于服务内部传递,可以使用ThreadLocal传递traceId,一处放置,随处可用;关于多线程传递,分为两种情况:子线程,可以使用InheritableThreadLocal。线程池,需要改造线程池对提交的任务进行包装,把提交者的traceId包装到任务中原创 2021-05-23 10:53:26 · 2458 阅读 · 0 评论 -
使用MDC增强日志记录
Mapped Diagnostic Context(MDC)的基本思想是提供一种方法,用一些在日志记录实际发生的范围内不可用的信息来丰富日志消息,但这些信息确实有助于更好地跟踪程序的执行。原创 2021-05-23 10:48:42 · 2504 阅读 · 1 评论 -
API设计指南整理
Google REST API(也被称为REST方法)的标准方法有List,Get,Create,Update和Delete。API的设计者也可以用自定义方法(也被称为自定义动词或者自定义操作),来完成那些不易对应到标准方法的功能,比如数据库事务。原创 2021-05-20 17:37:09 · 2135 阅读 · 0 评论 -
RocketMQ实现顺序消息原理分析
顺序消费也称为有序消费,原理是同一个消息队列只允许Consumer中的一个消费线程拉取消费。Consumer中有个消费线程池,多个线程会同时消费消息。在顺序消费的场景下消费线程请求到Broker时会先申请独占锁,获得锁的请求则允许消费。原创 2021-05-17 21:29:48 · 2591 阅读 · 0 评论 -
Spring Cloud Alibaba RocketMQ架构与源码分析
Spring Cloud Stream是Spring Cloud体系内的一个框架,用于构建与共享消息传递系统连接的高度可伸缩的事件驱动微服务,其目的是简化消息业务在Spring Cloud应用程序中的开发。Spring Cloud Stream的架构图如图所示,应用程序通过Spring Cloud Stream注入的输入通道inputs和输出通道outputs与消息中间件Middleware通信,消息通道通过特定的中间件绑定器Binder实现连接到外部代理原创 2021-05-15 17:21:47 · 2040 阅读 · 0 评论 -
RocketMQ收发消息实践
RocketMQ是一个低延迟、高可靠、可伸缩、易于使用的分布式消息中间件(也称消息队列),经过阿里巴巴多年双11的验证,是由阿里巴巴开源捐献给Apache的顶级项目。RocketMQ具有高吞吐低延迟、海量消息堆积等优点,同时提供顺序消息、事务消息、定时消息、消息重试与追踪等功能,非常适合在电商、金融等领域广泛使用。原创 2021-05-15 14:29:13 · 2140 阅读 · 0 评论 -
RocketMQ介绍和安装
文章目录(一)认识(二)应用场景(三)RocketMQ的安装(一)认识在微服务架构下,一个业务服务会被拆分成多个微服务,各个服务之间相互通信完成整体的功能。系统间的通信协作通常有两种。1:Http/RPC通信:优点是通信实时,缺点是服务之间的耦合性高。2:消息通信︰优点是降低了服务之间的耦合性,提高了系统的处理能力,缺点是通信非实时。RocketMQ是一个低延迟、高可靠、可伸缩、易于使用的分布式消息中间件(也称消息队列),经过阿里巴巴多年双11的验证,是由阿里巴巴开源捐献给Apache的顶级项目。原创 2021-05-15 14:21:15 · 1784 阅读 · 3 评论 -
【RocketMQ】Send [1] times, still failed以及No route info of this topic问题排查思路总结
文章目录1. 检查MQ是否正常启动2. 检查端口是否可以正常访问3 检查topic是否存在4. Broker的IP地址错误,造成网络不通1. 检查MQ是否正常启动RocketMq的日志默认位置:cd ~/logs/rocketmqlogs说明正常启动了NameServer说明正常启动了NameServer说明broker已经注册到了NameServer2. 检查端口是否可以正常访问在windows环境下运行下面命令telnet ip 9876telnet ip 10911原创 2021-05-09 14:27:12 · 5605 阅读 · 2 评论 -
10分钟入门Nacos+Feign服务间接口调用
Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。原创 2021-05-07 22:10:48 · 7934 阅读 · 1 评论 -
10分钟入门Nacos配置中心和服务注册
关于nacos配置中心和服务发现原理可参见我之前发过的博客,这里不再叙述,本文主要以SpringBoot+Nacos快速应用配置中心功能和服务发现【SpringBoot版本】<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <vers原创 2021-05-06 22:42:42 · 1814 阅读 · 5 评论 -
Seata AT模式的实现原理
文章目录(一)AT模式第一阶段的实现原理(二)AT模式第二阶段的原理分析1. 事务提交2.事务回滚(三)事务的隔离性保证1. 写隔离2. 读隔离参考AT模式是基于XA事务模型演进而来的,所以它的整体机制也是一个改进版的两阶段提交协议。第一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。第二阶段:提交异步化,非常快速地完成。回滚通过第一阶段的回滚日志进行反向补偿。下面我们详细分析在整个执行流程中,每一个阶段的具体实现原理。同时,为了更好地理解AT模式的工作机制,我们以库存原创 2021-05-04 14:30:17 · 3542 阅读 · 0 评论 -
分布式事务问题理论模型
文章目录(一)X/Open分布式事务模型(二)两阶段提交协议(1)介绍(2)俩阶段提交的缺点(三)三阶段提交协议(1)介绍(2)两阶段提交和三阶段提交不同分析(四)CAP定理(五)BASE理论(一)X/Open分布式事务模型XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进原创 2021-05-03 11:44:04 · 1829 阅读 · 0 评论 -
架构设计——缓存层设计思维导图总结
对于数据库查询优化,可以把数据存放在缓存中,每次请求通过缓存读取数据,大大减少了数据库读请求压力。对于数据库写操作优化,可以先将数据写入缓存中,流量洪峰时,我们先将数据写入缓存中,再逐步搬运数据到数据库,大大减少了数据库写请求压力。对于数据数据收集,利用消息队列我们可以把缓存中的数据搬运到数据库中原创 2021-04-11 20:40:22 · 1854 阅读 · 0 评论 -
Redis高级——AOF持久化
除了RDB持久化功能之外,Redis还提供了AOF ( Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis 服务器所执行的写命令来记录数据库状态的原创 2021-04-10 17:35:05 · 2175 阅读 · 0 评论 -
Redis高级——RDB持久化
RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行.该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态原创 2021-04-10 16:17:43 · 1847 阅读 · 0 评论 -
Spring Cloud Sentinel工作原理分析
文章目录(1)介绍(2)SentinelWebAutoConfiguration自动装配(3)CommonFilter分析(1)介绍在Spring Cloud中使用Sentinel实现限流的场景中,我们并不需要任何配置,Sentinel会自动保护所有的HTTP服务,在Spring-Cloud-Starter-Alibaba-Sentinel包中,我们知道Starter组件会用到自动装配,所以直接找到META-INF/spring.factories文件。这里EnableAutoConfigurat原创 2021-04-07 21:10:58 · 2164 阅读 · 0 评论 -
数据持久层架构——冷热分离
在处理数据时,将数据库分成了冷库和热库 2 个库,不常用数据放冷库,常用数据放热库。通过这样的方法处理后,常用的数据量大大减少了,也大大提升了数据库响应速度。原创 2021-04-05 20:53:02 · 1781 阅读 · 0 评论 -
SpringCloud集成Sentinel实践
文章目录(一)接入SpringCloud(二)配置流控规则(三)基于Sentinel Dashboard来实现流控配置(四)自定义URL限流异常(五)URL资源清洗(一)接入SpringCloudSpring Cloud Alibaba默认为Sentinel整合了Servlet、RestTemplate、FeignClient和Spring WebFlux,它不仅补全了Hystrix在Servlet和RestTemplate这一块的空白,而且还完全兼容了Hystrix在FeignClient中限流降级的原创 2021-03-31 22:45:01 · 2664 阅读 · 5 评论 -
微服务限流熔断总结及Sentinel基础认识
限流的主要目的是通过限制并发访问数或者限制一个时间窗口内允许处理的请求数量来保护系统,一旦达到限制数量则对当前请求进行处理采取对应的拒绝策略,比如跳转到错误页面拒绝请求、进入排队系统、降级等。从本质上来说,限流的主要作用是损失一部分用户的可用性,为大部分用户提供稳定可靠的服务。原创 2021-03-31 20:30:52 · 1813 阅读 · 0 评论 -
架构设计——部署升级模式思维导图整理
在分布式系统的世界里,一个服务有多个实例,所以部署或是升级一个服务也会变得比较麻烦。服务部署的模式。一般来说,有如下几种:停机部署、蓝绿部署、滚动部署、灰度部署、AB 测试。原创 2021-03-20 14:22:17 · 1842 阅读 · 0 评论 -
分布式配置中心设计——思维导图总结
统单机软件的配置通常保存在文件中,但在分布式系统下,为了管理方便,必须有一个配置中心,软件的配置中心是分布式系统的一个必要组件原创 2021-03-20 11:21:14 · 1812 阅读 · 0 评论 -
分布式锁设计
在多线程情况下访问一些共享资源需要加锁,不然就会出现数据被写乱的问题。在分布式系统下,这样的问题也是一样的。只不过,我们需要一个分布式的锁服务。对于分布式的锁服务,一般可以用数据库 DB、Redis 和 ZooKeeper 等实现原创 2021-03-20 10:49:15 · 1924 阅读 · 3 评论 -
Sentinel资源保护规则
文章目录(1)介绍(2)资源保护规则(3)Grade:限流阈值类型(4)controlBehavior:流控行为(5)调用关系流量策略(1)介绍Sentinel支持多种保护规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则、热点参数规则。限流规则先通过FlowRule来定义限流规则,然后通过FlowRuleManager.loadRules来加载规则列表。完整的限流规则设置代码如下: //定义规则列表 List<FlowRule> rules = new A原创 2021-03-16 21:37:53 · 2289 阅读 · 0 评论 -
分布式设计——限流算法
文章目录(1)计数器算法(2)滑动窗口算法(3)令牌桶限流算法(4)漏桶限流算法(1)计数器算法计数器算法是一种比较简单的限流实现算法,在指定周期内累加访问次数,当访问次数达到设定的阈值时,触发限流策略,当进入下一个时间周期时进行访问次数的清零。实践:短信验证码,一分钟中不能重复发送不足:由于是固定周期区间,容易出现极值问题,比如并发请求都集中在前一分钟的后几秒后下一分钟的前几秒(2)滑动窗口算法为了解决计数器算法带来的临界问题,所以引入了滑动窗口算法。滑动窗口是一种流量控制技术,在TCP网络通原创 2021-03-15 21:49:18 · 1742 阅读 · 0 评论 -
分布式架构——弹力设计
容错设计又叫弹力设计,其中着眼于分布式系统的各种“容忍”能力,包括容错能力(服务隔离、异步调用、请求幂等性)、可伸缩性(有 / 无状态的服务)、一致性(补偿事务、重试)、应对大流量的能力(熔断、降级)。可以看到,在确保系统正确性的前提下,系统的可用性是弹力设计保障的重点。原创 2021-03-14 13:32:41 · 1736 阅读 · 0 评论 -
分布式配置中心Nacos
文章目录(一)本地配置方式的问题(二)Nacos配置中心(1)基本介绍(2)基于Data ID配置YAML的文件扩展名(3)不同环境的配置切换(三)Nacos Config 实现原理解析(1)SDK和OpenAPI(2)配置的CRUD(3)动态监听之Pull Or Push(一)本地配置方式的问题1、配置的动态更新在实际应用中会有动态更新配置的需求,比如修改服务连接地址、限流的配置等。在传统模式下,需要手动修改配置文件并且重启应用才能生效,这种方式效率太低,重启也会导致服务暂时不可用。2、配置集中式原创 2021-03-09 20:48:08 · 2944 阅读 · 3 评论 -
服务注册与发现——Nacos
文章目录(1)前言(2) Alibaba Nacos基本介绍(3)基本使用(4)Nacos的高可用部署(5)Nacos实现原理分析(6) 注册中心的原理(1)前言服务消费者要去调用多个服务提供者组成的集群。首先,服务消费者需要在本地配置文件中维护服务提供者集群的每个节点的请求地址。其次,服务提供者集群中如果某个节点下线或者宕机,服务消费者的本地配置中需要同步删除这个节点的请求地址,防止请求发送到已宕机的节点上造成请求失败。为了解决这类的问题,就需要引入服务注册中心.主要有以下功能:1、服务地址的管理。原创 2021-03-08 20:37:22 · 2221 阅读 · 0 评论 -
Apache Dubbo的高级应用
文章目录(一)集群容错(二)负载均衡(三)服务降级(四)主机绑定规则日常学习中,我们只是了解了Apache Dubbo作为RPC通信框架的使用方法,以及服务注册中心的应用及原理,这仅仅是它的冰山一角。其实,Apache Dubbo更像一个生态,它提供了很多比较主流框架的集成,比如:1、支持多种协议的服务发布,默认是dubbo:/,还可以支持rest://、webservice://、thrift://等。·支持多种不同的注册中心,如Nacos、ZooKeeper、Redis,未来还将会支持Consul、原创 2021-03-01 21:04:46 · 2379 阅读 · 2 评论 -
Zookeeper实践分析
文章目录(一)特性(1)临时节点(2)容器节点(3)TTL节点(4)持久化节点(5)有序节点(二)Watcher机制(三)常见应用场景分析(1)分布式锁(2)Master选举【方式一】【方式二】(一)特性(1)临时节点临时节点,节点的生命周期和创建该节点的客户端的生命周期保持一致,一旦该客户端的会话结束,则该客户端所创建的临时节点会被自动删除。备注:因为这个特性所以很多的时候可以利用这个作为机器上下线的设计,客户端上线则创建了一个节点,断开连接则此时临时节点被自动删除(2)容器节点容器节点,当容原创 2021-03-01 20:01:16 · 1755 阅读 · 0 评论 -
微服务解决方案之Spring Cloud
文章目录(一)Spring Cloud基本介绍(二)Spring Cloud版本介绍(三)Spring Cloud规范下的实现Spring Cloud Netflix(四)Spring Cloud规范下的实现Spring Cloud Alibaba(1)技术框架(2)优势分析(3)Spring Cloud Alibaba的版本(一)Spring Cloud基本介绍Spring Cloud是Pivotal公司在2015年发布的一个项目,很多人可能不知道Pivotal公司,Spring就是Pivotal公司原创 2021-02-11 12:35:32 · 2920 阅读 · 4 评论 -
微服务的发展历程和挑战
文章目录(一)发展历程(1)前言(2)单体架构(3)集群及垂直化(4)SOA(5)微服务架构(二)微服务架构带来的挑战(1)优点(2)挑战(3)微服务基本架构(一)发展历程(1)前言任何现在看起来非常复杂和庞大的架构,一定都是随着业务产品中用户量和数据量增长而不断演变来的。而架构的发展可能都会经历单体架构、垂直化和集群、SOA(面向服务架构)、微服务架构等。当然不是所有的公司都会严格按照这个架构的顺序来演进,每个公司遇到的问题不一样,架构的发展过程也不一样。特别是互联网公司的架构,用户量大部分情况下属原创 2021-02-11 09:12:48 · 2885 阅读 · 3 评论 -
Spring Cloud版本介绍
Spring Cloud是一套整合了各大公司开源技术的规范,而这些开源技术的版本发布是由各个公司来维护的,每个子项目都维护了自己的发布版本号,所以它不像传统意义上的版本命名,而是采用了伦敦地铁站的名字根据字母表的顺序结合对应版本的时间顺序来定义一个大版本,Spring Cloud以往的版本发布顺序排列如下:Spring Cloud的每一个大版本通过BOM ( Bill of Materials )来管理每个子项目的版本清单,下图所示是Spring Cloud官网提供的各个子项目的版本清单,表头(Edgw原创 2020-12-18 17:29:15 · 2816 阅读 · 1 评论 -
分布式架构——数据访问层的设计分析
文章目录(一)数据库从单机到分布式的挑战和应对(1)数据库减压解决方式(2)数据水平划分和垂直划分分析(二)分布式事务(1)分布式事务模型与规范(2)两阶段提交2PC(3)CAP和BASE(三)Paxos协议(1)基本认识(2)Basic-Paxos基本流程(四)多机的Sequence问题与处理(五)多机的数据查询问题分析(1)Join问题(2)外键约束(3)合并查询(六)数据访问层的设计与实现(1)对外提供数据访问层的方式(2)按照数据层流程的顺序看数据层设计(七)读写分离的挑战和应对(1)介绍(2)数据原创 2020-11-22 16:27:15 · 3124 阅读 · 0 评论