首页 文章 精选 留言 我的

精选列表

搜索[测试策略],共10016篇文章
优秀的个人博客,低调大师

华为鸿蒙 Web 组件:高效调试策略

踏入鸿蒙世界的敲门砖,标志着您在技术征途上的全新起点,提升就业竞争力,获得行业认可,点亮职业成长先机,快人一步抢占未来应用开发赛道!https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398?ha_source=hmosclass-csdn&ha_sourceId=89000445 本文旨在深入探讨华为鸿蒙HarmonyOS NEXT系统(截至目前 API12)在开发多语言电商平台方面的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。 引言 调试是软件开发过程中不可或缺的一环,对于 Web 组件也不例外。华为鸿蒙系统的 ArkWeb 组件提供了多种调试工具和功能,帮我们高效地定位和解决 Web 组件相关问题。 DevTools 调试 华为鸿蒙 DevTools 是一个功能强大的 Web 前端开发调试工具,可以用于调试 Web 组件中的 HTML、CSS 和 JavaScript 代码。以下是如何使用 DevTools 调试 Web 组件的步骤: 1、开启 Web 组件调试模式 2、连接 DevTools 在 DevEco Studio 中,可以使用 “Tools” -> “DevTools” 命令打开 DevTools,并连接到运行中的应用。 3、调试 Web 页面 在 DevTools 中,可以查看网络请求、控制台日志、检查元素等。例如,可以使用 “Network” 选项卡查看网络请求,使用 “Console” 选项卡查看控制台日志,使用 “Elements” 选项卡检查元素。 4、使用 DevTools 高级功能 DevTools 还提供了许多高级功能,例如远程调试、性能分析等。可以使用 “Devices” 选项卡添加设备,使用 “Performance” 选项卡进行性能分析等。 crashpad 崩溃信息收集 crashpad 是 Chromium 内核提供的进程崩溃信息处理工具,可以用于收集 Web 组件崩溃信息。以下是如何使用 crashpad 收集 Web 组件崩溃信息的步骤: 1、确保 crashpad 已安装 在设备上,可以使用以下命令安装 crashpad: 2、收集崩溃信息 当 Web 组件崩溃时,crashpad 会自动收集崩溃信息,并将其保存到/data/storage/el2/log/crashpad目录下。崩溃信息文件以.dmp为后缀。 3、分析崩溃信息 可以使用 minidump_stackwalk 和 llvm 工具链分析崩溃信息。例如,可以使用以下命令分析崩溃信息: 4、解决崩溃问题 根据崩溃信息分析结果,可以定位崩溃原因,并进行相应的修复。 常见调试问题及解决方案 Web 组件开发中常见的调试问题包括白屏、卡顿、崩溃等。以下是一些常见的调试问题和解决方案: ·白屏:检查网络请求是否成功,检查 HTML 结构是否正确,检查 CSS 样式是否冲突。 ·卡顿:使用 DevTools 的 Performance 选项卡进行性能分析,找出性能瓶颈并进行优化。 ·崩溃:使用 crashpad 收集崩溃信息,使用 minidump_stackwalk 和 llvm 工具链分析崩溃信息,找出崩溃原因并进行修复。 总结 调试是 Web 组件开发的重要环节,掌握合适的调试方法和技巧可以帮助开发者高效地解决问题。本文介绍了华为鸿蒙 DevTools 和 crashpad 等调试工具,并提供了一些常见的调试问题和解决方案,希望对各位看官有所帮助。(转载自51CTO,作者:SameX)

优秀的个人博客,低调大师

虎牙海外直播的“专库专用”策略

