七猫日志接收系统之架构设计(下)

七猫日志接收系统系列文章将会向大家介绍七猫日志接收系统及相关的埋点 SDK,总共分为四篇。本文为系列的第二篇,我们将基于当前的 v4 版本详细介绍七猫日志接收系统架构,并从日志处理效率、系统的高可用以及成本控制等方面进行架构设计分析。同时随着七猫的继续壮大,日志接收系统必将迎来越来越多的挑战,我们也会对后续的迭代版本进行规划与展望。…

xorm与go-sql-driver的时区问题

go-sql-driver时区的默认配置是零时区,xorm默认的是本地时区,那么在DSN的配置中,加上loc=Local,让go-sql-driver与xorm使用相同的时区,这样就能避免我们在使用time.Time传递参数时,各个模块时间转换不一致的情况出现。…

Prometheus TSDB 的设计与实现

TSDB(时序数据库)是 Time Series Database(时间序列数据库)的简称,TSDB是一种高性能、低成本、稳定可靠的在线时间序列数据库服务,提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务,广泛应用于物联网(IoT)设备监控系统、企业能源管理系统(EMS)、生产安全监控系统和电力检测系统等行业场景,除此以外,还提供了时空场景的查询和分析的能力。…

媒体推广业务架构演进

在互联网APP项目推广中,媒体在线推广是市场推广中重要的推广手段之一,通常在运营中称之为买量或者付费推广,在推广的过程中,广告主需要与媒体进行对接,广告主需要对媒体侧下发的点击信息进行接收,用户下载完成激活后,还需要通过媒体下发的点击信息对新增或者沉默后又活跃的用户进行识别,主要识别来源于哪个平台及具体的广告效果,最后还需要回传通知广告平台激活用户设备相关的信息,从而实现广告平台与广告主之间推广及效果追踪溯源的链路闭环。七猫的媒体推广业务架构也随着业务的发展进行了一系列的演进,本文整理了整个过程中重要的调整节点,介绍整个架构的演进过程。…

探索Go函数式编程:提升你的代码品质与可维护性

在2014年软件工程基础(FSE)大会上发表的一篇学术论文“A Large Scale Study of Programming Languages and Code Quality in Github”声称,函数式编程范式具有更低的代码错误率等四个结论。Go 支持一等函数、高阶函数、用户定义的函数类型、函数文字、闭包和多个返回值。 这些丰富的功能正好支持一门强类型语言编写出函数式编程风格的代码。…

七猫日志接收系统之架构设计(上)

七猫日志接收系统系列文章将会向大家介绍七猫日志接收系统及相关的埋点 SDK,总共分为四篇,本文为系列的第一篇,将带大家一起回顾七猫 2020 年至今,七猫日志接收系统近四年来的演化历程。如果您之前未了解过统计埋点系统,强烈推荐您阅读本站发布的七猫统计埋点实践一文。…

领域驱动分层设计-达人平台

领域驱动设计(DDD)是一种架构设计方法,它利用领域、子域、核心域、通用域、界限上下文、自顶向下的概念作为黏合剂,利用实体、值对象、聚合和聚合根等构造物作为砖头,将复杂的系统构造成多个从整体到局部高内聚、低耦合的子系统。…

七猫分布式追踪实践

Metrics(指标)、Logging(日志记录)、和Tracing(追踪)通常被称为可观测性的三大支柱。在微服务架构下,分布式追踪是一种关键工具,用于帮助排查和理解服务问题,它允许跟踪请求流程并提供关键的信息,以便更容易发现和解决问题。…

七猫消息推送系统演进之路

七猫推送系统经过近两年的开发迭代,已逐渐稳定完善,作为成本较低的拉活手段,已成为七猫越来越不可缺少的基础能力。本文将带大家一起回顾七猫推送系统从诞生到成熟稳定的演进…

使用ARMS+LTS监控告警应用实践

鉴于之前调研的夜莺等一体化监控告警工具,我们综合总结下来,使用阿里云提供的ARMS告警系统,以减轻运维成本,目标是解决当前多而繁杂的业务系统中各式各样的告警机器人治理问题,我们需要一个聚合的,可容错的,可削峰的,可溯源的监控告警系统…

七猫社区Timeline Feed架构演进

七猫社区Timeline Feed架构演进是一个旨在改进和优化社区动态展示功能的项目它是书友圈中一个不可获缺的tab。2.0通过对现有架构进行演进,我们可以提升用户体验、优化性能,并满足不断增长的用户需求。…

使用pyroscope+ holmes 加速找到服务瓶颈

在软件开发过程中,我们会根据需求快速迭代项目,但随着功能的增加,系统性能可能会出现瓶颈。 至今,我们已经采用了日志链路追踪和Sentry警告,在线拉pprof等解决方案来辅助问题排查。 但是在所有已知方案都无法提供解决思路的情况下,我们需要迅速地垂直拓展。这通常意味着直接拉取pprof进行分析。而且,我们可能会面临需要提高CPU和内存的压力(就如同做面食,面多了加水,水多了加面)。然而,这只是暂时的解决办法,不能从长远角度解决问题。因此,我建议大家在使用pprof在线服务时,要关注服务性能问题。…

通过Prometheus+grafana搭建可视化监控

有时候我们想知道项目里面各个api的qps和耗时,或者请求第三方服务的qps、成功率、失败率等等。统计这个其实有很多方案,比如:envoy、sls、prometheus等。经过讨论之后,我们决定使用Prometheus,然后在运维平台的grafana中接入,再画出需要的图。本文简单的介绍下大致的流程。…

Go单元测试综合指南

为了保证软件开发的质量,我们需要借助单元测试来确保代码的正确性,从而及早发现并修复代码中的错误。此外,单元测试还可以帮助开发人员更快地完成软件开发,并减少软件开发过程中的错误,同时也可以为新人提供指导。…

浅谈PHP性能优化-APCu

提到PHP,大家的第一印象都是简单易用好上手。只需几个小时即可大致了解它的结构,然后几分钟的时间即可搞定一个web服务,这就是PHP的魅力。凭借这一点PHP成为七猫飞速发展的见证者,在开山之初立下汗马功劳。但提到性能,就不禁唉了一声,于是各种性能优化呼之欲出,便有了APCu。…

Clickhouse bitmap实现标签筛选功能

随着业务的发展,运营对报表的要求越来越多,为了满足运营需求,我们使用clickhouse bitmap实现了数据打标签功能,方便其对数据进行各维度的聚合、查询。本文记录了详细的实现过程,希望对大家有所帮助。…

IP库-IP段生成Trie树过程的剪枝实现

APP需支持IPv6 访问,所以需要研究下怎样能同时支持IPv4和IPv6的高并发访问。查找资料的过程中发现多篇论文提到Trie树,结合之前实现禁词库的经验,深入研究之后发现可行。该处就将IP段生成Trie树过程的剪枝实现进行简单的讨论。…

IP库-ip2region结构分析和实现

ip2region 是一个准确率99.9%的ip地址定位库。 0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java, php, c, python查询客户端和Binary,B树,内存三种查询算法。…