动态BGP与静态BGP相比的优势都有哪些

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态BGP与静态BGP相比的优势都有哪些相关的知识,希望对你有一定的参考价值。

优势如下:

1、三大运营商之间可以互作冗余,并且可以自动择优选择路径,避免单点故障。

2、低延迟、效率高、稳定性更好。

3、具备功能性。

动态BGP多线网络,路由表项是通过相互连接的交换机之间交换彼此信息,然后按照一定的算法优化出来的,而这些路由信息是在一定时间间隙里不断更新,以适应不断变化的网络,以随时获得最优的寻路效果。为了实现IP分组的高效寻路,IETF制定了多种寻路协议。

也就是说,当静态BGP中的网络结构发生变化,运营商是无法在第一时间自动调整网络设置以保障用户的体验度。而动态BGP可根据设定的寻路协议第一时间自动优化网络结构,以保持客户使用的网络持续稳定、高效。

扩展资料

动态BGP和普通静态BGP对比后的区别:

1、组成条件不同

北京动态BGP带宽的组成必备条件:

想做自己的动态BGP带宽必要的五大条件是:自有AS号+自有IP地址段+自有路由设备+动态(BGP)带宽+运管团队。且仅有北、上、广才有动态BGP,又叫国内穿透BGP动态,动态全穿透BGP,其它城市无。

静态BGP带宽组成条件:

相对比较简单,直接找多家运营商采购带宽即可:As号:无,一般运营商代播,无BGP功能。静态BGP又叫非穿透BGP,申请条件也是北、 上、广等能满足,使用上表现为多线单IP;一些二三线城市没有BGP带宽,能给用户满足的仅仅是多线多IP的方式实现。

2、具备的功能不同:

静态BGP功能简单

静态BGP带宽功能,可以实现多网接入,但路径上只有通向几大运营商的固定的几条路径,当某个运营商方向的某个路由节点出现故障时,会导致某个运营商方向不能正常通信。

造成单点故障,影响范围是某个运营商出口分方向,造成部分用户无法正常通信,故障的修复责需要人为干预处理,不能自动修复,处理时间一般较长。

参考技术A 静态BGP路由是指由网络运营商手动配置的路由信息。当网络的拓扑结构或链路的状态发生变化时,运营商需要手动去修改路由表中相关的静态路由信息。静态路由信息在默认情况下是私有的,不会传递给其他的路由器。静态路由一般适用于比较简单的网络环境,在这样的环境中,运营商易于清楚地了解网络的拓扑结构,便于设置正确的路由信息。
动态BGP多线网络,路由表项是通过相互连接的交换机之间交换彼此信息,然后按照一定的算法优化出来的,而这些路由信息是在一定时间间隙里不断更新,以适应不断变化的网络,以随时获得最优的寻路效果。为了实现IP分组的高效寻路,IETF制定了多种寻路协议。也就是说,当静态BGP中的网络结构发生变化,运营商是无法在第一时间自动调整网络设置以保障用户的体验度。而动态BGP可根据设定的寻路协议第一时间自动优化网络结构,以保持客户使用的网络持续稳定、高效。所以,动态BGP网络被称为真正意义上的BGP。
参考技术B 静态BGP路由是指由网络运营商手动配置的路由信息。当网络的拓扑结构或链路的状态发生变化时,运营商需要手动去修改路由表中相关的静态路由信息。静态路由信息在默认情况下是私有的,不会传递给其他的路由器。静态路由一般适用于比较简单的网络环境,在这样的环境中,运营商易于清楚地了解网络的拓扑结构,便于设置正确的路由信息。

动态BGP路由表项是通过相互连接的交换机之间交换彼此信息,然后按照一定的算法优化出来的,而这些路由信息是在一定时间间隙里不断更新,以适应不断变化的网络,以随时获得最优的寻路效果。为了实现IP分组的高效寻路,IETF(互联网工程任务组,是全球互联网最具权威的技术标准化组织)制定了多种寻路协议。其中用于自治系统(AS:Autonomous System)内部网关协议有开放式最短路径优先(OSPF:Open Shortest Path First)协议和寻路信息协议(RIP:Routing Information Protocol)。
注:自治系统是指在同一实体(如学校、企业或ISP)管理下的主机、路由器及其他网络设备的集合。还有用于自治域系统之间的外部网络路由协议BGP-4等。

