分布式服务

集中式架构

只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。

单体应用:单点故障

集群:质量不够数量来凑

存在的问题:

  • 代码耦合,开发维护困难

  • 无法针对不同模块进行针对性优化

  • 无法水平扩展

  • 单点容错率低,并发能力差

垂直拆分

优点:

  • 系统拆分实现了流量分担,解决了并发问题

  • 可以针对不同模块进行优化

  • 方便水平扩展,负载均衡,容错率提高

缺点:

  • 系统间相互独立,会有很多重复开发工作,影响开发效率

分布式服务

 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式调用是关键。

优点:

  • 将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率

缺点:

  • 系统间耦合度变高,调用关系错综复杂,难以维护

微服务

推荐学习网站: 微服务|YYGCui's blog

微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

微服务的特点:

  • 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责

  • 微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”。

  • 面向服务:面向服务是说每个服务都要对外暴露服务接口API。并不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供Rest的接口即可。

  • 自治:自治是说服务间互相独立,互不干扰

  • 团队独立:每个服务都是一个独立的开发团队,人数不能过多。

  • 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉

  • 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC、移动端开发不同接口

  • 数据库分离:每个服务都使用自己的数据源

  • 部署独立,服务间虽然有调用,但要做到服务重启不影响其它服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护

SpringCloud概述

 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

微服务是可以独立部署、水平扩展、独立访问(或者有独立的数据库)的服务单元,springcloud就是这些微服务的大管家,采用了微服务这种架构之后,项目的数量会非常多,springcloud做为大管家需要管理好这些微服务,自然需要很多子结构来帮忙。

与Spring Boot的关系

Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;

Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

构建分布式应用

 

 创建服务提供者

创建服务消费者

1.需要导入相同的实体类User

2.创建控制层

 3.RestTemplate可能导入失败 因此需要手动书写配置类 导入

 

 注:若服务消费者想启动 则需先启动服务提供者 否则会产生错误!!

抽取通用代码 实体类User

创建maven 快速生成项目 1.导入lombok依赖 2.加入User实体类

 给服务提供者 服务消费者都加入通用common的依赖

存在的问题

至此,我们已经实现了这个最简单的分布式应用,应用之间通过HTTP通信。代码非常简单,但这些简单的代码里,存在着若干问题:

  • 应用没有监控,没有画板,一切指标都没有。在这个Growth Hack逐渐成为主流的时代,不弄个Dashboard把系统压力、QPS、CPU、内存、日活啥的可视化...

  • 地址硬编码问题——电影微服务中将用户微服务的地址写死,如果用户微服务地址发生变化,难道要重新上线电影微服务吗?

  • 负载均衡如何考虑?难道得在电影微服务和用户微服务之间加个NGINX做负载均衡吗?听起来是可行的,但如果有10000+服务(这并不夸张,我司的微服务数目是这个数字乘以N,N >= m,哈哈哈)那这个NGINX的配置得有多复杂……

  • 服务之间没有容错机制

服务注册与服务发现-原理剖析

目前市面上把服务消费者找到服务提供者的这种机制称为服务发现,又或者服务注册

服务发现原理深入

服务注册与服务发现-Eureka入门

Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务,包含ServerClient两部分,Spring Cloud将它集成在子项目Spring Cloud Netflix中。

根据上一节服务发现原后,我们来编写基于Eureka的服务发现——首先编写一个Eureka Server,然后将前文的微服务都注册到Eureka Server上。

编写Eureka Server

1.导入Eureka依赖  2.使用注解@EnableEurekaServer  3.编写配置文件

 在服务的pom.xml中 锁定了cloud框架的版本 位于上方定义了cloud的版本号

选择服务注册中心的启动类 添加注解

 

 为服务注册中心进行相应配置

注:eureka.client.service-url.defaultZone=http://localhost:端口号/eureka/

/eureka不可省略!

 ​​​​​​​

eureka显示界面 

编写Eureka Client-将应用注册到Eureka Server上

无需添加注解!!

为eureka client设置配置

 ​​​​​​​

 使用IP替代主机 是因为当启动服务端应用时 会在eureka注册中心显示 已注册服务

 按照上方步骤 给当前服务提供者 创建相应Controller控制层

 启动 服务提供者 服务后 发现已有服务注册到 eureka服务中心 红色报错只需重启服务中心即可

 编写服务消费者步骤 与 服务提供者一致

控制层与上方步骤一致

 启动 服务消费者 服务后 Eureka服务注册中心会显示已有2个注册信息

服务注册与服务发现-Eureka深入

自我保护模式

 当服务提供者停止服务时 若服务注册中心仍然开启的话 会产生报错信息

 产生原因:

Eureka对于服务注册中心 服务错误率一旦>15% 会认为是注册中心产生问题 

 一般eureka若想消除失效进程 最快90s 最慢150s

若eureka想达到快速清理已失效进程 可以修改时间变量

服务注册中心设置 清理注册表时间

服务提供者设置 心跳间隔时间 和 标记失效时间

高可用

编写高可用Eureka Server

1.修改是否注册到其他实例 是否从其他实例获取数据为true

2.修改注册中心指定地址注册 为其他的注册中心

 

启动2个注册中心 发现相互之间实现注册效果 此时注册服务中心集群已完成创建 

 

将应用注册到Eureka Server集群上

修改服务提供者 或 服务消费者  的配置信息

​​​​​​​

​​​​​​​ 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值