引言
本系列博文主要为SpringCloud学习的博文系列。
- 到底什么是微服务
- SpringCloud组件介绍
一、到底什么是微服务
1、微服务的定义
"Microservice"
即微服务,在Martin Fowler的博文中介绍了微服务的具体概念。它是一种系统架构的设计风格。
以下是维基百科关于微服务的解释和说明:
微服务的起源是由 Peter Rodgers 博士于 2005 年度云端运算博览会提出的微 Web 服务(Micro-Web-Service) 开始,Juval Löwy 则是与他有类似的前导想法,将类别变成细粒服务 (granular services),以作为 Microsoft 下一阶段的软件架构,其核心想法是让服务是由类似 Unix管道的存取方式使用,而且复杂的服务背后是使用简单 URI 来开放界面,任何服务,任何细粒都能被开放 (exposed)。这个设计在 HP的实验室被实现,具有改变复杂软件系统的强大力量。
2014年,Martin Fowler 与 James Lewis共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API 通讯。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等元件实作。
它以具备单一责任与功能的软件单元为基础,每个服务都有自己的独立进程,它们通过模块的方法将它们进行组合,构成大型复杂的应用程序,每个独立运行的进程可以采用不同的编程语言实现,同时它们之间采用轻量级的通讯方式(HTTP API)实现各个服务之间的通信。这些服务可以被独立部署,同时它们都是围绕着业务功能进行构建的。
如果可以进行类比的话微服务就像一个人身体当中的各个器官,而人就是一个复杂的系统平台。每个器官都各司其职,完成自己的使命,如胃负责消化食物、肝部负责解毒、肾负责生成尿液、排泄代谢废物的功能等等。正是因为各个器官的相互协作,才构成人这个复杂系统。
2、微服务带来的问题
(1)运维复杂性
大量微服务构成庞大的分布式应用,这些微服务分布在多台服务器中,当分布式系统较为复杂时,所带来的软件运维的人力物力成本的提高。
(2)数据一致性
由于微服务的大多数进行了分布式部署,那么分布在各个服务器中的数据如何保证一致性成为了难题;
(3)分布式系统的复杂性
各个微服务可以独立部署,那么在分布式环境下,接口调用、日志追踪、分布式事务以及异步信息等带来的复杂性更高。
分布式架构示意图所示:
二、SpringCloud组件介绍
SpringCloud是Java开发分布式系统的开发套件,对分布式系统中需要的各种组件进行了封装。开发人员可以方便的以此作为基础进行开发,方便的构建分布式服务。主要提供了服务治理、断路器、控制总线、负载均衡等等,主要包括以下几个组件:
(1)SpringCloud Eureka---------------服务治理(服务自动化治理与发现)
SpringCloud Ribbon---------------客户端负载均衡
负载均衡是分布式系统中实现高可用、缓解请求压力以及服务能力扩容的重要手段。
SpringCloud Hystrix---------------断路器
服务容错保护,在微服务架构中,会包含很多种微服务,当其中的某个微服务发生异常时,如果有其他服务以来此微服务,那么可能胡造成业务链路的中断,影响平台的稳定运行。所以我们需要一种保护机制来保证系统的稳定性。
断路器的示例如下图所示:
图片来自于网络
SpringCloud Config---------------分布式配置服务
主要用于福分布式系统中的各个微服务进行集中式的配置支持,实现了对于服务端与客户端中环境变量与属性配置的抽象映射。
SpringCloud Zuul---------------API网关服务
对于系统外部的请求进行分派和调度,实现负载均衡请求路由等功能。
SpringCloud是一个开发套件,包含了很多适用于分布式服务的的各个组件。以上只介绍了部分,如果想要了解更多,可以查看SpringCloud官方网站。