微服务概念相关

微服务概念相关

微服务概念

将单个系统拆为多个子系统,每个子系统独立部署,将原有通过代码直接引用调用,改为系统间的调用,目前多是restful。
目的是降低系统间的耦合性,提高系统可用度。

“微服务 ”一词源于 Marin Fowler 的名为 Microservices 的博文, 可以在他的官方博客上找到: http://martinfowler.com/articles/microservices.html。
简单地说, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作。 被拆分成的每一个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建, 并且每个服务都维护着自身的数据存储、 业务开发、自动化测试案例以及独立部署机制。 由千有了轻量级的通信协作基础, 所以这些微服务可以使用不同的语言来编写。

spring boot

javaweb快速开发框架,相比之前自己手动引入springmvc,spring等等框架,并需要进行一定量的配置,现在可以使用springboot框架,快速搭建开发环境进行开发;并使用了properties替代原有较复杂的xml配置;内置了tomcat,简化了部署过程。并且单个基于springboot的应用,可以作为springcloud的一个微服务组件,方便进行相关功能的集成。

spring cloud

springcloud提供了一整套的微服务解决方案,包含各个功能的各个组件,也是为了方便开发进行了大量的集成。

服务治理 Eureka

服务治理是微服务的中心,所有的服务都向此进行服务注册。调用方只需关系服务是什么,即通过服务名进行访问,此中心向调用者反馈被调用服务的信息,此为服务发现。
另外还有一点,服务中心可以自身为集群,实现高可用。避免所有服务依赖单一中心,一旦中心挂掉,依赖此中心的组件全部挂掉的尴尬场面。

eureka

以上图中的6个服务为例

  • 中间的两个Eureka Server为高可用集群,互为备份
  • 两边的两个服务提供者向注册中心进行注册
  • 上方的两个服务消费者可以通过注册中心获取到服务提供者的信息并进行调用
  • 通常服务都会向服务中心进行注册,多个服务间即可互相调用

负载均衡 Ribbon

传统的负载均衡是在集群前级加一个分流服务,常见F5或者nginx,通过此服务进行一定策略的分发实现负载均衡。

而在微服务中,每个服务可以通过注册中心获取到其他服务提供的信息,则可以在客户端本身通过一定策略进行负载均衡的实现。架构与上图类似,在服务消费者内部使用Ribbon,在任一消费者发起服务调用时,由于已经获取了两个服务提供者的信息,就可以实现负载均衡的访问调用。

容错保护 Hystrix

容错保护类似于断路器(Circuit Breaker),由于在微服务架构中,调用链可能较长,其中任意一个环节的问题都会导致整条调用链的失效。当某个服务出现故障后,向其调用方立刻返回一个代表错误的响应,避免长时间等待调用占用线程,从而避免故障在调用链中的传递。

API网关 Zuul

网关服务类似facade模式,对外提供一个统一的入口,并可通过自身向Eureka注册,获取其他服务的实例信息。通过url以区分目标服务进行分发。很类似nginx的反向代理配置:匹配上某个url模式,然后转发到对应的服务上。

Zuul的另一个主要功能是做统一的请求过滤,在分发到各个服务之前,可在此做一些过滤与拦截等等。

发表评论