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

五、BGP路由优化与实战配置指南

1. 为什么你的BGP网络总是不稳从理解路由优化开始搞网络的朋友尤其是负责中大型数据中心或者跨地域骨干网的估计没少被BGP折腾过。我见过太多这样的场景网络平时看着好好的流量一上来就抖或者某个链路一断路由收敛慢得让人心焦业务部门电话能被打爆。很多人把BGP配置配通就觉得万事大吉其实那只是万里长征第一步。BGP协议本身设计得非常灵活也正因为太灵活了如果不做精细化的优化它就像一个没有调校好的发动机能跑但跑不快、跑不稳还特别费油。BGP路由优化的核心目标就两个稳定和高效。稳定意味着网络面对链路抖动、设备故障时能快速、平滑地切换避免业务中断。高效意味着流量能走最优路径避免绕路同时能充分利用多条链路的带宽别让有的链路闲死有的链路忙死。这听起来简单但背后涉及到对BGP一系列路径属性Attribute的深刻理解和巧妙运用比如我们常说的Local-Preference、MED、AS_PATH、Next-hop还有那些影响邻居会话稳定性的定时器、软复位等机制。今天我就结合自己踩过的坑和实战经验跟你聊聊怎么把这些书本上的属性变成你手里实实在在的调优工具。我们不会只讲命令更重要的是讲清楚在什么场景下、为什么要这么配以及配置后会产生什么效果。毕竟死记命令没用理解背后的逻辑才能举一反三。2. 路由属性调优掌控流量进出的方向盘BGP选路有著名的“十三条规则”但我们在实际优化中最常用、最能立竿见影的其实就是前几条。通过调整路由属性我们可以非常精确地引导流量就像给数据包画好了地图。2.1 Local-Preference决定出口流量的“指挥棒”Local-Preference本地优先级是BGP选路规则中权重非常高的一个属性它只在AS内部传递用于告诉本AS内的路由器从哪个出口离开AS去往某个目的地是更优的。数值越大优先级越高。实战场景假设你的公司ASAS 65001有两个出口连接到两个不同的运营商ISP A和ISP B。通常ISP A的链路质量更好、更贵你希望出向流量比如访问互联网优先走ISP A只有当ISP A的链路故障时才走ISP B。这时候Local-Preference就派上用场了。你可以在连接ISP A的那台边界路由器上为从它那里学来的所有或特定路由设置一个更高的Local-Preference值。比如设置成200。而在连接ISP B的边界路由器上保持默认值100。这样AS内部的所有路由器在比较去往同一目的地的两条路由时都会优先选择从ISP A学来的那条因为LP200 100从而确保流量从ISP A的出口出去。配置示例以华为设备为例# 在边界路由器连接ISP A的BGP进程下配置 bgp 65001 peer 1.1.1.1 as-number 100 # ISP A的AS号是100 peer 1.1.1.1 route-policy SET_LP_HIGH import # 对从ISP A接收的路由应用入方向路由策略 # 定义路由策略设置Local-Preference为200 route-policy SET_LP_HIGH permit node 10 apply local-preference 200这个配置意味着从邻居1.1.1.1ISP A学来的所有路由在进入本路由器BGP表时都会被标记上LP200。然后这条路由在AS 65001内部传播时会带着这个高优先级引导内部流量走向ISP A出口。2.2 MED影响入口流量的“建议牌”如果说Local-Preference是管“出”的那么MED多出口鉴别器就是管“进”的。MED属性会传递给相邻的AS用于建议相邻AS从哪个入口进入你的AS是更优的。数值越小优先级越高。注意MED只是一个“建议”相邻AS的BGP策略可能会忽略它。实战场景还是刚才的公司AS 65001有两个入口分别连接ISP A和B。你希望合作伙伴的流量比如来自AS 200在访问你的数据中心时优先从延迟更低的ISP A入口进来。你可以在向ISP A和ISP B发布你数据中心路由时设置不同的MED值。发给ISP A的路由MED设小一点比如10发给ISP B的路由MED设大一点比如50。这样AS 200在选择路径时看到经过ISP AMED10的路径MED值更小就有可能优先选择这条路径进入你的网络。配置示例# 在向ISP A发布路由时应用策略设置MED为10 bgp 65001 peer 1.1.1.1 route-policy SET_MED_LOW export route-policy SET_MED_LOW permit node 10 apply cost 10 # 在向ISP B发布路由时应用策略设置MED为50 bgp 65001 peer 2.2.2.2 route-policy SET_MED_HIGH export route-policy SET_MED_HIGH permit node 10 apply cost 50这里有个关键点默认情况下BGP只比较来自同一个AS的路由的MED值。如果AS 200同时从ISP AAS 100和ISP BAS 200收到你的路由由于AS号不同它可能不会比较MED。这时你需要在AS 200的边界路由器上如果设备支持配置compare-different-as-med命令强制它比较来自不同AS的路由的MED属性。2.3 AS_PATH与Next-Hop路径长度与可达性AS_PATH属性记录了路由经过的AS序列BGP默认偏好AS_PATH最短的路径。我们通常通过路由聚合来缩短AS_PATH使路由更优、更简洁。但有时也需要玩点“花样”比如在AS_PATH前面添加额外的AS号AS Path Prepending故意“加长”路径让某些路由看起来不那么优从而将流量引导到其他路径上。这常用于流量工程比如在双线接入时给次要出口发布的路由前多预置几次自己的AS号降低其优先级。下一跳Next-Hop属性至关重要。对于EBGP邻居下一跳就是发送路由的邻居接口IP。但对于IBGP有一个重要规则路由器不会修改从IBGP对等体学来路由的下一跳。这可能导致下一跳不可达的问题。例如AS边界路由器从EBGP学来一条路由下一跳是外部IP它传给内部的IBGP邻居时下一跳保持不变。如果内部路由器没有到达这个外部下一跳IP的路由那么这条BGP路由就会被视为无效。解决方案通常有两种一是在AS边界路由器上配置peer next-hop-local命令让它将发给IBGP邻居的路由的下一跳改为自己的地址通常是Loopback地址二是确保AS内部运行了IGP如OSPF、IS-IS并且IGP能学习到通往那个外部下一跳IP地址的路由有时需要将外部接口地址或一条静态路由重分布进IGP。3. 会话稳定性优化让BGP连接坚如磐石路由选得好是基础但BGP邻居会话本身不稳定一切优化都是空谈。BGP基于TCP 179端口建立连接TCP连接的稳定性直接决定了BGP会话的健康。3.1 善用Loopback接口与EBGP多跳这是提升稳定性的第一个黄金法则。默认情况下BGP使用去往邻居的直连接口建立TCP连接。如果这条物理链路闪断TCP连接就会中断导致BGP会话重置引发路由震荡。最佳实践是使用Loopback接口作为BGP会话的源和目的。Loopback接口是逻辑接口只要设备不宕机它永远在线。配置后BGP会话建立在两个稳定的Loopback IP之间即使某条物理链路故障只要设备间还有可达路径通过其他链路或IGP路由TCP连接和BGP会话就能保持。配置关键点为每台路由器配置一个唯一的Loopback接口IP如1.1.1.1/32。在IGPOSPF/IS-IS中发布这个Loopback路由确保AS内所有路由器都能到达彼此的Loopback地址。在BGP配置中指定使用Loopback接口建立连接。# 以EBGP邻居为例假设两端不是直连 interface LoopBack0 ip address 1.1.1.1 255.255.255.255 bgp 65001 peer 2.2.2.2 as-number 65002 peer 2.2.2.2 connect-interface LoopBack0 # 指定使用Loopback0作为源接口 peer 2.2.2.2 ebgp-max-hop 2 # 因为不是直连需要允许最多2跳根据实际跳数调整对端的配置镜像即可。这样BGP会话的源IP是1.1.1.1目的IP是2.2.2.2不再依赖于任何单一的物理接口。3.2 精细调整Keepalive与Hold TimerBGP通过周期性的Keepalive报文和Hold Timer来维持邻居关系。默认的Keepalive间隔是60秒Hold Time是180秒。这意味着如果3分钟收不到对端的任何Keepalive或Update报文就认为邻居失效。在稳定、低延迟的网络如数据中心内部中这个默认值可能显得太“迟钝”了。链路故障后需要等待近3分钟才能检测到对于现代业务来说太长了。我们可以适当调小这些定时器加快故障检测。但这里有个大坑调小定时器会增加CPU负担和网络报文开销更重要的是两端的定时器必须协商一致。BGP在建立会话时会协商Hold Time取两端配置的较小值。如果一端配了20另一端是默认180那么协商结果就是20秒。如果一端配的Hold Time是0则表示永不超时不建议在生产环境使用。建议的调整策略对于数据中心内部或城域网内的IBGP会话如Route Reflector与Client之间网络质量极高可以将Hold Time调至10-30秒Keepalive相应调至3-10秒。对于跨公网的EBGP会话由于网络延迟和抖动可能较大过于激进的定时器可能导致会话因偶发的报文丢失而频繁震荡。建议保持默认或稍微调小如Hold Time 90秒Keepalive 30秒。# 调整全局BGP定时器 bgp 65001 timer keepalive 30 hold 90 # 也可以针对特定对等体调整 bgp 65001 peer 2.2.2.2 timer keepalive 20 hold 603.3 启用BGP Graceful Restart与快速故障检测这是应对链路或设备故障的高级特性能极大减少路由收敛时间。BGP Graceful Restart (GR)当支持GR的路由器计划重启比如软件升级时它可以通知邻居“兄弟我要重启一下BGP进程但我的转发平面还在工作你暂时别删掉从我这儿学到的路由。” 邻居会在一段“Stale Time”内保留这些路由并继续用于转发。等路由器重启完毕重建BGP会话后再重新同步路由表。这实现了控制平面重启而转发不中断对业务零影响。现在主流厂商的设备默认都支持并开启了GR能力协商。EBGP连接快速复位Fast External Failover这个特性针对直连的EBGP会话。在物理链路接口状态变为Down和BGP会话Hold Timer超时之间存在一个检测时间差。开启此功能后一旦检测到通往直连EBGP邻居的物理链路Down设备会立即重置该EBGP会话而不必等待Hold Timer超时从而将故障检测时间从几十秒缩短到亚秒级链路层检测时间。# 启用EBGP快速复位功能华为命令示例 bgp 65001 peer 1.1.1.1 ebgp-interface-sensitive这个命令非常建议在所有的直连EBGP链路上配置它能让你在物理链路中断时几乎瞬间做出反应。4. 负载分担与路由策略让流量均匀跑起来当网络中存在多条等价或不等价的路径时如何充分利用带宽避免单条链路拥塞就是负载分担要解决的问题。4.1 BGP负载分担配置BGP默认只将最优路由放入路由表RIB即使存在多条等价路径。要启用负载分担需要手动开启。等价负载分担最简单的情况。对于到达同一目的地的多条BGP路由如果它们在BGP选路规则的前几条通常到MED比较为止都完全一致即被认为是等价的。此时可以配置设备将多条等价路径都加入路由表实现逐流或逐包的负载均衡。# 配置最大负载分担路径数例如4条 bgp 65001 maximum load-balancing 4配置后对于等价路由最多可以有4条被同时加入路由表。数据转发时会根据设备支持的负载均衡方式如基于源目IP的哈希将流量分摊到各条路径上。不等价负载分担更常见也更复杂。现实中多条路径的BGP属性如AS_PATH长度、MED很难完全一致。如果想让它们同时生效就需要用到balance相关的进阶配置不同厂商命令不同其原理是放宽BGP选路的比较规则。例如可以配置忽略AS_PATH长度或MED的比较让原本“次优”的路由也能参与负载分担。但这样做要非常小心必须确保这些路径在物理上是真正可用的并且不会导致路由环路。4.2 利用路由策略实现智能流量引导负载分担是“雨露均沾”但有时我们需要更精细的流量控制。比如让视频流量走A链路让办公流量走B链路或者让来自特定客户AS的流量走专属入口。这就需要结合路由策略Route Policy/Route Map和BGP Community 属性。Community像一个标签可以附加在BGP路由上在AS之间传递。你可以在网络入口给不同类型的路由打上不同的Community值。实战案例你向两个ISP发布了你的IP段。你希望所有ISP将你的“视频服务”IP段的流量从ISP A送入将“Web服务”IP段的流量从ISP B送入。在你的边界路由器上为“视频服务”网段的路由设置一个特定的Community值比如65001:100其中65001是你的AS号然后发布给ISP A和ISP B。你与ISP A事先约定凡携带65001:100的路由他们设置较低的MED或较高的Local-Preference。同样与ISP B约定另一个Community值用于Web服务。ISP根据收到的Community标签在他们的网络内部应用策略将流量引导到相应的互联入口。这实现了基于业务的精细化流量工程其核心在于与运营商的事先协调和Community值的规划。配置上主要是在发布路由时通过路由策略的apply community语句来添加Community标签。5. 实战配置案例一个双线接入的优化模板光说不练假把式我们来看一个简化但典型的企业双线接入互联网的BGP优化配置案例。假设企业AS为65001有两个ISPISP A (AS 100) 和 ISP B (AS 200)。目标是主走ISP A备走ISP B同时希望入向流量也优先通过ISP A进来。第1步基础邻居与会话稳定性配置# 配置Loopback接口 interface LoopBack0 ip address 10.0.0.1 255.255.255.255 # 配置BGP使用Loopback建立邻居假设与ISP也协商使用Loopback router bgp 65001 bgp router-id 10.0.0.1 neighbor 100.1.1.1 remote-as 100 # ISP A的Loopback地址 neighbor 100.1.1.1 update-source LoopBack0 neighbor 100.1.1.1 ebgp-multihop 2 neighbor 100.1.1.1 timers 30 90 # 调整定时器 neighbor 100.1.1.1 ebgp-interface-sensitive # 快速故障检测 neighbor 200.1.1.1 remote-as 200 # ISP B的Loopback地址 neighbor 200.1.1.1 update-source LoopBack0 neighbor 200.1.1.1 ebgp-multihop 2 neighbor 200.1.1.1 timers 30 90 neighbor 200.1.1.1 ebgp-interface-sensitive第2步出向流量优化主走ISP A# 创建一个路由策略为从ISP A学来的路由设置高Local_Preference route-map SET_LP_FROM_ISP_A permit 10 set local-preference 200 # 将此策略应用到从ISP A接收路由的入方向 router bgp 65001 neighbor 100.1.1.1 route-map SET_LP_FROM_ISP_A in这样AS内部去往互联网的路由只要是从ISP A学来的优先级都会高于ISP B默认LP100从而实现主走ISP A。第3步入向流量优化建议优先从ISP A进入# 创建两个路由策略设置不同的MED值 route-map SET_MED_TO_ISP_A permit 10 set metric 10 route-map SET_MED_TO_ISP_B permit 10 set metric 50 # 将策略应用到向两个ISP发布企业路由的出方向 router bgp 65001 network 192.168.0.0 mask 255.255.0.0 # 发布企业网段 neighbor 100.1.1.1 route-map SET_MED_TO_ISP_A out neighbor 200.1.1.1 route-map SET_MED_TO_ISP_B out向ISP A发布路由时携带MED10向ISP B发布时携带MED50建议外部流量优先从ISP A进入。第4步配置路由聚合与过滤为了避免将过于精细的内部路由泄露给运营商也为了减少路由表大小需要进行聚合。router bgp 65001 aggregate-address 192.168.0.0 255.255.0.0 summary-onlysummary-only参数确保只发布聚合后的路由192.168.0.0/16而不发布更具体的子网路由。同时还应该在入方向配置前缀列表只接收运营商发来的默认路由和必要的公网路由拒绝接收不应接收的路由如其他客户的私有地址这是保证安全与稳定的重要一环。通过以上几步组合拳一个具备基本优化能力的双线BGP网络就搭建起来了。当然真实的网络会更复杂可能还需要考虑社区属性、AS_PATH预置、与IGP的联动下一跳解析等。但万变不离其宗核心思路就是用Local-Preference控流出用MED影响流入用Community打标签做精细控制同时把会话稳定性的基础打牢。每次调整前最好在测试环境或业务低峰期进行并用show ip bgp和show ip route等命令仔细验证效果因为BGP策略的影响往往是全局性的一个配置可能引发意想不到的路由变化。多练、多试、多查表慢慢就能找到手感把BGP这头“巨兽”驯服得服服帖帖。

