1.微服务概述
1.1什么是微服务
微服务架构(MicroServicesArchitecture)是近几年来软件架构领域出现的高频词汇,它是基于传统的SOA架构演进而来的一种架构模。其提倡将传统的单体架构或分布式架构中的单体应用程序和服务划分成更小粒度的服务,这种服务我们称之为微服(Microservices)。这种服务独立运行在独立的进程中并与其它的进程相隔离,服务于服务之间通常采用基于Http的通信协议构建的RestFulAPI进行通信,每个微服务都围绕着具体的业务二构建,其能独立的开发,构建,发布和部署到类成产环境和生产环境,而不影响其它的依赖业务。
微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方法,2014年开始受到各方的关注,而2015年,可以说是微服务的元年;
越来越多的论坛、社区、blog以及互联网行业巨头开始对微服务进行讨论、实践,可以说这样更近一步推动了微服务的发展和创新。而微服务的流行,MartinFowler功不可没。这老头是个奇人,特别擅长抽象归纳和制造概念。特别是微服务这种新生的名词,都有一个特点:一解释就懂,一问就不知,一讨论就打架。
MartinFowler是国际著名的OO专家,敏捷开发方法的创始人之一,现为ThoughtWorks公司的首席科学家。在面向对象分析设计、UML、模式、软件开发方法学、XP、重构等方面,都是世界顶级的专家,现为ThoughtWorks公司的首席科学家。ThoughtWorks是一家从事企业应用开发和——集成的公司。早在20世纪80年代,Fowler就是使用对象技术构建多层企业应用的倡导者,他著有几本经典书籍:《企业应用架构模式》、《UML精粹》和《重构》等。
论文网址:https://martinfowler.com/articles/microservices.html#MicroservicesAndSoa
中文版翻译网址:http://blog.cuicc.com/blog/2015/07/22/microservices/
开发微服务有2套技术栈:
Dubbo(阿里开源的微服务框架) + ZooKeeper(注册中心) 杂牌军
SpringCloud(微服务框架) + Euraka(注册中心) 目前流行 全套
2.SpringCloud入门概述
2.1 SpringCloud简介
SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。
SpringCloud利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,它们都可以用SpringBoot的开发风格做到一键启动和部署。
SpringCloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
SpringCloud=分布式微服务架构下的一战式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶。
SpringCloud是Spring旗下的项目之一,官网地址:http://projects.spring.io/spring-cloud/
Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。
SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要涉及的组件包括:
Eureka:注册中心
Ribbon:负载均衡
Feign: 服务调用
Hystix:熔断器 服务的熔断、降级!
Zuul: 服务网关
config 配置中心
以上只是其中一部分,架构图:
2.2.SpringCloud与SpringBoot是什么关系?
① SpringBoot专注于快速方便的开发单个个体微服务。
② SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的_个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理’、事件总线、全局锁’、决策竞选、分布式会话等等集成服。
③ SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系.
④ SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
2.3.SpringCloud下载
官网文档:http://projects.spring.io/spring-cloud/
参考资料:
1)中文版的组件说明:https://springcloud.cc/spring-cloud-netflix.html
2)开发的API说明:
英文版:http://cloud.spring.io/spring-cloud-static/Dalston.SR1/
中文版:https://springcloud.cc/spring-cloud-dalston.html
2)springcloud中国社区:http://springcloud.cn
3)springcloud中文网:http://springcloud.cc
2.4 SpringCloud集成的相关项目
1、服务的注册与发现(Eureka)
2、服务消费者(rest+Ribbon)
3、服务消费者(Feign)
4、断路器(Hystrix)
5、断路器监控(Hystrix Dashboard)
6、路由网关(Zuul)
7、分布式配置中心(Spring Cloud Config)
8、消息总线(Spring Cloud Bus)
9、服务链路追踪(Spring Cloud Sleuth)
ALL: http://springcloud.cc
2.5.SpringCloud版本
SpringCloud的版本命名比较特殊,因为它不是一个组件,而是许多组件的集合,它的命名是以A到Z的为首字母的一些单词组成:
其中包含的组件,也都有各自的版本,如下表:
Component | Edgware.SR3 | Finchley.RC1 | Finchley.BUILD-SNAPSHOT |
---|---|---|---|
spring-cloud-aws | 1.2.2.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-bus | 1.3.2.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-cli | 1.4.1.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-commons | 1.3.3.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-contract | 1.2.4.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-config | 1.4.3.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-netflix | 1.4.4.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-security | 1.2.2.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-cloudfoundry | 1.1.1.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-consul | 1.3.3.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-sleuth | 1.3.3.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-stream | Ditmars.SR3 | Elmhurst.RELEASE | Elmhurst.BUILD-SNAPSHOT |
spring-cloud-zookeeper | 1.2.1.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-boot | 1.5.10.RELEASE | 2.0.1.RELEASE | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-task | 1.2.2.RELEASE | 2.0.0.RC1 | 2.0.0.RELEASE |
spring-cloud-vault | 1.1.0.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-gateway | 1.0.1.RELEASE | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |
spring-cloud-openfeign | 2.0.0.RC1 | 2.0.0.BUILD-SNAPSHOT |