怎么让b站不挂

本文讨论了b站可能采用的两地三中心高可用架构,解释了RPO和RTO的概念,并分析了在该架构下如何保障服务的连续性和数据的完整性。传统数据库与分布式数据库的双活方案被提及,强调了在面对数据中心故障时,如何通过多地备份确保RTO和RPO接近于零。

打开知乎和头条,b站又冲上了热榜,这次不是煽情怀旧的跨年晚会,也不是敲钟上市,而是“挂了”

图片

b站的程序员跟进迅速,问题也得到了比较快的修复。

图片

哈哈哈,上面是热点新闻,下面就是知识点了。最近在学习分布式架构,刚好看到了“两地三中心”的高可用架构,我们云畅享一下,如果b站也用的是两地三中心的架构,还会挂掉不?这里先说明下两个概念:RPO和RTO

RTO (Recovery Time Objective,复原时间目标)是指灾难发生后,从IT系统故障导致业务停顿之时开始,到IT系统恢复至可以支持各部门运作、恢复运营之时,此两点之间的时间段称为RTO。比如说灾难发生后半天内便需要恢复,RTO值就是十二小时;

RPO (Recovery Point Objective,复原点目标)是指从系统和应用数据而言,要实现能够恢复至可以支持各部门业务运作,恢复得来的数据所对应时的间点。如果现时企业每天凌晨零时进行备份一次,当服务恢复后,系统内储存的只会是最近灾难发生前那个凌晨零时的资料。

啥是两地三中心

两地三中心架构,即生产数据中心、同城灾备中心、异地灾备中心的高可用容灾方案。在这种模式下,两个城市的三个数据中心互联互通,如果一个数据中心发生故障或灾难,其他数据中心可以正常运行并对关键业务或全部业务实现接管。相比同城多中心方案,两地三中心具有跨城级高可用能力,可以应对城市级自然灾害。

两地三中心是高可用架构的一种实现方式,它是以整个应用系统为单位,一般来说会分为应用和数据库两部分。

应用部分通常是无状态的,这个无状态就是说应用处理每个请求时不需要从本地加载上下文数据。这样启动多个应用服务器就没有什么额外的成本,应用之间没有上下文依赖,所以很容易做到多活。

数据库需要最终持久化数据,所有的业务都要基于已有数据,数据内容在不断发生变化,数据库服务有逻辑很重的上下文。因此数据库的多活难度就大多了。

图片

目前针对数据库双活的解决方案有很多种。总的来说分为两大类:分布式数据库多活方案以及传统数据库的双活方案。

传统数据库方案

传统数据库如Oracle, DB2,Informix等。由于这些数据库本身并没有在原生状态下考虑双活问题。因此双活方案都是在原生体系外面通过附加解决方案来构建的。这类解决方案基本上也都是在解决一个问题:就是如何将多块部署在不同数据中心上的数据盘(数据块)逻辑上merge成一个。从接替思路上基本上有两种:方法1:通过存储设备层实现。如EMC的vplex解决方案,IBM的SVC解决方案,IBM的HyperSwap解决方案,浪潮存储双活方案等。都是通过存储层来实现的。方法2:通过分布式文件系统实现。例如GPFS解决方案,就是属于这一类。通过GPFS分布式文件系统的Failure Group功能,将另一份双活数据同步地写到另一个数据中心去。更多细节可以看这里 https://www.zhihu.com/question/48728378/answer/1385829459

分布式数据库

目前新型的分布式NewSQL数据库OceanBase、TiDB、MemFireDB等,在系统设计方面就充分考虑到了多活的需求。因此原生满足。

图片

分布式数据库两地三中心建设架构基于 Raft或Paxos 算法,保证了集群数据一致性和高可用。raft或paxos算法都是多数派协议,两地是同城、异地,同城双中心指在同城或临近城市建立独立数据中心,双中心通过高速链路实时同步数据,网络延迟相对较小,另外一个数据中心在异地城市。在这种场景下,同城的两个中心超过半数完成提交,这样就不会因为与异地机房通讯时间长而推高数据库的操作延时。

如果同城机房有一个不可用,异地机房节点的投票就会发挥作用,那么数据库的服务仍然可以正常运行,数据也未发生丢失,此时RTO=0,RPO=0。但是如果同城发生了自然灾害,两个机房均不可用,此时数据库服务无法提供服务,数据也会丢失,RPO就不为零了。在此基础上还可以升级到三地三中心无副本,提供城市级别容灾,在邻近城市实现RPO为零。

引用

https://community.memfiredb.com/topic/28/memfire%E6%8A%80%E6%9C%AF%E6%9E%B6%E6%9E%84%E7%AE%80%E4%BB%8B https://www.zhihu.com/question/48728378/answer/1385829459 http://blog.itpub.net/26736162/viewspace-2216584/

### 哔哩哔哩逆向工程与反编译分析 在讨论哔哩哔哩(Bilibili)相关的逆向工程和反编译技术时,可以从多个角度切入。以下是关于这一主题的一些核心知识点: #### 工具支持 对于逆向工程而言,合适的工具有助于提高效率。例如,提到的一个综合工具包提供了多种功能强大的软件[^5]。这些工具能够帮助研究者解析复杂的二进制结构以及动态调试程序行为。 #### 数据流动追踪方法 当涉及到具体代码路径跟踪时,有两种主要策略被推荐使用:一种是从最终输出回溯至源头输入;另一种则是顺着初始条件逐步向前推进逻辑链条直至目标位置。比如,在处理某个特定变量`v34`的时候就可以采用前者——由其生成处倒查回去找到它最初是如何形成的[^1]。 另外还提到了针对指针类型参数`s=(char*)c_mapText`的情况,则应该关注该对象在整个执行流程中的状态变化及其与其他组件之间的交互关系同样重要的是要留意那些可能影响到结果的关键函数接口,并通过钩(hooking)机制捕获它们的实际运行状况以便进一步深入探究。 #### 字符串比较操作 在很多场景下都需要判断两个字符串之间是否存在差异或者完全一致的情形之下就会运用到标准库函数`strcmp()`来进行逐位对比直到发现第一个匹配之处为止如果整个过程中都没有发现问题则表明两者确实相等此时会得到零作为反馈值表示成功匹配上了[^3]。 #### 文件格式探索 面对像`.dll`这样的外部依赖项文件出现问题时候也必惊慌失措因为存在专门设计用来解决此类难题的方法论其中之一便是借助十六进制编辑器直接观察内部存储模式从而获取更多隐藏细节这对于从事低层次数据分析工作的专业人士来说尤其有价值[^4]。 ```cpp #include <cstring> int main(){ const char* str1="example"; const char* str2="sample"; int result = strcmp(str1,str2); if(result==0){ printf("Strings are equal.\n"); } else{ printf("Strings differ by %d units.\n",result); } return 0;} ``` 上述示例展示了如何利用C语言内置的`strcmp`函数来检测两段文本序列间的关系并作出相应决策过程非常简洁明了易于理解同时也体现了编程实践中常用的技术手段之一即基于算法实现自动化判定机制提升工作效率减少人为错误发生几率。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值