1. 应用架构演进过程
-
单体应用
大多使用Struts、Spring、Hibernate 或者 Mybatis 等技术框架进行开发 Java 程序,每一个项目都会发布为一个单体应用,简单说诸如开发一个 Web 应用,将会打一个 War 包部署到 Web 服务器中。如果该应用包括多个模块,在每次更新 或者 添加新的功能的时候,都会在原有的基础上不断添加,导致 war 包不断臃肿,致使后期的系统维护极其低下。并且有很多安全隐患,任何一个 模块的 bug 都会导致整个应用系统宕机。
-
SOA 架构应用
通过单体应用中多个模块拆分成独立的服务的思想,可以划分为多个独立的服务模块,并且使用数据库的读写分离。实现如下架构图例:
以上的各个模块之间会存在依赖性,所有 SOA 架构中引入 企业服务总线服务(ESB) 进行各模块之间的解耦。
似乎 面向服务(SOA) 架构 把整个系统的性能得到了提高,并且降低了模块之间的耦合,在客户终端的增加,好像也可以使用 Nginx 做负载均衡。但是增加终端后,运维的难度也就加大了。ESB 服务总线也可能成为性能的瓶颈。
-
微服务
微服务跟 SOA 架构有点相似,但是 SOA 侧重将每个单体应用的服务集成到 ESB 上。为微服务做得更加彻底,强调将整个模块变成服务组件,微服务对每个模块的划分粒度可能会更加细。
-
架构要求
- 高性能
- 易扩展
- 便管理
- 独立性
- 状态监控与警报
2. Spring Cloud
Spring Cloud 不是一个框架,它可以理解成是一个快速帮助构建分布式系统的一个工具箱。Spring Cloud的各个项目基于 Spring Boot。Spring Cloud 包括以下几个重要的模块:
- Spring Cloud Config: 提供分布式系统配置服务器和配置客户端,通过它可以很好的管理集群中的配置文件。
- Spring Cloud Sleuth: 服务跟踪框架,可以与Zipkin、Apache HTrace 和 ELK 等数据分析、服务跟踪系统进行整合。
- Spring Cloud Stream: 用于构建消息驱动微服务的架构,该框架在 Spring Boot 的基础上整合了 Spring Integration 来连接消息代理中间件。
- Spring Cloud Bus:连接 RabbitMQ、Kafka 等消息代理的集群消息总线。
-
Spring Cloud Netflix: 主要提供了对 Netfix OSS 中几个重要的框架提供了封装
诸如:
Eureka(基于REST 服务的分布式中间件,主要用于服务管理) 。
Hystrix(容错框架)。
Feign(REST 客户端)。
Ribbon(负载均衡框架)
Zuul(为微服务集群提供代理、过滤、 路由等功能)