SpringCloud系列(一):微服务与SpringCloud概述

star2017 1年前 ⋅ 377 阅读

前言:公司的一个数据聚合项目,开始使用 Spring Cloud来搭建微服务框架,项目有好几十个数据源,每个数据源就是一个微服务。
在应用中有碰到各种问题,概念方面和技术方面都有,需要多层次多角度来理解,所以开辟Spring Cloud系列文章记录个人学习中得失。

Spring Cloud 是个新的知识领域,为应用而学习,将学习到的在实际项目中实践。Spring Cloud 可集成一系列组件, 为中小型互联网企业提供了一站式的微服务架构解决方案。

Spring Cloud 官网Spring Cloud GitHub,可以在GitHub上搜Spring Cloud相关资源。

微服务是一种架构风格, Spring Cloud 的一系列组件框架为实现微服务架构提供了解决方案。

微服务概念

微服务强调功能趋向单一,将不同功能模块拆分成多个不同的服务,服务单元小型化和微型化。在思想和理念上,微服务倾向于将功能进行拆份,将服务粒度做小,可以独立承担对外服务的职责,以这个思路来开发和交付的软件服务实体叫做微服务

微服务的显著特征是独立,职责单一。从开发到交付整条键路上都是独立进行,这有助于多服务并行开发、各自快速迭代,可以保持开发阶段的独立性,保证微服务的研发可以高效进行。微服务失败只影响自己或少量的其它服务,不会波及整个服务体系。可以是多种语言开发的微服务,提高了整个服务体系的互通性和扩展性。

微服务架构中,服务之间的调用方式主要有两种:

  1. 使用HTTPRestful API或轻量级的消息发送协议,实现信息传递服务调用的触发。
  2. 通过在轻量级消息总级上传递消息,类似 RabbitMQ 等一类提供可靠异步交换的中间件(一般指消息中间件)。

微服务新挑战

  1. 运维新挑战
    需要维护的应用(微服务)大量增加,管理和维护这些微服务并不是件容易的事,运维过程需要更多的自动化。
  2. 接口的一致性
    虽然拆分了服务,但业务逻辑上的依赖并不消除,只是从单体应用中的代码依赖变为了服务之间的通信依赖,对接口的修改需要协调交互方同步修改,以保证接口的正确调用,需要更完善的接口和版本管理。
  3. 分布式的复杂性
    拆分后的服务独立部署,服务之间需要通过通信来进行协作,分布式环境的问题是分布式微服务系统设计需要考虑的因素,如网络延迟、分布式事务、异步消息等。
  4. 数据管理去中心化
    数据管理去中心化对存在数据一致性问题,分布式事务的实现难度较大,所以在微服务架构中,我们更强调在各服务之间进行无事务的调用,而对于数据一致性,只要求数据在最后的处理状态是一致的即可;若在过程中发现错误,通过补偿机制来进行处理,使的数据能够达到最终一致性。

Spring Cloud

Spring Cloud 是一个基于 Spring Boot 实现的微服务架构开发工具,是解决微服务架构实施的综合性框架,整合了诸多已被广泛实践和证明过的框架作为实施的基础部件,在此基础上还创建了一些非常优秀的边缘组件,被喻为全家桶

Spring Cloud 为我们提供了配置管理、服务发现、断路器、代理服务等在做分布式方案时非常有用的组件,可以满足一系列的微服务架构的要求。基于 Spring Cloud 开发的应用非常适合在 Docker 或者其他专业 PaaS 部署。

Spring Cloud 包含了多个子项目,其中涉及多个不同开源产品,还可能新增部件:

  1. Eureka:服务注册中心,于用服务管理。
  2. Zuul:API 网关, 提供路由转发,请求过滤等功能。
  3. Ribbon:基于客户端的负载均衡组件。
  4. Hystrix:容断器组件,防止服务的雪崩效应。
  5. Feign:Web 服务客户端,简化 Http 接口调用。
  6. Config:为分布式系统中的外部化配置提供服务器和客户端支持。
    配置管理工具,支持应用配置的外部化存储, 默认实现使用 Git,支持客户端配置刷新,加密/解密配置内容。
  7. Netflix:为 Spring Boot应用提供 Netflix OSS 集成,是核心组件。
    Netflix 组件包含服务治理(Eureka),断路器(Hystrix),网关组件(Zuul)、负载均衡(Ribbon)。
  8. Bus:事件、消息总线,用于广播集群中的状态变化或事件(如:配置更新),目前唯一的实现是使用 AMQP 代理作来传输消息。
  9. Cluster:针对 Zookeeper,Redis,Hazelcast,Consul 的领导选举算法和通用状态模式的抽象和实现。
  10. Foundry:将您的应用程序与Pivotal Cloud Foundry集成。 提供服务发现实现,还可以轻松实现受SSO和OAuth2保护的资源。
  11. Sleuth:为Spring Cloud实施分布式跟踪解决方案,大量借用Dapper,Zipkin和HTrace。
    对于大多数用户来说,检测应该是隐形的,并且所有与外部系统的交互都应该自动进行检测。 您可以简单地在日志中捕获数据,也可以将数据发送到远程收集器服务。
    其它组件及说明可参阅官网及其文档,同时在官网首页上可以看到 Spring Cloud 当前版本支持的组件版本号。

特别注意:此 Spring Cloud 系列文章,基于 JDK8 和 Spring Boot 2.x 版本,Spring Cloud 版本是 Greenwich.RELEASE。因 Spring Boot 和 Spring Cloud 非常活跃,更新较快,版本之间会存在配置方面的差异,若升级版本可能存在兼容性问题,更多可参考官方文档。

Spring Boot

Spring Boot 为构建微服务提供了基础框架,在使用 Spring Cloud 之前最好先了解 Spring Boot的基本使用。可参考Spring Boot 2实践系列系列文章。

相关参考

  1. Spring Cloud在国内中小型公司能用起来吗?
  2. 中小型互联网公司微服务实践-经验和教训
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: