完善Dubbo-go框架对Java枚举类可变长参数的支持
目前公司正在进行技术架构转型,原来的Java服务要改用Go来实现。重构后的Go服务必须可以完全替换掉原来的Java服务,这就要实现Java服务与Go服务的互通。考虑到Java服务使用了Dubbo框架,团队在经过探讨调研后,决定用Dubbgo-go框架来完成这一历史重任,理由也很简单,同源,这样可以完美实现服务互通。…
目前公司正在进行技术架构转型,原来的Java服务要改用Go来实现。重构后的Go服务必须可以完全替换掉原来的Java服务,这就要实现Java服务与Go服务的互通。考虑到Java服务使用了Dubbo框架,团队在经过探讨调研后,决定用Dubbgo-go框架来完成这一历史重任,理由也很简单,同源,这样可以完美实现服务互通。…
Clickhouse在单表字段特别多,查询带有聚合、列间计算操作等场景下,查询效率很低。本文主要分享一种利用Clickhouse预聚合方式,来提高查询效率的方法。…
随着业务的发展,报表类业务数据量越来越大、属性也越来越多,数据来源多样化,然后出现mysql查询慢,添加字段越来越困难等问题。为了解决以上问题,我们开始探索新的方案,首先想到的就是clickhouse(之前的业务中已有大量使用),作为一款优秀的OLTB数据库大数据量从来都不是问题;采用列式存储,加字段也没有问题;唯一需要解决的就是如何更新数据。…
Roaring Bitmap是应对大数据查询、去重业务场景,很成熟的解决方案,非常适合推荐系统过滤场景的应用,高效解决了大批量查询性能的问题。在技术方案的设计上,需要考虑方案的通用性,将变化与不变化的拆分开进行“动静分离”,降低业务耦合性,提升系统的扩展性,在类似的场景上能够复用,进行快速应用。…
Ingress是一套经过了时间的考验非常成熟的解决方案,nginx-Ingress又依托于nginx的强大历史背景,其性能和带来的价值都是让人值得称赞的.推荐引擎此次接入Ingress,不但可以解决让我们头疼已久的负载均衡问题,而且让我们节省了多个SLB的公网IP开销,同时新的通过域名请求的方式,对我们日常开发,性能问题排查,需求测试等都带来了较大的便利…
在Go语言生态中,gRPC的使用场景相当的广泛,已经有与HTTP分庭抗礼的趋势。七猫推荐引擎全部服务都使用gRPC来传输数据与远程调用。Leo对gRPC进行了适配,简化配置,方便gRPC的启动与关闭。…
随着公司规模的不断扩大,业务程序变得越来越复杂,代码可读性、复用性和扩展性很差,技术优化无从下手,代码改动牵一发而动全身,业务推进困难,大量系统重复建设等等问题层出不穷。为了解决此类问题我们也尝试过不少的方式方法,例如加强设计评审,定义代码规范、代码评审等等用以提高系统以及代码质量。然而真正执行推进时我们发现代码还是太复杂、太难维护,同时大家对业务背景的理解程度不同,认知不同,沟通低效,在做评审时也很难找出代码、系统设计上的不合理性,我们几乎很难将代码与设计对应起来,代码无法正确的反应设计,代码评审也就仅仅变成了代码规范性、代码设计优雅度的评审,很难找出代码业务逻辑的问题。…
本文概括总结了多系统登录与授权功能的设计方案、内部逻辑和实现方法,当前的技术方案能够满足多业务后台的登录授权需求以及用户使用的便利性,但是仍然具有较大的优化空间。…
本文概述了七猫手机客户端 DevOps 流水线设计与实现思路,整体看下来非常简单,这主要得益于流水线这一模型本身非常强大且富有生命力,我们在 Web Service,云计算,以及大数据的流式计算等身上都看到了这一思维模型。七猫客户端 DevOps 流水线的设计就是遵循 Unix 管道的理念,将业务功能封装成独立的原子服务,通过业务流程将原子服务进行串联,从而能够动态的拼装业务流程,快速建立新的流水线。希望通过本文对客户端 DevOps 流水线的设计与实现的介绍,能够给大家的日常开发工作带来一些启发。…
Leo是一款可以快速构建可直接运行的高性能Go应用程序框架,它提供了很多工具,帮助开发者降低搭建分布式或者微服务系统的复杂度,专注于业务开发。目前已全面应用于七猫免费小说推荐引擎服务中,在这种高要求的场景下也检验了Leo的可靠性。Leo这个名字来自于我养的一只叫Leo的猫。…
在使用mysql的时候,发现尽管一张表删除了许多数据,但是这张表的实际占用空间却并没有变小。为什么会如此,本篇文章介绍了这一知识点。…
关于连接池,想必大家耳熟能详。从其定义上来说,连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。简单点来说,就是当我们的程序在运行时,将数据库的连接进行实例化,每个连接当成对象存储在内存中,并且用一个数量大小的池子将其管理起来,当后续需要与数据库进行网络通信的时候再从池子中取出已有且正常的连接对象进行复用即可。因此,其所带来的好处显而易见,比如:1.减少连接的创建时间;2.提高资源的复用性减少资源浪费;3.精简编程模式简化开发模型等…
前段时间我们推荐引擎这边发现一个非常诡异的事情,具体表现为线上k8s每次滚动更新或发版时,都会有大批量请求出现超时,进而触发服务端的p99熔断报警,导致推荐服务发生短暂不可用等情况。接下来这篇文章就来说一说我是如何排查以及解决这个问题的。…
2020 年对于七猫研发团队来说是变⾰的⼀年,这一年中我们完成了敏捷研发团队组建、微服务化、全业务上云等重⼤技术变⾰。在完成这些技术上的变⾰之后,我们的研发⼯作迎来了新一轮的挑战,用⼀句话来总结:如何频繁、快速的发布⾼质量软件?基于这个核心问题,如何有序推进研发中心 DevOps 构成了我们研发效能团队 2021 年的工作重点。…
历时两个多月时间,广告ADX系统从立项、需求分析、设计方案、成本估算、开发对接再到不断优化升级。目前接口已经升级到第三版了,系统已经能够稳定的承受最高11.5万的QPS。当然,这还仅仅只是个开始。接下来就让我来写一点系统开发过程中的一些设计思路和问题排错的过程,希望对大家有所启发。…
服务熔断现已经是微服务稳定运行的不可或缺的利器,服务调用端可以通过熔断机制进行自我保护,防止出现由于调用下游服务的各种异常而影响调用端的业务的情况,并且现在很多功能完整的微服务框架都会内置熔断器。其实,不仅微服务调用之间需要熔断器,在调用依赖资源的时候,比如 mysql、redis 等也可以考虑引入熔断器的机制,做一些适当的熔断降级,来提升系统的稳定性。…
ClickHouse是一款非常优秀的OLAP数据库,特别擅长处理数据分析和汇总等。在一张3000W+的数据表里面,进行`GROUP BY`,`DISTINCT`,`COUNT`等相关汇总操作的时候,对比TiDB,处理速度上达到了15~30倍的提升。…
现代软件系统因体量越来越大,一般所拥有的数据量也越大,并且往往系统间存在着诸多依赖关系,其中数据依赖是一个比较典型的业务场景。笔者日常处理数据依赖的工作内容比较多,所以下面分享两个典型数据依赖案例及相应处理方案。…
Canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到Canal发送过来的dump请求,开始推送binary log给Canal,然后Canal解析binary log,再发送到存储目的地,它的特性使得我们可以简单的应用它通过数据库表数据状态来解耦业务,一方面,通过简单的配置就能实现数据源发布订阅模型,操作简单;另一方面,订阅数据的存储支持多种方式,可满足不同的业务类型。在有相似的场景下,应用Canal能够快速解耦业务,方便扩展,设计出更加高效的架构。…
在我们的开发中越来越多使用grpc服务了,通常grpc使用的是protobuf协议,其优点:性能好/效率高,二进制编码,支持多语言;但可读性却很差,不像json那么直接明了。那么有没有一款工具,能够方便快速的进行开发调试呢?答案是有,还很多,而且我相信总有一款适合你!…