自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 如何从零开始写一个xxx-spring-boot-starter

我们从Spring Boot的自动配置讲起,举例一步步讲解了spring-boot-autoconfigure如何与spring-boot-starter-xxx模块配合,进而完成自动配置的。我们还引出了Spring的Beans概念,代码中的所有被Spring IoC容器所管理的实例,就叫做Beans。xml配置、注解配置也好,自动配置也罢,实际都是配置的Spring的Beans。我们还带领大家一步步地完成了自定义的scheduler-spring-boot-starter开发。

2023-10-16 08:54:31 111

原创 微服务不同环境到底该如何部署?最佳实践是什么?

作为开发,不光光要关心写代码,更要重视发布的重要性。微服务的发布有多种方式,云计算时代通过Docker镜像去发布是你的最优选择。要把打包一次,处处运行作为发布目标。想要实现上述目标,需要做到真正意义上的代码、配置分离,通过Docker环境变量注入,配合应用启动脚本,你可以做到真正意义上的代码、配置分离。希望今天的文章对大家有所帮助。

2023-04-25 17:20:58 868

原创 Spring Cloud Gateway如何优雅地进行feign调用

Spring Cloud Gateway通过WebFlux响应式框架实现了全异步处理,看过Spring Cloud Gateway源码的同学应该都深有体会,响应式编程的代码有多么难理解。正因为Spring Cloud Gateway的响应式编程,导致它直接调用feign会有问题,因为feign的调用是同步调用。遇到feign同步调用的问题,直接通过线程池强制将feign调用转成异步调用,简单粗暴,在我看来也并不是一个好的方案。

2023-04-13 16:09:05 7816 7

原创 微服务权限处理,为什么这么难?

应用拆分微服务后,一个不可避免的问题就是权限问题。拆分后的各个微服务如何处理权限,怎么处理才能保证满足业务的需求,怎么处理才能保持架构的简单及可维护?今天的文章,让我们来深入微服务架构下的权限处理问题,看看这个没有最佳实践的领域,如何能够针对业务需求来设计的较为优雅。1 先来理解几个名词关于权限,可能有很多相关名词,而且这些名词也很可能会让大家混淆或是疑惑(为了避免让大家产生疑惑,我就不列举这些名词了)。但本文中会用到几个核心的有关权限的词,理解这几个词对于理解本文必不可少,所以关于权限处理至少有下

2022-02-16 11:44:26 3223 3

原创 对于请求处理,先入库,再发消息,没你想得这么简单

微服务架构下,各个微服务间的通信方式是首先需要决定的事。微服务间的通信方式主要有REST、RPC和消息这三种。这三种通信方式各有优缺点,各有其适合的场景,关于它们的比较及分析今天就先不讲了。今天主要讲的是基于消息的通信方式下,先入库在发送消息的问题。基于消息的通信方式下,各个微服务间通过消息驱动来完成业务逻辑。一个典型的例子如下:上例中,用户服务处理用户注册请求,先入库,然后发送用户注册事件,邮件服务监听用户注册事件,然后发送欢迎邮件。那么就上述场景而言,对于用户服务,我们的业务代码该如何写呢?为什

2021-12-06 08:30:00 741

原创 分布式系统CAP理论及BASE理论简介

