做设计学什么英语比较好的网站/公司的网站

做设计学什么英语比较好的网站,公司的网站,品牌网站建设 意义,网站建设实验分析总结1. 背景 1.1 问题描述 我们如果通过 RestTamplate 进行远程调用时,URL 是写死的,例如: String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 当机器更换或者新增机器时,这个 URL 就需要相应地变…

1. 背景

1.1 问题描述

我们如果通过 RestTamplate 进行远程调用时,URL 是写死的,例如:

String url = "http://127.0.0.1:9090/product/" + orderInfo.getProductId();

当机器更换或者新增机器时,这个 URL 就需要相应地变更。这就意味着要通知所有相关服务去修改,进而导致各个项目的配置文件反复更新,各个项目频繁部署。这种工作既繁琐又没有太多实际价值,却又不得不做,给开发者带来极大的困扰。

1.2 解决思路

我们可以从生活场景中获取灵感。在生活里,我们难免要与各种机构(如医院、学校、政府部门等)打交道,需要保存它们的电话号码。若机构更换电话号码,就需通知所有使用方,但这些机构的使用方群体庞大,根本无法做到一一通知,该怎么办呢?

通常的做法是,机构电话变更时通知 114。用户需要联系机构时,先拨打 114 查询电话,再联系相应机构。114 查号台主要有两个作用:

  • 号码注册:服务方将电话上报给 114。
  • 号码查询:使用方通过 114 能查到对应的号码。

同样,在微服务开发中,也可采用类似方案。服务启动或变更时,向注册中心进行报道,注册中心记录应用和 IP 的关系。调用方在调用时,先去注册中心获取服务方的 IP,再去服务方进行调用。

1.3 什么是注册中心

在早期的架构体系中,集群概念尚未普及,机器数量较少,那时直接使用 DNS + Nginx 就能满足几乎所有服务的发现需求,相关注册信息直接配置在 Nginx 中。然而,随着微服务的兴起和流量的急剧增长,机器规模不断扩大,且机器上下线行为频繁。此时,依靠运维人员手动维护这些配置信息变得非常麻烦。于是,开发者们期望有一个工具,它能维护一个服务列表,机器上线、宕机等信息都能自动更新到这个服务列表上,客户端获取这个列表后可直接进行服务调用,这就是注册中心。

注册中心主要有三种角色:

  • 服务提供者(Server):在一次业务中,被其他微服务调用的服务,即提供接口给其他微服务。
  • 服务消费者(Client):在一次业务中,调用其他微服务的服务,即调用其他微服务提供的接口。
  • 服务注册中心(Registry):用于保存 Server 的注册信息,当 Server 节点发生变更时,Registry 会同步变更。服务与注册中心通过一定机制通信,如果注册中心与某服务长时间无法通信,就会注销该实例。

它们之间的关系以及工作内容,可以通过两个概念来描述:

  • 服务注册:服务提供者在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。
  • 服务发现:服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口。服务发现的一个重要作用就是为服务消费者提供一个可用的服务列表。

1.4 CAP 理论

谈及注册中心,就无法避开 CAP 理论。CAP 理论是分布式系统设计中最基础且最为关键的理论。

  • 一致性(Consistency):CAP 理论中的一致性指的是强一致性,即所有节点在同一时间具有相同的数据。
  • 可用性(Availability):保证每个请求都有响应(响应结果可能不对)。
  • 分区容错性(Partition Tolerance):当出现网络分区后,系统仍然能够对外提供服务。

举例来说,一个部门在全国各地都有岗位,总部下发通知,由于通知需开会周知全员,当有客户咨询时:

  • 一致性:所有成员对客户的回应结果都是一致的。
  • 可用性:客户咨询时,一定有回应。
  • 分区容错性:当其中一个成员休假时,这个部门的其他成员也可以对客户提供咨询服务。

CAP 理论表明:一个分布式系统不可能同时满足数据一致性、服务可用性和分区容错性这三个基本需求,最多只能同时满足其中的两个。