WOT全球技术创新大会2022,门票6折抢购中!购票立减2320元! 【51CTO.com原创稿件】虎牙是以游戏直播业务为核心的直播平台,秉持技术驱动娱乐的理念,在业务发展过程中不断采用创新技术,创造直播互动的全新体验。在虎牙深耕国内业务的同时,也在进行海外业务拓展。2018年,虎牙推出海外直播产品 Nimo TV,并且快速进入到东南亚、拉美、中东等地区。截止到2020年,虎牙海外的移动游戏直播平台 Nimo TV 的海外 MAU 已经突破了三千万。 在海外业务快速发展的过程中,也对虎牙的数据库提出了更高的要求。虎牙海外业务平台的技术负责人马昭在采访时表示,虎牙会根据不同的业务场景使用不同的数据库来解决不同的有业务问题,和亚马逊云科技的“专库专用”理念不谋而合。目前,虎牙使用了 Amazon Aurora 替代传统 MySQL,提升了性能;利用 Amazon DynamoDB 的无服务器化特性,应对流量突增;利用 Amazon ElastiCache for Redis 实现内存数据的全球复制;采用 Amazon Neptune 实现对直播平台的风险把控。 全球化对数据库带来的挑战 在虎牙海外业务发展中,对数据库最基本的要求就是成熟稳定。马昭表示,数据库的稳定性直接决定了上云业务的稳定性,一旦数据库出现问题影响会比较大。其次,海外业务扩展迅速,因此虎牙需要对数据库的扩展性提出更高的要求,希望可以跟随业务的需求进行快速扩展。第三,数据库需要兼容已有架构。在海外业务建立前,虎牙直播已经在国内发展数年,当海外业务发展时,可以兼容基础平台和相关构件。 因此,在稳定性、扩展性、兼容性、全球化支持、自动扩容和成本优化等多方面综合考量后,虎牙选择了亚马逊云科技的数据库产品,通过选用不同类型的数据库解决不同业务问题。马昭认为,海外直播业务对可靠性、低延时等需求要求高,如果全球业务走公网的话,延时会非常高并且不稳定,安全性也相对较差。因此,虎牙海外直播场景依靠亚马逊云科技的核心骨干网,来实现低延迟访问。 Amazon Aurora 替代 MySQL 提升性能 过去,虎牙一直使用的是 MySQL 关系型数据库。随着业务量的增加以及数据爆炸式的增长,MySQL 的性能已经无法满足虎牙的要求。在虎牙选择亚马逊云科技的 Amazon Aurora 后,将交易信息、主题信息、主播开播记录以及用户信息等等迁移到 Amazon Aurora 中存储,达到了性能提升的目的。 马昭介绍了 Amazon Aurora 带来的诸多好处。首先是性能提升,若要提升 MySQL 的读写性能,需要进行分库分表操作,虽然可以提升性能但是聚合查询会变得非常困难。在使用 Amazon Aurora 后省去了大量分库分表工作,研发人员更加专注在主营业务方面。 第二,Amazon Aurora 非常易于扩展。虎牙海外流量变化迅速,需要频繁地扩缩容。而 MySQL 扩缩容经常需要迁移数据,非常困难。而 Amazon Aurora 由于计算和存储分离的架构,扩缩容非常容易,并且虎牙已经实现了 Amazon Aurora 自动扩容,成本下降了50%以上。 第三,Amazon Aurora 的全球同步能力提升。虎牙海外用户分布在不同国家,距离相对比较远,用户之间的访问延迟比较高,如果想要降低延迟,提升用户体验,就需要数据能够就近访问,但是 MySQL 很难满足这一需求。在使用 Amazon Aurora 的物理同步方式后,虎牙海外业务的数据全球化的问题得到了很好地解决。 第四,MySQL 的维护和迁移是相对比较繁琐的,需要 DBA 频繁地完成复制、备份等工作。Amazon Aurora 的维护会简单很多,基本可以实现自动化,并且 Amazon Aurora 还开放了很多 API 接口,虎牙可以接入自己的运维系统,便于运维工程师进行监控和规划。此外,Amazon Aurora 能够完全兼容 MySQL,无需做任何代码更改即可上线。 利用 Amazon DynamoDB 应对流量突增 虎牙海外业务遍布全球,在一些国家的重大节日或活动时,很多主播都会上线进行直播。当粉丝订阅了某个主播的某个频道后,在主播开播时,粉丝就会收到一条推送消息,告知粉丝主播开播可以到房间进行观看和互动。 开播服务有几大特点,业务变化非常快,低峰与高峰的数值跃动大,预测和预留资源困难,订阅关系分布不均匀,实时性比较高。因此,在亚马逊云科技的帮助下,虎牙设计了全球主播信息推送架构,可以轻松应对10倍以上的流量突增。 这其中使用了 Amazon DynamoDB 作为订阅关系的存储。借助 Amazon DynamoDB,虎牙海外业务实现了自动扩容,无需预留很多机器来应对流量突增带来的成本浪费。其次,亚马逊云科技的友好式计费方式,帮助虎牙节省了很多不必要的开支。马昭表示,当业务量很低的时候费用也会很低,当业务量突增后,只需要针对高峰流量进行付费。此外,虎牙采用的是无服务器架构,因此技术人员无需关心底层架构,极大地节省人力。在全球化业务的同步时,虎牙采用了Global Tables,可以轻松应对十倍以上的流量突增。 内存数据库以及图数据库的支持 除了使用 Amazon Aurora 和 Amazon DynamoDB 来提升性能和应对流量激增,虎牙海外业务还使用了内存数据库和图数据库。 随着虎牙的业务扩展到全球各个地区,用户之间距离也相对较远,经常需要跨洲访问,于是如何提升用户体验、降低物理延时成为了虎牙技术团队亟需解决的问题。马昭表示,在虎牙海外业务开启了内存数据库全球化的进程中 ,采用了 Amazon ElastiCache for Redis,存储了传统的数据缓存以及用户和主播的状态,并且利用 Amazon Global Datastore 实现低延迟的数据本地读取,满足了数据同步和低延迟的要求。 此外,虎牙还使用了 Amazon Neptune 图数据库,存储和搜索多度关系,并且完成了欺诈主播和欺诈用户的标定,只需要一条 Amazon Neptune 语句,就可以将利益链条上的所有主播和用户全部找出,实现了对平台的风险把控。 未来发展 未来,虎牙会在两方面不断探索。首先是云游戏领域,虎牙会尝试不同的数据存储和同步方式来支持游戏,也会进行计算和存储的分离工作来支撑云游戏的服务。 其次,虎牙会打造更加灵活的数据库弹性方式,以应对各种流量突增。同时,也会利用AI技术来预测流量的变化,以及采用各种推荐和欺诈监测等AI功能;此外,虎牙也会尝试无服务器化的数据库应用,来实现降本增效。 【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】 【责任编辑:鸢玮 TEL:(010)68476606】

