《Spring Cloud微服务实战》读书笔记之基础知识1
摘要
微服务是一种系统架构的设计风格,它主旨在于将一个原本独立的系统,拆分成多个独立运行的小型服务。不同服务之间通过restful接口进行通讯协作。
关键词:spring cloud,微服务
一、什么是微服务
微服务是一种系统架构的设计风格,它主旨在于将一个原本独立的系统,拆分成多个独立运行的小型服务。不同服务之间通过restful接口进行通讯协作。
- 拆分的小型服务围绕系统耦合度高的业务功能进行构建;
- 每个服务都维护自身的数据存储(如何维护?)、业务开发、测试、部署机制;
- 由于是轻量级通讯协作,微服务可以使用不同语言来编写;
二、如何实施微服务
引入微服务(与单体应用对比)引发的问题:
- 运维:维护进程数增加,需要一定的开发能力来编排组织进程;
- 接口:需要交互双方协调发布,完善接口和版本管理,保证接口的正确调用;
- 分布式环境:拆分后服务只能通过通信来进行协作,所以要考虑分布式环境的因素(网络延迟、分布式事务、异步消息)
为了解决前面的问题,以下是实施微服务一些原则:
1、服务组件化
保证每个服务都独立开发、部署,避免一个服务修改引起整个系统的重新部署。
2、按业务组织团队
从按技术层面转为按业务划分团队。(减少沟通成本)
3、以产品态度对待服务
对服务整个生命周期负责,持续关注服务的运作情况。
4、智能端点与哑管道原则
使用微服务不能简单将函数调用直接改成restful/rpc调用(避免繁琐的通信),微服务常用两种服务调用方式:
- 基于http的restful api(或其它轻量级的消息发送协议) - 请求响应模型,同步阻塞
- 基于轻量级消息总线(mq) - 观察模型
关于智能端点与哑管道的概念
关于智能端点与哑管道的概念,我是这样理解:
- 哑管道是指消息的通讯,管道是不会通知端点消息的内容、结构,仅提供一个可靠的信息交互功能,称为“哑”。
- 智能端点是指端点要主动订阅管道的消息,去解析里面的内容,称为“智能”。
5、去中心化治理
整个架构采用轻量级协议定义接口,各个组件根据具体业务特点进行技术选型。
6、去中心化管理数据
每个服务管理其自有的数据库。(在改造过程中,将数据库的数据拆分到其它数据库中(mysql、mongodb、redis))
面临的新问题:
- 分布式事务,所以尽量避免事务,保证各服务之间是"无事务"的调用;
- 一致性问题,保证最终一致性;
7、基础设施自动化
由于服务数量的增多,务必需要一个“持续交付”平台来支持实施。
自动化测试与自动化部署。
8、容错设计
微服务架构中,可能存在部分服务故障的情况,处理不好会出现故障蔓延的情况。(一个正常服务频繁调用故障服务、导致大量线程挂起等待超时,最后正常服务也出现了故障)
所以微服务架构中,应快速监测出故障源并尽可能恢复服务。(对每个组件的运行情况(服务状态、断路器状态、吞吐量、网络延迟等)实现监控和日志记录)
9、演进式设计
实施微服务应该以演进的方式构建。
三、spring cloud 简介
spring cloud 是一个基于spring boot 实现的微服务架构解决方案。提供了配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作的简单开发方式。
spring cloud 子项目介绍:
- spring cloud config:配置管理工具
- spring cloud netflix:核心组件
- eureka:服务治理组件,服务注册中心、服务注册与发现机制
- hystrix:容错管理组件,实现断路器模式
- ribbon:客户端负载均衡调用组件
- feign:基于ribbon和hystrix的声明式服务调用组件
- zuul:网关组件
- archaius:外部化配置组件
- spring cloud bus:事件、消息总线
- spring cloud cluster:针对zookeeper、redis、hazelcast、consul的选举算法和通用状态模式的实现。
- spring cloud cloudfoundry:与private cloudfoundry的整合支持。
- spring cloud consul:服务发现与配置工具。
- spring cloud stream:通过redis、rabbit或kafka实现消息微服务,通过重简单的声明式模型来发送和接收消息。
- spring cloud aws:用于简化整合amazon web service组件
- spring cloud security:安全工具包,提供在zuul代理中对oauth2客户端请求的中继器。
- spring cloud sleuth:spring cloud 应用的分布式跟踪实现,可以完美整合zipkin。
- spring cloud zookeeper:基于zoopeer的服务发现与配置管理组件。
- spring cloud starters:spring cloud 的基础组件,它是基于spring boot 风格项目的基础依赖模块。
- spring cloud cli:用于在groovy中快速创建spring cloud 应用的spring boot cli插件。
springcloud微服务架构图(转自黑马视频):
参考资料
上一篇: 微信解封提示需要好友辅助验证,微信被封7天限制登录怎么解除?
下一篇: 详解常见web攻击手段