微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构是一种使用一组微服务来开发单体应用的方法,每个微服务运行在自己的进程中,并通过轻量级设备与HTTP协议的API进行通信。这些微服务基于业务模块进行划分,每一个业务功能对应一个微服务,并能够通过自动化部署机制来独立部署。这些微服务可以使用不同的编程语言以及不同的数据存储技术来实现,并保持最低限度的集中式管理。
微服务的英文名称是Microservice,它的架构模式就是将整个Web应用组织为一系列的Web微服务。这些Web微服务可以独立地编译及部署,并通过各自暴露的API接口相互通信。它们彼此相互协作,作为一个整体为用户提供功能,且可以独立地进行扩充。
微服务从单体应用架构演变而来,是架构风格(服务微化)的改变。微服务的特点是:①一个应用应该是一组小型服务;②可以通过HTTP的方式进行沟通;③每一个功能元素都是一个可独立替换、可独立升级的软件单元。
实现微服务的关键除了微服务本身,系统还要提供一套基础的架构,这套架构使得微服务可以独立地部署、运行、升级。不仅如此,这套架构还要让微服务与微服务之间在结构上为“松耦合”,而在功能上则表现为一个统一的整体。这种所谓的“统一的整体”表现出来的是统一风格的界面,统一的权限管理,统一的安全策略,统一的上线过程,统一的日志和审计方法,统一的调度方式,统一的访问入口等。微服务的目的就是有效地拆分应用,实现敏捷开发和部署。
微服务架构是SOA架构的一种全新的设计思想。它的核心思想是将相对独立的业务做成一个个服务,这些服务彼此独立,不同的服务可以由不同的开发团队负责,每个服务都可以独立开发、部署和管理。不同服务之间使用HTTP协议和轻量级的API进行调用。与单体架构或SOA架构相比,微架构的特点是松耦合、自治、组件化和去中心化。
目前微服务的开发框架,最常用的有以下4种:
· Spring Cloud:http://projects.spring.io/spring-cloud(现在非常流行的微服务架构,与Spring无缝对接)。
· Dubbo:http://dubbo.io(阿里巴巴开源的基于RPC的服务框架)。
· Dropwizard:http://www.dropwizard.io(关注单个微服务的开发)。
· Consul:微服务的模块。
微服务架构需要的功能或使用场景:
(1)我们需要把整个系统根据业务拆分成几个子系统。
(2)每个子系统可以部署多个应用,多个应用之间需要使用负载均衡。
(3)需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务并运用一定的策略来实现的。
(4)所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置、网关来判断一个URL请求由哪个服务来处理。请求转发到服务上的时候也使用负载均衡。
(5)服务之间有时候也需要相互访问。例如,有一个用户服务,而其他服务在处理一些业务的时候,要获取这个用户服务中的用户数据。
(6)需要一个断路器,以便及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。
(7)还需要一个监控功能,监控每个服务调用花费的时间等。