当前位置: 首页 > news >正文

网关的作用及其高可用性设计详解

引言

在现代分布式系统架构中,网关(Gateway)是一个关键组件。它作为客户端与后端服务之间的桥梁,不仅提供了请求路由、负载均衡、安全认证、流量控制等功能,还能够保护后端服务的安全和稳定性。网关的设计和高可用性对于整个系统的稳定性和可靠性至关重要。

本文将详细讲解网关的作用,以及如何确保网关即使在故障(例如挂掉)时,系统仍能正常运行。我们将结合图文和代码示例,深入探讨网关的设计、实现以及常见的高可用性策略,帮助开发者理解如何构建健壮的网关系统。


第一部分:网关的基础概念

1.1 什么是网关?

网关(Gateway)是分布式系统架构中的一种服务,通常位于客户端和后端微服务之间。它是一个请求处理器,负责接收外部请求并将其转发到内部微服务。网关的主要职责包括:

  • 请求路由:根据请求的 URL、Header 或其他信息,将请求路由到不同的后端微服务。
  • 负载均衡:将客户端请求均衡地分发到多个后端服务节点,避免单个节点过载。
  • 安全控制:提供身份验证、授权、SSL/TLS 加密等安全功能。
  • 流量控制:包括速率限制、熔断、限流等功能,防止恶意请求或流量突发导致后端服务崩溃。
  • 协议转换:可以将外部请求转换为内部微服务所需的协议,例如将 HTTP 请求转换为 gRPC 请求。

1.2 网关在微服务架构中的作用

在微服务架构中,后端通常包含多个相互独立的服务。这些服务各自处理不同的业务逻辑,例如订单管理、用户管理、支付服务等。如果没有网关,客户端需要直接与各个后端服务进行交互。这会导致以下问题:

  1. 复杂性增加:客户端需要知道每个微服务的详细信息(如 URL 和接口规范),增加了客户端的复杂性。
  2. 安全性问题:直接暴露后端服务给客户端可能导致安全隐患,后端服务暴露的接口可能存在未经控制的访问。
  3. 流量控制缺失:缺乏统一的流量控制机制,后端服务可能会因为过多请求而崩溃。

通过引入网关,客户端的请求首先到达网关,网关处理路由、安全、流量控制等逻辑,简化了客户端与后端服务的交互。


第二部分:网关的关键功能

2.1 请求路由