相关文章:

五、BGP路由优化与实战配置指南

1. 为什么你的BGP网络总是不稳?从理解路由优化开始 搞网络的朋友,尤其是负责中大型数据中心或者跨地域骨干网的,估计没少被BGP折腾过。我见过太多这样的场景:网络平时看着好好的,流量一上来就抖,或者某个链…...

MacOS高效配置FFmpeg与FFprobe的完整指南

1. 为什么你的FFmpeg安装总是失败?先避开这些坑 如果你在Mac上折腾过FFmpeg,大概率经历过这样的场景:跟着网上某个教程,一通操作猛如虎,最后在终端里输入 ffmpeg -version,结果给你来一句“command not fou…...

Superset动态参数图表开发手册:手把手教你处理多值IN查询和日期断层问题

Superset动态参数图表开发手册:手把手教你处理多值IN查询和日期断层问题 你是否曾为在Superset中实现一个看似简单的动态筛选图表而焦头烂额?当业务方提出“我们需要一个能同时筛选多个部门、并且日期轴要连续不间断的报表”时,你信心满满地打…...

利用 Cloudflare CDN 代理,打通 IPv4 访问 IPv6 服务的网络鸿沟

1. 从一次真实的访问困境说起 前几天,我的一位朋友,一位资深开发者,在群里发了个哭笑不得的表情。他在自己家里,用一台旧电脑折腾了个私人网盘(NAS),还搭了个博客,图的就是个自由和…...