在分布式系统中,系统间的网络无法 100% 保证健康,服务又必须对外提供服务,因此 Partition Tolerance 不可避免。那就只能在 C 和 A 中选择一个,即 CP 或者 AP 架构。

  • CP 架构:为保证分布式系统对外的数据一致性,选择不返回任何数据。
  • AP 架构:为保证分布式系统的可用性,节点 2 返回 V0 版本的数据(即使这个数据不正确)。

更多参考:一文看懂|分布式系统之CAP理论-腾讯云开发者社区-腾讯云

1.5 常见的注册中心

  • Zookeeper:Zookeeper 的官方并未明确表明它是一个注册中心,但在国内 Java 体系中,大部分集群环境都依赖 Zookeeper 来实现注册中心的功能。
  • Eureka:Eureka 是 Netflix 开发的基于 REST 的服务发现框架,主要用于服务注册、管理、负载均衡和服务故障转移。官方声明在 Eureka 2.0 版本停止维护,不建议使用。不过,Eureka 是 SpringCloud 服务注册 / 发现的默认实现,所以目前仍有许多公司在使用。
  • Nacos:Nacos 是 Spring Cloud Alibaba 架构中重要的组件,除具备服务注册、服务发现功能外,Nacos 还支持配置管理、流量管理、DNS、动态 DNS 等多种特性。

下面通过表格对比一下这三种注册中心基于 CAP 理论的特点:

注册中心

CAP 理论

Zookeeper

CP

Eureka

AP

Nacos

CP 或 AP(默认 AP)

在分布式环境中,拿到一个错误的数据,往往比无法提供实例信息导致请求失败要好(例如淘宝 11.11、京东 618 等活动,都遵循 AP 原则)。在我们的课堂中,会为大家介绍 Eureka 和 Nacos 的使用。

2. Eureka 介绍

Eureka 是 Netflix OSS 套件中关于服务注册和发现的解决方案。Spring Cloud 对 Eureka 进行了集成,并作为优先推荐方案进行宣传。尽管目前 Eureka 2.0 已停止维护,在新的微服务架构设计中也不再建议使用,但当前仍有大量公司的微服务系统将 Eureka 作为注册中心。

官方文档:Home · Netflix/eureka Wiki · GitHub

Eureka 主要分为两个部分:

  • Eureka Server:作为注册中心 Server 端,向微服务应用程序提供服务注册、发现、健康检查等能力。
  • Eureka Client:服务提供者,服务启动时,会向 Eureka Server 注册自己的信息(IP、端口、服务信息等),Eureka Server 会存储这些信息。

关于 Eureka 的学习,主要涵盖以下三个部分:

  1.  搭建 Eureka Server。
  2. 将 order - service、product - service 都注册到 Eureka。
  3. order - service 远程调用时,从 Eureka 中获取 product - service 的服务列表,然后进行交互。 

3. 搭建 Eureka Server

Eureka - server 是一个独立的微服务。

3.1 创建 Eureka - server 子模块

此步骤可通过相应的开发工具(如 IDEA)进行操作,创建一个新的 Maven 子模块,用于搭建 Eureka Server。

3.2 引入 eureka - server 依赖

在创建好的子模块的 pom.xml 文件中添加如下依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring - cloud - starter - netflix - eureka - server</artifactId></dependency>

3.3 项目构建插件

同样在 pom.xml 文件中,配置项目构建插件:

3.4 完善启动类

为项目编写一个启动类,并在启动类上添加 @EnableEurekaServer 注解,开启 eureka 注册中心服务。示例代码如下:

 
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}}

3.5 编写配置文件

在 application.yml 文件中进行如下配置:

server:port: 10010spring:application:name: eureka - servereureka:instance:hostname: localhostclient:fetch - registry: false

# 表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false

register - with - eureka: false # 表示是否将自己注册到Eureka Server,默认为true。由于当前应用就是Eureka Server,故而设置为false

service - url:

# 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址。

defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

3.6 启动服务

启动服务后,访问注册中心:http://127.0.0.1:10010/ ,若能看到相应页面,则表明 eureka - server 已启动成功。

4. 服务注册

接下来我们将 product - service 注册到 eureka - server 中。

4.1 引入 eureka - client 依赖

在 product - service 模块的 pom.xml 文件中添加如下依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring - cloud - starter - netflix - eureka - client</artifactId></dependency>

4.2 完善配置文件

在 product - service 模块的 application.yml 文件中添加服务名称和 eureka 地址:

spring:application:name: product - serviceeureka:client:service - url:defaultZone: http://127.0.0.1:10010/eureka

4.3 启动服务

启动 product - service 服务后,刷新注册中心:http://127.0.0.1:10010/ ,可看到 product - service 已成功注册到 eureka 上。

5. 服务发现

接下来我们修改 order - service,在远程调用时,从 eureka - server 拉取 product - service 的服务信息,实现服务发现。

5.1 引入依赖

服务注册和服务发现都封装在 eureka - client 依赖中,所以服务发现时,同样引入 eureka - client 依赖:

 

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring - cloud - starter - netflix - eureka - client</artifactId>

</dependency>

5.2 完善配置文件

服务发现也需要知道 eureka 地址,因此配置内容与服务注册一致,都是配置 eureka 信息:

 

spring:

application:

name: order - service

eureka:

client:

service - url:

defaultZone: http://127.0.0.1:10010/eureka

5.3 远程调用

