单体项目的特点:

1.复杂性高
2.技术债务
3.部署频率低
4.可靠性差
5.扩展能力受限
6.阻碍技术创新

微服务的特点:
1.每个微服务可独立运行在自己的进程里
2.一系列独立运行的微服务共同构建起整个系统
3.每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理,用户管理等。
4.微服务之间通过一些轻量级的通信机制进行通信,例如restful api进行调用
5.可以使用不同的语言和数据存储技术
6.全自动的部署机制

微服务的优点:
1.易于开发和维护
2.单个微服务启动较快
3.局部修改容易部署
4.技术栈不受限
5.按需伸缩

微服务的缺点:

1.运维要求较高
2.分布式固有的复杂性:系统容错,网络延迟,分布式事务
3.接口调整成本高
4.重复劳动

微服务设计原则:

1.单一职责原则

2.服务自治原则

3.轻量级通信机制
      
4.微服务粒度

spring cloud 的特点

1.约定优于配置

2.适用于各种环境:开发,部署在PC Server 或 各种云环境(阿里云,AWS等)

3.隐藏了组件的复杂性,并提供了声明式,无xml的配置方式
6.组件
4.开箱即用,快速启动

5.轻量级的组件

6.组件丰富,功能齐全:配置管理,服务发现,断路由,微服务网关等

7.选型中立,丰富:支持eureka,zookeeper,consul

8.灵活解耦

使用:gradle init --type pom 可以让maven项目变成gradle 项目。

linux: 配置 /ect/hosts

启动服务:java -jar xxx.jar --spring.profiles.active=peer1

为eureka server 添加用户认证:eureka server 是允许匿名访问的。

spring-boot-starter-security

security:
 basic:
  enabled: true #开启基于http basic 的认证
 user:
  name: user  #配置登录的账号
  password: user123  #配置登录账号的密码user123

注意:如果不设置,账号默认是user,密码是一个随机值,该值在启动时打印出来。

将微服务注册到需要认证的eureka server【修改eureka server yml defaultZone配置即可】:

eureka:
   instance:
     hostname: localhost
   client:
     #自己不是一个客户端
     registerWithEureka: false
     fetchRegistry: false
     serviceUrl:
       defaultZone: http://user:password@${eureka.instance.hostname}:${server.port}/eureka/

eureka server 提供rest端点,可以使用XML或者JSON与这些端点通信,默认是XML。

eureka server节点在短时间内丢失多客户端时,eureka server 就会进入自我保护模式,一旦进入该模式,eureka server 就会保护服务注册表中的信息,不再删除服务注册表中的数据。当网络故障恢复后,该eureka server节点会自动的退出自我保护模式。

#关闭自我保护模式

eureka:
  server:
   enable-self-perservation: false

使用ribbon 实现客户端负载均衡。

spring-boot-starter-ribbon
@Bean
 @LoadBalanced
 public RestTemplate restTemplate(){
  return new RestTemplate();
 }

雪崩效应:基础服务故障导致级联故障的现象称为雪崩效应,即提供者不可用导致消费者不可用,并将不可用逐渐方法的过程。

防止雪崩的措施就是让服务具有容错机制:
1.网络请求设置超时
2.使用断路由模式

hystrix :hystrix 是Netflix 开源的一个延迟和容错库,用于隔离访问远程系统,服务或者第三方库,防止级联失败,从而提升系统的可用性和容错性。通过以下几点实现延迟和容错:

1.包裹请求:使用hystrixCommand 包裹对依赖的调用逻辑,每个命令在独立线程中执行。

2.跳闸机制:当某服务的错误率超过一定的阈值时,hystrix 可以自动或手动跳闸,停止请求该服务一段时间。

3.资源隔离: hystrix为每个依赖都维护了一个小型的线程池(信号量)。如果该线程池已满,发往该
依赖的请求就被立即拒绝,而不是排队等候,从而加速失败判定。

4.监控:hystrix 可以近乎实时的监控运行指标和配置的变化。

5.回退机制:请求失败,超时,被拒绝,或当断路由打开时,执行回退逻辑。回退逻辑可由开发人员自行提供。

6.自我修复:断路由打开一段时间后,会自动进入“半开”状态。断路器打开,关闭,半开的逻辑转换。

hystrix 的隔离策略有thread(线程) 和 semaphore(信号量)两种,默认thread.

hystrix dashboard 让监控数据图形化,可视化。
turbine 聚合监控数据。

微服务网关的优点:

1.易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。

2.易于认证。可在微服务网关进行认证,然后再将请求发到后端的微服务,而无需再每个微服务中进行认证。

3.减少了客户端与各个微服务之间的交互次数

Zuul 简介:zuul 是Netflix开源的微服务网关,它可以和eureka,ribbon,hystrix 等组件配合使用。zuul 的核心是一系列的过滤器,这些过滤器的作用:

1.身份认证与安全:识别每个资源的验证要求,并拒绝哪些与要求不符的请求。

2.审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产试图。

3.动态路由:动态的将请求路由到不同的后端集群。

4.压力测试:逐渐增加指向集群的流量,以了解性能。

5.负载均衡:为每一种负载类型分配对应容量,并弃用超出限定值的请求。

6.静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。

7.多区域弹性:跨越AWS region 进行请求路由,旨在实现ELB(elastic load balancing) 使用的多样化,以及让系统的边缘更贴近系统的使用者。