rpc框架
文章平均质量分 79
沈鸿斌
爱生活,爱Coding
展开
-
如何写一个RPC框架(一):关注点与我的实现
开始造轮子之旅, 本期轮子:RPC框架。 在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第一篇文章, 主要从整体角度讲述了一个RPC框架组成结构与关注点, 并且附上了我的RPC框架的实现作为参考。 RPC框架的关注点首先,什么是RPC?RPC的全称是Remote Procedure Call,远程过程调用。RPC框架有很多,比如hsf、dubbo等等。借助RPC框原创 2017-10-28 14:52:47 · 3512 阅读 · 0 评论 -
如何写一个RPC框架(二):利用Bean容器和动态代理简化客户端代码
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第二篇文章, 主要讲述了如何利用Spring以及Java的动态代理简化调用别的服务的代码。 在本系列第一篇文章中,我们说到了RPC框架需要关注的第一个点,通过创建代理的方式来简化服务调用代码。如果不使用代理?如果我们不用代理去帮我们操心那些服务寻址、网络通信的问题,我们的代码会怎样? 我们每调用一次远端服务,就要在业务代码中原创 2017-10-28 18:39:12 · 2112 阅读 · 3 评论 -
如何写一个RPC框架(三):服务注册与服务发现
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第三篇文章, 主要讲述了服务注册和服务发现这一块。 在系列的第一篇文章中提到,我们的RPC框架需要有一个服务注册中心。 通过这个中心,服务可以把自己的信息注册进来,也可以获取到别的服务的信息(例如ip、端口、版本信息等)。这一块有个统一的名称,叫服务发现。对于服务发现,现在有很多可供选择的工具,例如zookeeper, et原创 2017-11-01 23:29:03 · 3578 阅读 · 1 评论 -
如何写一个RPC框架(四):网络通信之客户端篇
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第四篇文章, 主要讲述了客户端和服务器之间的网络通信问题。 模型定义我们需要自己来定义RPC通信所传递的内容的模型, 也就是RPCRequest和RPCResponse。@Data @Builder public class RPCRequest { private String requestId; pr原创 2017-11-12 14:36:13 · 2071 阅读 · 1 评论 -
如何写一个RPC框架(五):服务器端实现
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架(我已经实现了一个示例框架, 代码在我的github上)。 这是系列第五篇文章, 主要讲述了服务器端的实现。 在前面的几篇文章里, 我们已经实现了客户端创建proxy bean, 并利用它来发送请求、处理返回的全部流程: 扫描package找出需要代理的service 通过服务注册中心和Load Balancer获取se原创 2017-11-13 23:52:38 · 1044 阅读 · 0 评论 -
如何写一个RPC框架(六):负载均衡
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第六篇文章, 主要讲述了RPC中负载均衡这一块的内容。 常见的LB策略常见的LB策略有很多: RoundRobin (RR): 一个列表中轮着来 WeightedRoundRobin (WRR): 带权重的RR LocalFirst:本地服务优先 Random:随机选择 ConsistentHash: 一致性哈希 这些策原创 2017-11-19 13:50:01 · 3337 阅读 · 0 评论 -
对微信《Scalable Overload Control for Large-scale Microservice Architecture》论文的解读
这几年微服务大行其道,随之而来也伴随着很多问题: 服务注册和发现(常见解决方案如Consul, ZK, etcd) 熔断和降级 (如Hystrix) … 在服务过载时, 一个常见的解决方案是熔断。以前的熔断方案基本都是各个服务独自处理的, 即如果一个服务无法处理所有的请求, 那么就抛弃一部分请求。这种粗暴的处理方式并不能缓解整个系统的负载, 并且浪费了很多计算资源,比如以下场景: 假设...原创 2018-08-12 22:02:26 · 1055 阅读 · 1 评论