优秀的个人博客,低调大师

微服务复杂查询之缓存策略

在上一篇 缓存设计的好,服务基本不会倒 介绍了db层缓存,回顾一下,db层缓存主要设计可以总结为: 缓存只删除不更新 行记录始终只存储一份,即主键对应行记录 唯一索引仅缓存主键值,不直接缓存行记录(参考mysql索引思想) 防缓存穿透设计,默认一分钟,防止缓存击穿和雪崩 不缓存多行记录 前言 在大型业务系统中,通过对持久层添加缓存,对于大多数单行记录查询,相信缓存能够帮持久层减轻很大的访问压力,但在实际业务中,数据读取不仅仅只是单行记录,面对大量多行记录的查询,这对持久层也会造成不小的访问压力,除此之外,像秒杀系统、选课系统这种高并发的场景,单纯靠持久层的缓存是不现实的,本文我们来介绍 go-zero 实践中的缓存设计之biz cache。 适用场景举例 选课系统 内容社交系统 秒杀 像这些系统,我们可以在业务层再增加一层缓存来存储系统中的关键信息,如选课系统中学生选课信息,课程剩余名额;内容社交系统中某一段时间之间的内容信息等。 接下来,我们以内容社交系统来进行举例说明。 在内容社交系统中,我们一般是先查询一批内容列表,然后点击某条内容查看详情, 在没有添加biz缓存前,内容信息的查询流程图应该为: 从上图以及上一篇文章 缓存设计的好,服务基本不会倒 中我们可以知道,内容列表的获取是没办法依赖缓存的, 如果我们在业务层添加一层缓存用来存储列表中的关键信息(甚至完整信息),那么多行记录的访问不再是一个问题,这就是biz redis要做的事情。 接下来我们来看一下设计方案,假设内容系统中单行记录包含以下字段 字段名称 字段类型 备注 id string 内容id title string 标题 content string 详细内容 createTime time.Time 创建时间 我们的目标是获取一批内容列表,而尽量避免内容列表走db造成访问压力,首先我们采用redis的sort set数据结构来存储,根需要存储的字段信息量,有两种redis存储方案: 缓存局部信息 对其关键字段信息(如:id等)按照一定规则压缩,并存储,score我们用createTime毫秒值(时间值相等这里不讨论),这种存储方案的好处是节约redis存储空间, 那另一方面,缺点就是需要对列表详细内容进行二次回查(但这次回查是会利用到持久层的行记录缓存的) 缓存完整信息 对发布的所有内容按照一定规则压缩后均进行存储,同样score我们还是用createTime毫秒值,这种存储方案的好处是业务的增、删、查、改均走reids,而db层这时候 就可以不用考虑行记录缓存了,持久层仅提供数据备份和恢复使用,从另一方面来看,其缺点也很明显,需要的存储空间、配置要求更高,费用也会随之增大。 示例代码: type Content struct { Id string `json:"id"` Title string `json:"title"` Content string `json:"content"` CreateTime time.Time `json:"create_time"` } const bizContentCacheKey = `biz#content#cache` // AddContent 提供内容存储 func AddContent(r redis.Redis, c *Content) error { v := compress(c) _, err := r.Zadd(bizContentCacheKey, c.CreateTime.UnixNano()/1e6, v) return err } // DelContent 提供内容删除 func DelContent(r redis.Redis, c *Content) error { v := compress(c) _, err := r.Zrem(bizContentCacheKey, v) return err } // 内容压缩 func compress(c *Content) string { // todo: do it yourself var ret string return ret } // 内容解压 func uncompress(v string) *Content { // todo: do it yourself var ret Content return &ret } // ListByRangeTime提供根据时间段进行数据查询 func ListByRangeTime(r redis.Redis, start, end time.Time) ([]*Content, error) { kvs, err := r.ZrangebyscoreWithScores(bizContentCacheKey, start.UnixNano()/1e6, end.UnixNano()/1e6) if err != nil { return nil, err } var list []*Content for _, kv := range kvs { data := uncompress(kv.Key) list = append(list, data) } return list, nil } 在以上例子中,redis是没有设置过期时间的,我们将增、删、改、查操作均同步到redis,我们认为内容社交系统的列表访问请求是比较高的情况下才做这样的方案设计, 除此之外,还有一些数据访问,没有像内容设计系统这么频繁的访问, 可能是某一时间段内访问量突如其来的增加,之后可能很长一段时间才会再访问一次,以此间隔,或者说不会再访问了,面对这种场景,我们又该如何考虑缓存的设计呢?在go-zero内容实践中,有两种方案可以解决这种问题: 增加内存缓存:通过内存缓存来存储当前可能突发访问量比较大的数据,常用的存储方案采用map数据结构来存储,map数据存储实现比较简单,但缓存过期处理则需要增加定时器来处理,另一宗方案是通过go-zero库中的 Cache ,其是专门用于内存缓存管理。 采用biz redis,并设置合理的过期时间 总结 以上两个场景可以包含大部分的多行记录缓存,对于多行记录查询量不大的场景,暂时没必要直接把biz redis放进去,可以先尝试让db来承担,开发人员可以根据持久层监控及服务监控来衡量何时需要引入biz cache。 项目地址 https://github.com/tal-tech/go-zero https://gitee.com/kevwan/go-zero 欢迎使用 go-zero 并 star 支持我们!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册