浏览器提示“代理服务器可能有问题”?三步排查法帮你快速解决

1. 问题初现:当浏览器突然“罢工” 相信不少朋友都遇到过这种情况:正想打开浏览器查个资料、看个视频,结果页面没刷出来,反而弹出一个让人心头一紧的提示——“代理服务器可能有问题”。那一瞬间,感觉就像开车时突然亮…...

基于龙芯2K0300久久派的OpenCV交叉编译实战:从虚拟机Ubuntu环境搭建到嵌入式视觉应用部署

1. 环境准备:虚拟机与Ubuntu的“新家”搭建 如果你正准备为龙芯2K0300久久派折腾OpenCV,那第一步绝对不是急着敲命令。我见过太多新手朋友,一上来就照着教程安装工具链,结果卡在奇奇怪怪的环境问题上,白白浪费一两天时…...

解锁Minio原生分片上传:从源码解析到实战封装

1. 为什么你需要Minio的原生分片上传? 如果你正在处理大文件上传,比如用户上传的视频、设计稿源文件,或者系统间的数据备份包,那你肯定遇到过这些问题:上传到一半网络断了,得全部重来;或者一个几…...

用VirtualBox快速搭建麒麟信安3.3-6C测试环境:附网络隔离方案与权限管理技巧

用VirtualBox快速搭建麒麟信安3.3-6C测试环境:附网络隔离方案与权限管理技巧 最近在折腾几个安全相关的测试项目,需要一个既能模拟内网环境、又能方便访问外部资源进行软件包更新的沙箱。物理机来回折腾太麻烦,云主机又不够“隔离”&#xff…...