请求路由是网关最基础的功能之一。它能够根据请求路径、请求头等信息,将请求转发到相应的后端服务。例如,一个电子商务网站可能会有以下服务:

  • /orders/* 路由到订单服务
  • /users/* 路由到用户服务
  • /products/* 路由到商品服务
2.1.1 路由规则示例(Spring Cloud Gateway)
spring:cloud:gateway:routes:- id: order-serviceuri: http://orders-service:8080predicates:- Path=/orders/**- id: user-serviceuri: http://users-service:8081predicates:- Path=/users/**- id: product-serviceuri: http://products-service:8082predicates:- Path=/products/**

在这个例子中,网关根据请求的路径将请求转发到不同的后端服务。

2.2 负载均衡

网关通常具有负载均衡功能,可以将请求分配到多个后端服务实例,以避免单个实例负载过高。常见的负载均衡算法包括轮询、加权轮询、最小连接数等。

2.2.1 负载均衡示例(Spring Cloud Gateway + Ribbon)
spring:cloud:gateway:routes:- id: user-serviceuri: lb://users-servicepredicates:- Path=/users/**

这里,lb://users-service 表示启用负载均衡功能,网关将自动将请求分配到多个 users-service 实例。

2.3 安全控制

网关通常也是系统的安全屏障。它可以进行身份验证、授权,以及为后端服务提供保护。通过网关,开发者可以轻松实现基于角色的访问控制、IP 限制等。

2.3.1 安全控制示例(Spring Security 集成)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/users/**").authenticated()  // 用户服务需要认证.antMatchers("/products/**").permitAll()   // 商品服务允许公开访问.and().oauth2Login();  // 支持 OAuth2 登录}
}

在这个例子中,用户服务需要认证,而商品服务允许公开访问。

2.4 流量控制与熔断机制

流量控制是防止后端服务过载的重要手段。网关可以通过速率限制、熔断、限流等功能,确保后端服务的稳定性。

2.4.1 熔断器示例(Resilience4j + Spring Cloud Gateway)
spring:cloud:gateway:routes:- id: product-serviceuri: http://products-service:8082predicates:- Path=/products/**filters:- name: CircuitBreakerargs:name: productCircuitBreakerfallbackUri: forward:/fallback/products

在这个例子中,使用了熔断器,当商品服务不可用时,网关会自动调用回退机制,避免向后端发送更多请求。

2.5 协议转换

有时,后端服务使用的协议可能与客户端不同。网关可以充当协议转换器,将 HTTP 请求转换为 gRPC 请求或其他协议。


第三部分:网关挂掉了,如何确保系统正常运行?

网关的高可用性设计是分布式系统中的一个重要课题。如果网关挂掉,整个系统的外部访问可能会中断。因此,必须考虑如何设计网关的高可用性,使得即使网关挂掉,系统仍能正常运行。

3.1 多实例部署

最常见的网关高可用性方案是通过多实例部署。通过在不同的机器或容器中运行多个网关实例,可以避免单点故障。当一个实例挂掉时,其他实例可以继续处理请求。

3.1.1 使用 Kubernetes 部署网关

Kubernetes 提供了强大的容器编排功能,适合用来实现网关的高可用性。我们可以通过 Kubernetes 的 DeploymentService 来部署多个网关实例。

apiVersion: apps/v1
kind: Deployment
metadata:name: gateway-deployment
spec:replicas: 3  # 部署三个网关实例selector:matchLabels:app: gatewaytemplate:metadata:labels:app: gatewayspec:containers:- name: gatewayimage: my-gateway-image:latestports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: gateway-service
spec:type: LoadBalancerselector:app: gatewayports:- protocol: TCPport: 80targetPort: 8080

在这个例子中,我们部署了 3 个网关实例,并通过一个负载均衡服务(Service)将流量均匀分发到多个实例上。

3.2 健康检查与自动恢复

为了确保网关的高可用性,我们可以使用健康检查机制来监控网关的状态。如果某个网关实例发生故障,系统会自动将其移出负载均衡池,并在需要时重启该实例。

3.2.1 Kubernetes 健康检查配置

Kubernetes 提供了 livenessProbereadinessProbe 两种探针,用于监控 Pod 的健康状态。当实例不健康时,Kubernetes 会自动重启容器。

apiVersion: apps/v1
kind: Deployment
metadata:name: gateway-deployment
spec:replicas: 3selector:matchLabels:app: gatewaytemplate:metadata:labels:app: gatewayspec:containers:- name: gatewayimage: my-gateway-image:latestports:- containerPort: 8080livenessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 5periodSeconds: 10

在这个配置中,livenessProbe 定期检查网关的健康状态。如果 /health 接口返回非 200 状态码,Kubernetes 将自动重启容器。

3.3 网关的流量分配与负载均衡

在多实例部署的场景下,流量分配和负载均衡是保证系统高可用的重要部分。常见的负载均衡技术包括 DNS 轮询、反向代理和硬件负载均衡。

3.3.1 NGINX 负载均衡配置

如果不使用 Kubernetes 等容器编排平台,也可以使用传统的反向代理(如 NGINX)来实现网关的负载均衡。

upstream gateway {server gateway1.example.com:8080;server gateway2.example.com:8080;server gateway3.example.com:8080;
}server {listen 80;location / {proxy_pass http://gateway;}
}

在这个配置中,NGINX 会将流量均匀分发到三个网关实例。

3.4 异地多活

在一些高要求的系统中,单单依靠多实例部署可能不足以满足高可用性需求。此时,异地多活是更为可靠的方案。通过在不同的数据中心或区域部署多个网关实例,系统可以在某个数据中心出现故障时自动切换到其他数据中心。

3.4.1 异地多活设计
  1. 全局负载均衡:使用全球 DNS 负载均衡或类似技术,将流量分发到不同地区的网关实例上。
  2. 数据同步:确保在不同地区运行的网关实例和后端服务之间的数据一致性,通常需要使用分布式数据库或消息队列进行数据同步。

3.5 服务降级与熔断机制

当网关发生故障或后端服务不可用时,服务降级和熔断机制可以有效保护系统不被过载请求拖垮。通过熔断器,网关可以在服务不可用时自动返回默认的降级响应。

3.5.1 服务降级示例
spring:cloud:gateway:routes:- id: order-serviceuri: http://orders-service:8080predicates:- Path=/orders/**filters:- name: CircuitBreakerargs:name: orderCircuitBreakerfallbackUri: forward:/fallback/orders

在这个例子中,当订单服务不可用时,网关会自动调用回退机制,返回一个默认的响应,而不是让请求一直等待或失败。

3.6 灾备与数据恢复

高可用系统还需要考虑灾备与数据恢复机制。当整个网关集群或数据中心出现故障时,系统应该有能力通过备用数据中心或云端备份进行恢复。

3.6.1 灾备设计思路
  1. 定期备份:定期备份网关的配置数据、路由规则和其他关键数据。
  2. 自动恢复:当主要数据中心不可用时,能够自动切换到备用数据中心,并从备份中恢复数据。

第四部分:网关的监控与性能优化

4.1 实时监控

为了确保网关的稳定性和高可用性,必须建立完善的监控机制。常见的监控指标包括:

  1. 响应时间:监控网关的响应时间,检测是否有请求延迟过高的情况。
  2. 请求数与错误率:监控请求数和错误率,检测是否有服务故障或过载的情况。
  3. CPU 和内存使用率:监控网关的资源消耗情况,确保网关实例不会因为资源不足而挂掉。
4.1.1 Prometheus 与 Grafana 集成

Prometheus 和 Grafana 是 Kubernetes 中常用的监控工具。我们可以通过 Prometheus 收集网关的监控指标,并在 Grafana 中展示这些数据。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:name: gateway-monitor
spec:selector:matchLabels:app: gatewayendpoints:- port: metricsinterval: 15s

在这个配置中,ServiceMonitor 用于监控网关的 metrics 端口,并定期收集监控数据。

4.2 性能优化

网关的性能直接影响整个系统的吞吐量和响应速度。因此,针对网关的性能优化是非常必要的。

4.2.1 缓存机制

通过在网关层引入缓存,可以有效减少后端服务的压力,提高系统的响应速度。

spring:cloud:gateway:routes:- id: cached-routeuri: http://backend-service:8080predicates:- Path=/cached/**filters:- name: AddResponseHeaderargs:name: Cache-Controlvalue: max-age=3600

在这个例子中,网关会在响应中添加 Cache-Control 头部,告知客户端缓存数据 1 小时。

4.2.2 压缩响应

通过压缩响应体,网关可以减少网络传输的带宽消耗,从而提升性能。

spring:cloud:gateway:default-filters:- name: GzipResponse

在这个配置中,启用了 Gzip 压缩,所有通过网关的响应都会自动压缩。


第五部分:网关的开发与维护

5.1 网关开发的关键点

开发网关时,开发者需要关注以下关键点:

  1. 路由规则的灵活性:确保路由规则可以灵活配置,方便后续扩展。
  2. 安全性:集成身份认证和授权机制,保护后端服务免受未经授权的访问。
  3. 高可用性:设计网关时,考虑多实例部署、负载均衡和熔断等高可用机制。

5.2 网关的版本管理

随着业务的扩展,网关的功能和配置会不断变化。网关的版本管理和灰度发布机制可以帮助开发者安全地进行升级和更新。

5.2.1 版本管理示例

在 Kubernetes 中,可以通过 canary 发布机制进行灰度发布。

apiVersion: apps/v1
kind: Deployment
metadata:name: gateway-canary
spec:replicas: 1selector:matchLabels:app: gatewayversion: canarytemplate:metadata:labels:app: gatewayversion: canaryspec:containers:- name: gatewayimage: my-gateway-image:latest

在这个例子中,我们部署了一个 canary 版本的网关实例,用于测试新版本的功能。


第六部分:总结

网关在现代分布式系统中扮演着至关重要的角色,负责流量路由、安全控制、负载均衡等功能。为了确保系统的稳定性和高可用性,我们必须设计可靠的网关高可用架构,包含多实例部署、负载均衡、服务降级、熔断等机制。

同时,网关的性能优化、监控和开发维护也是系统稳定运行的关键。通过合理的缓存机制、压缩响应以及精细的监控手段,网关可以有效提升系统的响应速度,并在遇到故障时迅速恢复。

通过本文,开发者可以深入理解网关的作用、设计思路以及如何确保网关挂掉时系统仍能正常运行。

相关文章:

网关的作用及其高可用性设计详解

引言 在现代分布式系统架构中,网关(Gateway)是一个关键组件。它作为客户端与后端服务之间的桥梁,不仅提供了请求路由、负载均衡、安全认证、流量控制等功能,还能够保护后端服务的安全和稳定性。网关的设计和高可用性对…...

Vortex GPGPU的github流程跑通与功能模块波形探索

文章目录 前言一、跟着官方文档走一遍二、cache子模块的波形仿真2.1 必要的文件内容解释2.2 cache子模块波形仿真——目前环境没啥问题了,就vcd因为配置问题出不来 总结 前言 看了那么久的verilog代码和文档,但还是没怎么接触过Vortex GPGPU全流程跑通与…...

10.2 Linux_并发_进程相关函数

创建子进程 函数声明如下: pid_t fork(void); 返回值:失败返回-1,成功返回两次,子进程获得0(系统分配),父进程获得子进程的pid 注意:fork创建子进程,实际上就是将父进程复制一遍作为子进程&…...

【深度学习基础模型】玻尔兹曼机BM|受限玻尔兹曼机RBM|深度置信网络DBN详细理解并附实现代码。

【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann machines (RBM)|深度置信网络Deep belief networks (DBN)详细理解并附实现代码。 【深度学习基础模型】玻尔兹曼机Boltzmann machines (BM)|受限玻尔兹曼机Restricted Boltzmann m…...

滑动窗口->dd爱框框

1.题目: 2.题解: 2.1为什么用滑动窗口优化: 因为元素都是大于0的 所以:当找到大于等于x的值时,right可以不用返回 两个指针都往后走;因此可以使用滑动窗口优化暴力解法 2.2:滑动窗口具体使用步…...

Python从入门到高手4.1节-掌握条件控制语句

目录 4.1.1 理解条件控制 4.1.2 if, elif, else 4.1.3 条件表达式 4.1.4 条件控制可以嵌套 4.1.5 if语句的三元运算 4.1.6 国庆节快乐 4.1.1 理解条件控制 在日常生活中,我们常喜欢说如果, "如果怎么样,那么就会怎么样"。"如果&qu…...

使用Qt实现实时数据动态绘制的折线图示例

基于Qt的 QChartView 和定时器来动态绘制折线图。它通过动画的方式逐步将数据点添加到图表上,并动态更新坐标轴的范围,提供了一个可以实时更新数据的折线图应用。以下是对代码的详细介绍及其功能解析: 代码概述 该程序使用Qt的 QChartView…...

【人人保-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...

Redis6 多线程模型

优质博文:IT-BLOG-CN 一、单线程的优缺点 对于一个请求操作Redis主要做3件事情:从客户端读取数据/解析、执行Redis命令、回写数据给客户端。所以主线程其实就是把所有操作的这3件事情串行一起执行,因为是基于内存,所以执行速度非…...

Python的异步编程

什么是协程? 协程不是计算机系统提供,程序员人为创造。 协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法: greenlet&…...

初识Linux · 进程等待

目录 前言: 进程等待是什么 为什么需要进程等待 进程等待都在做什么 前言: 通过上文的学习,我们了解了进程终止,知道终止是在干什么,终止的三种情况,以及有了退出码,错误码的概念&#xff…...

面向对象建模

UML 关系 UML 关系主要有:依赖、关联、聚合、组合、实现、继承。 类图 #mermaid-svg-jcAjcVcPmgmWDpcI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jcAjcVcPmgmWDpcI .error-icon{fill:#552222;}#m…...

MetaJUI v0.4 遇到的一些问题及解决办法记录

1、Unity3d 版本 2022.3.29f1。 2、MetaJUI v0.4 的下载,https://download.csdn.net/download/xingchengaiwei/89334848 3、将MetaJUI v0.4解压,用Unity3d 打开项目,会出现如下问题,按照图中提示操作即可。 4、打开工程后会出现…...

从零开始学习OMNeT++系列第二弹——新建一个OMNeT++的工程

上一篇第一弹介绍了OMNeT是什么以及如何安装OMNeT,现在来说一下如何新建一个自己的OMNeT的工程。 在 Omnet安装完成后,samples/tictoc 中有该例子的完整文件,你可以立刻运行该文件看他是怎么工作的,不过更推荐按接下来的步骤一步…...

【Android】布局优化—include,merge,ViewStub的使用方法

引言 1.重要性 在Android应用开发中,布局是用户界面的基础。一个高效的布局不仅能提升用户体验,还能显著改善应用的性能。随着应用功能的复杂性增加,布局的优化变得尤为重要。优化布局能够减少渲染时间,提高响应速度&#xff0c…...

传奇外网架设教程带图文解说—Gee引擎

架设前准备工作: ①通过百度网盘下载版本、补丁、客户端和DBC2000。版本解压到D盘,客户端解压到D盘或是E盘,补丁先不解压 ②安装和配置DBC2000,有些版本不一定用的是DBC2000数据库,看引擎默认的数据库是哪个 DBC数据…...

MySQL | excel数据输出insert语句

需求 在日常生产运维过程中,有很多需要进行人工梳理的excel数据,到了研发这一侧需要转为sql语句进行数据修正,如何输出insert插入语句? 方案 在空白列插入,选择需要的列 "INSERT INTO tab_name1 (name, desc) …...

足球青训俱乐部管理:Spring Boot技术驱动

摘 要 随着社会经济的快速发展,人们对足球俱乐部的需求日益增加,加快了足球健身俱乐部的发展,足球俱乐部管理工作日益繁忙,传统的管理方式已经无法满足足球俱乐部管理需求,因此,为了提高足球俱乐部管理效率…...

一次实践:给自己的手机摄像头进行相机标定

文章目录 1. 问题引入2. 准备工作2.1 标定场2.2 相机拍摄 3. 基本原理3.1 成像原理3.2 畸变校正 4. 标定解算4.1 代码实现4.2 详细解析4.2.1 解算实现4.2.2 提取点位 4.3 解算结果 5. 问题补充 1. 问题引入 不得不说,现在的计算机视觉技术已经发展到足够成熟的阶段…...

【docker学习】Linux系统离线方式安装docker环境方法

centos7-linux安装docker(离线方式) 下载docker的安装文件 https://download.docker.com/linux/static/stable/x86_64/ 下载的是:docker-18.06.3-ce.tgz 这个压缩文件 将docker-18.06.3-ce.tgz文件上传到centos7-linux系统上,用ftp工具上传即可 解压…...

vscode开发uniapp安装插件指南

安装vuets的相关插件 首先是vue的相关插件,目前2024年9月应该是vue-offical 安装uniapp开发插件 uni-create-view :快速创建 uni-app 页面 安装uni-create-view之后修改插件拓展设置 勾选第一个选择创建视图时创建同名文件夹 选择第二个创建文件夹中生…...

Elasticsearch7.7.1集群不能相互发现的问题解决以及Elasticsearch7.7.1安装analysis-ik中文分词插件的应用

一、Elasticsearch7.7.1集群不能相互发现的问题解决 在使用elasticsearch7.7.1搭建集群,使用了3台服务器作为节点,但在搭建的过程中发现每台服务器的elasticsearch服务都正常,但是不能相互发现,期间进行了一些配置的修改偶尔出现了…...

蓝牙Mesh介绍

蓝牙Mesh(Bluetooth Mesh)是一种基于蓝牙技术的无线通信网络拓扑,用于在设备之间创建大规模的多点到多点网络。蓝牙Mesh网络可以让多个蓝牙设备相互通信和协作,适合需要高覆盖范围和高可靠性的场景,例如智能家居、工业…...

Qt 窗口中鼠标点击事件的坐标探讨

// 鼠标点击事件 void Widget::mousePressEvent(QMouseEvent *event) {/*event->pos()、event->windowPos()和event->localPos()都表示鼠标点击位置在窗口中的位置,它们的值都是一样的,区别在于event->pos()是QPoint类型,event-&…...

服务器虚拟化的全面指南

1. 引言 在数字化转型的浪潮中,服务器虚拟化成为现代IT基础设施的核心组成部分。它通过将物理服务器资源分割成多个虚拟资源,极大地提高了资源利用率和灵活性。本篇文章将深入探讨服务器虚拟化的概念、优势、挑战、技术工具、最佳实践及未来发展趋势。 …...

Linux启动mysql报错

甲方公司意外停电,所有服务器重启后,发现部署在Linux上的mysql数据库启动失败.再加上老员工离职,新接手项目,对Linux系统了解不多,解决起来用时较多,特此记录。 1.启动及报错 1.1 启动语句1 启动语句1&a…...

基于大数据的二手房价数据可视化系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

C++模拟实现vector容器【万字模拟✨】

更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: 学习专栏C语言_Stark、的博客-CSDN博客 项目实战C系列_Stark、的博客-CSDN博客 数据结构与算法_Stark、的博客-CSDN博客 座右铭:梦想是一盏明灯&#xff…...

论文笔记:LAFF 文本到视频检索的新基准

整理了ECCV2022 Lightweight Attentional Feature Fusion: A New Baseline for Text-to-Video Retrieval 论文的阅读笔记 背景模型问题定义LAFF(Lightweight Attention Feature Fusion)LAFF Block 实验消融实验可视化对比试验 这篇文章提出了一种新颖灵活的特征融合方式&#x…...

iSTFT 完美重构的条件详解

目录 引言1. 短时傅里叶变换(STFT)与逆变换(iSTFT)概述2. 完美重构的条件3. 数学推导4. 实现要点5. 示例代码6. 总结 引言 在数字信号处理领域,短时傅里叶变换(Short-Time Fourier Transform,简…...

做网站泰安/青岛网站建设培训学校

C/C预处理指令常见的预处理指令如下: #空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义&#xff0…...

电脑本地网站建设/全媒体运营师报考条件

Fuchsia 起航 Debian sudo apt-get install build-essential curl git python unzip 复制代码 下载源码 curl -s "https://fuchsia.googlesource.com/scripts//master/bootstrap?formatTEXT" | base64 --decode | bash 复制代码 配置一下环境变量 cp .jiri_root/bin…...

用粉色做网站主题色/性价比高seo排名

http://in.sdo.com/?p11 原文链接:Netflix recommendations: beyond the 5 stars (Part 1), (Part 2) 原文作者:Xavier Amatriain and Justin Basilico 前言Nexflix是一家提供在线视频流媒体服务和DVD租赁业务的公司,也是著名的Netflix大奖赛…...

广州商城网站建设/百度关键词查询工具

问题: 有位来自日本的用户发邮件,请求我们在Spotfire报表(趋势分析报告) 网页上添加一个“Edit”按钮。说是以前是有的,现在的版本中找不到了。她需要对Spotifre的报表做一些优化,再报告给相关试验的CRA们…...

新品发布会策划/青岛网站优化公司哪家好

准备工作:gitup或者码云(gitee)案例:码云上操作(gitup是一样的)一.项目组老大任务1.创建组织,添加小组开发成员入组2.创建仓库3.创建分支(主分支master不需要手动创建)二.组员任务组员的任务当然毋庸置疑是项目开发了1.从项目地址下载远程主分支(master)git clone ssh地址||git…...

松江品划做网站公司/永久免费linux服务器

Hadoop fundamentals :Hadoop原理 英 [ˌfʌndəmentlz] 美 [ˌfʌndəmentlz] n.原理; 基本原则,基本法则( fundamental的名词复数); 玲珑骰子安红豆,入骨相思君知否 转载于:https://www.cnblogs.com/Vowzhou/p/10183880.html...