《Spring Cloud 微服务实战》读书笔记之基础知识 1

本贴最后更新于 1914 天前,其中的信息可能已经时移俗易

摘要

微服务是一种系统架构的设计风格,它主旨在于将一个原本独立的系统,拆分成多个独立运行的小型服务。不同服务之间通过 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 微服务架构图(转自黑马视频):
SpringCloud 微服务架构图(转自黑马视频).png

参考资料

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    941 引用 • 1458 回帖 • 150 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...