0
点赞
收藏
分享

微信扫一扫

分布式微服务与springCloud之微简介

场景一:服务器集群

既然一台服务器无法hold住那么多请求线程,那就水平扩展一下,多找几个人来帮忙不就行了。

具体操作为:

        将原来的单体应用复制多份,然后反向代理负载均衡一下。 起初可以放在一个服务器中,每个单体应用为一个进程,监听一个端口;访问量再大时可以增加多个服务器,每个服务器中部署一个或多个应用,应用也是以进程的方式存在。

        然后用诸如Nginx、LVS、F5等软件或硬件,反向代理集群服务器,并设置响应的负载均衡算法,用一个域名统一对外提供访问。

场景二:分布式与微服务

面对繁杂的业务,单体应用的代码会变得非常多,开发和部署都很费时费力,而且单台服务器的能力有限不利于扩展。

这时我们要采用组件化的思想对系统进行拆分(这很难,需要对业务和技术都无比熟悉),拆分后每个子系统都能独立开发部署运行,无论是部署到单台服务器上,还是多台甚至异地的服务器上,子系统之后都是通过网络进行通信。拆分后的整个系统成为分布式系统,单个独立运行的子系统称为微服务。

综上,集群解决的是代码不庞大,但访问量大。分布式先解决系统代码庞大,之后到分布式集群时才解决单个模块访问量大,因为之后当单个模块访问量大时,可以针对单个模块进行集群处理。

场景三:springCloud

分布式系统构建。

无论是旧系统的拆分后构建还是从0开始构建分布式系统,都会遇到一下问题:

  1. 子系统间如何高效通信?
  2. 如何去找到有哪些服务的提供者和服务的消费者?
  3. 服务提供者调用超时怎么处理?突然间的访问量暴增冲垮了单个微服务怎么办?
  4. 这么多微服务,前端应该调用哪一个?对请求进行拦截过滤等操作在哪进行?
  5. 一个请求需要经过多个服务时,事务怎么保证?

针对问题1:

        springCloud提供了OpenFeign来处理服务间的高效通信。对比于之前的如HttpClient、RestTemplate等http工具,OpenFeign采用接口声明式的方式实现http通信,极大地简化了http通信代码的编写,除此之外OpenFeign还内置的请求日志记录工具、针对请求超时的处理、内置了Ribbon可以很方便的实现客户端负载均衡调用。

针对问题2:

        springCloud提供了Eureka来完成一个服务注册中心功能。所有的服务提供者和消费者都能在上面找到,并可以看到每个client的在线状态,起到了一个服务注册和统一管理的作用。支持服务名和服务IP的映射,代码中可以写服务名,这样当某些服务提供者更换IP后,只需要将当前应用的名称和之前保持一致即可,对于服务调用者来说是无感知的。这就是 “中间加一层” 的好处。

针对问题3:

        springCloud提供了hystrix来完成微服务的熔断、限流和降级处理,保障系统平稳运行。比如当B服务宕机导致A服务调用超时,因为此时线程还被占用着,试想一下如果该接口的访问量很大,将导致没有线程可用,该服务停止服务出现宕机,如果其他服务也调用该宕机的服务,也会出现线程池打满没有可用的线程,出现宕机,另外的服务也调用了这些宕机的服务时,也会跟着出现级联宕机的情况,整个分布式系统瘫痪只是时间的问题。所以此时就需要一个接口调用超时后自动断开连接的方法、接口突然收到大量访问导致瘫痪时自动暂时停止服务的方法、并作出超时或限流后的备用处理方法,这是hystrix就派上用场了,他就是专门干这个的。所以可以将hystrix形容为分布式系统的“守护天使”。

针对问题4:

        springCloud提供了gateway来作为整个分布式系统的网关。网关就是网络关口嘛。至于为啥要用网关?试想如果不用网关,前端直接通过IP+端口的方式也能调用,但是如果IP或端口变了呢?又或者如果某个微服务是集群的,服务器端又不做负载均衡,前端咋调用?如果使用网关的话,前端只需要调用网关,至于网关怎么去处理该请求就和前端无关了。

        其实网关就是在前端和后端众多微服务之间加了一层,做了一个代理,这样就可以解耦了,更加的灵活。他有点像代码中代表配置文件的单例配置类,有点像网络中的网关,有点像Nginx中的master进程,总之他就是整个分布式系统的大门,没有网关就是门都没有进不来

        如果用一个设计模式来形容分布式系统,我觉得会是外观模式,因为对于客户端来说,他只需要向网关发送一个url参数,就可以得到他想要的功能,至于网关内部是怎么实现的,客户端不需要知道,也不愿意知道。又或者是代理模式。

针对问题5:

        springCloud提供了个p,但是springCloudAlibaba倒是提供了一个叫Seata的框架,可以作为分布式事务的解决方案,保证数据的一致性。他提供了一个1+3组件模型来描述工作是如何运转的,挺有意思的,有兴趣的可以去他官网 看看,可以增加你的想象力。

另外,springCloud还提供了诸如

config分布式配置中心,将微服务的配置文件提取出来,可以实现统一的和实时的配置。

sleuth分布式请求链路追踪,可以看到一个请求在整个分布式系统中都经过了哪些微服务处理。

bus分布式消息总线

还有springCloudAlibaba提供的一个组件等。

        但是综上所述,能使用到springCloud提供的组件将上述5个问题或者前4个问题解决就很好了,不是说人家有啥我就用啥,贪多嚼不烂,适合自己的才是最好的,你说呢?

        本文主要是对集群、分布式概念做了简单介绍,并对分布式系统构建过程中可能会遇到的问题,以及如何利用springCloud提供的组件来解决这些问题,做了简单介绍,希望能对你有帮助,如果能引起你对分布式系统的兴趣,那就再好不过了,完了,谢谢,鞠躬!

举报

相关推荐

浅谈分布式微服务

0 条评论