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分布式跟踪实现,可以完美整合ZipkinSpring Cloud ZooKeeper服务发现与配置管理工具Spring Cloud Starters基于Spring Boot风格项目的基础依赖模块。
Spring Cloud 微服务实战笔记的更多相关文章
- Spring Cloud微服务实战阅读笔记(一) 基础知识
本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识 1:什么是微服务架构 是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...
- spring cloud微服务实战教程/pdf/视频/百度云资源
资源站:http://www.supan.vip 点击进入直接查找资源: http://www.supan.vip/spring%20cloud微服务实战 <Spring Cloud微服务实战& ...
- Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码)
作为微服务的基础功能之一的注册中心担任重要的角色.微服务将单体的服务拆分成不同的模块下的服务,而不同的模块的服务如果进行通信调用呢?这就需要服务注册与发现.本文将使用阿里开源项目 nacos 搭建服务 ...
- Spring cloud微服务实战——基于OAUTH2.0统一认证授权的微服务基础架构
https://blog.csdn.net/w1054993544/article/details/78932614
- springcloud微服务实战--笔记
目前对Springcloud对了解仅限于:“用[注册服务.配置服务]来统一管理其他微服务” 这个水平.有待提高 Springcloud微服务实战这本书是翟永超2017年5月写的,时间已经过去了两年,略 ...
- springcloud微服务实战--笔记--1、基础知识
微服务的问题: 分布式事务和数据一致性. 由于分布式事务本身第实现难度就非常大,所以在微服务架构中,我们更强调在各服务之间进行无事务第调用,而对于数据一致性,只要求数据在最后第处理状态是一致第即可:若 ...
- 微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io
原文:微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io 这是关于使用微服务架构创建应用系列的第四篇文章.第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点.第二和第三 ...
- 微服务实战(一):微服务架构的优势与不足 - DockOne.io
原文:微服务实战(一):微服务架构的优势与不足 - DockOne.io [编者的话]本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战 ...
- SpringCloud Alibaba微服务实战 - 基础环境准备
Springcloud Aibaba现在这么火,我一直想写个基于Springcloud Alibaba一步一步构建微服务架构的系列博客,终于下定决心从今天开始本系列文章的第一篇 - 基础环境准备. 该 ...
随机推荐
- 05-人脸识别-FaceNet的感性认识
源码链接:https://github.com/davidsandberg/facenet 论文链接:https://arxiv.org/pdf/1503.03832.pdf B站大神视频解读论文:h ...
- 学习:API断点和条件记录断点和内存断点的配合
前言:感觉可能与之前有点相同,主要是介绍shark恒老师说的一种断点方法,结合了API和条件记录进行下断点 适用条件:当我们利用简单的WINDOWS API函数如MessageBoxW/A 又或者获取 ...
- html--前端jquery基础实例
一.左边的菜单栏 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 【CFGym102059G】Fascination Street(思维DP)
点此看题面 大致题意: 有\(n\)个路灯,每个路灯有一定的建造费用,且建成后可照亮自身及周围距离为\(1\)的两个格子.你可以交换\(k\)次两个路灯的建造费用,求照亮所有格子的最小费用. 题意转换 ...
- IntelliJ idea 创建Web项目后web文件夹下没有WEB-INF的解决方法
1.Ctrl+Shift+Alt+S快捷键进入Project structure(项目结构)管理的界面 2.选择左边菜单栏里的Facet,点击后能看到有Deployment Descriptors的输 ...
- [E] Shiro 官方文档阅读笔记 The Reading Notes of Shiro's Offical Docs
官方文档: https://shiro.apache.org/reference.html https://shiro.apache.org/java-authentication-guide.htm ...
- win10 连接samba 账号密码不正确,win7可以访问
1.本地安全策略,本地策略-安全选项,需要修改成默认的值的修改方式: 查找注册表浏览到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA ...
- 说清楚,5G SA和NSA到底有啥区别?
原文: https://tech.sina.com.cn/5g/i/2019-06-25/doc-ihytcitk7540907.shtml 与4G不同,5G时代有了NSA和SA两个组网选项,这让整个 ...
- SpringBoot的ApplicationRunner
Article1 在开发中可能会有这样的情景.需要在容器启动的时候执行一些内容.比如读取配置文件,数据库连接之类的.SpringBoot给我们提供了两个接口来帮助我们实现这种需求.这两个接口分别为Co ...
- Beta冲刺(4/7)——2019.5.26
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...