微服务架构不是银弹,在微服务架构中,我们将面临很多新的问题,这时候势必会引入一个服务注册发现问题。本文作者向大家介绍了随着负载均衡位置的不同,三种主要的服务注册与发现和负载均衡方案。
1.微服务架构下服务注册与发现机制
随着微服务架构深入人心,越来越多的企业将微服务架构付诸实践。相比于传统的单体应用架构,微服务架构有着得天独厚的优势;在传统的单体应用架构下,因为功能集中,代码中心化,一个发布包部署发布在一个进程的应用程序中,单体应用架构已经无法满足企业业务快速变化的需求。
一方面,代码维护困难,扩展性较差,灵活性较低,另一方面,系统的修改成本,维护成本在增加以及构建时间,发布周期很长。而微服务架构,因为服务之间独立部署,每个服务在开发,测试,部署的时候,无论是开发周期还是难易程度,都比单块应用要好。
然而,微服务架构不是银弹, 在微服务架构中,会面临很多新的问题,微服务架构由一组小的服务组成,服务之间采用轻量级的通讯机制进行沟通,微服务之间调用关系是一个网状结构,一个微服务在调用另一个微服务的时候,无法知道另一个微服务的具体地址;由于每个服务属于”微”服务,每个服务生命周期不长,每个服务可能随时被关闭、重启、替换;在随着访问量增加的时候,微服务需要扩容,访问量减少时,微服务需要缩容;这样就导致每个微服务的地址在动态变化,这时候必然引入一个服务注册发现问题,也就是说客户端在调用的时候,需要知道服务端的地址,服务端在提供服务的时候,需要注册通告自己的地址,供客户端调用;同时服务端一般存在多个实例来提供服务,这就要求需要引入负载均衡的能力,随着负载均衡位置的不同,主要的服务注册与发现和负载均衡方案有三种。
2.常见的服务注册与发现的方案
1).集中式负载均衡方案
集中式负载均衡也叫服务端负载均衡,如图1所示,负载均衡器在一台单独的主机上,可以采用软负载,如nginx,apache等,也可以采用硬负载,如F5等,它负责多实例服务的负载均衡,客户端直接通过域名访问负载均衡器,DNS服务器将域名解析到负载均衡器IP上:
图片描述
该方案实现较为简单,仍是业界的主流,可以充分利用负载均衡器的能力,根据不同的负载策略将请求分发到后面的服务实例上;同时,该方案缺点也很明显,负载均衡器存在单点问题,所有的流量都需要通过负载均衡器,如果负载均衡器存在问题,则直接导致服务不能正常提供服务;中间经过负载均衡器做代理,性能也有一定损耗。
2).客户端负载均衡方案
客户端负载针对服务端负载的缺点,做了一定的改进,如图2所示,负载能力由客户端进程提供,服务端实例注册自己的地址到注册中心,客户端从注册中心订阅服务提供者的地址,获取地址后,根据负载均衡实现策略进行服务路由:
图片描述
该方案在解决了服务端负载的单点问题,每个客户端都实现了自己的负载功能,负载能力和客户端进程在一起,和客户端的生命周期一致,如果负载均衡进程down了,则客户端也down了,而且只影响本身客户端,不会影响其他客户端;同时,该方案也有一定的缺点,负载要求每个客户端自己实现,如果不同的技术栈,每个客户端则需要使用不同的语言实现自己的负载能力,技术难度较大;业界的motan,dubbo采用此方案做服务注册与发现。
3).客户端主机独立负载均衡方案
第三种方案综合了前2个方案的优缺点,如图3所示,服务发现和负载的能力从客户端进程移出,客户端进程和负载均衡进程是2个独立的进程,在同一个主机上;服务实例还是在启动的时候注册自己的地址到注册中心,客户端直接发送请求给本机的负载均衡器。
图片描述
该方案是一个典型的分布式方案,没有单点问题,如果一个主机的负载均衡器出问题,只影响一个节点调用,不影响其他的节点,负载均衡器本身负载也较小,性能损耗较低;同时也不需要多种语言实现自己的负载能力,负载能力是公用的;但是该方案部署复杂,维护困难,出了异常之后,调试负载,定位问题都比较麻烦。
3.新一代的选择
前面说了那么多,对于服务注册与发现,在普元新一代数字化企业云平台中,我们是怎么实践的?在数字化企业云平台中,我们选择了DevOps这条路来实现我们理想的运营,同时以微服务架构为核心。DevOps的逻辑架构(新一代更多内容,请移步本公众号菜单:纯干货—数字化转型)如图所示:
图片描述
服务注册与发现在DevOps的技术平台中,作为基础框架给上层DevOps后台服
务使用。
DevOps的运行视图如图所示:
图片描述
从图中可以看出,微服务之间存在错综复杂的调用关系,SRD主要解决各个微服务之间服务注册与发现的问题。在数字化企业云平台中,我们综合考虑了服务注册与发现几个方案的优缺点,同时结合我们平台的一些特点及技术栈,我们考虑了以下问题:
如何选择负载方案,我们选择了和方案三类似的负载方案;因为方案三弥补了前面两种方案的优缺点,带来的问题是部署复杂,但是我们采用K8S管理微服务的部署,负载本身的复杂由K8S自己解决了,不需要我们花很多成本解决部署难题。
在选择客户端主机独立负载的情况下,无法在服务提供者启动时获取到Cluster IP,我们的解决办法是通过域名访问,域名默认和当前应用名保持一致。
下面是我们服务注册与发现的架构图:
图片描述
服务提供者在启动时,将当前应用的域名注册到服务注册表,客户端通过服务注册表拿到服务提供者的服务域名,客户端通过dns解析到Cluster IP,然后发起调用。
摘自:http://geek.csdn.net/news/detail/100504
分享到:
相关推荐
美团点评微服务架构实践的过程展示了微服务架构从理念到实践的过程,从传统单体架构到分布式微服务架构的演进,其中不仅涉及技术选型、服务拆分、治理策略、弹性伸缩等技术问题,还涉及组织结构、技术文化等非技术...
- 服务治理包括服务注册、服务发现、负载均衡、熔断、降级、限流和健康检查等。Spring Cloud Netflix提供了Hystrix、Ribbon等组件,实现了这些功能。 5. **容器化与持续集成/持续部署(CI/CD)**: - Docker和...
2. **服务治理**:包括服务注册与发现、负载均衡、熔断和降级策略等,这些都是确保服务高可用和容错性的重要手段。快手可能详细介绍了他们使用的具体服务治理框架和技术实践。 3. **数据一致性**:在微服务环境下,...
- **微服务组件**:Eureka作为服务注册与发现,Feign实现声明式服务调用,Ribbon负责客户端负载均衡,Hystrix提供断路器以防止级联故障,Zuul作为API网关,Sleuth实现服务追踪,Swagger用于API文档的生成和交互。...
4. **服务发现**:如何利用服务注册与发现机制,让服务之间能动态地找到彼此。 5. **容错与熔断机制**:通过Hystrix等工具实现服务间的熔断和降级,保证系统的高可用性。 6. **测试策略**:针对微服务的单元测试、...
由于提供的【部分内容】中的信息...以上知识点总结了微服务架构的核心概念、实践落地方法、演进路径、面临的挑战与解决方案以及未来的发展趋势。通过理解和应用这些知识点,可以更有效地在企业中落地和演进微服务架构。
微服务架构的实践是一个持续改进的过程,涉及到技术选型、团队协作、文化变革等多个方面。通过深入理解和掌握这些核心概念,我们可以构建出更加灵活、健壮的分布式系统,以应对现代互联网业务的挑战。
在技术架构设计方面,平台通常会考虑使用Spring Cloud中的Eureka进行服务注册与发现,使用Ribbon和Feign实现客户端负载均衡,利用Hystrix实现服务的断路器保护机制,使用Zuul作为服务网关,处理外部请求以及路由转发...
微服务架构-服务网关 微服务架构中网关(Zuul)的相关功能、优缺点进行相关的普及和介绍。微服务网关是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能提供路由请求、鉴权、监控、缓存、...
3. **服务治理**:包括服务注册与发现、负载均衡、熔断机制、限流策略等,确保系统在高并发场景下的稳定运行。 4. **API网关**:统一处理所有客户端请求,提供路由转发、认证授权、监控统计等功能,减轻后端服务的...
- Java提供了强大的库和工具,来支持微服务架构中的服务注册与发现、配置管理、负载均衡和断路器模式等。 3. 架构师在微服务架构设计中的角色: - 架构师负责整个软件系统的架构设计,确保系统的整体健康和性能。...
- **服务注册与发现**:利用Eureka、Consul等工具实现服务自动注册与发现功能。 #### 四、实施步骤 1. **模块化改造**:首先将原有的单体应用拆分为多个独立的服务模块,每个模块负责一部分业务逻辑。 2. **接口...
文档中还提及“唯品m微服务架构系总绍”,这可能是杨钦民演讲的主题之一,他对唯品会微服务架构的整体介绍可能包括了服务的划分、服务注册与发现机制、服务之间的通信方式、服务的部署、监控、故障处理、扩展性设计...
2. 负载均衡:在微服务架构中,可以单独对服务进行水平扩展,即增加服务的实例数量以应对高负载请求。负载均衡器可以将请求均匀分配到各个服务实例上。 3. 存储量大:由于服务是独立的,每个服务可以使用适合其需求...
### 微服务架构设计与实践-内训方案 #### 第一课:知识原理篇 - **微服务定义及其本质**: - 微服务是一种架构风格,它将一个应用程序拆分成一组小型的服务,每个服务独立运行,通过轻量级通信机制(通常是HTTP...
Spring Cloud作为微服务的优秀框架,提供了包括服务注册与发现、配置中心、API网关、负载均衡、熔断器、限流等组件,帮助苏宁数据中台实现了这一转变。 1. **数据中台项目** 苏宁数据中台包含多个子项目,如OLAP、...
微服务架构面对的挑战与解决方案: 随着微服务架构的实施,业务的快速成长导致出现多个挑战,如业务复杂度的增加、团队规模的扩大、应用的维护、升级、部署难度提高、迭代效率下降、高并发业务的性能瓶颈、缺乏足够...