【读书笔记】Spring Cloud 微服务实战 第一章

| 访问: 2018/11/29

第一章 基础知识

1-什么是微服务架构
 1.1-与单体系统的区别
 1.2-如何实施微服务
2-为什么选择Spring Cloud
3-Spring Cloud简介
4-版本说明

1-什么是微服务架构

微服务是系统架构上的一种设计风格,主旨是将原本独立的系统拆分为多个小型服务,这些小型服务具备以下特点:

  • 在自己独立的进程中运行
  • 服务之间通过RESTful API通信
  • 每个服务都围绕着系统的某项或某些耦合度高的业务构建,并维护自身单独的数据存储、业务开发、自动化测试、部署机制
  • 每个服务可以使用不同的语言编写

1.1-与单体系统的区别

单体应用的特点:

  • 系统一般分为:数据库、服务端、前端
  • 开发初期,开发、测试、部署比较方便
  • 开发中后期,随着业务模块、对前端支持的接口(web、移动)增多,应用变得臃肿
  • 对小功能的修改会影响到线上其他部分的运行,各个部分多资源的利用相互影响,导致性能评估困难,难以维护

微服务架构

  • 不同的功能拆分为不同的服务,独立部署和扩展,相互不影响
  • 可以更准确的评估服务性能容量,也能风容易发现系统性能瓶颈

1.2-如何实施微服务

因为微服务的拆分引发了诸多问题,需要提前做好准备

  • 运维的新挑战 由于要维护的进程数量增加,需要使用更多的自动化,运维人员需要具备一定的开发能力来编排运维过程并让它们自动运行起来
  • 接口的一致性 代码依赖变为服务通信依赖,在开发升级过程中,为了服务能正确调用,需要更完善的接口和版本管理,或是严格地遵循开闭原则
  • 分布式的负责性 分布式环境中网络延迟、分布式事务、异步消息等都是设计是需要考虑的重要因素

尽管为服务架构存在诸多障碍,但是他的敏捷开发和自动部署等优点依然被广为青睐,所以解决以上问题也是大家努力的方向。

经过多年的发展,Martin Fowler 在 Microservices 一文中提炼了微服务架构的九大特性,用于指导大家设计架构

  1. 服务组件化 组件是一个可以独立更换和升级的单元。

  2. 按业务组织团队 建议按照业务线拆分团队,虽然单个团队负责业务栈变宽,如数据库接口等,但可以减少内部修改导致的消耗以及团队边界可以更为清晰。
  3. 做“产品”的态度 每个团队从完成开发和交付为目的,转换为开发产品为最终目标,并持续关注服务服务并不断改进业务功能和性能。

  4. 智能端点与哑管道 微服务若仅仅将单体应用的函数调用改为rpc方式,将导致服务质检频繁通信降低性能,所以需要更粗颗粒度的通信协议,如:
    • http、https
    • 轻量级消息总线,如RabbitMQ等提供异步通信
  5. 去中心化治理 集中化的架构需要制定统一的标准或技术实现,使得部分功能出现局限时升级困难或出现系统瓶颈,微服务架构通过轻量级契约定义接口,使得各个组件可以采用任意技术实现。

  6. 去中心化管理数据 也就是每个服务管理自有的数据库,这样数据管理可以更加细化也能让心能达到最优。

    注意:这将导致数据一致性更难以管理。所以微服务强调服务之间进行“无事务”调用,对于一致性,只要求数据最后状态一致即可,中间过程出现错误通过补偿机制来处理。

  7. 基础设施自动化 随着微服务架构的使用组件的数据迅速增多,如果在开始阶段没有考虑使用“持续交互”后期维护将变成一场噩梦。“持续交互”需要具备以下两部分:
    • 自动化测试
    • 自动化部署
  8. 容错设计 为了避免因为摸个服务故障导致系统雪崩,因此快速检测故障并尽可能地自动恢复是必须被设计和考虑的。另外还希望每个服务实现监控日志记录功能,如服务状态、断路器状态、吞吐量、网络延迟等关键数据的仪表盘。

  9. 演进式设计 微服务架构在设计实施过程中成本远远高于单体应用,所以架构师一般会采用演进方式进行系统构建。 在系统体量小的时候使用单体应用,伴随业务的发展将常变动或有时间效用的内容微服务处理,将单体系统中多变的模块拆分出来,剩下的稳定部分形成核心为服务存在整个架构中。

2-为什么现在Spring Cloud

