![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式与微服务
文章平均质量分 96
duration~
将语言当做协议,聊天当做通信,将说话的内容当做数据。上下层之间进行交互时所遵循的约定叫做“接口”,通信双方同一层之间的交互所遵循的约定叫做“协议”。
展开
-
XXL-JOB分布式定时任务框架快速入门
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等;@Component/*** 1、简单任务示例(Bean模式)*///todo 打印时间//.....省略....../**原创 2024-08-08 20:05:13 · 740 阅读 · 0 评论 -
一致性哈希:分布式系统中的高效数据分配策略
一致性哈希是一种分布式哈希表的实现方法,它能在节点数量发生变化时尽量减少重新分配的数据量。与传统的哈希算法不同,一致性哈希将所有可能的哈希值映射到一个环上,并通过该环进行数据和节点的分配管理。原创 2024-07-29 09:56:54 · 573 阅读 · 0 评论 -
通用分布式锁组件
Redisson是一个基于Redis的工具包,功能非常强大。将JDK中很多常见的队列、锁、对象都基于Redis实现了对应的分布式版本。1)创建锁对象2)尝试获取锁3)处理业务4)释放锁但是,除了第3步以外,其它都是非业务代码,对业务的侵入较多:可以发现,非业务代码格式固定,每次获取锁总是在重复编码。我们可不可以对这部分代码进行抽取和简化呢?锁名称锁等待时间锁超时时间时间单位方法结束是否释放锁/*** 加锁key的表达式,支持SPEL表达式/**原创 2024-04-04 13:30:01 · 1038 阅读 · 3 评论 -
兑换码生成算法
自增id从1增加到Integer的最大值,可以达到40亿以上个数字,而占用的字节仅仅4个字节,也就是32个bit位,距离50个bit位的限制还有很大的剩余,符合要求!那因此,只要我们让数字转为二进制的形式,然后每5个二进制位为一组,转10进制的结果是不是刚好对应一个角标,就能找到一个对应的字符呢?所以,我们采用自增id的同时,还需要利用某种校验算法对id做加密验证,避免他人找出规律,猜测到其它兑换码,甚至伪造、篡改兑换码。依此类推,最终那一串二进制数得到的结果就是KCNBP2PC84,刚好符合我们的需求。原创 2024-04-01 18:10:56 · 1614 阅读 · 5 评论 -
Redis数据结构
对⼀个内部表示成long型的string执行append, setbit, getrange这些命令,针对的仍然是string的值(即⼗进制表示的字符串),而不是针对内部表⽰的long型进⾏操作。String的内部存储结构⼀般是sds(Simple Dynamic String,可以动态扩展内存),但是如果⼀个String类型的value的值是数字,那么Redis内部会把它转成long类型来存储,从⽽减少内存的使用。我们可以看到,key的类型固定是string,而value可能的类型是多个。原创 2024-03-31 22:18:17 · 969 阅读 · 0 评论 -
MP设置动态表名
虽然无法传参,但是从计算表名,到动态表名插件执行,调用TableNameHandler,都是在一个线程内完成的。这个Map的key是旧的表名称,value是TableNameHandler,就是表的名称处理器,用于根据旧名称获取新名称。因此,一旦我们计算完表名,以某种方式传递给插件中的TableNameHandler,那么就无需重复计算表名了。计算表名的方式是获取获取上赛季时间,查询数据库中上赛季信息,得到上赛季id。流程中,我们会先计算表名,然后去执行持久化,而动态表名插件就会生效,去替换表名。原创 2024-03-31 10:40:24 · 1226 阅读 · 0 评论 -
分布式事务
XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。但是当我们把三件事情看做一个"业务",要满足保证“业务”的原子性,要么所有操作全部成功,要么全部失败,不允许出现部分成功部分失败的现象,这就是。但事务等待过程中,处于弱可用状态。,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用。原创 2024-03-26 13:32:16 · 1048 阅读 · 0 评论 -
RabbitMq高可用
如何确保RabbitMQ消息的可靠性?开启生产者确认机制,确保生产者的消息能到达队列开启持久化功能,确保消息未消费前在队列中不会丢失开启消费者确认机制为auto,由spring确认消息处理成功后完成ack开启消费者失败重试机制,并设置MessageRecoverer,多次重试失败后将消息投递到异常交换机,交由人工处理。原创 2024-03-23 13:17:00 · 859 阅读 · 0 评论 -
RabbitMQ部署指南
在刚刚的案例中,一旦创建队列的主机宕机,队列就会不可用。用户发送给队列的一切请求,例如发送消息、消息回执默认都会在主节点完成,如果是从节点接收到请求,也会路由到主节点去完成。从RabbitMQ 3.8版本开始,引入了新的仲裁队列,他具备与镜像队里类似的功能,但使用更加方便。而镜像模式下,创建队列的节点被称为该队列的。但是,不同队列可以在集群中的任意节点上创建,因此不同队列的主节点可以不同。我们使用exactly模式的镜像,因为集群节点数量为3,因此镜像数量就设置为2.可以看到,仲裁队列的 + 2字样。原创 2024-03-22 21:31:22 · 1218 阅读 · 0 评论 -
微服务保护
Sentinel是阿里巴巴开源的一款微服务流量控制组件。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态。原创 2024-03-22 15:30:57 · 1019 阅读 · 0 评论 -
ES高可用
默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smarttokenizer filter:将tokenizer输出的词条做进一步处理。原创 2024-03-21 19:59:12 · 1281 阅读 · 0 评论 -
02分布式搜索引擎ES
elasticsearch的查询依然是基于JSON风格的DSL来实现的。本文了解elasticsearch的数据搜索功能。我们会分别使用DSL和RestClient实现搜索。Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:精确查询:根据精确词条值查找数据,一般是查找原创 2024-03-20 16:03:55 · 1402 阅读 · 0 评论 -
01分布式搜索引擎ES
文档操作有哪些?创建文档:POST /{索引库名}/_doc/文档id { json文档 }查询文档:GET /{索引库名}/_doc/文档id删除文档:DELETE /{索引库名}/_doc/文档id修改文档:全量修改:PUT /{索引库名}/_doc/文档id { json文档 }增量修改:POST /{索引库名}/_update/文档id { “doc”: {字段}}JavaRestClient操作elasticsearch的流程基本类似。原创 2024-03-20 15:07:21 · 866 阅读 · 0 评论 -
elasticsearch安装部署
本文将向您揭示如何部署和管理Elasticsearch,让您能够充分利用其强大的功能,构建出响应迅速且可靠的搜索服务,以应对大规模数据处理的挑战。在互联网项目中,在网络间传输的速度很快,所以很多语言是不允许在网络上传递的,如:关于宗教、政治等敏感词语,那么我们在搜索时也应该忽略当前词汇。Elasticsearch作为一款高性能的搜索引擎和分析平台,以其强大的全文搜索功能、实时数据分析能力和水平可扩展性赢得了广泛的应用。IK分词器也提供了强大的停用词功能,让我们在索引时就直接忽略当前的停用词汇表中的内容。原创 2024-03-18 20:58:25 · 1882 阅读 · 0 评论 -
Gateway网关
Spring Cloud Gateway是Spring官方推出的一个新一代API网关框架,目的在于为微服务架构提供一种简单有效的统一的API路由管理方式。作为微服务架构中的关键组件,Gateway承担着请求路由、权限校验、监控、限流、熔断、日志记录等多种功能,旨在提高服务的安全性、可用性和可维护性。原创 2024-03-18 09:22:51 · 977 阅读 · 0 评论 -
Feign
Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。它是Spring Cloud中的一个模块,用于简化对REST服务的调用。使用Feign可以通过简单的接口描述来创建一个HTTP客户端。Feign的主要目标是让远程调用更加简单、编码更少、易于维护。Feign的核心特性声明式REST客户端:Feign提供了一种声明式的方法来定义REST客户端,使得服务之间的调用变得非常简洁。负载均衡:集成了Ribbon,Feign自带客户端负载均衡功能。容错与断路器。原创 2024-03-17 18:51:49 · 825 阅读 · 0 评论 -
Nacos安装与集群搭建
实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。官方推荐的最佳实践是使用带有主从的高可用数据库集群,主从模式的高可用数据库可以参考。将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3。Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。注意:此处的IP是你自己服务的IP,不一定要按照我的来!原创 2024-03-16 19:11:12 · 1077 阅读 · 0 评论 -
Nacos注册中心与配置管理
CAP定理,也称为布鲁尔定理(Brewer’s Theorem),是分布式系统设计中的一个基本概念,由加州大学伯克利分校的教授Eric Brewer在2000年提出。:一种对CAP定理的补充,提出如果在系统没有遇到网络分区(P)的情况下,那么系统需要在一致性(C)和延迟(L, Latency)之间做出选择。阶段发生在应用上下文的正常初始化之前,因此它是定义一些启动阶段行为(如配置服务器的位置、加密解密的密钥等)的理想场所。注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。原创 2024-03-16 18:56:12 · 966 阅读 · 0 评论 -
Eureka注册中心
Eureka 是 Netflix 开发的一款服务发现(Service Discovery)工具,它是 Spring Cloud Netflix 微服务套件的一部分。服务发现是微服务架构中的关键组件之一,允许服务实例在启动时向 Eureka 服务器注册自己的信息(如IP地址和端口),并定期发送心跳来更新状态。原创 2024-03-16 11:52:12 · 1191 阅读 · 0 评论 -
微服务初识
单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝微服务:一种良好的分布式架构方案①优点:拆分粒度更小、服务更独立、耦合度更低②缺点:架构非常复杂,运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件。原创 2024-03-15 22:27:00 · 990 阅读 · 0 评论 -
开发反应式API
当 Spring 团队在思考如何向 Web 层添加反应式编程模型时,很快就发现如果不在Spring MVC中做大量工作,就很难实现这一点。这涉及在代码中产生分支以决定是否要以反应式的方式来处理请求。本质上,这样做会将两个Web框架打包成一个,并用if 语句来区分反应式和非反应式。与其将反应式编程模型硬塞进Spring MVC 中,还不如创建一个单独的反应式 web框架,并尽可能多地借鉴 Spring MVC。Spring WebFlux 应运而生。spring 定义的完整开发技术站如图。原创 2024-03-15 22:04:19 · 1296 阅读 · 0 评论 -
MybatisPlus
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生(提供了快速使用mybatis的方式)。或说明目前我们使用MP自带的分页插件可以很友好的实现分页查询操作,但是如果一些查询需要我们自定义SQL,那该如何实现分页查询操作呢?实现流程自定义接口中直接传入Page分页对象即可;import com/*** @Description 定义mapper接口/**原创 2024-03-15 15:31:19 · 1139 阅读 · 0 评论 -
Sharding-JDBC
Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,核心由:JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成;功能特性:它们均提供标准化的数据水平扩展分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。接下来将介绍介绍:Sharding-JDBC;Sharding-jdbc 是ShardingSphere的其中一个模块,定位为轻量级Java框架。原创 2024-03-09 16:02:15 · 853 阅读 · 0 评论 -
分库分表
分库分表本质上就是为了解决由于库表数据量过大而导致数据库性能降低的问题;将原来独立的数据库拆分成若干数据库组成;将原来的大表(存储近千万数据的表)拆分成若干个小表;使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的;原创 2024-03-08 19:55:17 · 1153 阅读 · 1 评论