SOA代表面向服务的架构,将应用程序根据不同的职责划分为不同的模块,不同的模块直接通过特定的协议和接口进行交互。这样使整个系统切分成很多单个组件服务来完成请求,当流量过大时通过水平扩展相应的组件来支撑,所有的组件通过交互来满足整体的业务需求。
面向服务的设计,往往需要ESB(Enterprise Service Bus,企业服务总线)产品来充当基础设施。ESB采用了“总线”这样一种模式来管理和简化应用之间的集成拓扑结构,以广为接受的开放标准为基础来支持应用之间在消息、事件和服务的级别上动态的互连互通。 ESB是一种在松散耦合的服务和应用之间标准的集成方式。
在其内部设计和实现中,通常会应用到一些经典的架构模式,例如:Broker模式、消息总线模式、发布订阅模式等。
微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制。
康威定理:Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations。设计系统组织的设计产出受限于该组织的沟通结构。
Spring Boot是一个简化Spring使用的框架,可以使用少量的配置快速创建一个基于Spring的项目。Spring Boot主要有如下核心功能:
独立运行的Spring项目。
内嵌Servlet容器。
提供starter简化Maven配置。
自动配置Spring
提供生产就绪型功能,如指标,健康检查和外部配置
Spring Cloud的开发团队专注于企业级开源框架的研发,不论是在中国还是在世界上使用都非常广泛,开发出通用、开源、稳健的开源框架是他们的主业。
Spring Cloud是微服务架构的生态环境,考虑到了微服务的各个方面。
Spring Cloud的社区热度非常好,问题修复也非常及时,未来会更加完善和稳定。
Spring Cloud也可以较好的兼容python、php等其他语言开发的微服务。因为采用RESTful。
Spring Cloud与Docker可以完美组合使用。
知名互联网公司都已经使用了Spring Cloud,但都是小规模或者某个团队在使用。
针对与中小企业,使用springCloud优势明显,熟悉spring/springboot能很快上手。
阿里推出了spring cloud alibaba。
网关:Zuul,提供动态路由,监控,弹性,安全等边缘服务的框架
负载:Ribbon,有多种负载均衡策略可供选择
容错:Hystrix,断路器
配置:Spring Cloud Config,统一配置管理
总线:Spring Cloud Bus,可与Spring Cloud Config联合实现热部署
发现:Eureka,微服务的注册与发现
调用:Feign,一种声明式、模板化的HTTP客户端
跟踪:Spring Cloud Sleuth
日志:日志收集工具包
@FeignClient(name= "spring-cloud-producer") public interface HelloRemote { @RequestMapping(value = "/hello") public String hello(@RequestParam(value = "name") String name); } 复制代码
restTemplate.getForObject("http://spring-cloud-producer/hello", String.class); 复制代码
zuul路由标识
http://localhost:8888/spring-cloud-producer/hello?name=liangjie 复制代码
注册中心标识
Application | AMIs | Availability Zones | Status |
---|---|---|---|
GATEWAY-SERVICE-ZUUL | n/a (1) | (1) | UP (1) - 10.5.74.13:gateway-service-zuul:8888 |
SPRING-CLOUD-PRODUCER | n/a (1) | (1) | UP (1) - 10.5.74.13:spring-cloud-producer:9000 |
Spring Boot 的 Actuator 提供了很多生产级的特性,比如监控和度量Spring Boot 应用程序。Actuator 的这些特性可以通过众多 REST 接口、远程 shell 和 JMX 获得。
主要rest接口
HTTP 方法 | 路径 | 描述 |
---|---|---|
GET | /autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 |
GET | /configprops | 描述配置属性(包含默认值)如何注入Bean |
GET | /beans | 描述应用程序上下文里全部的Bean,以及它们的关系 |
GET | /dump | 获取线程活动的快照 |
GET | /env | 获取全部环境属性 |
GET | /env/{name} | 根据名称获取特定的环境属性值 |
GET | /health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供 |
GET | /info | 获取应用程序的定制信息,这些信息由info打头的属性提供 |
GET | /mappings | 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系 |
GET | /metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计数 |
GET | /metrics/{name} | 报告指定名称的应用程序度量值 |
POST | /shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为true |
GET | /trace | 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等) |