我们的微服务架构及Spring Cloud各个组件的概要
2018-01-21 22:46
253 查看
初识spring cloud
我们目前的架构
我们将来的架构
什么是Spring Boot
Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只需要很少的Spring配置。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是Spring Boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring Boot整合了所有的框架(不知道这样比喻是否合适)。
更多介绍
springboot学习资料汇总
什么是Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,Spring Cloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,Spring Cloud做为大管家就需要提供各种方案来维护整个生态。
Spring Cloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之间的通讯、熔断、监控等
springcloud学习资料汇总
为什么选择使用spring cloud
随着项目的发展和业务的增加,单体应用面对的业务需求更加广泛,不断扩大的需求使得单体应用变的越来越臃肿。松耦合性,服务之间功能独立,能够独立部署,服务之间相互依赖
高扩展性,分散资源,团队协同工作,可无限扩展,更高的代码重用率。
作为一个新手,准备实施微服务框架时,为了避免前辈踩过的坑,在一些核心问题的解决方案上,我们的选择多之又多,这必然会导致在做技术选型的初期,需要花费巨大的时间调研,分析与实验精力
Spring Cloud整合了来自不同公司或组织的诸多开源框架。它不仅是解决微服务中的某一个问题,而是一个解决微服务架构实施的综合性解决框架。
Spring Cloud具有非常强大的技术后盾Spring,具有非常活跃的技术社区,频繁的优化和更新。
spring cloud目前国内使用情况
中国联通子公司 http://flp.baidu.com/feedland/video/?entry=box_searchbox_feed&id=144115189637730162&from=timeline&isappinstalled=0上海米么金服
指点无限(北京)科技有限公司
易保软件 目前在定制开发中http://www.ebaotech.com/cn/
广州简法网络
深圳睿云智合科技有限公司 持续交付产品基于Spring Cloud研发 http://www.wise2c.com
猪八戒网,目前调研中
上海云首科技有限公司
华为 整合netty进来用rpc 包括nerflix那套东西 需要注意的是sleuth traceid的传递需要自己写。tps在物理机上能突破20w
东软
南京云帐房网络科技有限公司
四众互联(北京)网络科技有限公司
深圳摩令技术科技有限公司
广州万表网
视觉中国
上海秦苍信息科技有限公司-买单侠
爱油科技(大连)有限公司 爱油科技基于SpringCloud的微服务实践
广发银行
卖货郎(http://www.51mhl.com/)
拍拍贷
甘肃电信
新浪商品部
春秋航空
冰鉴科技
万达网络科技集团-共享商业平台-共享供应链中心
网易乐得技术团队
饿了么某技术团队
高阳捷迅信息科技–话费中心业务平台–凭证查询及收单系统
组件及功能介绍
spring-boot-actuator
actuator是springboot中一个用来做系统健康检测的一个模块,它提供一个resetful的api接口,可以将系统运行过程中的磁盘空间、线程数、以及程序连接的数据库情况通过json返回,然后再结合预警、监控模块进行实时系统监控。- 功能:
HTTP方法 | 路径 | 描述 | 鉴权 |
---|---|---|---|
GET | /autoconfig | 查看自动配置的使用情况 | true |
GET | /configprops | 查看配置属性,包括默认配置 | true |
GET | /beans | 查看bean及其关系列表 | true |
GET | /dump | 打印线程栈 | true |
GET | /env | 查看所有环境变量 | true |
GET | /env/{name} | 查看具体变量值 | true |
GET | /health | 查看应用健康指标 | false |
GET | /info | 查看应用信息 | false |
GET | /mappings | 查看所有url映射 | true |
GET | /metrics | 查看应用基本指标 | true |
GET | /metrics/{name} | 查看具体指标 | true |
POST | /shutdown | 关闭应用 | true |
GET | /trace | 查看基本追踪信息 | true |
management.security.enabled=false
pom文件增加:
<dependency> < 4000 ;groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
spring-boot-actuator 学习
spring-cloud-netfix
spring-cloud-eureka云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
服务注册 每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号,通讯协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。另外,服务中心还需要以心跳的方式去检测清单中的服务是否可用,如不可用,需要从服务清单中删除,达到删除故障服务的效果。
服务发现 由于在服务治理下运作,服务间的调用不再采用通过具体的实例地址来实现,而是通过向服务服务名发起请求调用实现(ribbon),服务注册中心返回服务名对应的所有的实例清单。
注意:
服务续约任务调用时间间隔,默认30s
服务缓存清单默认每30s更新一次
服务失效时间默认90s
默认每60s讲当前清单中超过90s(没有续约)的服务剔出去
自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制。(Eureka自我保护机制,通过配置 eureka.server.enable-self-preservation来true打开/false禁用自我保护机制,默认打开状态,建议生产环境打开此配置)
1、Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。 2、Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。 3、当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。
spring-cloud-zuul
Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
过滤器
filterType:过滤类型
返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下: * pre:路由之前 * routing:路由之时 * post: 路由之后 * error:发送错误调用
filterOrder:过滤器的执行顺序
shouldFilter:判断该过滤器
run:过滤器具体的逻辑
请求路由
cookie与头信息
Spring Cloud Zuul 在请求路由时,会过滤掉HTTP请求头中的一些敏感信息,包括Cookie、Set-Cookie、Authorization三个属性
设置方法:
对指定路由开启自定义敏感头
zuul.routes..customSensitiveHeaders=true
将指定路由的敏感头信息设置为空
zuul.routers..sensitiveHeaders=
禁用过滤器
zuul...disable=true
其中SimpleClassName代表过滤器的类名,filterType代表过滤器类型
动态路由
动态过滤器
spring-cloud-ribbon
提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
通过RestTemplate实现面向服务接口的调用。支持GET,POST,PUT,DELETE 。可以返回对象。
负载均衡策略
RandomRule 从实例列表随机选取。选择逻辑在一个while(server == null)循环之内,正常情况下都应该选出一个服务示例,如果出现死循环获取不到服务实例,则有可能存在并发的Bug
RoundRobinRule(默认) 按照线性轮循一次选择每个实例。随机次数超过十次,结束尝试
RetryRule 内部还定义了一个IRule,默认RoundRobinRule。在指定时间内反复尝试,超时返回null
weightedResponseTimeRule 基于RoundRobinRule增加了根据实例的运行情况来计算权重,然后根据权重挑选实例。主要有三个核心内容:
定时任务
每30s执行一次权重计算
权重计算
记录每个实例的统计信息,累加所有实例的平均响应时间,得到总平均响应时间totalResponseTime
循环所有的实例计算其权重,weightSoFar+=totalResponseTime - 实例平均响应时间,其中weightSoFar初始化值为0。每个实例权重结果保存到ArrayList currentWeights中。
实例选择
判断最后一个实例的权重是否< 0.001d,若小于,采用RoundRobinRule策略
生成一个[0,最大权重值)区间内的随机数。
遍历权重清单currentWeights,若权重大于等于随机的得到的数值,就选择这个实例
其他
spring-cloud-Feign
Feign是一种声明式、模板化的HTTP客户端。
Spring Cloud Feign 在RestTemplate的基础上作了进一步的封装,由它来帮助我们定义和实现依赖服务接口的定义。我们只需要创建一个接口并用注解的方式来配置它。
spring-cloud-hystrix
熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
在分布式架构中,当某个服务单元发生故障(类似电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝), 想调用方返回一个错误响应,而不是长时间等待,这样就不会使得线程因调用故障服务被长时间占用不放,避免了故障在分布式系统中的蔓延
针对这一机制,Spring Cloud Hystrix实现了断路器,线程隔离等一系列服务保护功能。它也是基于Netfix的开源框架Hystrix实现的,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Hystrix具备:
服务降级
服务熔断
请求总数(默认20)
错误百分比(默认50)
线程和信号隔离
请求缓存
请求合并
服务监控
成功数,短路/熔断数,超时数,线程拒绝数,失败/异常数,最近10s的错误比例,请求频率,断路器状态,百分位延迟统计,集群下的主机报告
集群监控(Turbine)
spring-cloud-config
随着微服务架构的实施,我们拆分出了很多的微服务以及子系统,各种配置信息都以明文形式配置在配置文件中,同时各种定时任务也散落在各个微服务以及子系统中,非常难管理git
配置文件内容
#spring.cloud.config.server.git.uri:配置git仓库地址 #spring.cloud.config.server.git.searchPaths:配置仓库路径 #spring.cloud.config.label:配置仓库的分支 #spring.cloud.config.server.git.username:访问git仓库的用户名 #spring.cloud.config.server.git.password:访问git仓库的用户密码
例子:
spring.cloud.config.server.git.uri=https://github.com/super-potato/spring-cloud-config.git spring.cloud.config.server.git.searchPaths=springcloudconfig spring.cloud.config.label=master spring.cloud.config.server.git.username=super-potato spring.cloud.config.server.git.password=
http请求地址和资源文件映射如下
#/{application}/{profile}[/{label}] #/{application}-{profile}.yml #/{label}/{application}-{profile}.yml #/{application}-{profile}.properties #/{label}/{application}-{profile}.properties
例子:
spring.application.name=server-zuul spring.cloud.config.label=master spring.cloud.config.profile=dev spring.cloud.config.uri= http://localhost:8888/ server.port=8088
svn
spring-cloud-bus
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。消息代理是一种消息验证、传输、路由的架构模式。它在应用程序之间起到通信调度并最小化应用之间的依赖的作用,使得应用程序可以高效地解耦通信过程。
应用场景:
将消息路由到一个或多个目的地
消息转换为其他的表现方式
执行消息聚焦、消息的分解,并将结果发送到其他的目的地,然后重新组合相应返回给消息用户。
调用web服务来检索数据
响应错误事件
使用发布-订阅模式来提供内容或基于主题的消息路由
支持的两个消息中间件:
kafka
属性名 | 说明 | 默认值 |
---|---|---|
spring.cloud.stream.kafka.binder.brokers | Kafka的服务端列表 | localhost |
spring.cloud.stream.kafka.binder.defaultBrokerPort | Kafka服务端的默认端口,当brokers属性中没有配置端口信息时,就会使用这个默认端口 | 9092 |
spring.cloud.stream.kafka.binder.zkNodes | Kafka服务端连接的ZooKeeper节点列表 | localhost |
spring.cloud.stream.kafka.binder.defaultZkPort | ZooKeeper节点的默认端口,当zkNodes属性中没有配置端口信息时,就会使用这个默认端口 | 2181 |
属性名 | 说明 | 默认值 |
---|---|---|
spring.rabbitmq.host | localhost | |
spring.rabbitmq.port | 5672 | |
spring.rabbitmq.username | sang | |
spring.rabbitmq.password | 123456 |
spring-cloud-stream
消息驱动微服务。数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。spring-cloud-sleuth
日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。spring-cloud-zookeeper
操作Zookeeper的工具包,用于使用zookeeper方式的服务发现和配置管理。spring-cloud-CLI
基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。spring-docker
使用docker构建微服务相关文章推荐
- .Net提供三种途径供我们导入一个COM组件
- 我们为什么要使用Spring Cloud?
- Spring Cloud重试机制与各组件的重试总结
- java--编写一个JFrame,标题为“计算的窗口”,在该窗口中组件的布局是FlowLayout。窗口中添加两个文本区,当我们在一个文本区中输入若干个数时,另一个文本区同时对输入的数进行求和运算并求
- .Net提供三种途径供我们导入一个COM组件
- 开源 | 新增生产环境最佳实践,[云框架]基于Spring Cloud的微服务架构发布v1.5版本
- [EnterpriseServices]利用assembly定义我们的组件在COM+中的注册方式
- 没有Wscript.shell组件提权我们该怎么办呢
- 程序猿DD《Spring Cloud构建微服务架构系列》汇总
- Spring Cloud (一)相关知识概要
- Spring cloud系列十 使用@HystrixCommand使用Hystrix组件及@EnableCircuitBreaker原理介绍
- 【腾讯Bugly干货分享】微信终端跨平台组件 Mars 系列 - 我们如约而至
- IFC标准是为了满足建筑行业的信息交互与共享而产生的统一数据标准,是建 筑行业事实上的数据交换与共享标准。本文概要介绍了IFC标准的产生及发展 历程,IFC的整体框架结构,简要说明了IFC标准的实现方法和过程,描述了 当前的应用以及我们应该更加积极地利用IFC标准为建筑软件行业服务。
- 我们编写 React 组件的最佳实践
- java--第十周--任务二 编写一个JFrame,在该窗口中组件的布局是FlowLayout。窗口中添加两个文本区,当我们在一个文本区中输入若干个数时,另一个文本区同时对输入的数进行
- Spring Cloud各组件超时
- Spring Cloud各个组件的配套使用
- Spring Cloud各个组件的配套使用
- JMeter学习-005-JMeter 主要组件概要介绍及执行顺序
- spring.io 主要框架及spring cloud主要组件