首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

国民级应用:微信是如何防止崩溃的?

微博经常出现某明星官宣结婚或者离婚导致服务器崩溃的场景,这就是服务过载。 3)过载保护的好处 提升用户体验、保障服务质量。...大规模微服务场景,过载会变得比较复杂。如果是单体服务,一个事件只用一个请求。但微服务,一个事件可能要请求很多的服务,任何一个服务过载失败,就会造成其他的请求都是无效的。...如何判断过载 通常判断过载可以使用吞吐量、延迟、CPU 使用率、丢包率、待处理请求数、请求处理事件等等。微信使用在请求队列中的平均等待时间作为判断标准,就是从请求到达,到开始处理的时间。...所以微信内是天然存在业务优先级的。 用户的每个请求都会分配一个优先级。微服务的链式调用,下游请求的优先级也是继承的。...如何根据负载情况调整优先级呢?最简单的方式是从右到左遍历,每调整一次判断负载情况,这个时间复杂度是 O(n), 就算使用二分法,时间复杂度也为 O(logn)。

2.5K71
您找到你想要的搜索结果了吗?
是的
没有找到

月活 12.8 亿的微信是如何防止崩溃的?

3.过载保护的好处 主要是为了提升用户体验,保障服务质量,发生突发流量时仍然能够提供一部分服务能力,而不是整个系统瘫痪,系统瘫痪就意味着用户流失,口碑变差,夫妻吵架,甚至威胁生命安全(假如腾讯文档崩溃...大规模微服务场景,过载会变得比较复杂,如果是单体服务,一个事件只用一个请求,但微服务,一个事件可能要请求很多的服务,任何一个服务过载失败,就会造成其他的请求都是无效的。如下图所示。...四、如何判断过载 通常判断过载可以使用吞吐量,延迟,CPU 使用率,丢包率,待处理请求数,请求处理事件等等。微信使用在请求队列中的平均等待时间作为判断标准,就是从请求到达,到开始处理的时间。...用户的每个请求都会分配一个优先级,并且微服务的链式调用,下游请求的优先级也是继承的,比如我请求登录,那么检查账号密码等一系列的的后续请求都是继承登录优先级的,这就保证了优先级的一致性。...如何根据负载情况调整优先级呢?

1.4K50

【干货】如何防止接口重复提交?(

一、摘要 在上一篇文章中,我们详细的介绍了随着下单流量逐渐上升,为了降低数据库的访问压力,通过请求唯一ID+redis分布式锁来防止接口重复提交,流程图如下!...今天我们就一起来看看,如何通过服务端来完成请求唯一 ID 的生成? 二、方案实践 我们先来看一张图,这张图就是本次方案的核心流程图。...;如果加锁失败,说明服务正在处理,请勿重复提交 3.最后一步,如果加锁成功后,需要将锁手动释放掉,以免再次请求时,提示同样的信息 引入缓存服务后,防止重复提交的大体思路如上,实践代码如下!...orderService.confirm(request); return ResResult.getSuccess(); } } 其中最关键的一个步就是将唯一请求 ID 的生成,放在服务端通过组合来实现,保证防止接口重复提交的效果同时...三、小结 本次方案相比于上一个方案,最大的改进点在于:将接口请求唯一 ID 的生成逻辑,放在服务端通过规则组合来实现,不需要前端提交接口的时候强制带上这个参数,满足防止接口重复提交的要求同时,又能减少前端和测试提交接口的复杂度

99120

如何防止softmax函数上溢出(overflow)和溢出(underflow)

《Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上溢出(overflow)和溢出(underflow...这里我再详细地把它总结一。 『1』什么是溢出(underflow)和上溢出(overflow) 实数计算机内用二进制表示,所以不是一个精确值,当数值过小的时候,被四舍五入为0,这就是溢出。...很大,此时分母是一个极小的正数,有可能四舍五入为0,导致溢出 『3』如何解决 所以怎样规避这些问题呢?我们可以用同一个方法一口气解决俩: 令 ? 即 M 为所有 ?...大家看到,最后的表达式中,会产生下溢出的因素已经被消除掉了——求和项中,至少有一项的值为1,这使得log后面的值不会下溢出,也就不会发生计算 log(0) 的悲剧。...很多数值计算的library中,都采用了此类方法来保持数值稳定。

2.1K100

业务场景(并发篇)--秒杀场景如何防止超卖

2、秒杀需解决的问题 如何在有限的商品数量的限制如何保证抢购到商品的用户数不能大于商品数量,也就是不能出现超卖的问题;还有就是抢购时会出现大量用户的访问,如何提高用户体验效果也是一个问题,也就是要解决秒杀系统的性能问题...事务中线程A通过select * from goods for where goods_id=#{id} for update语句给goods_id为#{id}的数据行上了锁。...进行库存限制条件 update goods set stock = stock - 1 where goods_id = #{id} and stock >0 这种通过数据库加锁来解决的方案,性能不是很好,高并发的情况...3.2 利用分布式锁 同一个锁key,同一时间只能有一个客户端拿到锁,其他客户端会陷入无限的等待来尝试获取那个锁,只有获取到锁的客户端才能执行下面的业务逻辑 这种方案的缺点是同一个商品多用户同时下单的情况...,返回正在排队中; 4、服务端异步队列将请求出队(哪些请求可以出队,可以根据业务来判定,比如:判断对应用户是否已经秒杀过对应商品,防止重复秒杀),出队成功的请求可以生成秒杀订单,减少数据库库存(扣减库存的

4.6K50

微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?

做法是,排版/绘制字符串前,先设置标记位,排版/绘制结束后,移除标记位。 一旦发现标记位存在,就意味着这字符串可能有问题,下次就不显示这个字符串: ?...CScopedCrashCounter crashCounter(m_cpKey);     return[supersizeThatFits:size]; } @end MMCPUtil.mm: // 利用C++特性,声明...附录:有关微信、QQ的文章汇总 [1] QQ、微信团队原创技术文章: 《微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?》...《腾讯技术分享:Android手Q的线程死锁监控系统技术实践》 《微信团队原创分享:iOS版微信的内存监控系统技术实践》 《让互联网更快:新一代QUIC协议腾讯的技术实践分享》 《iOS后台唤醒实战...(二):如何大幅压缩移动网络APP的流量消耗(下篇)》  《腾讯原创分享(二):如何大幅压缩移动网络APP的流量消耗(上篇)》  《微信Mars:微信内部正在使用的网络层封装库,即将开源》

2.7K12

VBA技巧:不保护工作簿的情况防止删除工作表

通常情况,我们执行“保护工作簿”命令后,此时删除工作表的命令变成灰色,用户就不能轻易地删除工作表了。然而,这样也不能进行插入、移动或复制工作表的操作了。...如果想要在不保护工作簿的情况防止用户删除工作表,而且允许用户插入工作表并对其进行重命名,也允许用户移动或复制工作表,有没有什么好的方法实现?可以使用下面的VBA代码,很简单,却很实用。...工作簿的ThisWorkbook模块中粘贴或输入下面的代码: Option Explicit Private Sub Workbook_SheetDeactivate(ByVal Sh As Object...的警告信息(如下图1所示),但用户仍可以该工作簿中进行添加工作表、移动或复制工作表、对工作表重命名等操作。 图1

1.8K30

MySQLLinux如何实现定时备份!!!

备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。...存储到当前磁盘这是最简单,却是最不推荐的;服务器有多块硬盘,最好是把备份存放到另一块硬盘上;有条件就选择更好更安全的存储介质; # df -hFilesystem 2、创建备份目录: 上面我们使用命令看出/home空间比较充足...,所以可以考虑/home保存备份文件; cd /home mkdir backupcd backup 3、创建备份Shell脚本: 注意把以下命令中的DatabaseName换为实际的数据库名称;...password 替换为实际的密码; 把 DatabaseName 替换为实际的数据库名; 4、添加可执行权限: chmod u+x bkDatabaseName.sh 添加可执行权限之后先执行一,...crontab 确认crontab是否安装: 执行 crontab 命令如果报 command not found,就表明没有安装 如时没有安装 crontab,需要先安装它,具体步骤请参考: CentOS使用

1.8K40

Linux+Windows: 程序崩溃时, C++ 代码中,如何获取函数调用栈信息

一、前言 二、Linux 平台 三、Windwos 平台 一、前言 程序执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些问题,但是总会有漏网之鱼被带到 release 阶段。...因此,程序的日志系统需要侦测这种情况,代码崩溃的时候获取函数调用栈信息,为 debug 提供有效的信息。...这篇文章的理论知识很少,直接分享 2 段代码: Linux 和 Windows 这 2 个平台上,如何用 C++ 来捕获函数调用栈里的信息。 二、Linux 平台 1....free(symbols); oss << std::endl; std::cout << oss.str(); // 打印函数调用栈信息 } 三、Windwos 平台 ...利用以上几个神器,基本上可以获取到程序崩溃时的函数调用栈信息,定位问题,有如神助! ----

5.6K20
领券