也就是说,当静态BGP中的网络结构发生变化,运营商是无法在第一时间自动调整网络设置以保障用户的体验度。而动态BGP可根据设定的寻路协议第一时间自动优化网络结构,以保持客户使用的网络持续稳定、高效。

众生网络拥有全国ISP接入资质,自有AS自治域,同时具备国内和国际BGP接入能力。三门数据中心的八线BGP线路采用了全动态的EBGP(不同的AS自治域间交换路由信息)路由接入,网络访问无盲点,网络品质目前已经覆盖十线运营商(中国电信、中国联通、中国移动、教育网、中国铁通、长城宽带、东方有线、科技网、电信通、歌华有线),线路品质在全国属于顶尖水平。本回答被提问者采纳
参考技术C BGP协议的最主要功能在于控制路由的传播和选择最佳路由的路径。中国电信、中国联通、中国移动,以及一些大型第三方IDC服务提供商都具有中国互联网信息中心颁发的AS号。全国各大网络运营商的部分高质量自有网络,多数都是使用BGP协议,相互广播IP来实现各个自治域之间的多线互联。
而静态BGP就是一种多线路接入方式,即伪BGP
所以,所以,动态BGP网络被称为真正意义上的BGP。
参考技术D BGP协议的最主要功能在于控制路由的传播和选择最佳路由的路径。中国电信、中国联通、中国移动,以及一些大型第三方IDC服务提供商都具有中国互联网信息中心颁发的AS号。全国各大网络运营商的部分高质量自有网络,多数都是使用BGP协议,相互广播IP来实现各个自治域之间的多线互联。
时下,运营商和第三方IDC服务提供商广泛采用BGP协议来实现AS(自治域)之间的互联,这已经成为解决当前国内南北互联互通问题的首要方法。
然而近年来,在用户在选择服务器托管或者租用服务器时,经常会见到所谓BGP双线接入这样的宣传口号。但是用户在实际的使用过程中又感受不到属于真正BGP网络的那种低延迟以及跨网络访问的体验,那么,这种所谓BGP双线是真正意义上的BGP线路么?

其实,一般中小型数据中心所谓BGP双线是一种双IP双线路接入方式,即在服务器上设置一个联通或者电信IP,通过路由设备判断数据包经过电信网络,还是联通网络来发送。此方案可以在一定程度上提高联通用户与电信用户的跨网访问速度,解决单IP双线接入方式需要在服务器上设置路由的问题,但是由于采用联通或电信的IP地址,因而用户发送请求数据包时,服务器不会自动判别最好的路由。所以这种解决方案只是一种过渡形式的折中解决方案,被称为静态BGP线路。也就是说,当静态BGP中的网络结构发生变化,运营商是无法在第一时间自动调整网络设置以保障用户的体验度。而动态BGP可根据设定的寻路协议第一时间自动优化网络结构,以保持客户使用的网络持续稳定、高效。所以,动态BGP网络被称为真正意义上的BGP。

与 useState 相比,useReducer 实际上都有哪些优势?

【中文标题】与 useState 相比,useReducer 实际上都有哪些优势?【英文标题】:What advantages does useReducer actually have over useState?与 useState 相比,useReducer 实际上有哪些优势? 【发布时间】:2021-05-28 21:33:23 【问题描述】:

useState 相比,我很难理解useReducer 何时以及为何具有优势。有很多争论,但对我来说,没有一个是有意义的,在这篇文章中,我试图将它们应用到一个简单的例子中。

也许我遗漏了一些东西,但我不明白为什么应该在 useState 之外的任何地方使用 useReducer。我希望你能帮助我澄清这一点。

我们来看这个例子:

版本 A - 带有 useState

function CounterControls(props) 
  return (
    <>
      <button onClick=props.increment>increment</button>
      <button onClick=props.decrement>decrement</button>
    </>
  );