在远程调用时,我们需要从 eureka - server 中获取 product - service 的列表(可能存在多个服务),并选择其中一个进行调用。示例代码如下:

 
import com.bite.order.mapper.OrderMapper;import com.bite.order.model.OrderInfo;import com.bite.order.model.ProductInfo;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.DiscoveryClient;import jakarta.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.netflix.eureka.EurekaServiceInstance;import org.springframework.stereotype.Service;import org.springframework.web.client.RestTemplate;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;@Servicepublic class OrderService {private static final Logger log = LoggerFactory.getLogger(OrderService.class);@Autowiredprivate OrderMapper orderMapper;@Resourceprivate DiscoveryClient discoveryClient;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId) {OrderInfo orderInfo = orderMapper.selectOrderById(orderId);//String url = "http://127.0.0.1:9090/product/" + orderInfo.getProductId();//根据应用名称获取服务列表List<ServiceInstance> instances = discoveryClient.getInstances("product - service");//服务可能有多个,获取第一个EurekaServiceInstance instance = (EurekaServiceInstance) instances.get(0);log.info(instance.getInstanceId());//拼接urlString url = instance.getUri() + "/product/" + orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}}

5.4 启动服务

启动 order - service 服务后,刷新注册中心:http://127.0.0.1:10010/ ,可看到 order - service 已注册到 eureka 上。访问接口:http://127.0.0.1:8080/order/1 ,可以发现远程调用也成功了。

6. Eureka 和 Zookeeper 区别

Eureka 和 Zookeeper 都是用于服务注册和发现的工具,它们的区别如下:

对比项

Eureka

Zookeeper

开源项目所属

Netflix 开源的项目

Apache 开源的项目

遵循原则

基于 AP 原则,保证高可用

基于 CP 原则,保证数据一致性

节点关系

每个节点都是均等的

节点区分 Leader 和 Follower 或 Observer

选举机制

无选举机制

如果 Zookeeper 的 Leader 发生故障时,需要重新选举,选举过程集群会有短暂时间的不可用

通过以上对 Eureka 的详细介绍,相信大家对服务注册与发现以及 Eureka 在 Spring Cloud 中的应用有了更深入的理解。在实际项目中,可根据具体需求选择合适的注册中心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页制作15-Javascipt时间特效の记录网页停留时间

01效果图&#xff1a; 02运用&#xff1a; window.setTimeout&#xff08;&#xff09;刷新function&#xff08;&#xff09;函数document.forms&#xff08;&#xff09;&#xff1a;表单if条件语句window.alert&#xff08;&#xff09;窗口警示 03、操作代码&#xff1a;…

C++ std::list超详细指南:基础实践(手搓list)

目录 一.核心特性 1.双向循环链表结构 2.头文件&#xff1a;#include 3.时间复杂度 4.内存特性 二.构造函数 三.list iterator的使用 1.学习list iterator之前我们要知道iterator的区分 ​编辑 2.begin()end() 3.rbegin()rend() 四.list关键接口 1.empty() 2. size…

996引擎 - 红点系统

996引擎 - 红点系统 总结NPC 红点(TXT红点)Lua 红点1. Red_Point.lua2. UI_Ex.lua参考资料以下内容是在三端 lua 环境下测试的 总结 红点系统分几个部分组成。 M2中设置变量推送。 配置红点表。 Envir\Data\cfg_redpoint.xls 2.1. UI元素中找到ID填写 ids 列。 主界面挂载…

PySide(PyQt),使用types.MethodType动态定义事件

以PySide(PyQt)的图片项为例&#xff0c;比如一个视窗的场景底图是一个QGraphicsPixmapItem&#xff0c;需要修改它的鼠标滚轮事件&#xff0c;以实现鼠标滚轮缩放显示的功能。为了达到这个目的&#xff0c;可以重新定义一个QGraphicsPixmapItem类&#xff0c;并重写它的wheelE…

【eNSP实战】三层交换机使用ACL实现网络安全

拓图 要求&#xff1a; vlan1可以访问Internetvlan2和vlan3不能访问Internet和vlan1vlan2和vlan3之间可以互相访问PC配置如图所示&#xff0c;这里不展示 LSW1接口vlan配置 vlan batch 10 20 30 # interface Vlanif1ip address 192.168.40.2 255.255.255.0 # interface Vla…

Unity中WolrdSpace下的UI展示在上层

一、问题描述 Unity 中 Canvas使用World Space布局的UI&#xff0c;想让它不被3d物体遮挡&#xff0c;始终显示在上层。 二、解决方案 使用shader解决 在 UI 的材质中禁用深度测试&#xff08;ZTest&#xff09;&#xff0c;强制 UI 始终渲染在最上层。 Shader "Custo…

五子棋小游戏-简单开发版

一、需求分析 开发一个基于 Pygame 库的五子棋小游戏&#xff0c;允许两名玩家在棋盘上轮流落子&#xff0c;当有一方达成五子连珠时游戏结束&#xff0c;显示获胜信息&#xff0c;并提供退出游戏和重新开始游戏的操作选项。 1.棋盘显示 &#xff1a; 显示一个 15x15 的五子棋…

小秋的矩阵

0小秋的矩阵 - 蓝桥云课 问题描述 给你一个 n 行 m 列只包含 0 和 1 的矩阵&#xff0c;求它的所有子矩阵中&#xff0c;是方阵而且恰好包含 k 个 0 的数量。 方阵是行数和列数相等的矩阵。 子矩阵是从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵&#xff08;保…

晶晨S905L3芯片_原机安卓4升级安卓9.0_通刷线刷固件包

晶晨S905L3芯片_原机安卓4升级安卓9.0_通刷线刷固件包 线刷方法&#xff1a;&#xff08;新手参考借鉴一下&#xff09; 1、准备好一根双公头USB线刷刷机线&#xff0c;长度30-50CM长度最佳&#xff0c;同时准备一台电脑&#xff1b; 2、电脑上安装好刷机工具Amlogic USB Bu…

谷歌Chrome或微软Edge浏览器修改网页任意内容

在谷歌或微软浏览器按F12&#xff0c;打开开发者工具&#xff0c;切换到console选项卡&#xff1a; 在下面的输入行输入下面的命令回车&#xff1a; document.body.contentEditable"true"效果如下&#xff1a;

【生日蛋糕——DFS剪枝优化】

题目 分析 代码 #include <bits/stdc.h> using namespace std;const int N 24; const int inf 0x3f3f3f3f;int mins[N], minv[N]; int R[N], H[N]; int n, m, ans inf;void dfs(int u, int v, int s) {if(v minv[u] > n) return;if(s mins[u] > ans) return;…

短视频下载去水印,用什么工具好?

去除视频和图片水印是许多用户的需求&#xff0c;尤其是在分享或保存内容时。以下是6款超好用的工具&#xff0c;帮助你轻松去除水印&#xff0c;享受纯净的视觉体验&#xff1a; 1. 易下载去水印小程序 特点&#xff1a; 操作简单&#xff0c;支持抖音、快手、小红书、哔哩哔哩…

设计模式(行为型)-备忘录模式

目录 定义 类图 角色 角色详解 &#xff08;一&#xff09;发起人角色&#xff08;Originator&#xff09;​ &#xff08;二&#xff09;备忘录角色&#xff08;Memento&#xff09;​ &#xff08;三&#xff09;备忘录管理员角色&#xff08;Caretaker&#xff09;​…

【技术报告】谷歌开源多模态大模型 Gemma-3

【技术报告】谷歌开源多模态大模型 Gemma-3 1. Gemma-3 简介1.1 Gemma-3 的新功能1.2 与现有工作流的集成1.3 开始使用 Gemma-3 Gemma-3 技术报告&#xff1a;摘要Gemma-3 技术报告&#xff1a;1. 引言Gemma-3 技术报告&#xff1a;2. 模型架构2.1 视觉模态2.2 预训练2.3 量化感…

[ISP] 人眼中的颜色

相机是如何记录颜色的&#xff0c;又是如何被显示器还原的&#xff1f; 相机通过记录RGB数值然后显示器显示RGB数值来实现颜色的记录和呈现。道理是这么个道理&#xff0c;但实际上各厂家生产的相机对光的响应各不相同&#xff0c;并且不同厂家显示器对三原色的显示也天差地别&…

InfiniBand可靠连接(RC)模式:设计原理、核心机制与应用实践

引言 InfiniBand作为一种高性能网络互连技术&#xff0c;广泛应用于超算集群、分布式存储和金融交易系统等领域。其可靠连接&#xff08;Reliable Connection, RC&#xff09;模式以硬件级的有序性、可靠性和低延迟特性成为关键场景的首选。本文结合技术原理、机制对比和实际应…

【网络】Caddy 服务器如何提供 TLS(Transport Layer Security)(传输层安全协议)

这张图片介绍了 Caddy 服务器如何提供 TLS&#xff08;传输层安全协议&#xff09; 支持&#xff0c;确保通信的安全性。以下是对图片内容的详细分析 1. Caddy 是什么&#xff1f; Caddy 是一个现代化的 Web 服务器&#xff0c;以其简单易用和自动化的 HTTPS 支持而闻名。它内…

GHCTF web方向题解

upload?SSTI! import os import refrom flask import Flask, request, jsonify,render_template_string,send_from_directory, abort,redirect from werkzeug.utils import secure_filename import os from werkzeug.utils import secure_filenameapp Flask(__name__)# 配置…

《Python实战进阶》No21:数据存储:Redis 与 MongoDB 的使用场景

第21集&#xff1a;数据存储&#xff1a;Redis 与 MongoDB 的使用场景 摘要 在现代应用开发中&#xff0c;数据存储的选择直接影响系统的性能、扩展性和成本。Redis 和 MongoDB 是两种极具代表性的数据库技术&#xff0c;它们分别擅长解决不同场景下的问题。本文将深入探讨 Re…

mysql学习-常用sql语句

1、安装mysql参考网上链接&#xff0c;进入mysql数据库 mysql -u root -p 2、数据库操作 2.1、创建数据库 create database 数据库名 default character set utf8; 2.2、显示所有数据库 show databases; 2.3、选择数据库 use elementInfo; 2.4、删除数据库 drop database…