Spring Cloud 微服务实战笔记

微服务知识

传统开发所有业务逻辑都在一个应用中, 开发,测试,部署随着需求增加会不断为单个项目增加不同业务模块;前端展现也不局限于html视图模板的形式,后端向前端支持需要更多的接口模块。

随着需求增多,项目变大,单体系统部署在一个进程内部,往往修改很小的功能,为了部署上线也会影响其他功能。后期维护成本会变得越来越大,难以控制。

微服务架构中不同模块拆分成不同服务,都能独立部署和扩展,运行在自己的进程内,有稳定的边界,更新也不会影响其他服务运营。而且由于是独立部署的,可以更准确的为每个服务评估性能容量,也更容易发现系统瓶颈位置。

微服务带来的问题

微服务架构有如此多优点,单也因为服务的拆分引入了许多问题。

  • 运维人员需要维护的进程数量增多了, 所以需要自动化的工具
  • 服务拆分了,但业务逻辑的依赖不会消除,只是从单体应用的代码依赖变为了服务间的通信依赖, 所以要保证接口的正确调用,需要完善的接口和版本管理工具
  • 由于服务独立部署在各自进程内,所以它们间通信需要考虑网络延迟,分布式事务,异步消息,容错性等。

微服务实施

服务调用

微服务架构中通常通过两种方式互相通信:

  • 使用HTTPRESTFUL API或轻量级消息发送协议, 实现消息传递和服务调用的触发
  • 通过轻量级消息总线上传消息,类似RabbitMQ提供可靠异步交换.

去中心化管理

在实施微服务架构时,希望每一个服务都管理其自由的数据库,这就是数据管理的去中心化。

但随之而来数据一致性也成了需要解决的问题直以,分布式事务本身实现难度就非常大,所以在微服务架构中,强调在各个服务之间进行无事务的调用,对数据一致性,只要求数据在最后处理状态一致即刻;若在过程中发现错误, 通过补偿机制来进行处理,使得错误数据能够达到最终的 一 致性。

以下内容摘自我的领域驱动设计(DDD:Domain-Driven Design)笔记

传统架构,数据一般是强一致性的,我们通常会使用数据库事务保证一次操作的所有数据修改都在一个数据库事务里,从而保证了数据的强一致性。在分布式的场景,我们也同样希望数据的强一致性,就是使用分布式事务。但是众所周知,分布式事务的难度、成本是非常高的,而且采用分布式事务的系统的吞吐量都会比较低,系统的可用性也会比较低。所以,很多时候,我们也会放弃数据的强一致性,而采用最终一致性;

CQRS(Command Query Responsibility Segregation)架构 - 命令查询的责任分离, 则完全秉持最终一致性的理念。这种架构基于一个很重要的假设,就是用户看到的数据总是旧的。比如秒杀的场景,当你下单前,也许界面上你看到的商品数量是有的,但是当你下单的时候,系统提示商品卖完了。

容错设计

单体应用中, 一般不存在单个组件故障而其他部件还能运行的情况,通常是一挂全挂。

在微服务架构中,当部分服务存在故障,而导致没有返回,线程挂起等待,直到超时才能释放。正常服务频繁调用故障服务,导致大量线程被挂起,从而出现故障蔓延。

所以晶块检测出故障源并京可能自动恢复服务很关键。通常希望每个服务中实现监控和日志记录,比如服务状态,断路器状态,吞吐量,网络延迟等关键数据的仪表盘。

思想转变

设计服务时,需要学习领域驱动设计,细致的分出每个服务和相关边界。

实施微服务的团队,每个小组都应该以做产品的方式,对服务的整个生命周期负责。

Spring Cloud 介绍

Spring Cloud 是基于Spring Boot的微服务架构开发工具,它为微服务中涉及的配置管理,服务治理, 断路器, 智能路由, 微代理, 控制总线, 全局锁,决策竞选,分布式会话集群状态管理等操作提供了简单的开发方式。

常用子项目:

  • Spring Cloud Config 配置管理工具, 支持使用Git存储 配置内容, 可以使用它实现应用配置的外部化存储, 并支持客户端配置信息刷新、 加密/ 解密配置内容 等
  • Spring Cloud Netflix 核心组件,对多个Netflix OSS套件进行整合
    • Eureka 服务治理组件,包含服务注册中心、 服务注册与发现机制的实现。
    • Hystrix 容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。
    • Ribbon 客户端负载均衡的服务调用组件。
    • Feign 基于RibbonHystrix的声明式服务调用组件。
    • Zuul 网关组件,提供智能路由,访问过滤等功能。
    • Archaius 外部化配置组件
  • Spring Cloud Bus 事件、消息总线。用于传播集群中的状态变化或事件, 以触发后续的处理, 比如用来动态刷新配置等。
  • Spring Cloud Cluster 针对ZooKeeper,Redis,Hazelcast,Consul的选举算法和通用状态模式的实现。
  • Spring Cloud Consul 服务发现与配置管理工具。
  • Spring Cloud Stream 通过Redis,RabbitKafka实现的消费微服务,通过简单的声明式模型来发送和接收消息。
  • Spring Cloud Security 安全工具包,提供在Zuul代理中对OAuth2客户端请求的中继器。
  • Spring Cloud Sleuth 分布式跟踪实现,可以完美整合Zipkin
  • Spring Cloud ZooKeeper 服务发现与配置管理工具
  • Spring Cloud Starters 基于Spring Boot风格项目的基础依赖模块。

