vivo 游戏中心包体积优化方案与实践

11 月 14 日
阅读 7 分钟
184
安装包大小与下载转化率的关系大致是成反比的,即安装包越大,下载转换率就越差。Google 曾在 2019 的谷歌大会上给出过一个统计结论,包体积体大小每上升 6MB,应用下载转化率就会下降 1%,在不同地区的表现可能会有所差异。

glibc 内存分配与释放机制详解

11 月 7 日
阅读 10 分钟
207
本文以一次线上故障为基础介绍了使用 glibc 进行内存管理可能碰到问题,进而对库中内存分配与释放机制进行分析,最后提供了相应问题的解决方案。

浅谈TiKV集群运维问题排查与修复——磁盘空间占用问题

10 月 31 日
阅读 7 分钟
347
在业务快速扩张的年代,vivo 内部的很多业务为了可以快速上线,给现网功能提供支撑,在 KV 类型的选型下许多场景都选用了轻量快速的 Redis 集群。但是随着业务的不断发展与稳定,当数据量级达到一定程度的时候,数据性质开始发生变化:有的历史 Redis 集群热度下沉,但是依然基于 Redis 集群作为载体进行 KV 存储。这种...

浅谈活动中台系统技术债管理实践

10 月 24 日
阅读 6 分钟
200
在项目研发过程中,由于时间、能力等因素往往会出现设计方案没有做到最好或最优、编码质量不够好等问题,技术债的出现是不可避免的,并且随着时间的推移,技术债对系统的影响会越来越大,同时使得对代码和架构设计的更改越来越困难,想要进一步提升效能必须要对技术债进行管理,本文通过在活动中台系统的技术债实践经验...

游戏推荐业务中基于 sentinel 的动态限流实践

10 月 17 日
阅读 7 分钟
182
随着互联网的发展及业务的增长,系统的流量和请求量越来越大,针对高并发系统,如果不对请求量进行限制,在流量突增时可能会导致系统崩溃或者服务不可用,影响用户体验。因此,系统需要引入限流来控制请求的流量,保证系统的可用性和稳定性。当前推荐业务使用公司vsentinel 限流工具,主要使用 QPS 限流和热点参数限流。

一次基于AST的大规模代码迁移实践

9 月 26 日
阅读 14 分钟
310
在研发项目过程中,我们经常会遇到技术架构迭代更新的需求,通过技术的迭代更新,让项目从新的技术特性中受益,但由于很多新的技术迭代版本并不能完全向下兼容,包含了很多非兼容性的改变(Breaking Changes),因此我们需要设计一款工具,帮助我们完成大规模代码自动迁移问题。本文简单阐述了基于 AST 的代码迁移概念和...

vivo 全链路多版本开发测试环境落地实践

9 月 19 日
阅读 7 分钟
179
软件系统中全链路指的是从用户请求发起,到最终返回响应的整个过程中所涉及到的所有环节和组件。在微服务软件架构风格盛行的今天,因为微服务独立部署、松耦合等特性,往往一个业务系统由数目较多的服务组成,较多的服务往往带来一系列操作上的复杂性。

Redis集群slot迁移改造实践

9 月 12 日
阅读 6 分钟
210
Redis 集群经常需要进行在线水平扩缩容,实际操作过程中发现迁移期间服务时延剧烈抖动,业务侧感知明显,为了应对以上问题对原生 Redis 集群 slot 迁移功能进行优化改造。

Cookie的secure属性引起循环登录问题分析及解决方案

9 月 5 日
阅读 4 分钟
593
单点登录作为公共组件,在各个公司内部被各个系统所广泛使用,但是在使用过程中我们会遇到各种各样的问题,其中循环登录问题就是一个比较经典的问题。本文主要分析单点登录和权限系统设计的基本原理,然后结合实际案例来分析循环登录的原因,并给出具体的解决办法。

TimeWheel算法介绍及在应用上的探索

8 月 29 日
阅读 9 分钟
232
本文从追溯时间轮算法的出现,介绍了时间轮算法未出现前,基于队列的定时任务实现,以及基于队列的定时任务实现所存在的缺陷。接着我们介绍了时间轮算法的算法思想及其数据结构,详细阐述了三种时间轮模型的数据结构和优劣性。

MySQL 亿级数据平滑迁移实战

8 月 22 日
阅读 9 分钟
952
预约业务是 vivo 游戏中心的重要业务之一。由于历史原因,预约业务数据表与其他业务数据表存储在同一个数据库中。当其他业务出现慢 SQL 等异常情况时,可能会直接影响到预约业务,从而降低系统整体的可靠性和稳定性。为了尽可能提高系统的稳定性和数据隔离性,我们迫切需要将预约相关数据表从原来的数据库中迁移出来,单...

高性能无锁队列 Disruptor 核心原理分析及其在i主题业务中的应用

8 月 15 日
阅读 22 分钟
413
本文首先介绍了 Disruptor 高性能内存队列的基本概念、使用 Demo、高性能原理及源码分析,最后通过两个例子介绍了 Disruptor 在i主题业务中的应用。

MySQL 5.7 DDL 与 GH-OST 对比分析

8 月 8 日
阅读 5 分钟
306
本文首先介绍MySQL 5.7 DDL以及GH-OST的原理,然后从效率、空间占用、锁阻塞、binlog日志产生量、主备延时等方面,对比GH-OST和MySQL5.7 DDL的差异。

缓存框架 Caffeine 的可视化探索与实践

7 月 26 日
阅读 16 分钟
222
Caffeine缓存是一个高性能、可扩展、内存优化的 Java 缓存库,基于 Google 的 Guava Cache演进而来并提供了接近最佳的命中率。