主流人群计数数据集深度解析:从ShanghaiTech到JHU_CROWD++

1. 人群计数数据集:为什么选对数据集,你的模型就成功了一半? 刚入行人脸检测或者人群计数的时候,我踩过最大的一个坑,就是没把数据集研究明白。当时拿到一个开源模型,兴冲冲地用自己的几张图跑了一下&#…...

Mac用户福音:无需Root实现Android屏幕共享与远程控制的完整指南(附常见问题解决)

Mac用户福音:无需Root实现Android屏幕共享与远程控制的完整指南(附常见问题解决) 作为一名长期在Mac生态下工作的开发者或效率追求者,你是否曾为无法在Mac电脑上流畅地查看和控制Android手机屏幕而烦恼?无论是为了演示…...

ReDoc 实战:打造企业级 API 文档的进阶技巧与最佳实践

1. 为什么企业级项目需要 ReDoc?不止是“好看”那么简单 很多朋友第一次接触 ReDoc,可能和我当初一样,觉得它就是个“美化版”的 Swagger UI。确实,它三栏式的布局、清晰的排版,一眼看上去就比 Swagger UI 专业不少。但…...

open3d 结合VSCode与SSH实现远程服务器3D可视化界面本地渲染

1. 为什么我们需要远程3D可视化? 搞3D点云、三维重建或者计算机视觉的朋友,肯定都遇到过这个场景:代码和模型都跑在实验室或者公司的远程服务器上,那机器性能强劲,GPU给力,但就是没有显示器。你想看一眼自己…...