export default function App() 
  const [complexState, setComplexState] = useState( nested:  deeply: 1  );

  function increment() 
    setComplexState(state => 
      // do very complex logic here that depends on previous complexState
      state.nested.deeply += 1;
      return  ...state ;
    );
  

  function decrement() 
    setComplexState(state => 
      // do very complex logic here that depends on previous complexState
      state.nested.deeply -= 1;
      return  ...state ;
    );
  

  return (
    <div>
      <h1>complexState.nested.deeply</h1>
      <CounterControls increment=increment decrement=decrement />
    </div>
  );

看到这个stackblitz

版本 B - 带有 useReducer

import React from "react";
import  useReducer  from "react";

function CounterControls(props) 
  return (
    <>
      <button onClick=() => props.dispatch( type: "increment" )>
        increment
      </button>
      <button onClick=() => props.dispatch( type: "decrement" )>
        decrement
      </button>
    </>
  );


export default function App() 
  const [complexState, dispatch] = useReducer(reducer, 
    nested:  deeply: 1 
  );

  function reducer(state, action) 
    switch (action.type) 
      case "increment":
        state.nested.deeply += 1;
        return  ...state ;
      case "decrement":
        state.nested.deeply -= 1;
        return  ...state ;
      default:
        throw new Error();
    
  

  return (
    <div>
      <h1>complexState.nested.deeply</h1>
      <CounterControls dispatch=dispatch />
    </div>
  );

看到这个stackblitz

在很多文章(包括docs)中,两个论点似乎很流行:

“useReducer 适用于复杂的状态逻辑”。 在我们的示例中,假设 complexState 很复杂,有许多修改操作,每个操作都有很多逻辑。 useReducer 在这里有什么帮助?对于复杂的状态,拥有单独的函数而不是拥有一个 200 行的 reducer 函数难道不是更好吗?

“如果下一个状态依赖于前一个状态,useReducer 就很好”。 我可以用 useState 做同样的事情,不是吗?直接写setState(oldstate =&gt; ...)

潜在的其他优势:

“我不必传递多个函数,而只需传递一个 reducer”:好的,但我也可以使用 useCallback 等将我的函数包装到一个“动作”对象中。正如已经提到的,在不同的函数中有不同的逻辑对我来说似乎是件好事。 “我可以为 reducer 提供一个上下文,这样我的复杂状态就可以在整个应用程序中轻松修改”。是的,但您也可以提供该上下文中的单个函数(可能由 useCallback 包装)

我看到的缺点:

单个超长函数中的多个不同操作似乎令人困惑 更容易出错,因为您必须检查 reducer 函数或依赖打字稿等来找出可以传递给 reducer 的字符串以及附带的参数。调用函数时,这要简单得多。

考虑到所有这些:你能给我一个很好的例子吗?useReducer 真的很出色,并且不能轻易地用useState 重写为一个版本?

【问题讨论】:

【参考方案1】:

我相信这可能会导致意见的争论。然而,从一篇简单的文章中提取的内容对我来说很重要,所以这里在底部有一个指向整篇文章的链接。

useReducer() 是 useState() 的替代方法,它使您可以更好地控制状态管理并简化测试。所有的情况都可以用 useState() 方法来完成,所以总而言之,使用自己熟悉的方法,对你和同事来说更容易理解。

参考。文章:https://dev.to/spukas/3-reasons-to-usereducer-over-usestate-43ad#:~:text=useReducer()%20is%20an%20alternative,understand%20for%20you%20and%20colleagues。

【讨论】:

【参考方案2】:

几个月后,我觉得我必须为这个话题添加一些见解。如果在useReduceruseState 之间进行选择只是个人喜好问题,为什么人们会写这样的东西:

Dan Abramovtwitter:

useReducer 是真正的 Hooks 的作弊模式。一开始你可能不喜欢它,但它避免了在依赖于 useState 的类和组件中出现的大量潜在问题。了解 useReducer。

React docs

当您有涉及多个子值的复杂状态逻辑或下一个状态取决于前一个状态时,useReducer 通常比 useState 更可取。 useReducer 还允许您优化触发深度更新的组件的性能,因为您可以向下传递调度而不是回调。