基于 Three.js 的 3D 模型加载优化

7 月 19 日
阅读 4 分钟
499
作为一个3D的项目,从用户打开页面到最终模型的渲染需要经过多个流程,加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失。为了提升首屏加载的转化率,需要尽可能的降低loading的时间。这里就分享一些我们在模型加载优化方面的心得。

HBase 在统一内容平台业务的优化实践

7 月 11 日
阅读 6 分钟
242
HBase是一款开源高可靠性、扩展性、高性能和灵活性的分布式非关系型数据库,本文围绕数据库选型以及使用HBase的痛点展开,从四个方面对HBase的使用进行优化,取得了一些不错效果。

数据特征采样在 MySQL 同步一致性校验中的实践

7 月 4 日
阅读 8 分钟
435
在 MySQL 的使用过程中,经常会因为如集群拆分、数据传输、数据聚合等原因产生流动和数据复制。而在通常的数据复制过程中,因为涉及到目标的写入不可控、服务应用的未知问题、人为导致的异常缺陷等,很难保证复制产生的数据与源完全一致。除了通过完善流程与服务应用的能力和可靠性来保障数据一致性外,也需要提供快速有...

vivo 互联网自研代码评审 VCR 落地实践

6 月 27 日
阅读 13 分钟
766
本文介绍了vivo工程效能团队基于 Gitlab、Gerrit等开源工具搭建的VCR平台,代码评审idea插件开发及开发过程中遇到的挑战、困难,并分享了相应的应对策略和优化方案。

海量数据处理利器 Roaring BitMap 原理介绍

6 月 20 日
阅读 10 分钟
1.1k
本文结合个人理解梳理了BitMap及Roaring BitMap的原理及使用,分别主要介绍了Roaring BitMap的存储方式及三种container类型及Java中Roaring BitMap相关API使用。

TiKV 源码分析之 PointGet

6 月 13 日
阅读 14 分钟
534
TiDB是一款具有HTAP能力(同时支持在线事务处理与在线分析处理 )的融合型分布式数据库产品,具备水平扩容或者缩容等重要特性。TiDB 采用多副本+Multi-Raft 算法的方式将数据调度到不同的机器节点上,具备较高的可靠性和容灾能力。TiDB中的存储层TiKV组件,能够独立于TiDB作为一款分布式KV数据库使用,目前已经捐赠给CNCF...

前端生成海报图技术选型与问题解决

6 月 6 日
阅读 6 分钟
647
本篇文章主要聚焦海报图分享这个形式,探讨纯前端在H5&小程序内,合成海报到下载到本地、分享至社交平台整个流程中可能遇到的问题,以及如何解决。

vivo 制品管理在 CICD 落地实践

5 月 30 日
阅读 7 分钟
609
在DevOps实践中,制品管理是一个重要的组成部分,它可以帮助团队快速交付高质量、高可靠性的软件,本文将介绍在 DevOps 领域,vivo CICD是如何进行管理制品,阐述了 CICD 制品管理的演进过程与落地实践,希望能为读者提供一些实践经验和思路。

分布式任务调度内的 MySQL 分页查询优化

5 月 24 日
阅读 10 分钟
489
本文主要通过图示介绍了用主键进行分片查询的过程,介绍了主键分页查询存在SQL性能问题,如何去创建高效的索引去优化主键分页查询的SQL性能问题

有隙可乘 - Android 序列化漏洞分析实战

5 月 16 日
阅读 10 分钟
336
本文主要描述了FileProvider,startAnyWhere实现,Parcel不对称漏洞以及这三者结合产生的漏洞利用实战,另外阐述了漏洞利用的影响和修复预防措施,这个漏洞波及了几乎所有的Android手机,希望能带给读者提供一些经验和启发。

HBase Meta 元信息表修复实践

5 月 9 日
阅读 11 分钟
311
HBase是一款开源高可靠、高可扩展性、高性能的分布式非关系型数据库,广泛应用于大数据处理、实时计算、数据存储和检索等领域。在分布式集群中,硬件故障是一种常态,硬件故障可能导致节点或者集群级别服务中断、meta表损坏、RIT、Region空洞、重叠等问题,如何快速修复故障恢复业务尤其重要,本文章主要是围绕HBase met...

揭露 FileSystem 引起的线上 JVM 内存溢出问题

4 月 26 日
阅读 9 分钟
303
内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间,JVM不能正常回收改对象或者变量。一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出(out of memory):是指在程序运行过程中,由于分配的内存空间不足或使用不当等原因,导致程序无法继续执行的一种...

用户行为分析模型实践(四)—— 留存分析模型

4 月 19 日
阅读 10 分钟
328
本文详细介绍了留存分析模型的概念及基本原理,并阐述了其在产品中具体实现。针对在实际使用过程问题,探索了基于ClickHouse留存分析模型实践方案。

Redis Pipelining 底层原理分析及实践

4 月 11 日
阅读 31 分钟
597
Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时,Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对Pipeline特性的支持原理,并针对实践过程中遇到的问题进行了分析,可以帮助开发者了解不同客户端对Pipelin...

MySQL 主从 AUTO_INCREMENT 不一致问题分析

4 月 7 日
阅读 13 分钟
370
本文介绍了 MySQL5.7 中常见的replace into 操作造成的主从auto_increment不一致现象,一旦触发了主从切换,业务的正常插入操作会触发主键冲突的报错提示。

vivo 消息中间件测试环境项目多版本实践

3 月 28 日
阅读 6 分钟
466
在2022年8月份 vivo 互联网中间件团队完成了互联网在线业务的MQ引擎升级,从RabbitMQ 到 RocketMQ 的平滑升级替换。