伴随多年来大家对微服务架构的热情,微服务架构社区中出现许多针对各种业务场景的解决方案和开源架构

  • 服务治理 阿里巴巴开源的dubble、当当网扩展的DubbleX、NetFlix的Eureka、Apachede Consul等
  • 分布式配置管理 百度的Disconf、NetFlix的Archaius、360的QConf、Spring Cloud的Config、淘宝的Diamond等
  • 批量任务 当当网的Dlastic-Job、LinkedIn的Azkaban、Spring Cloud 的Task等
  • 服务跟踪 京东的Hydra、Spring Cloud 的Sleuth、Twitter的Zipkin等
  • ……

可以看到这些技术在特定场景下解决的特定的问题,有的还做了优化和扩充。那么在架构选型时就需要做好充足的调研和考量。

而Spring Cloud是一个对微服务的综合解决框架,整合了诸多被广泛实践和证明的框架作为基础部件,并且在此基础上创建了一些非常优秀的边缘组件。对于刚进入微服务架构的ITer可以节省许多精力集中在项目实施中。

Spring Cloud 以强大的背景和极高的社区活跃度,不管事在当下还是在未来都能为用户节省资源和不必要的风险投入。如开发过程中问题解决方案,未来技术过时后不得不切换架构的风险。

3-Spring Cloud 简介

Spring Cloud 是基于Spring Boot 实现的为服务架构开发工具。为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和几圈状态管理等操作提供了一种简单的开发方式。 Spring Cloud 包含了多个子项目(还可能增加),如:

  • Spring Cloud Config:配置管理工具,支持用Git存储配置内容,可以使用它来实现配置的外部存储,并支持客户端配置信息刷新、加密/解密配置内容等。
  • Spring Cloud Netflix:核心组件,对多个Netflix OSS 开源套件进行整合。
    • Eureka:服务治理组件,包含服务注册中心、服务注册与发现机制的实现。
    • Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
    • Ribbon:客户端负载均衡的服务调用组件。
    • Feign:基于Ribbon和Hystrix 的声明式服务调用组件。
    • Zuul:网管组件,提供智能路由、访问过滤等功能。
    • Archaius:外部化配置组建。
  • Spring Cloud Bus:时间、消息总线,用于传播集群中的状态变化或事件,以触发后续的处理,比如用来动态刷新配置等。
  • Spring cloud Cluster: 针对Zookeeper,Redis、Hazelcast、Consul 的选举算法和通用状态模式的实现。
  • Spring Cloud Cloudfoundry:与Povotal 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:基于Zookeeper 的服务发现与配置管理组件。
  • Spring Cloud Starters:Spring Cloud 的基础组件,它是基于Spring Boot 风格项目的基础依赖模块。
  • Spring Cloud CLI:用于在 Groovy 中快速创建 Spring Cloud 应用的 Spring Boot CLI 插件。

文章将对一些常用的组件进行介绍、分析,并演示使用方法。

4-版本说明

Spring Cloud 并没有采用如Spring 的 1.x.x方式命名版本,那它是如何命名版本呢?我们要如何选择版本呢?

版本名誉版本号

由于 Spring Cloud 包含众多子项目,并且每个子项目都有各自的版本号,为了避免混淆,Spring Cloud 使用命名方式区分版本。这些命名采用了伦敦的地铁站名字,按照首字母先后顺序迭代。 如 Angel.SR6、Brixton.SR5 中的SR6、SR5就是版本号了。

版本区别

Component Edgware.SR5 Finchley.SR2 Finchley.BUILD-SNAPSHOT
spring-cloud-aws 1.2.3.RELEASE 2.0.1.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-bus 1.3.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-cli 1.4.1.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-commons 1.3.5.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-contract 1.2.6.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-config 1.4.5.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-netflix 1.4.6.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-security 1.2.3.RELEASE 2.0.1.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-cloudfoundry 1.1.2.RELEASE 2.0.1.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-consul 1.3.5.RELEASE 2.0.1.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-sleuth 1.3.5.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-stream Ditmars.SR4 Elmhurst.SR1 Elmhurst.BUILD-SNAPSHOT
spring-cloud-zookeeper 1.2.2.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-boot 1.5.16.RELEASE 2.0.6.RELEASE 2.0.7.BUILD-SNAPSHOT
spring-cloud-task 1.2.3.RELEASE 2.0.0.RELEASE 2.0.1.BUILD-SNAPSHOT
spring-cloud-vault 1.1.2.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-gateway 1.0.2.RELEASE 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-openfeign - 2.0.2.RELEASE 2.0.2.BUILD-SNAPSHOT
spring-cloud-function 1.0.1.RELEASE 1.0.0.RELEASE 1.0.1.BUILD-SNAPSHOT

注意 使用对应版本,避免出现未知错误。

(转载本站文章请注明作者和出处 mylater

Show Disqus Comments

Post Directory