- RPC框架 如:dubbo
- 手写RPC模块
- HTTPClient调用
- RestTemplate
- OkHttp
- JDK HttpUrlConnection
规范了HTTP通信协议的标准
- HTTP METHOD 约束资源 *** 作类型 GET POST PUT DELETE
- REST是面向资源的 uri
- GET /order/${id}
- POST /order
- PUT /order
- DELETE /order/${id}
- 名词 uri是一个名词而不是动词
- HTTP返回码 2xx,3xx,4xx,5xx
-
系统已经长时间运行
-
以微服务架构开始
架构始终跟随需求变化
- 问题驱动
- 前置化规划
- 性能提升
- 团队(运维、开发)
- 基础设施
- 业务模型和整体架构的规划(数据库的拆分、应用层的优化)
<<拆分边界>>
- 功能维度
- 业务维度
- 康威定律(考虑团队结构)
- 拆分粒度(如:商品服务(商品库存、商品目标、商品评价、商品图片))
- PerfMa(JVM调优)
微服务中服务集群如何访问
Ribbon客户端负载均衡
- 解析配置中的服务器列表
- 基于负载均衡算法实现请求分发
通过LoadBalanceIntorceptor拦截RestTemplate,解析url
装饰器模式
Ribbon源码分析 初始化 LoadBalancerAutoConfiguration@Quelifier标记
List list = Collections.emptyList();
@LoadBalanced @Autowired(required = false) private ListrestTemplates = Collections.emptyList(); //拿到所有被@LoadBalanced注解的RestTemplate实例
-
@LoadBalanced
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @documented @Inherited @Qualifier //标记 public @interface LoadBalanced { }
-
LoadbalancerInterceptor
@Bean public LoadBalancerInterceptor loadBalancerInterceptor( LoadBalancerClient loadBalancerClient, LoadBalancerRequestFactory requestFactory) { return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); }
-
RestTemplateCustomizer
@Bean @ConditionalOnMissingBean public RestTemplateCustomizer restTemplateCustomizer( final RetryLoadBalancerInterceptor loadBalancerInterceptor) { return restTemplate -> { List
list = new ArrayList<>( restTemplate.getInterceptors()); list.add(loadBalancerInterceptor); restTemplate.setInterceptors(list); }; } -
SmartInitilizingSingleton
@Bean public SmartInitializingSingleton loadBalancedRestTemplateInitializerDeprecated( final ObjectProvider
- > restTemplateCustomizers) {
return () -> restTemplateCustomizers.ifAvailable(customizers -> {
for (RestTemplate restTemplate : LoadBalancerAutoConfiguration.this.restTemplates) {
for (RestTemplateCustomizer customizer : customizers) {
customizer.customize(restTemplate);
}
}
});
}
//定制所有被@Loadbalanced注解的RestTemplate实例
使用RestTemplateCustomizer定制所有被@Loadbalanced注解的RestTemplate实例
调用链路 RibbonLoadBalancerClient.execute-
request=ServiceRequestWrapper 通过匿名内部类创建
-
request.apply()
-
InterceotinaAsvncClientHttoRequest.executeAsync()
-
重构URL
- reguest.getURI()
- ServiceRequestWraoper.getURI()
- RibbonLoadBalancerClient.reconstructURI()
-
发起异步远程调用
AbstractAsvncClientHttoReguest.executeAsync()
-
未完…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)