你的服务还在用HTTP轮询?一文搞懂Kafka——从零到百万级吞吐的C++实战

一、你的轮询,正在杀死你的服务器 想象一个场景:你写了一个C++后端服务,前端每隔500毫秒发一次HTTP请求来问"有没有新消息?“。大部分时候服务端回答"没有”,偶尔回一条。系统跑了半年没出过问题。 然后用户量翻了10倍。 你开始发现CPU占用莫名其妙地飙到70%…...

从传统到深度学习:图像分割算法的演进与应用场景解析

1. 图像分割:从“看”到“理解”的关键一步 想象一下,你给电脑看一张照片,它不仅能认出照片里有一只猫,还能精确地告诉你猫的轮廓在哪里,猫的眼睛、鼻子、耳朵分别属于图像的哪些像素。这个过程,就是图像分…...

全方位抓包实战指南:从浏览器到小程序的完整解决方案

1. 为什么你需要掌握全平台抓包? 作为一名和网络请求打了十几年交道的“老司机”,我见过太多开发者朋友在调试问题时,面对浏览器、手机APP、微信小程序或者一个独立的PC桌面应用,不知道如何下手去查看它们背后到底在和服务器“聊”…...

PyBullet实战:从零开始构建你的第一个机器人仿真环境

1. 环境准备:安装与初识PyBullet 想玩机器人仿真,但又觉得那些软件门槛太高?别担心,PyBullet就是为你准备的。我第一次接触它的时候,感觉就像发现了一个宝藏。它本质上是一个Python模块,把强大的Bullet物理…...

