
手写源码系列
文章平均质量分 96
手写各种分布式中间件、开源框架。通过手写实现,理解原有的开源框架的设计思想和底层原理。
黄俊懿
放下期待、不抱希望地努力,踏踏实实,能走多远是多远。
展开
-
【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器
我们通过SpringAOP扫描被@Protected注解修饰的方法,给它们生成代理对象,并且通过SpringAOP的@Around注解定义了环绕增强逻辑,当请求被@Protected注解修饰的接口方法接收时,就会进入这里的增强逻辑,增强逻辑做的自然就是熔断、限流、降级等这些事情。当调用一个接口方法时,如果被流控,或者断路器处于打开状态,或者执行目标方法时超时或抛出异常,并且接口设置了降级回调,那么执行对应Fallback实现类的降级处理方法。限流也叫流控,也就是流量控制,作用是限制流入服务接口的流量大小。原创 2024-09-21 08:24:04 · 1761 阅读 · 1 评论 -
【深入理解SpringCloud微服务】深入理解微服务配置中心原理,并手写一个微服务配置中心
这里我们可以再回顾一下服务端的LongPollingService和客户端的LongPollingClient的关系。通过websocket建立了长连接建立连接后,会回调监听器RefreshListener发送对应的environment和serviceName,LongPollingService接收到后会保存其与Session的对应关系。原创 2024-08-31 11:10:45 · 1821 阅读 · 0 评论 -
如何从零开始手写一个消息中间件(从宏观角度理解消息中间件的技术原理)
消息中间件,也就是俗称的MQ。消息中间件是一个在分布式环境下提供消息收发能力的服务,消息生产者把消息发送到消息中间件,然后消息中间件存储生产者发送的消息,消息消费者请求消息中间件拉取消息,拉取到后进行消费。通过消息中间件,两个服务间可以异步的传递消息,满足了服务间消息传递的需求的同时,又避免了服务间的强依赖,达到了异步和解耦的效果。原创 2023-11-12 22:12:47 · 2403 阅读 · 0 评论 -
【手写实现一个简单版的Dubbo,深刻理解RPC框架的底层实现原理】
在以前都是单体应用的年代,是不需要RPC框架的,那时候还不知道RPC是什么,所有的数据都是来自于本地的数据库,然后全都是本地的方法调用。但是随着业务的发展,访问量的不断增加,原先的单体应用已经不能满足需求,于是要做应用拆分,原先的单体应用被拆成了多个服务,然后就出现了服务间调用的问题。这样复杂度就一下子上来了,如何解决服务间调用的问题呢?我们可以自己写代码,通过http的方式去访问对方,或者通过Socket连上对方的系统进行通信,发送调用的方法名和调用参数等信息。原创 2023-11-25 20:50:19 · 533 阅读 · 0 评论 -
【深入理解SpringCloud微服务】浅析微服务注册中心Eureka与nacos,手写实现一个微服务注册中心
最后,我们接入SpringBoot提供的自动装配机制,完成我们注册中心的自动配置,spring.factories文件配置指定我的配置类RegistryCenterServerConfig,然后我们的配置类RegistryCenterServerConfig通过@ComponentScan注解扫描RegistryCenterController、RegistryCenterService、定时任务类等一些核心类,定时任务使用Spring的@EnableScheduling和@Scheduled注解。原创 2024-07-20 11:22:58 · 1133 阅读 · 0 评论 -
【深入理解SpringCloud微服务】深入理解Ribbon原理并手写一个微服务负载均衡器
创建LoadBalancer前首先通过Java的SPI机制加载所有的负载均衡策略类LoadBalanceRule,再通过@Rule注解与配置文件的配置进行匹配,匹配出一个LoadBalanceRule。即使只有一个服务提供者,它的ip地址和端口好也是有可能会变的。由于有了负载均衡器,服务消费者请求服务提供者不再需要通过ip地址加端口号的方式,而是可以以服务名作为域名,负载均衡器会通过一定的负载均衡策略,选择服务名对应的微服务集群中的其中一个服务提供者节点,将请求地址中的服务名替换为该节点的ip地址端口号。原创 2024-07-27 21:23:22 · 1177 阅读 · 0 评论 -
【深入理解SpringCloud微服务】深入理解微服务中的远程调用,并手写一个微服务RPC框架
我们可以定义一个注解(比如OpenFeign的@FeignClient注解),注解需要指定服务名(表示这个接口是请求哪个微服务的),然后通过Spring的ClassPathBeanDefinitionScanner扫描我们自定义的注解修饰的接口,然后生成BeanDefinition,注册到Spring容器中。用于修饰启动类,表示启动微服务RPC功能。获取到服务名后,然后要读取接口方法上的注解,解析注解上的url,从注解解析出来的url前面拼接上修饰接口的自定义注解的服务名,就形成了完成的请求地址。原创 2024-08-10 09:56:02 · 1009 阅读 · 0 评论 -
手写实现一个ORM框架
首先介绍一下ORM框架的相关知识。数据库表是行列格式的,而Java是面向对象的,我们需要通过操作JDBC的结果集ResultSet,一行行遍历,再一列一列的处理结果,在new一个对象去set对应的值,这就显得非常繁琐,也与Java的面向对象编程格格不入。ORM框架就可以解决这个问题,通过对象与关系型数据库建立一个映射关系,就可以省去操作JDBC的结果集ResultSet这一步繁琐的操作,直接把对库表的查询结果映射成对应的对象。原创 2024-07-06 18:18:10 · 1043 阅读 · 0 评论 -
手写实现一个动态代理框架
首先我们来了解一下代理模式,代理模式是二十三种设计模式中的其中一种,用于对目标对象进行代理增强。代理类通常和目标类实现同一个接口,这样我们就可以用一个接口类型变量去引用一个代理类对象,然后又可以当成目标对象去使用。.........当我们对目标对象做了代理之后,就可以在调用目标对象方法的前后添加一些增强的处理逻辑。// 前置增强逻辑post();// 后置增强逻辑@Override...原创 2023-12-02 16:58:33 · 297 阅读 · 0 评论