通过 RPC 框架,能够解决服务之间的跨网络通信问题,是微服务改造的基础。
服务拆分之后,需要维护更多细粒度的服务,这样就涉及到 RPC 客户端服到服务端的 部署地址问题,如何维护? 这个时候就需要服务注册和发现。
所谓的服务发现,就是让服务调用方知道服务提供方的地址是啥? 比如 Ngnix 作为反向代理器,可以这样当请求到来时,可以通过 Nginx 知道应用服务器的地址是什么。这个就叫:服务发现。
答案:Nginx 是将应用服务器的地址放在配置文件中。
vi nginx.conf
location / {
proxy_pass http://39.107.125.254:8080/springwebdemo/loginaction.do?op=tologin;
proxy_set_header Host $host:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
#刷新配置
./nginx -s reload
proxy_pass 配置的就是对应的 url .
配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
但是这样存在一些问题:
注册中心两点功能:
有了第二个内容,当需要紧急扩容时,当服务器发生故障时,需要快速摘除节点,都不用重启就可以实现。
使用注册中心后,RPC 的通信:
服务端的增加减少对于客户端来说是透明的,这样可以实现不重启客户端,就可以动态地变更服务节点,并且实现优雅关机。
优雅关机的相对面是暴力关机,暴力停止服务,已经发送的请求还没有来得及处理,就被杀掉,这样会造成部分请求失败。因此需要在服务端退出的时候,先停止掉流量,不再受理新的请求,当服务处理完之后再关闭。