ASPP模块的深度解析:从多尺度感知到语义分割的实践应用

1. 为什么你的语义分割模型总“看不清”?聊聊多尺度感知的痛点 做语义分割的朋友,估计都遇到过这样的尴尬:模型对远处的小车识别得挺好,但画面里那棵近在眼前的大树,却死活分不清是树还是电线杆;又或者&…...

如何快速检测和修复BSPHP未授权访问漏洞?安全工程师的实用指南

从实战出发:BSPHP未授权访问漏洞的深度检测与根治方案 最近在帮一家电商平台做安全审计时,他们的技术负责人一脸愁容地找到我,说内部监控发现有几个奇怪的IP在频繁访问管理后台的日志接口,但查了登录记录却没有任何异常。我们花了…...

【SMB协议】Win10访问Linux共享文件夹:从“不安全的来宾登录”到用户映射的实战排障

1. 从“能ping通”到“打不开”:一个混合办公环境的真实困境 最近在帮一个朋友的公司搭建内部文件共享系统,他们有几台Windows 10的办公电脑,需要稳定地访问一台运行Ubuntu的服务器上的共享文件夹。听起来是个很常规的需求对吧?我…...

从MicroPython到C/C++:树莓派Pico双语言开发实战对比

从MicroPython到C/C:树莓派Pico双语言开发实战对比 如果你手头有一块树莓派Pico,面对MicroPython和C/C两种开发方式,是不是有点选择困难?我刚开始接触Pico的时候也纠结过,毕竟两种语言各有各的吸引力。MicroPython上手…...

