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. Shell 脚本中 '$' 符号的多种用法

    通常情况下,在工作中用的最多的有如下几项: $0:Shell 的命令本身 $1 到 $9:表示 Shell 的第几个参数 $? :显示最后命令的执行情况 $#:传递到脚本的参数个数 $$:脚本运行的当 ...

  2. 莫烦TensorFlow_09 MNIST例子

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_dat ...

  3. java 类的继承

    package testpacknm; import java.util.Scanner; import testpacknm.testcnm; class Another { String name ...

  4. MySQL字段类型 约束

    目录 MySQL存储引擎 非空约束 字段类型 整形类型INT TINYINT 浮点类型float 字符类型char varchar 日期类型 枚举集合 约束条件 主键 自增 unsigned无符号 z ...

  5. ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(BootLoader程序制作)

    前言 此代码兼容STM32F103全系列 为避免添加上升级程序造成内存不足,请使用128KB Flash及其以上的型号 这篇文章是为了能够让大家快速移植我的升级模板程序到自己的项目 BootLoade ...

  6. 6.Go-错误,defer,panic和recover

    6.1.错误 Go语言中使用builtin包下error接口作为错误类型 Go语言中错误都作为方法/函数的返回值 自定义错误类型 //Learn_Go/main.go package main imp ...

  7. CSS中@support的用法 及其calc、media用法

    背景: 一次偶然的机会遇到一个朋友在刷css的库其中有这样一道题(css变量如何定义,calc, support, media),我看一眼熟悉而陌生,知其一而不知其二,叔可忍婶不可忍,马上就度娘起来, ...

  8. Windows的一些使用技巧/设置

    仅为个人记录,关闭与否还请读者斟酌 1,加速关机速度 运行gpedit.msc: 计算机管理,管理模块 - 系统 -关机选项 关闭会阻止或取消关机的应用程序的自动终止功能. 2,组策略关闭小娜后,只把 ...

  9. 关于Design Complier/Library Compiler的跌坑(坑爹)记录

    最近需要用DC做一些事,然后需要转库,中午偷个闲,特来记录一下中间的一些坎坷. 1.首先是要转库.我们只有.lib文件的格式,所以需要把.lib文件转换成.db格式.然后坑来了!!!DC2015及以后 ...

  10. PHP stdclass转array的方法

    PHP stdclass转array的方法 <pre><?php$a = new stdClass();$a->id = '11 ';$a->username = 'me ...