本章主要学习一些关于微服务架构以及Spring cloud的基础知识
什么是微服务架构
微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作。被拆分成的每一个小型服务都围绕着系统中的某一项或者一些耦合度高的业务功能进行构建,并且每个服务都维护着自身的数据存储,业务开发,自动化测试案例以及独立部署机制,由于有了轻量级的通信协作基础,所以这些微服务可以使用不同的语言来编写。
与单体系统的区别
传统的企业系统架构中,我们针对复杂的业务需求通常分为三个主要部分:数据库、服务端、前端展现。
随着企业的发展和移动端设备的进步,单体应用由于面对的需求更为宽泛,会使得单体应用越来越臃肿,维护成本会越来越大,且难以控制。
微服务由于服务的拆分也引发了新的问题和挑战:
1.运维的新高度,微服务架构中,运维人员要维护的进程数量会大大增加。
2.接口的一致性,由于拆分了服务,业务逻辑上的依赖要通过服务通信机制,因此需要更完善的接口和版本管理,遵循开闭原则。
3.分布式的复杂性,分布式环境的问题比如网络延迟、分布式事务、异步消息。
微服务架构的九大特性
1.服务组件化
服务组件化,服务是进程外的组件,通过http等通信协议进行协作。每一个服务都独立开发、部署,可以有效的避免一个服务的修改引起整个系统的重新部署。
2.按业务组织团队
实施微服务架构时,建议按照业务线的方式进行拆分,一方面有效减少服务内部修改所产生的内耗,另一方面,团队边界变的更加清晰。
3.做“产品”的态度
4.智能端点与哑管道
在微服务中通常有两种服务调用方式:
第一种,使用HTTP的RESTful API或者轻量级的消息发送协议,实现信息传递与服务调用的触发。
第二种,通过在轻量级消息总线上传递消息,类似RabbitMQ等一些提供可靠异步交换的中间件。
5.去中心化治理
微服务架构,通常采用轻量级的契约定义接口,微服务架构系统中的各个组件就可以根据不同的业务特点选择不同的技术平台。
6.去中心化管理数据
每一个服务管理自有的数据库,这就是数据去中心化,但是由于数据存储在不同的数据库实例中,数据一致性称为了新的问题。分布式事务本身的实现难度就很大,所以在微服务中,我们强调在各个服务之间进行“无事务”的调用,数据一致性只要求数据在最后的处理状态是一致的即可,若在过程中发现错误,通过补偿机制来进行处理,使得错误数据能够达到最终的一致性。
7.基础设施自动化
自动化测试,自动化部署
8.容错设计
微服务架构中快速检测出故障源并尽可能的自动恢复服务是必须被设计和考虑的,通常希望在每个服务中实现监控和日志记录的组件,比如服务状态,断路器状态,吞吐量,网络延迟等关键数据的仪表盘。
9.演进式设计
spring cloud简介
Spring Cloud 是一个基于Spring Boot实现的微服务结构开发工具。为微服务结构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态等操作提供了一种简单的开发方式。
包含以下子项目:
Spring Cloud Config : 配置管理工具。
Spring Cloud Netflix : 核心组件,对多个Netfix OSS开源套件进行整合。
Eureka:服务治理组件,包含服务注册中心,服务注册与发现机制的实现。
Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
Ribbon:客户端负载均衡的服务调用组件。
Feign:基于Ribbon和Hystrix的声明式服务调用组件
Zuul:网关组件,提供智能路由,访问过滤器等功能。
Archaius:外部化配置组件
Spring Cloud Bus : 事件、消息总线,用于传播集群中的状态变化或者事件。
Spring Cloud Cluster : 选举算法和通用模块的实现。
Spring Cloud Consul : 服务发现和配置管理工具
Spring Cloud Security: 安全工具包
Spring Cloud Zookeeper : 基于Zookeeper的服务发现和配置管理组件
。。。