Spring Cloud 微服务实战笔记
Spring Cloud 微服务实战笔记
微服务知识
传统开发所有业务逻辑都在一个应用中, 开发,测试,部署随着需求增加会不断为单个项目增加不同业务模块;前端展现也不局限于html视图模板的形式,后端向前端支持需要更多的接口模块。
随着需求增多,项目变大,单体系统部署在一个进程内部,往往修改很小的功能,为了部署上线也会影响其他功能。后期维护成本会变得越来越大,难以控制。
微服务架构
中不同模块拆分成不同服务,都能独立部署和扩展,运行在自己的进程内,有稳定的边界,更新也不会影响其他服务运营。而且由于是独立部署的,可以更准确的为每个服务评估性能容量,也更容易发现系统瓶颈位置。
微服务带来的问题
微服务架构
有如此多优点,单也因为服务的拆分引入了许多问题。
- 运维人员需要维护的进程数量增多了, 所以需要
自动化的工具
。 - 服务拆分了,但业务逻辑的依赖不会消除,只是从
单体应用的代码依赖
变为了服务间的通信依赖
, 所以要保证接口的正确调用,需要完善的接口和版本管理工具
。 - 由于服务独立部署在各自进程内,所以它们间通信需要考虑
网络延迟
,分布式事务
,异步消息
,容错性
等。
微服务实施
服务调用
在微服务架构
中通常通过两种方式互相通信:
- 使用
HTTP
的RESTFUL 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
基于Ribbon
和Hystrix
的声明式服务调用组件。Zuul
网关组件,提供智能路由,访问过滤等功能。Archaius
外部化配置组件
Spring Cloud Bus
事件、消息总线。用于传播集群中的状态变化或事件, 以触发后续的处理, 比如用来动态刷新配置等。Spring Cloud Cluster
针对ZooKeeper
,Redis
,Hazelcast
,Consul
的选举算法和通用状态模式的实现。Spring Cloud Consul
服务发现与配置管理工具。Spring Cloud Stream
通过Redis
,Rabbit
或Kafka
实现的消费微服务,通过简单的声明式模型来发送和接收消息。Spring Cloud Security
安全工具包,提供在Zuul
代理中对OAuth2
客户端请求的中继器。Spring Cloud Sleuth
分布式跟踪实现,可以完美整合Zipkin
Spring Cloud ZooKeeper
服务发现与配置管理工具Spring Cloud Starters
基于Spring Boot
风格项目的基础依赖模块。
转载于:https://www.cnblogs.com/xueyoucd/p/11272782.html
Spring Cloud 微服务实战笔记相关推荐
- Spring Cloud 微服务实战系列-Spring Boot再次入门(一)
导语 看到标题大家都疑惑,为什么叫做再入门呢?在之前的博客中也分享过相关的内容,但为了让Spring Cloud 微服务实战系列更加完整就再次编写一个入门的内容,也是为了这个系列的内容更加的完整, ...
- 手把手,嘴对嘴教你Spring Cloud 微服务实战 -- 前言
Spring Cloud 总结 博主接触到Spring Cloud 大概已经一年多了,当时Spring Cloud微服务框架已经是潮流了,不会一点都不好意思出去面试.并且主流技术基本上都在谈论微服务, ...
- Spring Cloud微服务实战(五)-应用通信
订单服务源码 https://github.com/Wasabi1234/SpringCloud_OrderDemo 商品服务源码 https://github.com/Wasabi1234/Spri ...
- Spring Cloud 微服务实战系列-Ribbon整合RestTemplate实现负载均衡
导语 在Spring Cloud项目中想要整合Ribbon只需要在pom文件中加入对应的依赖就可以了,那么在这次的分享中就来看看在Ribbon怎么通过RestTemplate来进行负载均衡,以及扩 ...
- Spring Cloud 微服务实战系列-Eureka注册中心(二)
导语 之前的分享中,简单的介绍了SpringBoot的入门知识以及如何使用Eureka搭建服务注册中心,这一次的分享主要是来讲解一些在Eureka中的常用的配置,方便大家在使用Eureka的时候可 ...
- Spring Cloud 微服务实战系列-Eureka注册中心(一)
导语 在这一个系列的分享中,笔者主要是来分享在实战实际操作中的一些使用场景,了解了实战的操作中的使用场景才能更好的从实战中的问题出发找到自己需要的原理性的东西,找到原理性的东西之后才可以更好的根据 ...
- Spring Cloud 微服务实战精品文章大汇总,错过了血亏!
随着互联网的高速发展,庞大的用户群体和快速的需求变化已经成为了传统架构的痛点.在这种情况下,如何从系统架构的角度出发,构建出灵活.易扩展的系统来快速响应需求的变化,同时,随着用户量的增加,如何保证系统 ...
- 创智播客微服务_周立-Spring Cloud微服务实战视频课程
『课程目录』:" |0 O6 f0 d! b% }$ Z; T- g 1 公开课 2 1.1 微服务架构概述 3. 2.1 开始使用Spring Cloud实战微服务 4 3.1 服务提供者 ...
- 手把手,嘴对嘴教你Spring Cloud 微服务实战 -- 初识Spring Cloud
Spring Cloud 简介 摘自百度百科: Spring Cloud是一系列框架的有序集合.它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消 ...
最新文章
- 除法取模(比赛常用)
- linux目录都是什么意思,linux中的基本的目录结构都是什么意思,初学者都应该有印象-tmp是什么文件...
- tf.keras.layers.LSTM 示例
- 22条 API 设计规范,API 一致性设计
- 最长公共子序列的C++实现---附二维指针的使用方法
- 【网页前端设计Front end】HTML语言基础.上(看不懂你来打我)
- freeCodeCamp:Find the Longest Word in a String
- 关于while read line使用read -p失效问题
- [Angularjs]视图和路由(三)
- 【PAT - 甲级1020】Tree Traversals (25分)(树的遍历,给定中序后序,求层次遍历)
- linux 文件系统管理
- [转]static和final的区别
- Python3 OOP(一) 类和实例
- 《MapReduce 2.0源码分析与编程实战》一1.2 大数据分析时代
- wireshark检测iphone-ios是否感染XcodeGhost病毒
- pe服务器注册表,注册表修复方法
- 分布式异步任务框架之Celery定义、异步任务框架特点、架构、使用场景、安装配置、基本使用、多任务结构使用、延时任务、定时任务及django中使用celery
- 隔空开车,华为云EI圆我“武侠梦”
- 基于arduino的oled显示屏的使用
- 记录一次app崩溃信息调试
热门文章
- 《CCNA无线640-722认证考试指南》——导读
- 前端技术学习之选择器(一)
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
- centos 扫毒软件clamAV安装
- Java基础班学习笔记(13)IO流
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- 代理上网环境下配置TortoiseCVS
- JSF和Struts的区别概述
- 初学api测试_面向初学者的API-在此免费视频课程中学习如何使用API
- 通过构建城市来解释HTML,CSS和JavaScript之间的关系