React docs:

我们建议在上下文中传递调度,而不是在 props 中单独回调。

所以让我们尝试确定并找到一个场景,useReducer 明显优于 useState

如果需要从嵌套组件中的 `useEffect` 调用更新函数怎么办?

VersionA 的方法(useState & 向下传递回调)可能会遇到问题:

出于语义和 linting 原因,效果应该具有更新函数作为依赖项。 但是,这意味着每次重新声明更新函数时都会调用效果。在问题的示例“版本 A”中,这将出现在 App! 的每次渲染中! 在函数上调用useCallback 会有所帮助,但这种模式很快就会变得乏味,尤其是当我们需要在actions 对象上另外调用useMemo 时。 (我也不是这方面的专家,但从性能的角度来看,这听起来不太令人信服) 此外,如果函数具有经常更改的依赖项(例如用户输入),即使 useCallback 也无济于事。

如果我们改用减速器:

reducer 的dispatch 函数始终具有稳定的标识! (见react docs) 这意味着,我们可以安全地在效果中使用它,知道它在正常情况下不会改变!即使 reducer-function 发生变化,dispatch 的标识保持不变并且不会触发效果。 但是,当我们调用它时,我们仍然会得到最新版本的 reducer-function!

再次,请参阅 Dan Abramov 的Twitter Post:

并且“dispatch”身份始终是稳定的,即使 reducer 是内联的。因此,您可以依赖它进行性能优化,并将调度作为静态值免费传递给上下文。

实例

在这段代码中,我尝试强调使用useReducer 的一些优势,我之前尝试过描述:

import React,  useEffect  from "react";
import  useState, useReducer  from "react";

function MyControls( dispatch ) 
  // Cool, effect won't be called if reducer function changes.
  // dispatch is stable!
  // And still the up-to-date reducer will be used if we call it
  useEffect(() => 
    function onResize() 
      dispatch( type: "set", text: "Resize" );
    

    window.addEventListener("resize", onResize);
    return () => window.removeEventListener("resize", onResize);
  , [dispatch]);

  return (
    <>
      <button onClick=() => dispatch( type: "set", text: "ABC" )>
        Set to "ABC"
      </button>
      <button onClick=() => dispatch( type: "setToGlobalState" )>
        Set to globalAppState
      </button>
      <div>Resize to set to "Resized"</div>
    </>
  );


function MyComponent(props) 
  const [headlineText, dispatch] = useReducer(reducer, "ABC");

  function reducer(state, action) 
    switch (action.type) 
      case "set":
        return action.text;
      case "setToGlobalState":
        // Cool, we can simply access props here. No dependencies
        // useCallbacks etc.
        return props.globalAppState;
      default:
        throw new Error();
    
  

  return (
    <div>
      <h1>headlineText</h1>
      <MyControls dispatch=dispatch />
    </div>
  );


export default function App() 
  const [globalAppState, setGlobalAppState] = useState("");

  return (
    <div>
      global app state:" "
      <input
        value=globalAppState
        onChange=(e) => setGlobalAppState(e.target.value)
      />
      <MyComponent globalAppState=globalAppState />
    </div>
  );

看到这个codesandbox

即使 reducer 函数在每次用户输入时都会发生变化,dispatch 的身份保持不变!不会触发效果 每次调用它时,我们仍然会得到最新版本的函数!它可以完全访问组件的 props。 不需要记忆/使用回调等。在我看来,仅此一项就可以使代码更简洁,尤其是因为我们应该“依靠 useMemo 作为性能优化,而不是作为语义保证”(react docs)

【讨论】:

以上是关于动态BGP与静态BGP相比的优势都有哪些的主要内容,如果未能解决你的问题,请参考以下文章

静态路由是IGP还是BGP

三种路由协议RIP 、OSPF 、BGP和静态路由

为啥中国电信的静态路由接入专线或BGP路由接入的价格与网友们所说的价格相差特别大?

总结:当静态路由和BGP同时存在时路由优选BGP的两种方法

TCP/UDP,动态路由,RIP/OSPF/BGP简述

bgp公认必遵属性都有哪些