一、什么是微服务
-
微服务化的核心就是将传统的一站式,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。
-
强调的是服务的大小,它关注的是某一点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭义的看,可以看作eclipse里面的一个微服务工程/或者Module。
二、微服务架构 -
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。
-
每个服务运行在独立的进程中,服务与服务间采用轻量级的通信机制,互相协作(通常是基于Http协议的Restful Api)每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建
三、微服务的优缺点
- 优点:
- 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求;
- 开发简单、开发效率提高,一个服务可能就是专一的只干一个指定的业务功能或业务需求;
- 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成;
- 微服务是松耦合的,是具有功能意义的服务,无论是在开发阶段或部署阶段都是独立的;
- 微服务能够使用不同的语言开发;
- 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过 持续集成工具,如Jenkins,Hudson,bamboo;
- 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值;
- 微服务允许你利用融合最新技术;
- 微服务只是业务逻辑代码,不会和html,css或其他界面组件混合
- 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库
- 缺点:
- 开发人员要处理分布式系统的复杂性。
- 多服务运维难度,随着服务的增加,运维的压力也在增大。
- 系统部署依赖。
四、微服务技术栈
微服务条目 | 落地技术 |
---|---|
服务开发 | Springboot,Spring,SpringMVC |
服务配置和管理 | Netflix公司的archaius,阿里的diamond |
服务注册与发现 | eureka,consul,zookeeper |
服务调用 | rest,RPC,gRPC |
服务熔断器 | hystrix,envoy等 |
负载均衡 | ribbon,nginx等 |
服务接口调用 | feign等 |
消息队列 | Kafka,rabbitmq,activemq |
服务配置中心管理 | Springcloudconfig,chef等 |
服务路由(API网关) | Zuul等 |
服务监控 | zabbix,nagios,metrics,spectator |
全链路追踪 | zipkin,brave,dapper等 |
服务部署 | docker,openStack,kubernates等 |
数据流操作开发包 | Springcloud stream |
事件消息总线 | Springcloud bus |
五.Springcloud的一些常用注解
- @EnableEurekaServer:申明此处为服务注册中心
- @EnableEurekaClient:表明自己是一个生产者,服务提供者
- @EnableDiscoveryClient:表明自己是一个消费者。
- @EnableHystrix:表示开启断路器
- @EnableTransactionManagement:开启事物管理
- @EnableHystrix:开启断路由
- @EnableHystrixDashboard:开启断路由仪表盘
- @EnableFeignClients:开启feign
- @EnableZipkinServer:开启zipkin服务追踪
- @EnableZuulProxy:开启ZUUL路由
六.Springcloud的通俗理解
Springcloud就是一个帮派的帮主,手下有许多小弟。
主要的小弟有:Spring Cloud Config、Spring Cloud Netflix(Eureka、Hystrix、Zuul、Archaius…)、Spring Cloud Bus、Spring Cloud for Cloud Foundry、Spring Cloud Cluster、Spring Cloud Consul、Spring Cloud Security、Spring Cloud Sleuth、Spring Cloud Data Flow、Spring Cloud Stream、Spring Cloud Task、Spring Cloud Zookeeper、Spring Cloud Connectors、Spring Cloud Starters、Spring Cloud CLI。
1.Spring Cloud Netflix
这个可是个大boss,地位仅次于老大,怎么说一个帮派也得有个得力干将,老大各项服务依赖与它,与各种Netflix OSS组件集成,组成微服务的核心,它的小弟主要有Eureka, Hystrix, Zuul, Archaius… 太多了
2.Netflix Eureka
服务中心,云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。这个可是springcloud最牛鼻的小弟,服务中心,任何小弟需要其它小弟支持什么都需要从这里来拿,同样的你有什么独门武功的都赶紧过报道,方便以后其它小弟来调用;它的好处是你不需要直接找各种什么小弟支持,只需要到服务中心来领取,也不需要知道提供支持的其它小弟在哪里,还是几个小弟来支持的,反正拿来用就行,服务中心来保证稳定性和质量。
3.Netflix Hystrix
熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。比如突然某个小弟生病了,但是你还需要它的支持,然后调用之后它半天没有响应,你却不知道,一直在等等这个响应;有可能别的小弟也正在调用你的武功绝技,那么当请求多之后,就会发生严重的阻塞影响老大的整体计划。这个时候Hystrix就派上用场了,当Hystrix发现某个小弟不在状态不稳定立马马上让它下线,让其它小弟来顶上来,或者给你说不用等了这个小弟今天肯定不行,该干嘛赶紧干嘛去别在这排队了。
4.Netflix Zuul
Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。当其它门派来找大哥办事的时候一定要先经过zuul,看下有没有带刀子什么的给拦截回去,或者是需要找那个小弟的直接给带过去。
5.Spring Cloud Config
俗称的配置中心,配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。就是以后大家武器、枪火什么的东西都集中放到一起,别随便自己带,方便以后统一管理、升级装备。
6.Spring Cloud Bus
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。相当于水浒传中日行八百里的神行太保戴宗,确保各个小弟之间消息保持畅通。