tnblog
首页
视频
资源
登录
愿你出走半生,归来仍是少年
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
欢迎加群交流技术

服务注册与发现-架构演进

5131人阅读 2019/12/9 12:17 总访问:1627528 评论:0 收藏:0 手机
分类: 架构


随着业务的发展,用户量日益上升,单一的系统越来越复杂,越来越庞大,单纯的提升服务器性能始终有顶天的一天,我们可以通过分布式技术,例如:服务器集群,水平业务划分,应用分解,系统分流,微服务架构等方式来解决系统性能问题和复杂业务问题。


第一篇:架构演进

在分布式体系下服务注册与发现将会以核心组件而存在,也将是接下来讨论的话题。

Lazy服务注册与发现(一)

由于应用的分解,微服务的引入,服务越来越多,业务系统与服务系统之间的调用,都需要有效管理。

在服务化的早期,服务不是很多,服务的注册与发现并不是什么新鲜的名词,Nginx+内部域名服务器方式,甚至Nginx+host文件配置方式也能完成服务的注册与发现。

架构图如下:

各组件角色如下:

Nginx通过多域名配置实现生产者服务路由,通过upstream对生产者提供负载均衡,通过checkhealth对生产者提供健康检查。

在内部域名服务器/本地host文件配置服务域名的方式,实现域名与服务的绑定。

生产者提供服务给消费者访问,并通过Nginx来进行请求分发。在服务化的早期,服务较少,访问量较小,解决了服务的注册与发现与负载均衡等问题。随着业务的发展,用户量日益上升,服务也越来越多,该架构的问题暴露出来:

1)最明显的问题是所有的请求都需要nginx来转发,同时随着访问量的提升,会成为一个性能瓶颈。

2)随着内部服务的越来越多,服务上线nginx的配置,内部域名的配置也越来越多,不利于快速部署。

3)一旦内部网络调整,nginx upstream也需要做对应的配置调整。

Lazy服务注册与发现(二)

由于所有的请求都需要nginx来转发,同时随着访问量的提升,会成为一个性能瓶颈,为了解决这个瓶颈,引入下面这个架构。



这个架构在nginx的上层加入了LVS,LVS基于第四层的IP转发,一定限度提高了并发能力,但是所有请求都通过LVS来转发。

同时nginx分组,服务分组,虽然nginx不再是瓶颈的所在,但是这样带来的代价太高,配置越来越多,工作量越来越大,对系统压力需要有预见性,有效nginx分组,服务分组部署。

Lazy服务注册与发现(三)

由于所有的请求都需要LVS来转发,同时随着访问量的提升,会成为一个性能瓶颈,为了解决这个瓶颈,引入下面这个架构。

tip:这种消费者选择调用不同的服务,感觉应该是前后端分离的项目吧,前端调用后端的接口,前端决定调用那个接口。

但是始终要访问服务器,通过服务器下载html静态页下来哇,如果那台电脑挂掉全部就挂了哇


在这个架构基础上需要做两件事情:

对系统压力需要有预见性,有效nginx分组,服务分组部署。

消费端需要编程实现分组选择,可以是轮训,random等实现,我们每一个消费者同时承担了的负载均衡的职责。

ZK服务注册与发现 (一)

通过架构三解决了nginx的瓶紧,但是服务上下线需要在nginx,域名服务器做相应的配置,一旦服务的IP端口发生变化,都需要在nginx上做相应的配置,为了解决这个问题引入下面这个架构。


通过架构三解决了nginx的瓶紧,但是服务上下线需要在nginx,域名服务器做相应的配置,一旦服务的IP端口发生变化,都需要在nginx上做相应的配置,为了解决这个问题引入下面这个架构。

服务在启动的时候就将endpoint注册到Zookeeper对服务进行统一管理。

服务节点增加Endpoint不需要做任何配置,ZK将以Watch机制通知消费者。

消费者本地缓存了提供者服务列表,不需要转发,直接发起服务调用。


缺点:

需要通过zookeeper API来实现服务注册与发现,负载均衡,以及容错,为了解决nginx的瓶紧架构三也是需要通过编程的方式实现负载均衡。

ZK服务注册与发现 (二)

Zookeeper数据模型结构是一个树状层次结构。每个节点叫做Znode,节点可以拥有子节点,同时允许将少量数据存储在该节点下,客户端可以通过NodeCacheListener监听节点的数据变更,PathChildrenCacheListener监听子节点变更来实时获取Znode的变更(Wather机制)。

以下是点融成都服务注册结构,见下图,接下来的讲解也将以这个结构为基础:

ZK服务注册与发现 (三)

1./com/dianrong/cfg/1.0.0/rpcservice: 命名空间,用来跟其他用途区分。

2./com/dianrong/cfg/1.0.0/rpcservice下的所有子目录由两部分组成,

“应用名称” + “-” +  “分组名称”例如:ProductService-SG1,ProductService-SG2, 对应Nginx注册中心Nginx-SG1, Nginx-SG2


3. 服务分组下的所有子节点为临时节点,key为“PROVIDER”+ IP(去符号.)  + “-” + 端口,Value为endpoint信息。

例如:PROVIDER1921681010-8080   = http://192.168.10.10:8080



链接:https://www.jianshu.com/p/c144a577f3d1



欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价