SpringCloud 小知识和历史
六Spring Cloud
回顾之前的:
- javaSE
- 数据库
- 前端
- Servlet
- HTTP
- Mybatis
- Spring
- SpringMVC
- SpringBoot
- Dubbo、Zookeeper、分布式基础
- Maven、Git
- Ajax、json
微服务产生的背景
单体架构
单体业务的问题:
- 随着业务的发展,开发变得越来越复杂
- 修改、新增某个功能,需要对整个系统进行车市,从新部署
- 一个模块出现问题,横坑能导致整个系统的崩溃
- 对团队同事对数据进行管理,容易产生安全漏洞
- 各个模块视同同一种的技术框架,局限性太大,很难根据业务选择最适合的技术架构
- 模块的内容太复杂,如果员工离职,可能要横长时间才能完成任务的交接
为了解决上述问题微服务架构营运而生,简单来说,微服务就是将一个单体应用拆分成
若干个小型的服务,协同完成系统功能的一种架构模式,在系统架构层面进行解耦合,讲一个复杂的问题拆分成若干个简单的问题。
这样的好处对于每一个简单的问题,开发维护部署的难度降低很多,就可以实现自治,可以自主选择最适合的技术框架,提高了项目的灵活性
微服务框架不仅仅是简单的拆分,拆分之后的各个服务之间还要进行通信,否则就无法协同完成需求
微服务之间只需要制定统一的协议即可,至于每个微服务之间使用什么样的技术框架来完成,统统不要关心
这种松耦合的方式开发,部署都变得灵活同事系统更容易扩展,减低了开发、运维的难度。
程序员的境界
1.使用框架
2.掌握技术 自己写框架
3.解决问题
分布式服务
微服务的优点
- 各个服务之间实现了松耦合,彼此之间不再关注对方是使用什么语言开发,什么技术,只需要保证自己的接口的正常访问,通过标准协议访问其他的接口即可
- 各个微服务之间独立自治,只需要专注的做好自己的业务即可
- 微服务是一种去中性化的架构方式,相当于用零件的方式凭借一台机器,如果米格零件出现问题,可以随时替换从而保证机器的正常运行
微服务的不足
- 各个服务之间是利用系统调用使用的,如果某个微服务的远程调用出现问题,导致微服务不可用,就可能产生级联反应,造成整个系统的崩溃
- 如果某个需求要调用多个微服务,如何来保证数据的一致性
- 相比较于单体应用微服务学习难度会增加,对于团队新加入的员工来讲如何快速上手微服务是个问题
微服务的设计原则
从大到小、提炼出核心需求、搞清楚服务间的交互关系,先拆分粒度较大的服务,然后再根据具体的业务需求逐步细化服务粒度,最终形成一套合理的微服务系统架构
- 微服务的粒度不能太呆也不能太小,避免出现多个微服务处理同一个需求 单一职责
- 各个微服务之间要相互独立,自治,自主开发、自主测试、自主部署、自主维护 面向服务
- 保证数据的独立性、各个微服务独立管理业务模型下的数据 自治
- 使用RESTful协议完成微服务之间的任务协助,数据交互采用JSON的格式,方便整和调用 隔离性强
微服务架构的核心组件
- 服务治理
- 服务注册
- 服务发现
提供服务的叫服务提供者,调用服务的叫服务消费者。
- 服务负载均衡(高并发)
- 服务网关
- 微服务的容错机制
- 分布式配置
- 服务监控
解决方案
最好的就是:
spring cloud 和 阿里巴巴的Dubbo
功能 | Dubbo | Spring Cloud | SpringCloudAlibaba |
---|---|---|---|
注册中心 | zookeer、Redis | Eureka、Consul | Nacos、Eureka |
服务远程调用 | Dubbo协议 | Feign(http协议) | Dubbo、Feign |
配置中心 | 无 | SpringCloudConfig | SpringCloudConfig、Nacos |
服务网关 | 无 | SpringCloudGateway、Zuul | SpringCloudGateway、Zuul |
服务监控 | dubbo-admin\功能弱 | Hystrix | Sentinel |
- springCloud+Feign---Restful
- SpringCloud+Feign----Restful
- SpringCloudAlibaba+Dubbo----Dubbo方式
- Dubbo原始模式 (2012年) ----Dubbo
Spring Cloud
微服务时分布式软件架构的设计方式,具体的落地方案有衡多,Dubbo \Spring Boot/Srong Cloud\ Motan等等,spring cloud 基于spring boot 使得整体的开发、部署、配置都非常的简单、可以快速搭建基于微服务的分布式应用,springcloud相当于微服务的各个组件的集大成者
Spring boot 和Spring cloud的关系
Spring boot快速搭建基础的系统,Spring Cloud在此基础上实现了分布式微服务系统中的公共组件,入服务注册、服务发现、配置管理、熔断器、总线控制、服务调度方式是基于REST API。
- 服务治理 Eureka
- 服务通信 Ribbon
- 服务通信 Feign
- 服务容错 Hystrix
- 服务配置 Config
- 服务监控 Actuator
- 服务跟踪 Zipkin
搭建微服务系统的核心中枢
服务治理的核心组件
- 服务提供者
- 服务消费者
- 注册中心
分布式系统架构中,每个微服务再批董事,将自己的信息存储在注册中心,服务注册
服务消费者从注册中心查询的服务提供者的网络信息,并且通过词信息调用服务提供者的接口,服务发现。
注册中心管理各个微服务:通过心跳机制,每隔一段时间微服务回想注册中兴进行汇报,如果注册中心长时间无法与某个微服务通信,就自动销毁该服务
当某个服务的网络信息发声改变时,会重新注册。
服务者、服务消费者、注册中心的关联:
- 启动注册中心
- 服务提供者启动,在注册中心注册一个可以提供服务的实例
- 服务消费者启动,在注册中心订阅需要调用的服务
- 在注册中心将服务提供者的信息推送该服务调用者
- 服务调用者调用相关信息(IP.端口)调用服务提供者的服务
注册中心的核心模块
- 服务注册表
- 服务注册
- 服务发现
- 服务检查
spring cloud的服务治理用Eureka组件
最新文章
- table居中
- ajax向后台传递数组
- Hbase条件筛选
- POJ 2421 Constructing Roads (最小生成树)
- css之自动换行
- Linux的目录结构及其作用
- linux之SQL语句简明教程---Subquery
- ruban后台项目启动。进入断点
- reset()方法的使用、jq下面reset()的正确使用方法
- @RequestParam注解使用:Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
- python进阶(六) 虚拟环境git clone报错解决办法
- Oracle to_char函数的使用方法
- android中使用spinner组件
- 使用go语言解析xml
- openstack-networking-neutron(三)---用户态和内核态的区别
- jQuery 是javascript的一个库(常用插件、处理器)
- 利用Django实现RESTful API(一)
- java杂项
- Linux基础 - tmux
- h5前端项目常见问题汇总
热门文章
- 【OpenStack云平台】openstack命令行管理之环境变量设置
- [.NET学习]EFCore学习之旅 -2 简单的增删改查
- 时间老去,Ruby不死,Ruby语言基础入门教程之Ruby3全平台开发环境搭建EP00
- 结合商业项目深入理解Go知识点
- ArcGIS工具 - 统计要素数量
- vue多界面开发
- JUC源码学习笔记5——1.5w字和你一起刨析线程池ThreadPoolExecutor源码,全网最细doge
- Hash——温暖人心的算法
- Linux C 用GPS时间更新系统时间的方法。
- Ubuntu desktop 文件的书写格式