为了更好了理解Spring Cloud,在使用过后总结如下,加深理解
在第一节中主要进行一些简单的介绍,对微服务以及Spring Cloud有一些概况性的了解。
主要分为以下三部分
一 什么是微服务
二 如何实现微服务
三 Spring Cloud简介
什么是微服务?
简单的说,微服务是一种系统架构的设计风格,核心就是将一个原来独立的系统拆分为多个独立的小型服务,这些服务之间通过HTTP请求进行通信协作。一般而言,拆分的原则是将一些耦合读较高的业务独立出来,并且每个服务拥有相对独立的数据存储,业务开发 自动化测试和独立部署机制;由于服务间基于HTTP交互,所以这些服务可以有不同的语言实现。
在传统的单体服务的开发过程中,随着业务的复杂度和业务量的上升,服务变得越来越臃肿,修改一处则牵一发而动全身;每个功能点消耗的资源各不相同,有相互影响,这使得我们对于各个业务模块的系统容量难以给出准确的评估;维护成本越来越高;而相对来说,微服务由于功能拆分部署,拥有了稳固的边界,通过服务间的协作,方便的发现系统性能瓶颈所在;且代码维护方便。
如何实现微服务
微服务本身只是一种系统架构风格,并不能解决一切,适用一切;
微服务架构中,有服务拆分部署,运维需要维护的进程数大大增加,虽然拆分了服务,但是业务在逻辑上仍然需要通过HTTP请求相互交互,将原来代码间的依赖变为通信间的依赖,这就需要加强对接口和版本的管理工作;同时分散的部署必然带来了分布式环境的问题,比如:网络延时 分布式事务 异步通信等。
虽然带来的一些问题,但是它在解决大型系统中的难题的便捷性,以及较为方便敏捷开发和自动化部署等优势,仍然使得微服务架构等到了大家的青睐。
微服务架构一般就有如下特点
1。服务的组件化 只需要通过接口即可获得所需要的资源,只需要变更地址,即可实现服务的升级。
2。按业务组织团队 当决定如何划分微服务时,通常也意味着开始对团队的重新规划与组织,对于大型系统来说,建议按照业务线的方式进行拆分,一方面可以减少服务内部的修改所产生的内耗;另一方面,团队的边界也变得清晰。
3。持续关注服务的运行,不断改善,甚至随着复杂度是上升进行再拆分。
4。智能端点与哑管道 若将原先单体系统的方法调用直接改为服务间的RPC,可能会导致频繁的通信,影响性能;一般而言:会使用更为粗粒度的方式 (1)HTTP或轻量级的消息发送协议 (2)轻量级消息总线,类似RabbitMQ等一些提供可靠一部交换的中间件。
5。去中心化治理 方便了在针对不同的业务特点使用有针对性的技术平台解决方案
6。去中心化的数据管理 一般而言:每个服务都需要管理自有的数据库,由于数据分散存储导致出现数据一致性问题,且分布式事务实现难度大,所以非常强调,服务之间无事务的调用,对于数据一致性,只要求在数据最后的处理状态是一致即可;在中间过程中遇到错误,通过容错补偿机制处理。
7。基础设施自动化 由于服务数量大大增加,务必从一开始就需要实现持续交付,自动化测试 自动化部署。
8。容错机制设计 由于服务都运行在独立的进程中,当某个服务出现故障,容易造成大量请求阻塞,线程挂起,导致故障蔓延;所以容错机制的设计就显得尤为重要,快速检测出故障源并尽可能自动回复服务是必须被设计和考虑的。每个服务中都有实现监控和日志记录的组件,比如:服务状态 断路器状态 吞吐量 网络延迟等关键数据的仪表盘。
为什么是Spring Cloud?
虽然国内外各大平台都开发了大量是开源方案,但是大部分都只是针对它们自身业务的某个部分的解决方案
Spring Cloud对于一个新手老说则提供了解决业务拆分后引出的诸多问题的一站式解决方案,同时具有很好的兼容性和稳定性。
Spring Cloud是一盒基于Spring Boot实现的微服务开发集成工具,为微服务中涉及到的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、分布式会话、集群状态管理、群策竞选等提供一整套简单的开发方式。
包含如下组件
Spring Cloud Config 配置管理工具
Spring Cloud Netflix(Eureka 服务治理组件 Hystrix 容错组件 Ribbon 客户端负载均衡 Zuul 网关组件)
Spring Cloud Bus 消息总线 用于传播集群中的转台变化事件,触发后续处理
Spring Cloud Security 安全工具包
Spring Cloud Cluster
Spring Cloud Stream
Spring Cloud AWS
Spring Cloud Consul
.........