前言目前网络上介绍CAP理论及BASE理论的文章已经很多了,但很多文章内容都在重复,而且并不严谨。比如分布式系统一定要具备分区容忍性P,真的是这样吗,我们就不能够选择CA吗?本文将先介绍CAP理论及BASE理论的基本概念,然后总结下本文并谈谈自己对分布式系统理论的思考。希望阅读本文能够对大家有所帮助。CAP理论分布式系统的CAP理论是由Eric Brewer于1999年首先提出的,CAP是对Consistency(一致性)、Availability(可用性)、Partition tolerance(

2021-10-12 14:45:36 354

原创 性能测试,你需要了解这款工具

前言软件全生命周期开发中,离不开测试工作,一款高可用的产品更离不开性能测试,常见的性能测试工具有Loadrunner、JMeter等,我们在这篇文章中主要介绍下JMeter,以便让大家了解如何通过JMeter来进行性能测试。基本概念JMeter是一款开源的纯Java编写的性能测试工具,我们通常可以用它来测试Web应用程序,当然也可以用它来进行一些其他测试,比如数据库测试等。在这篇文章中,我们将通过使用JMeter来测试数据库访问并生成对应的测试报告,来学习使用这款性能测试工具。通过这篇文章,相信大家

2021-10-12 14:43:17 6523

原创 HTTP请求超时,到底发生了什么?

客户老是反应调用我们接口超时,但通过监控来看系统并没有什么异常,所以接口调用超时时到底发生了什么呢?让我们通过本文来一探究竟。1 模拟一下调用超时服务端程序(一个简单的REST接口,直接睡眠个10s,模拟响应时间长):@RestControllerpublic class HelloController { @GetMapping("hello") public String hello() throws InterruptedException { System.

2021-10-11 09:13:03 7555

原创 深入解析Redis集群的可扩展与高可用设计

在大型的分布式系统中,我们都会听到集群的概念,比如Redis集群、ES集群等。那么集群主要的作用是什么呢?个人看来集群主要做了这几件事,或者说集群的设计主要为了解决如下问题:(1) 可扩展,好的集群设计可以实现近乎线性扩展,即存储和性能随着硬件的增加而线性增长;(2) 高可用,能够在部分节点故障时实现故障转移。今天让我们一起来看看Redis集群是如何设计来解决可扩展及高可用问题的,从中我们又能得到哪些启发。1 Redis集群的可扩展设计Redis集群引入了hash slot的概念,实际上也就是

2021-09-28 14:31:39 340

原创 Nginx + Keepalive生产环境搭建

Nginx的主要用途有反向代理,负载均衡等,无论它作为哪种用途,Nginx本身也需要高可用来预防单点故障,Nginx的高可用可以通过搭配Keepalive来实现。主要思路即配置主备Nginx服务,通过Keepalive来进行检测,当主Nginx挂掉时,能够通过转移VIP的方式自动切换到备Nginx,进而实现Nginx的高可用。1 部署架构2 Nginx部署对于很多公司可能生产环境机器都是无法联网的,所以我们这里通过源码来安装Nginx。1) 下载源码包:nginx: download,解压缩后文

2021-08-09 11:08:00 1181

原创 Spring Cloud Gateway实现灰度发布功能

灰度发布又名金丝雀发布,在微服务中的表现为同一服务同时上线不同版本,让一部分用户使用新版本来验证新特性,如果验证没有问题,则将所有用户都迁移到新版本上。在微服务架构中,网关负责请求的统一入口,主要功能之一是请求路由。而灰度发布实质就是让指定用户路由到指定版本的服务上。所以该功能可以在网关这一层实现。今天就分享下Spring Cloud Gateway如何实现灰度发布。1 Spring Cloud Gateway的路由逻辑既然要让指定用户路由到指定服务版本,我们需要先了解Spring Cloud Ga

2021-07-07 10:02:37 11061

原创 让我们来一步一步地探索Skywalking

系统拆分微服务后,为了便于监控理解系统的行为,微服务之间的调用链监控是必不可少的。提到调用链监控,Skywalking又是不得不提的,本文是我对Skywalking初步调研后的内容整理,包括Skywalking的系统架构、性能影响、Agent集成部署等内容。希望能够对初次接触Skywalking的同学有所帮助。1 Skywalking初探之前写过一篇文章介绍了软件选型的一些内容,对于新技术的调研选型,个人主要关注系统架构、文档完善度、社区活跃度、功能特性是否符合需求及其他一些内容,今天也照着这个步骤来调

2021-06-24 18:46:29 532

原创 Apache RocketMQ只用了7个类就实现了Nameserver,你想知道是如何做到的吗?

Apache RocketMQ作为消息中间件相信大家都比较熟悉了,而NameServer作为RocketMQ的注册中心,也是整个RocketMQ中不可或缺的一部分,可能很多人并不知道这样一个注册中心源码实现其实只有7个类。今天就让我带领大家来一步步揭秘它是如何实现的。1 NameServer概述在文章开始,让我先来介绍一下NameServer在整个项目中的位置、承担的责任以及与各个组件的关系。NameServer组件在RocketMQ架构中的位置如下图所示:NameServer主要承担的责任如下

2021-06-17 10:01:04 217

原创 如何获取本地IP(收藏)

在应用开发中我们可能有需要获取到本地IP地址的需求,今天分享两种JAVA中获取本地IP的方法。获取本地IP地址有什么用途 ?(1) 运维统计功能。通过日志打印本地IP跟一些相关信息,方便监控统计。(2) 与第三方系统交互。可能需要带上我们的本地IP地址信息。如何获取本地IP地址Java中可以通过下面一行代码获取到IP地址:InetAddress.getLocalHost().getHostAddress();上面这行代码其实做了两件事,首先获取到操作系统的hostname,然后根据hostn

2021-06-17 09:27:27 842

原创 HTTP keep-alive、TCP Keep-Alive、心跳检测,傻傻分不清?

大家都知道HTTP 1.0和HTTP 1.1的区别在于连接复用,表现在协议里就是HTTP 1.1的请求头中会多一个 Connection: keep-alive,但是具体如何进行连接复用的可能很多同学并不是很清楚,今天我就通过抓包来具体解析HTTP 1.1协议,跟大家一起来看看连接复用到底是怎么一回事,跟随这个过程,同样也回答下HTTP keep-alive、TCP Keep-Alive以及心跳检测之间的区别。先来说说HTTP keep-alive首先问大家一个问题:浏览器刷新页面,可能会同时有多个请求

2021-06-17 09:20:35 2612

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除