Spring Cloud 微服务实战笔记的更多相关文章

  1. Spring Cloud微服务实战阅读笔记(一) 基础知识

    本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识   1:什么是微服务架构     是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...

  2. spring cloud微服务实战教程/pdf/视频/百度云资源

    资源站:http://www.supan.vip 点击进入直接查找资源: http://www.supan.vip/spring%20cloud微服务实战 <Spring Cloud微服务实战& ...

  3. Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码)

    作为微服务的基础功能之一的注册中心担任重要的角色.微服务将单体的服务拆分成不同的模块下的服务,而不同的模块的服务如果进行通信调用呢?这就需要服务注册与发现.本文将使用阿里开源项目 nacos 搭建服务 ...

  4. Spring cloud微服务实战——基于OAUTH2.0统一认证授权的微服务基础架构

    https://blog.csdn.net/w1054993544/article/details/78932614

  5. springcloud微服务实战--笔记

    目前对Springcloud对了解仅限于:“用[注册服务.配置服务]来统一管理其他微服务” 这个水平.有待提高 Springcloud微服务实战这本书是翟永超2017年5月写的,时间已经过去了两年,略 ...

  6. springcloud微服务实战--笔记--1、基础知识

    微服务的问题: 分布式事务和数据一致性. 由于分布式事务本身第实现难度就非常大,所以在微服务架构中,我们更强调在各服务之间进行无事务第调用,而对于数据一致性,只要求数据在最后第处理状态是一致第即可:若 ...

  7. 微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io

    原文:微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io 这是关于使用微服务架构创建应用系列的第四篇文章.第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点.第二和第三 ...

  8. 微服务实战(一):微服务架构的优势与不足 - DockOne.io

    原文:微服务实战(一):微服务架构的优势与不足 - DockOne.io [编者的话]本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战 ...

  9. SpringCloud Alibaba微服务实战 - 基础环境准备

    Springcloud Aibaba现在这么火,我一直想写个基于Springcloud Alibaba一步一步构建微服务架构的系列博客,终于下定决心从今天开始本系列文章的第一篇 - 基础环境准备. 该 ...

随机推荐

  1. 编译安装PHP以及需要的基本扩展库(php7.4)

    安装配置选项1: ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-curl --with-freety ...

  2. ASP.NET Core 进程内(InProcess)托管

    ASP.NET Core 进程内(InProcess)托管 在 ASP.NET Core 中的进程内(InProcess)托管模型 什么是 Kestrel 服务器 当一个 ASP.NET Core 应 ...

  3. day 25

    Nothing is more dangerous than discontinued labor. 没有什么比半途而废更危险.

  4. [LeetCode] 894. All Possible Full Binary Trees 所有可能的满二叉树

    A full binary tree is a binary tree where each node has exactly 0 or 2 children. Return a list of al ...

  5. Qt 绘制图表 - Qt Charts版

    一.前言 自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利.但是Qt自己却一直没有提供自带的图表库,这就使得 QWT.QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开 ...

  6. 轻松装Win10:VMware Workstation 12虚拟机下载

    更多精彩内容欢迎访问我的个人博客皮皮猪:http://www.zhsh666.xyz或者http://www.zh66.club期待您的光临哦!我是皮皮猪,感谢各位光临,能为您排忧解难小站深感荣幸!祝 ...

  7. 【MySQL】Mariadb安装

    Mariadb安装 1.解压 [root@oradb bin]# tar zxvf mariadb-10.3.18-linux-x86_64.tar.gz [root@oradb bin]# mv m ...

  8. https的原理入门

    现在基本上互联网上访问的地址都是使用HTTPS协议了,只有局域网才会使用HTTP协议,因此了解HTTPS十分重要. HTTP存在的问题 上过网的朋友都知道,网络是非常不安全的.尤其是公共场所有很多免费 ...

  9. Spring Boot 如何干掉 if else?

    需求 这里虚拟一个业务需求,让大家容易理解.假设有一个订单系统,里面的一个功能是根据订单的不同类型作出不同的处理. 订单实体: service接口: 传统实现 根据订单类型写一堆的if else: 策 ...

  10. Dart:2.通过一个简单程序来理解Dart基础语法

    一 . 一个简单的 Dart 程序 // 这是程序执行的入口. main() { var number = 42; // 定义并初始化一个变量. printNumber(number); // 调用一 ...