觉得微服务难?那是你没有看到这篇文章!看完你就知道有多简单!

本文探讨了微服务架构的优势,并介绍了Martin Fowler的观点。通过对比单体架构和微服务架构,阐述了微服务在复杂应用交付中的重要性。文章详细讲解了Eureka、Ribbon、Feign和Hystrix等关键组件,以及微服务网关Zuul和Spring Cloud Gateway的作用。最后提到了Spring Cloud Stream、Config和Apollo等工具。

如今微服务倍受关注:文章、博客、社交媒体和会议演讲都在讨论微服务。微服务正在迅速朝着加德纳技术成熟度曲线(Gartner Hype cycle)的高峰前进。与此同时,也有持怀疑态度的软件社区人员认为微服务没什么新鲜可言。反对者声称它的思想只是面向服务架构(SOA)的重塑。然而,无论是炒作还是怀疑,不可否认,微服务架构模式有非常明显的优势 —— 特别是在实施敏捷开发和复杂的企业应用交付方面。

而Martin Fowler大师《重构》一书中有说过一句话,大概意思就是,“ 每次对原有系统进行修改调整的时候是一个非常好的重构契机。

用两张图给大家看一下

单体的时候系统架构是这样的

相信不用我多说太多,每一个做过大型网站项目的老铁,都应该知道这种系统架构的蛋疼

所以在系统演化下,我们来看这个

同样的系统实现,但是不同的组织架构,却让系统的可用性更加高,也方便后期的开发工作

所以微服务在我看来,这是一个契机,无论怎么样,最终随着主体业务的复杂化,终会以各种不同的形式靠拢其中

那无论是出于面试还是知识点的学习,我想,对于微服务,学习一下,对你后期一定会有一些帮助

day1

随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

微服务基础知识

Eureka

Ribbon

day2

这一次主要介绍 Feign 和 Hystrix 两个知识点

Feign

Feign是Netflix开发的声明式,模板化的HTTP客户端,其灵感来自RetrofitJAXRS-2.0以及WebSocket.Feign可帮助我们更加便捷,优雅的调用HTTP API。在SpringCloud中,使用Feign非常简单—―创建一个接口,并在接口上添加一些注解,代码就完成了。

Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

Hystrix

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。

  • 包裹请求∶使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用了设计模式中的“命令模式"。
  • 跳闸机制︰当某服务的错误率超过一定的阈值时,Hystrix可以自动或手动跳闸,停止请求该服务一段时间。
  • 资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。如果该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等待,从而加速失败判定。
  • 监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、超时、以及被拒绝的请求等。
  • 回退机制︰当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。回退逻辑由开发人员自行提供,例如返回一个缺省值。
  • 自我修复∶断路器打开一段时间后,会自动进入“半开"状态。

Feign

Hystrix

day3

在学习完前面的知识后,微服务架构已经初具雏形。但还有一些问题∶不同的微服务一般会有不同的网络地址,客户端在访问这些微服务时必须记住几十甚至几百个地址,这对于客户端方来说太复杂也难以维护。如下图:

如果让客户端直接与各个微服务通讯,可能会有很多问题∶

  • ·客户端会请求多个不同的服务,需要维护不同的请求地址,增加开发难度
  • ·在某些场景下存在跨域请求的问题
  • ·加大身份认证的难度,每个微服务需要独立认证

因此,我们需要一个微服务网关,介于客户端与服务器之间的中间层,所有的外部请求都会先经过微服务网关。客户端只需要与网关交互,只知道一个网关地址即可

网关概述

zuul

Gateway

day4

springcloud Stream

springcloud config

Apollo

 需要资料的小伙伴,点赞加收藏,关注我之后添加小助理vx:bjmsb0606006 即可获取免费下载方式

### RPC系统与微服务架构的关系 #### 微服务架构的核心概念 微服务架构是一种将单一应用程序划分成一组小型服务的设计方法,其中每个服务都围绕具体的业务能力构建,并可以通过轻量级通信机制独立部署和运行[^2]。这种架构强调模块化和服务自治性,从而提高了系统的灵活性、可维护性和扩展性。 #### RPC框架的作用 RPC(Remote Procedure Call)作为一种分布式通信协议,提供了使客户端能够像调用本地函数一样调用远程服务器上的过程的能力[^1]。它隐藏了底层网络细节,简化了跨进程间的数据交换流程。 #### RPC系统是否属于微服务架构 严格意义上讲,RPC本身并不是一种架构模式而是实现服务间通信的一种技术手段或工具集。然而,在实践中许流行的RPC框架如gRPC确实被广泛应用于支持基于微服务架构的应用程序之中[^3]。这是因为它们满足了微服务对于高效可靠互联的需求: - **高效通信**: 使用诸如Protobuf之类的高性能序列化方案来最小化开销。 - **语言无关性**: 支持种编程语言之间的无缝集成,这非常适合由不同团队分别开发的不同组件构成的大规模分布式环境。 - **强类型契约定义**: 提前约定好接口形式有助于确保一致性和稳定性。 因此可以说虽然RPC并非特指某类特定结构但它是当前主流微服务平台下不可或缺的一部分基础设施之一[^4]。 --- ```python # gRPC示例展示如何创建简单的Greeter服务 import grpc from greeter_pb2 import HelloRequest, HelloReply from greeter_pb2_grpc import GreeterServicer, add_GreeterServicer_to_server class MyGreeter(GreeterServicer): def SayHello(self, request, context): return HelloReply(message=f'Hello, {request.name}!') def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) add_GreeterServicer_to_server(MyGreeter(), server) server.add_insecure_port('[::]:50051') server.start() try: while True: time.sleep(86400) except KeyboardInterrupt: server.stop(0) if __name__ == "__main__": serve() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值