请允许在我们的网站上展示广告
您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。
我已知悉
首页
🌟2024年度总结
动态
橙Bot
导航
翻译橙
标签分类
文章归档
专栏
图库
友链
留言板
1
搞定系统设计:如何设计一个限流器?
2
探究分布式哈希算法:哈希取模与一致性哈希
3
程序员小张的职场逆袭:向上反馈的力量
4
《提示词从入门到精通》读后感
5
程序员的成长建议
橙序员
累计撰写
194
篇文章
累计创建
66
个标签
累计收到
4
条评论
栏目
首页
🌟2024年度总结
动态
橙Bot
导航
翻译橙
标签分类
文章归档
专栏
图库
友链
留言板
搜索
标签搜索
成长
公众号
事务
流处理
大数据
旅行
mongo db
SUNO
github
IDEA
安全
注解
总结
求职
分布式事务
CAP
分布式系统
loadbalancer
装修
买房
前端
方案设计
AIGC
JVM
资讯
Netty
NIO
BIO
zookeeper
RocketMQ
MySQL
stable diffusion
spring MVC
spring AOP
JDBC
mybatis
logback
docker
consul
spring event
新冠
连接池
redis
运维
nginx
hiper-v
DDD
搞笑
数据库
团建
游戏
Gradle
心情
好物
eureka
spring framework
spring boot
设计模式
apache common
ShardingSphere
KAFKA
leetcode
spring cloud
feign
ES
起点
目 录
CONTENT
以下是
开发技巧
相关的文章
2024-01-01
如何保证分布式系统的一致性
分布式系统中的数据一致性、原子性、隔离性和持久性问题,需要通过分布式事务来解决。分布式事务可以采用二阶段提交(2PC)、三阶段提交(3PC)、尝试-确认-取消(TCC)或SAGA模式等不同协议来实现。在CP系统中,分布式事务更常见以确保数据的强一致性;在AP系统中可能会采用最终一致性策略。2PC适用于强一致性场景,但可能存在阻塞、单点故障等问题;3PC适用于减少阻塞时间的场景,但仍有不确定性;TCC适用于复杂业务逻辑场景,但实现相对复杂;SAGA适用于长事务和异步补偿场景,灵活性更高。不同协议适用于不同场景,需要根据具体需求进行选择。 Seata使用基于二阶段提交的AT模式来解决分支事务并发的原子性问题。
2024-01-01
492
0
0
开发技巧
2023-12-30
从CAP出发看懂分布式系统
CAP 理论提出了一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)这三个在分布式系统中无法同时满足的概念。在 CP 系统中强调一致性和分区容错性,例如 ZooKeeper,只有领导者节点能进行读写操作。而在 AP 系统中强调可用性和分区容错性,例如 Eureka,节点间采用异步方式进行数据同步。节点故障场景下的处理策略包括不视为成功、异步处理和消息队列、故障转移和重试、监控和报警等。AP 系统保证最终一致性,常用的数据一致性保证方法包括版本向量、修复性复制、基于向量时钟的最终一致性、原子写操作和逻辑时钟。根据不同的应用场景,可以选择适合的 CP 或 AP 系统来保证系统的稳定性和性能。
2023-12-30
581
0
0
开发技巧
2023-12-26
服务如何管理和维护
从需求、技术、安全、运营、运维、协作六个角度出发,服务管理和维护是服务健康的关键。需求分析包括业务、用户、功能、非功能、系统、质量、验收标准、界面、法规、数据、文档等需求。需求开发和迭代注意事项包括使用合适的开发方法论、明确定义需求、与利益相关者充分沟通、设定优先级和验收标准等。技术方面涉及编程语言、框架、数据库、Web框架、消息队列、缓存、微服务架构、容器化技术、监控和日志、安全工具、自动化构建部署等多方面。架构设计要考虑可扩展、可维护、可靠和安全的系统架构。性能优化手段包括代码优化、数据库优化、并发和并行处理等。总的来说,服务管理和维护需要全方位考虑需求、技术、安全等多个方面,确保服务能够稳健、高效地运行。
2023-12-26
480
0
0
开发技巧
2023-12-24
一文读懂分布式服务
本文总结了分布式服务开发中的一些关键概念和问题场景,包括高负载、高并发、故障等,并介绍了相应的处理方式,如分布式缓存优化、负载均衡和服务发现、自动伸缩、异步消息队列和事件驱动、限流和熔断、自动化监控和调优等。此外,还提出了如服务限流、服务熔断、服务降级、缓存策略、分布式系统架构设计、监控和报警等解决服务故障和避免雪崩的措施。最后,介绍了分布式服务解耦的方式,包括消息队列、事件驱动架构、观察者模式、事件总线、分布式日志、异步消息通知和Webhooks等。通过这些方式可以实现服务之间的松耦合,提高系统的弹性和稳定性。
2023-12-24
439
0
0
开发技巧
2023-12-10
LoadBalancer如何替代ribbon实现负载均衡?
Spring Cloud不再使用Ribbon的原因主要有三点:一是Ribbon已停止维护和开发,未来不确定;二是微服务架构中负载均衡应移至服务注册中心;三是Spring Cloud推荐使用Spring Cloud LoadBalancer替代Ribbon,提供更灵活易扩展的解决方案。Spring Cloud LoadBalancer是通用的负载均衡器,支持多种算法和自定义扩展。Open Feign中的负载均衡通过FeignBlockingLoadBalancerClient实现,选择要调用的实例使用负载均衡策略。Spring Cloud已开始推荐使用Spring Cloud LoadBalancer替代Ribbon,提供更为现代化和灵活的负载均衡解决方案。
2023-12-10
1273
0
1
开发技巧
2023-11-29
mongodb优化实践
存容量设置为2GB:wiredTiger.engineConfig.cacheSizeGB: 2设置缓存预加载:在WiredTiger配置项下,设置wiredTiger.engineConfig.cachePressure参数,用来指定缓存预加载的策略。可以将cachePressure设置为warm,表示在数据库冷启动时,会预加载缓存。例如:wiredTiger.engineConfig.cachePressure: warm保存配置文件并重启MongoDB:保存配置文件并重启MongoDB服务,使配置参数生效。通过以上步骤设置缓存容量和缓存预加载可以提高MongoDB在冷启动时的性能表现,并加快恢复到正常状态的速度。通过调整缓存容量和缓存预加载策略,可以最大程度地利用系统资源,提高MongoDB的性能和响应速度。
2023-11-29
512
0
0
开发技巧
2023-11-25
Eureka如何进行服务管理
本文介绍了Eureka服务端如何接收并维护客户端实例信息。首先通过EurekaServerAutoConfiguration创建必要组件,包括Eureka面板管理、与客户端的通讯、注册中心启动器等。然后通过EurekaServerInitializerConfiguration配置类进行服务启动。接着介绍了Jersey3框架用于构建RESTful Web服务的基本概念和功能,以及如何通过Jersey3EurekaServerHttpClientFactory创建基于Jersey3的EurekaServerHttpClient。Jersey提供了一组API和工具,简化了在Java应用程序中创建和开发RESTful Web服务的过程。总的来说,本文详细介绍了Eureka服务端的启动流程和Jersey框架的基本原理,帮助读者深入了解Eureka服务端的工作机制和相关技术。
2023-11-25
416
0
0
开发技巧
2023-11-12
从线上问题看服务注册
本文介绍了Eureka服务注册的工作流程和相关组件。首先,通过EurekaAutoServiceRegistration实现服务的注册入口。然后,使用EurekaServiceRegistry进行服务的注册操作。接下来,通过EurekaClientAutoConfiguration创建EurekaClient的实例。在客户端创建EurekaClient后,会创建与注册EurekaClient的调度任务,并且会有一个线程负责刷新本地注册信息,另一个线程负责向注册中心注册心跳信息。最后,介绍了当注册中心配置错误时,微服务会打印的堆栈信息。
2023-11-12
661
0
0
开发技巧
2023-11-05
服务的注册与发现如何完成?
本文介绍了Spring Cloud服务的注册和发现流程,首先通过spring-cloud-commons包定义了注册和发现的规范流程,然后通过各个注册中心和管理中心进行具体的服务注册和实现。服务注册和发现包括两个步骤,一是通过EnableDiscoveryClient注解开启自动注册服务,二是在容器启动时向注册中心的注册表进行注册。其中,HostInfoEnvironmentPostProcessor获取了服务实例所属主机信息的属性,并将其封装到springCloudClientHostInfo属性源中。CompatibilityNotMetFailureAnalyzer用于解析当配置不兼容报错时,返回适当的提示信息。在Spring的自动配置中,引入了客户端状态配置和四种客户端的配置,包括通用客户端、响应式客户端、复合客户端和简单客户端。
2023-11-05
495
0
0
开发技巧
2023-11-04
Node.js与vue初识
update命令,可以将项目中所有已安装依赖项更新到最新版本。npm publish:将开发者自己的包发布到npm仓库,使其他人可以通过npm install命令安装并使用。发布前需要先登录npm账号,并使用npm adduser命令进行身份验证。以上是npm一些常用的命令和使用方法,通过这些命令可以方便地管理和使用项目的依赖项。
2023-11-04
670
0
0
开发技巧
2023-10-30
META-INF文件夹详解
META-INF文件夹通常位于JAR文件或WAR文件的根目录下,用于存放一些元数据和配置文件。常见的文件结构及其作用有:MANIFEST.MF用于描述JAR文件的内容和属性;INDEX.LIST用于加快JAR文件的搜索速度;services目录用于存放Java标准服务加载器加载的配置文件;spring.factories用于注册和配置Spring应用程序中的自定义扩展点或实现类;maven目录用于存放与Maven构建工具相关的元数据信息和配置文件。需要注意的是,META-INF文件夹的位置应该在项目的classpath根目录下。虽然META-INF目录在Spring项目中经常使用,但它并不是Spring项目特有的,而是Java项目中常见的一个目录。
2023-10-30
2629
0
0
开发技巧
2023-10-25
方案设计:构建高效数据处理系统
以保证数据写入的可靠性,即在数据写入失败时进行重试,直到成功为止。高并发对于高并发场景,需要考虑使用分布式缓存和消息队列等技术来提高系统的并发处理能力。综上所述,一个综合性的方案设计需要考虑业务需求、上线方案以及模型设计,并在数据推送、检索、同步、服务治理、数据写入等方面进行详细的设计和优化。这些方案设计的合理性和准确性直接影响着系统的性能、可靠性和扩展性。因此,在设计方案时应充分考虑各种因素,并选择合适的技术和工具来实现。
2023-10-25
747
0
0
开发技巧
2023-09-25
Open Feign如何运行的?
Open Feign是一个用于在Spring Boot应用中使用的轻量级HTTP客户端工具。在使用Open Feign时,我们需要在启动类上加上@EnableFeignClients注解,并导入FeignClientsRegistrar类。FeignClientsRegistrar类实现了ImportBeanDefinitionRegistrar、ResourceLoaderAware和EnvironmentAware这三个接口。ImportBeanDefinitionRegistrar接口用于将Feign客户端的bean定义添加到Spring容器的bean定义注册表中,ResourceLoaderAware接口用于加载Feign客户端,EnvironmentAware接口用于获取Feign客户端的相关配置。整个注册过程可以分为三个步骤:获取Feign相关的配置、使用加载器加载Feign客户端,并将其注册到容器中。在注册过程中,需要注册两个bean定义:我们自定义的Feign全局配置类和所有的Feign客户端的自定义配置类。通过这样的注册方式,我们可以方便地在Spring Boot应用中使用Open Feign来进行HTTP请求发送。
2023-09-25
591
0
0
开发技巧
2023-09-15
如何将自己的博客接入AIGC?
这篇教程介绍了如何为自己的博客接入AI能力,其中使用了chat GPT和Azure AI等工具。首先需要注册一个类似的AI账户,推荐使用付费的但支持国内支付的SMS接码网站来获取非大陆用户手机号。然后在官网申请一个API,并在服务器上设置代理来使用open ai api。接下来介绍了两种建立AI应用的方案:fast GPT和flowise。如果项目庞大且复杂,建议使用第一种方案;如果场景单一且轻量化,则建议使用第二种方案。具体操作可参考GitHub的readme文档,并通过docker compose快速搭建流程。在创建合适的应用之前,先搭建一个示例来演示如何通过对话记录询问AI获取最新文章。选择连续对话的客户端,需要内存和语言模型。对于内存,可选择历史会话直接缓存、窗口缓存或会话摘要缓存。对于语言模型,选择特定的模型类型,如gpt3.5-16k,根据版本和请求的大小决定处理能力和效率。最后,使用工具栏中的选项进行总结,生成200字以内的摘要。
2023-09-15
1047
0
2
开发技巧
2023-09-03
JVM如何工作的?
Java编译器将Java源代码编译为字节码,类加载器将字节码加载到内存中并创建类的定义,解释器逐条解释执行字节码指令,即时编译器将字节码编译成本地机器码。
2023-09-03
423
0
0
开发技巧
2023-08-13
Netty中的网络通信模型
Reactor模型是一种常用的网络通信框架,包括了单线程模型、线程池模型和多线程模型。在单线程模型中,每个通信对端会与一个线程绑定,该线程负责处理通信的各项操作。但在高并发场景下,会造成性能下降,因此引入了线程池模型,将单线程替换为线程池,大大提高了系统的性能。而在多线程模型中,连接操作与IO操作分开处理,并使用不同的线程池,进一步提升了系统的性能。Netty-Server采用了多线程模型,其中线程池由EventLoopGroup扮演,每个EventLoop与一个线程绑定,用于处理Channel与Server之间的操作。Netty-Client则采用了线程池模型,与Server建立连接后无需区分连接请求与IO请求。另外,Proactor模型是一种异步非阻塞I/O的网络通信模型,与Reactor模型相比,具有不同的特点。
2023-08-13
511
0
0
开发技巧
2023-08-13
Netty管道处理器做了什么
netty中的管道处理器是用于网络通信中的数据的初始化、处理器的注册以及通道数据的读写。默认的管道实现是DefaultChannelPipeline,它是一个处理器双向链表,包含头节点和尾节点处理器。当我们调用管道的addLast方法添加处理器时,会向链表中添加一个DefaultChannelHandlerContext,其中包含了上下节点和ChannelHandler。ChannelHandler负责消息的传递和写入,通道入道处理器读取对方发送的消息内容,通道出道处理器将消息写入通道。在服务端通道注册时,默认状态为接收就绪,而客户端通道注册时,默认状态为读就绪。总的来说,netty的管道处理器是用于网络通信中初始化、处理器注册和数据读写的机制。
2023-08-13
473
0
0
开发技巧
2023-08-13
Netty如何创建和管理事件循环?
使用EventLoopGroup创建事件循环组时,会先创建MultithreadEventExecutorGroup和SingleThreadEventExecutor两个线程池。MultithreadEventExecutorGroup会创建事件组线程池和事件循环数组,并通过选择器选择下一个事件循环。SingleThreadEventExecutor会创建事件线程池、执行事件循环,并维护任务队列。单线程事件线程池通过execute方法确保只有一个线程在执行任务。事件循环主要是SingleThreadEventExecutor的子类,实现了run方法。通过类关系图,了解了事件循环组的创建流程和内部实现。
2023-08-13
486
0
0
开发技巧
2023-08-13
Netty如何封装NIO(二)?
本文总结了在NIO编程中线程组的作用和不同线程组在服务端和客户端中的分配。客户端需要一个主线程组和一个解析线程组,而服务端则需要主线程组、轮询线程组和解析线程组。主线程组负责连接建立和端口绑定等操作,轮询线程组用于监听连接和处理读写请求,解析线程组则负责数据编码和解码。文章进一步讨论了轮询的实现方式和需要定时轮询的操作,以及如何通过任务队列进行异步执行。最后介绍了事件循环和事件循环组在网络事件处理中的作用,以及通道和通道处理器在NIO编程中的功能和设计模式的应用。总体而言,文章提供了NIO编程中线程组和事件处理的概念和实现方式。
2023-08-13
415
0
0
开发技巧
2023-08-12
Netty如何封装NIO
Netty是一个基于Java的异步事件驱动的网络应用框架,它通过对NIO进行封装,提供了更方便、高效的网络编程方式。
在传统的BIO(Blocking I/O)中,客户端与服务端之间都是单线程操作,导致效率低下。而在NIO(Non-blocking I/O)中,通过轮询和异步连接的方式,可以同时处理多个连接,提高并发性能。
Netty对NIO进行了封装,提供了更高级别的抽象和功能,使开发者能够更方便地进行网络编程。它提供了事件驱动的模型,通过事件的触发和处理,实现了异步、非阻塞的网络通信。
通过Netty,开发者不需要自己处理底层的轮询和异步连接,而是可以专注于业务逻辑的实现。Netty提供了许多内置的组件和工具,例如线程池、编解码器、协议支持等,使网络编程更加简单、高效。
总之,Netty通过对NIO的封装,提供了更方便、高效的网络编程方式,使开发者能够轻松地构建高性能的网络应用。
2023-08-12
445
0
0
开发技巧
2023-08-09
NIO如何解决阻塞问题?
NIO通过使用Selector和多路复用器的概念,有效地解决了BIO中线程开销过大的问题。在BIO中,每个客户端连接对应一个线程,导致服务端需要开启大量线程处理连接请求,造成巨大的资源消耗。而NIO中,引入了Selector来负责检查所有连接的就绪状态,通过轮询注册在其上的通道,获取就绪状态的通道进行处理。这样一来,一个Selector可以轮询多个通道,大大减少了线程的数量,提高了资源利用率。同时,NIO中使用了缓冲区来存储请求数据,可以在任务完成后发送通知,避免了连接超时的问题。总之,NIO通过Selector和缓冲区的方式,有效地解决了BIO中的线程开销问题,提高了系统的并发性能。
2023-08-09
481
0
0
开发技巧
2023-08-09
BIO阻塞在了哪里?
客户端与服务端之间的交互流程如下:
1. 创建服务端socket,绑定系统端口并监听此端口的客户端连接。
2. 创建客户端连接,指定ip和端口地址。
3. 客户端发起连接请求,服务端接收并受理连接。
4. 连接建立成功,客户端与服务端开始数据交互。
5. 服务端处理客户端请求的流程如下:
- 通过走读源码可以了解到交互的具体流程。
- 关键类的定位:ServerSocket、Socket、SocketImpl等。
- SocketImpl是所有socket实现类(如PlainSocketImpl)的父类,提供了socket相关的方法定义。
- PlainSocketImpl是默认的socket实现类,实现了具体的服务端和客户端操作逻辑。
- DualStackPlainSocketImpl是PlainSocketImpl的拓展类,实现了具体的服务端和客户端操作的相关系统交互。
BIO的C/S架构中,每个客户端连接对应一个线程,服务端与客户端并发访问数呈1:1的关系。这种架构缺乏弹性伸缩能力,当并发访问量过大时,系统可能会产生线程堆栈溢出、创建新线程失败的问题,导致宕机或僵死,无法对外提供服务。
2023-08-09
497
0
0
开发技巧
2023-07-30
zookeeper是如何工作的?
Zookeeper维护持久节点和临时节点组成的空间,通过监听节点数据实现节点及其子节点的数据一致性。Zookeeper的数据存储结构与Unix文件系统相似,使用znode作为最小的数据单元,并可以保存数据和挂载子节点。节点类型包括持久节点、持久顺序节点、临时节点和临时顺序节点,它们具有不同的生命周期。会话是Zookeeper中重要的概念,客户端与服务端之间的交互操作都与会话相关。常见的会话状态有连接中、已连接和已关闭。
2023-07-30
502
0
0
开发技巧
2023-07-29
Zookeeper如何保证一致性?
CAP定理指出,在一个分布式系统中,一致性、可用性和分区容错性这三个特性无法同时满足。分布式系统的一致性表示多个主机之间的数据是否保持一致;可用性表示系统能够在有限时间内对用户请求做出响应;分区容错性表示系统在网络分区故障时依然能够保证一致性和可用性。CAP原则指出,分布式系统只能满足一致性和可用性中的两项,即CP或者AP。BASE理论是CAP定理的权衡结果,它通过允许系统在出现故障时损失部分可用性,以及允许数据存在中间状态来实现最终一致性。Zookeeper遵循CP原则,实现了一致性但牺牲了可用性。Zookeeper内部使用的一致性协议是ZAB协议,它是对PAXOS算法的一种实现,用于达成分布式系统中的决议一致。PAXOS算法通过分配唯一编号和记录已接受提案来保证一致性。
2023-07-29
567
0
0
开发技巧
2023-07-25
为什么不建议写大SQL?
这篇文章主要讨论了在老项目技术优化过程中,数据层常见的几个难题:阅读难、拆表难等。作者提出,应该避免过多的关联查询,而是赋予各个领域对象查询能力。同时,需要注意聚合函数的使用,应该将统计能力赋予给领域对象而非数据库。文章还介绍了两种方案来解决大数据量的统计问题:一是建立统计表进行定时落地,二是利用nosql技术进行实时统计。最后,作者指出在面对大数据时,即使对分组条件加索引也难以实现满意的优化效果,建议使用统计表和nosql技术来优化数据处理性能。文章强调了保持面向对象的编程思维对于应对数据层技术优化的重要性。
2023-07-25
476
0
0
开发技巧
1
2
3
4
5