一、什么是微服务?
1.微服务是一种架构模式或者一种架构风格。
2.微服务提倡将单一应用程序划分成一组小的服务并且独立部署
3.微服务之间相互配合、相互协调,每个服务运行在其独立的进程中。
4. 服务与服务间采用轻量级通讯,通常是基于HTTP的RESTful API等。
二、 微服务优点:
1. 微服务所需开发团队小,一般2-5人就可以(当然还是以实际需求为主)
2. 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的
3. 微服务技术栈不受限,可以使用多种语言开发。
4. 每个服务足够内聚,足够小,比较容易聚焦
5. 开发简单且效率高,一个服务只做一件事情
6. 易于和第三方集成,微服务允许容易且灵活的自动集成部署(持续集成工具有docker Jenkins,Hudson,bamboo等)
7 微服务只是涉及业务逻辑的代码,不会和前端页面进行融合
8. 每个微服务都可以有自己的存储能力,数据库可自有也可以统一,十分灵活
三、微服务缺点:
1. 分布式的复杂性
2. 运维要求较高
3. 依赖系统部署
4. 接口之间调整成本高
5. 微服务需要数据的一致性(分布式事务)
微服务架构
二、什么是springcloud?
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包
SpringCloud基于SpringBoot提供了一整套微服务的解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于Netflix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件
SpringCloud利用SpringBoot的开发便利性巧妙地简化了分布式系统的基础设施开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线,全局所、决策精选、分布式会话等等,他们都可以用SpringBoot的开发风格做到一键启动和部署。
总结:SpringCloud是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的几何体,俗称微服务全家桶。
springcloud 微服务
三、springcloud核心功能
1.Eureka:注册中心。
Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
Eureka主管服务注册与发现,在微服务中,以后了这两者,只需要使用服务的标识符(==就是那个在每个服务的yml文件中取得服务名称==),就可以访问到服务,不需要修改服务调用的配置文件
Eureka遵循AP原则(高可用,分区容错性),因为使用了自我保护机制所以保证了高可用。
2.Ribbon:负载均衡框架。Load Balance,微服务或分布式集群中常用的一种应用
一句话:简单来说负载均衡就是将用户的请求ping平摊的分配到多个任务上,从而实现系统的高可用。
3.Hystrix:容错框架,通过添加延迟阀值以及容错的逻辑,来帮助我们控制分布式系统间组件的交互。
Hystrix是一个用于处理分布式系统延迟和容错的开源库。分布式系统中,依赖避免不了调用失败,比如超时,异常等。Hystrix能保证在出现问题的时候,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
Hystrix类似一个“断路器”,当系统中异常发生时,断路器给调用返回一个符合预期的,可处理的FallBack,这样就可以避免长时间无响应或抛出异常,使故障不能再系统中蔓延,造成雪崩。
4.Feign:一个REST客户端,目的是为了简化Web Service客户端的开发
Feign是一个声明式WebService客户端,使用方法时定义一个接口并在上面添加注解即可。Feign支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持SpringMVC和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
5.Zuul:为微服务集群提供过代理、过滤、路由等功能。
6. Config:分布式配置中心组件,支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git、SVN。