单体架构:业务所有功能都在一个项目中开发,打成一个包部署 优点是架构简单 部署成本低 缺点是 耦合度高

分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为一个独立的项目开发,也称为一个服务 优点是 耦合度低 缺点是 关系更复杂了

微服务:就是一种经过良好架构设计的分布式架构方案

springcloud是国内使用最广泛的微服务框架,他是微服务架构的一站式解决方案,集成了各种优秀的微服务功能组件

微服务的拆分原则

1.不同的微服务不能重复开发相同的业务

2.微服务之间的数据独立,且不能访问其他微服务的数据库

3.微服务可以把自己的业务暴露成接口供其他微服务调用

微服务的远程调用

大概步骤为

1.注册一个RestTemplate的实例到spring容器中

2.修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User

3.将查询的User填充到Order对象,一起返回

提供者与消费者

服务消费者:一次业务中,调用其他微服务的服务

服务提供者:一次业务中,被其他微服务调用的服务

这两个角色不是绝对的 只是相对于业务而言

ribbon负载均衡

负载均衡策略

内置负载均衡规则类 规则描述
RoundRobinRule 简单轮询服务列表来选择服务器。
AvailabilityFilteringRule 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机选择一个可用的服务器。
RetryRule 重试机制的选择逻辑

其中ZoneAvoidanceRule为默认的策略

更改负载均衡规则有两种方式

一般用默认的负载均衡规则,不做修改!!!!!!!!!!!!

1.定义一个新的IRule

@Bean
public IRule randomRule(){
return new RandomRule();
}

2.在配置文件中添加新的规则

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

饥饿加载

Ribbon默认的是懒加载

可以改成饥饿加载 更改方式如下

ribbon:
eager-load:
enabled: true
clients: userservice

Nacos注册中心

服务注册到nacos

1.引入依赖

父工程

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>

子工程

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置nacos地址

在子工程的yml文件中添加nacos地址

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

3.重启

服务分级存储模型

Nacos将同一机房内的实例划分为一个集群。Nacos使用多副本集群技术,可以让多台服务器在同一个网络中共享配置信息和服务发现。当某个实例宕机时,其他实例依然可以正常工作,确保Nacos服务的高可用性。

springcloud day01的更多相关文章

  1. 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  2. springcloud(第三篇)springcloud eureka 服务注册与发现 *****

    http://blog.csdn.net/liaokailin/article/details/51314001 ******************************************* ...

  3. SpringCloud Sleuth 使用

    1. 介绍   Spring-Cloud-Sleuth是Spring Cloud的组成部分之一,为SpringCloud应用实现了一种分布式追踪解决方案,其兼容了Zipkin, HTrace和log- ...

  4. Jquery day01

    day01: 基础--选择器.属性和CSS.文档处理 day02: 高级--筛选.事件.效果.ajax jQuery介绍 JS类库 JavaScript 库封装了很多预定义的对象和实用函数.能帮助使用 ...

  5. python Day01

    Python Day01 Python 简介 介绍 Python 是一种面向对象.直译式的计算机程序设计语言,也是一种功能强大的通用型语言,已经有将近二十年的发展历史,成熟稳定.包含了一组完善而且容易 ...

  6. Spring day01笔记

    struts:web层,比较简单(ValueStack值栈,拦截器) hibernate:dao层,知识点杂 spring:service层,重要,讲多少用多少 --> [了解]   sprin ...

  7. SpringCloud+Consul 服务注册与服务发现

    SpringCloud+Consul 服务注册与服务发现 1. 服务注册: 在Spring.factories有一段: # Discovery Client Configuration org.spr ...

  8. 传智播客JavaWeb day01 快捷键、XML

    2015-01-14 一直计划着学习java,今天晚上终于下定决心看了下传智播客朴乾老师的javaweb开发视频day01之第一讲,主要内容是开发工具简单介绍.怎么创建工程.Junit的介绍,我是C# ...

  9. SpringCloud学习后获取的地址

    关于SpringCloud + Docker 学习地址: (1) https://yq.aliyun.com/articles/57265 (2) https://yq.aliyun.com/team ...

  10. python开发学习-day01 (python安装与版本、字符串、字典、运算符、文件)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

随机推荐

  1. 以交互的方式升级ESXi主机

    以交互的方式升级ESXi主机 环境说明: 需求:要将 ESXi 6.0 主机和 ESXi 6.5 主机升级到 ESXi 6.7,可从 CD.DVD 或 USB 闪存驱动器引导 ESXi 安装程序. 注 ...

  2. C#网络爬虫开发

    1前言 爬虫一般都是用Python来写,生态丰富,动态语言开发速度快,调试也很方便 但是 我要说但是,动态语言也有其局限性,笔者作为老爬虫带师,几乎各种语言都搞过,现在这个任务并不复杂,用我最喜欢的C ...

  3. 懂九转大肠的微软New Bing 内测申请教程

    最近微软的New Bing开放内测了,网上已经有拿到内测资格的大佬们对比了ChatGPT和New Bing.对比结果是New Bing比ChatGPT更强大.来看看具体对比例子吧 1.时效性更强 Ch ...

  4. 关于opencv3.2的parallel_for_函数不支持bind function的处理(基于ch8代码)

    1.换opencv4 2.修改程序 改程序针对slambook2/ch8/direct_method.cpp #include <opencv2/opencv.hpp> #include ...

  5. 2021级《JAVA语言程序设计》上机考试试题5

    这是系统员功能实现,因为使用到了教师,所以教师的Bean与Dao,以及更新的Servlet与service Teacher package Bean; public class Teacher {pr ...

  6. Training Spiking Neural Networks with Local Tandem Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 36th Conference on Neural Information Processing Systems (NeurIPS 202 ...

  7. nvm管理node和npm

    安装nvm 下载地址:https://github.com/coreybutler/nvm-windows/releases 下载前卸载调node,安装时注意记住所在路径,傻瓜式安装.安装后nvm - ...

  8. SpringMVC基础源码分析(一)

    实现Controller的三种方式分析 每种实现的方式对应的HanderAdapter都不同. 实现Controller接口 该接口对应的HanderAdapter为SimpleControllerH ...

  9. mac sourceTree 每次操作提示需要密码

    1.在终端(terminal)打开你的工程目录2.输入git config credential.helper store 3.拉取代码git pull

  10. 域名_服务器_IP之间的关系

    目的: 近期在搞A服务器和云服务器,以及正式环境的B服务器的时候,多次搞不清楚域名,IP的关系. 现在理解看来: IP 分为内网和外网的,以A为例,A是内网的IP,然后申请下来的外网IP是B(还真忘了 ...