-
HTTPS
HTTP 不安全
http 协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非常容易遭遇劫持、监听、篡改,严重情况下,会造成恶意的流量劫持等问题,甚至造成个人隐私泄露(比如银行卡卡号和密码泄露)等严重的安全问题。
可以把 http 通信比喻成寄送信件一样,A 给 B 寄信,信件在寄送过程中,会经过很多的邮递员之手,他们可以拆开信读取里面的内容...
2018-08-25 04:43:23 |
Web
-
基于 netty4 手写 rpc-17-interceptor 拦截器
拦截器
说明
有时候我们需要统计方法的耗时,需要知道统计出参/入参的相关信息。
通过拦截器都可以非常方便的实现。
设计思路
无论是客户端还是服务端,只需要在方法执行前后,加入拦截器相关的方法调用,加入对应的上下文信息即可。
客户端实现
个人理解
目前主要在客户端添加拦截器,其实服务端是类似的。
代码实现
接口定义
package com.github.houbb.rpc...
2018-08-24 08:23:15 |
Java
-
基于 netty4 手写 rpc-16-gracefully shutdown 优雅关闭
优雅摘除服务
说明
我觉得这可以说是 rpc 最需要的一个功能。
因为他的实际意义非常重大,就是可以任意时间发布应用,而对业务无损。
以前发布应用都要等到半夜,很累也容易出问题。
思路
结合 java 的 ShutdownHook 以及 linux 的 kill PID 来达到这个目的。
ShutdownHook 讲解
服务提供方
停止时,先标记为不接收新请求,...
2018-08-24 08:23:15 |
Java
-
基于 netty4 手写 rpc-15-generic 泛化调用
generic 泛化调用
说明
泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。
GenericService barService = (GenericService) applicationContext....
2018-08-24 08:23:15 |
Java
-
基于 netty4 手写 rpc-14-fail 失败策略
fail 失败策略
说明
当我们调用服务失败的时候,有很多策略。
比如:
FailFast
快速失败
FailOver
尝试下一次调用
等等其他各种策略。
实现思路
不同的失败策略方式只是处理失败的方式不同而已。
这个主要放在客户端,当调用失败的时候,重新进行尝试即可。
代码实现
接口
首先,是失败策略的接口定义。
package com.git...
2018-08-24 08:23:15 |
Java
-
基于 netty4 手写 rpc-13-callType 调用方式
callType 调用方式
说明
不同的场景我们会希望有不同的调用方式。
常见的有三种调用方式:
(1)sync 同步调用
(2)async 异步调用
(3)oneWay 单向调用
个人感觉(1)(3)是最常见的需求,所以本次优先实现了这两种。
实现思路
不同的调用方式只是处理的行为不同而已。
可以将这个配置传递,分别在 client/server 的端进行相应的处理。
...
2018-08-24 08:23:15 |
Java
-
基于 netty4 手写 rpc-12-load balance 负载均衡
load balance
当我们有多个服务端时,就需要负载均衡进行选择。
策略
负载均衡的策略有很多,比如随机选择,权重选择,最小负载等等。
实现思路
直接将所有可以选择的服务端列举出来,通过实现对应的策略,选择一个即可。
代码实现
接口
为了便于拓展,我们定义一个接口。
/*
* Copyright (c) 2019. houbinbin Inc.
* rpc Al...
2018-08-24 08:23:15 |
Java
-
基于 netty4 手写 rpc-11-register center 注册中心
register 注册中心
上一节我们实现了 register 注册中心的基本实现,当然客户端和服务端也需要相关的实现调整。
服务端
ServiceRegistry
接口
调整如下:
package com.github.houbb.rpc.server.registry;
/**
* 服务注册类
* (1)每个应用唯一
* (2)每个服务的暴露协议应该保持一致
* 暂...
2018-08-24 08:23:15 |
Java