为什么你的 SQL 测试快生产卡?金仓连接条件下推来解答

你是否遇到过这样的场景:一个看似复杂的SQL,在测试环境运行飞快,一到生产环境就“卡死”,一查执行计划,发现子查询生成了一个巨大的中间结果集,导致后续操作全部陷入性能泥潭? 如果你正被此类场…...

sd工具终极发展蓝图:从简单替换到智能编辑的完整进化指南

sd工具终极发展蓝图:从简单替换到智能编辑的完整进化指南 【免费下载链接】sd Intuitive find & replace CLI (sed alternative) 项目地址: https://gitcode.com/gh_mirrors/sd/sd 在现代开发工作流中,高效的文本处理工具是提升 productivity…...

终极指南:7个最适合用sd处理的真实案例解析

终极指南:7个最适合用sd处理的真实案例解析 【免费下载链接】sd Intuitive find & replace CLI (sed alternative) 项目地址: https://gitcode.com/gh_mirrors/sd/sd sd是一款直观的查找替换命令行工具,专为简化文本处理任务而设计。它采用Ja…...

AppManager Root功能终极指南:解锁Android系统的全部潜力

AppManager Root功能终极指南:解锁Android系统的全部潜力 【免费下载链接】AppManager A full-featured package manager and viewer for Android 项目地址: https://gitcode.com/gh_mirrors/ap/AppManager AppManager是一款功能全面的Android软件包管理器和…...

sd安装终极指南:5种快速安装方法让你告别sed复杂语法

sd安装终极指南:5种快速安装方法让你告别sed复杂语法 【免费下载链接】sd Intuitive find & replace CLI (sed alternative) 项目地址: https://gitcode.com/gh_mirrors/sd/sd sd是一款直观的命令行查找替换工具,作为sed的替代品,…...

Agones性能优化终极指南:10个技巧提升游戏服务器响应速度和吞吐量

Agones性能优化终极指南:10个技巧提升游戏服务器响应速度和吞吐量 【免费下载链接】agones Dedicated Game Server Hosting and Scaling for Multiplayer Games on Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ag/agones Agones是专为Kubernetes设…...

Chartkick全局配置终极指南:一次性设置所有图表的默认参数

Chartkick全局配置终极指南:一次性设置所有图表的默认参数 【免费下载链接】chartkick Create beautiful JavaScript charts with one line of Ruby 项目地址: https://gitcode.com/gh_mirrors/ch/chartkick Chartkick是一款强大的Ruby库,能够让开…...

Chartkick数据源配置终极指南:3种高效数据加载方式详解

Chartkick数据源配置终极指南:3种高效数据加载方式详解 【免费下载链接】chartkick Create beautiful JavaScript charts with one line of Ruby 项目地址: https://gitcode.com/gh_mirrors/ch/chartkick Chartkick是一款能让你用一行Ruby代码创建精美JavaSc…...

React-Draft-Wysiwyg终极测试指南:单元测试与集成测试最佳实践

React-Draft-Wysiwyg终极测试指南:单元测试与集成测试最佳实践 【免费下载链接】react-draft-wysiwyg A Wysiwyg editor build on top of ReactJS and DraftJS. https://jpuri.github.io/react-draft-wysiwyg 项目地址: https://gitcode.com/gh_mirrors/re/react-…...

Django-Oscar部署终极指南:从开发到生产环境的完整迁移流程

Django-Oscar部署终极指南:从开发到生产环境的完整迁移流程 【免费下载链接】django-oscar django-oscar/django-oscar: 是一个基于 Django 的电子商务框架,可以用于快速开发和部署电子商务网站,提供了多种电子商务功能和插件扩展。 项目地…...