贝壳产品技术

其他

贝壳找房一站式报警平台建设实践

背景介绍KeMonitor是贝壳找房服务端一站式监控报警平台。2018年~2020年是业务的快速发展阶段,在这期间陆陆续续研发了基于CAT、Prometheus、ELK、Skywalking、以及部分自研专有数据监控平台,大大小小攻击十余个监控系统,各系统均自行建设了各自的报警能力。报警发生之后,一线研发同学就会同时打开多个平台,去看基础设施监控、应用监控、日志等,五花八门的报警也给用户带来了最多的痛点。在此背景下具有一站式体验的KeMonitor平台就应运而生了。在2021年,由贝壳找房人店技术中心牵头,联合了多个部门,针对在报警环节进行了系统性的治理,治理报警的过程中也沉淀了一套完善的报警中心以及配套的报警响应SOP机制,下面会为大家详细介绍整体的建设经验。问题及挑战在2020年年底进行了一次面向公司范围全体研发的用户调研,用户的诉求主要是希望项目组牵头对公司范围的研发侧同学日常收到的报警进行系统性治理。分析用户调研问卷的问题集合,一类是是报警太分散,缺少一站式平台化的能力来系统性的根治报警漏报、报警风暴、误报等问题;另外一大类问题就是在研发习惯层面对于如何补齐监控项以及报警如何治理的经验的缺失。平台治理能力问题主要是涉及到报警的一系列“灵魂拷问”,该如何解决?报警入口/触达太分散,报警不统一五花八门报警太多,每一天,需要很大的精力来响应报警关键的报警漏掉了,没发对人,也没有人及时跟进发给我的的报警,本身就不合理,并不适合我的系统特点,我应该如何治理?技术运营层面问题如何快速推进大家补齐监控?如何形成一套标准的报警处理SOP机制?解决思路报警治理需要按照事前、事中、事后进行全生命周期的管理。事前,主要关注报警的完备度,要尽可能全的补齐监控,这一点我们在今年的健康分技术运营活动,重新梳理定义了监控的范式,建立了一套度量机制来度量报警的完备程度。事中,主要是指报警发生后,要第一时间进行处理——跟进/解决、止损恢复、信息同步通报,也就是对于关键的报警,要做到“件件有着落,事事有回音”,这样才能避免问题处理不及时,转化成故障。事后,主要是针对已经发生的报警,进行总结、复盘解决隐患,持续关注,形成长效机制。基于一线业务研发团队实践中的总结,监控/报警的成熟度,分为三个阶段:初阶:主要对应完善监控/报警,提升覆盖面进阶:主要对应报警规则补全之后,需要对于已经发生的报警,保持关注度,同时要及时识别出来报警的有效性,及时消灭无意义的报警,研发资源是宝贵的,要避免把过多的精力花在处理无意义/无关紧要的报警上。稳定:监控/报警已经体系化,能够召回绝大多数问题,也是一个成熟技术团队良好技术习惯养成的标志之一。对应前两个阶段已经做到位了,系统监控范围已经足够完备,团队内各成员已经养成了良好的技术习惯。同时,组织结构以及系统是会不断迭代演进的,因此还需要持续治理。详细的报警分阶段治理以及报警成熟度模型,如图1所示:图1
2022年2月18日
其他

贝壳&掌链64位架构适配实践

++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码;2.so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快;3.so内存分配无限制Dalivik
2021年9月17日
其他

端到端模型在贝壳经纪人流失预警场景的实践

近年来,深度学习算法在各领域大放异彩,各种端到端模型也日趋成熟。特别是在推荐算法领域,端到端模型几乎成了标配。端到端模型可以将特征工程融入到模型中,由模型自动化提取有效特征;也可以将各类网络结构融合到一起进行训练,根据数据特点进行深度拟合。本文探讨在贝壳经纪人流失预警场景下,如何将端到端模型应用于经纪人流失预测,并通过优化模型结构提升排序性能。1.
2021年7月8日
其他

一种按照library的维度进行Android包大小分析的方法和实践

在打包过程中,我会给app/build.gradle文件注入上面gradle脚本,这样做的好处是省去app接入的成本。知道这些文件的路径之后,我会通过python打包脚本上传这些文件到maven中。
2021年3月6日
其他

贝壳APP Top Experience系列 | Android方法耗时统计工具

此页面主要为展示某个线程的方法调用耗时信息或某个方法中全部子方法的调用耗时信息,支持按照调用顺序展示或按照耗时排列展示,点击当前方法的item可进入方法调用栈信息进行调用链路的展示。页面如下所示:
2020年11月27日
其他

贝壳用户偏好挖掘的思考与实践

minus以及用户序列Item与目标Item成对输入FCs的方法,计算用户Seq中每个节点相对于目标Item的权重,内积用户Seq的Embedding从而实现目标影响用户编码的目的。图3.4
2020年9月17日
其他

DMP平台在贝壳的实践和应用

distinct操作算法模型线上化,挖据算法离线计算标签的成本非常高,经常会到下午才产出数据,将模型线上化后,离线只用训练模型,通过在线API服务来加载模型和用户各种特征数据实时给出挖据的结果3.4
2020年6月24日
其他

使用SSE2指令集加速字符替换

/proc/cpuinfo来看cpu支持的SIMD指令集:可见我的这个CPU支持mmx,sse,sse2,ssse3,sse4.1,sse4.2,avx.回到正题,我们知道SIMD
2020年3月10日
其他

海神平台Crash监控SDK(Android)开发经验总结

作者伏牛(企业代号名),目前负责贝壳移动端业务架构组Android基础库开发相关工作。海神平台是我们自主研发的一个移动端质量监控平台,从去年7月份开始至今,已陆续上线了Crash监控、ANR监控、网络监控、自定义错误等功能,目前已接入了公司内10余款APP(不区分Android和iOS平台)。本文将主要分享Android端在开发Crash监控SDK过程中的一些实践和经验。希望大家能有所收获。一、Java层异常捕获系统提供了一个钩子:Thread.setDefaultUncaughtExceptionHandler;我们通过设置自定义的UncaughtExceptionHandler,就可以在崩溃发生的时候获取到现场信息。注意,这个钩子是针对单个进程而言的,在多进程的APP中,监控哪个进程,就需要在哪个进程中设置一遍ExceptionHandler。//
2019年8月29日
其他

2019大前端秘籍:贝壳找房多端提效和性能质量优化实践

另外,由于图片压缩算法一般是余弦变换和小波算法,所以使用GZIP仅仅了压缩6.3%。因此建议对于图片的压缩可以使用消除和替换图像、对矢量图和光栅图进行优化,或者使用有损压缩和无损压缩等形式进行优化。
2019年6月28日
其他

用LiveData实现新的事件总线

作者乘风(企业代号名),目前负责贝壳装修项目Android研发工作。1背景在Android系统中,我们开发的时候不可避免的会用到消息传递,页面和组件之间都在进行消息传递,消息传递既可以用于Android四大组件之间的通信,也可用于主线程和子线程之间的通信。从一开始Android书本中学习的Handler、BroadcastReceiver、接口回调等方式,到我们现在广为使用到的greenrobot家的EventBus,Square家的Otto,还有依托响应式编程代表RxJava实现的RxBus,最近在浏览美团技术博客时发现@liaohailiang基于Android
2019年3月21日
其他

iOS缓存设计之YYCache

作者方丈山(企业代号名),目前负责贝壳找房装修平台移动端iOS研发工作。1前言来公司一段时间业务有缓存需求,翻看代码没找到适合的,于是结合YYCache和业务需求,做了缓存层(内存&磁盘)+
2019年2月21日
其他

设计模式之禅-设计原则

作者方丈山(企业代号名),目前负责贝壳找房装修平台移动端iOS研发工作。本篇是读《设计模式之禅》一书有感而写,之前对设计模式概念比较模糊,看一些开源库源码设计也只是看到些架势,通过学习后回过头细想,一些背后的设计思想才慢慢浮出水面。书中虽是用java语言做的示例(插图),但是原理相通,iOS童鞋也不必担心,基本能看懂,有些和OC差别较大的名词也做了注释,不影响对原则的理解!本书包含:六大设计原则、23种设计模式、各模式间VS、
2019年1月17日
自由知乎 自由微博
其他

Athena-贝壳流量实验平台设计与实践

作者雏鹰(企业代号名),目前负责贝壳找房增长方向AB实验平台研发工作。1引言随着贝壳找房业务的不断增长,精细化运营显得尤为重要。为了保证每一次迭代,每一个方案能够真正得到用户的认可,为贝壳带来有效的商机转化率,我们就不得不理性对待每次功能上线,反复对比找到产品方案中的不足加以改进。基于这种需要,我们推出了贝壳找房AB实验平台(Athena)(以下简称ab平台)来为大家做产品方案的优化测试,利用实验得到的转化数据为各个业务线优化产品方案提供科学的依据。2AB实验为同一个目标制定两个方案(比如两个页面),将产品的用户流量随机分割成
2019年1月10日
其他

如何把2000+行代码的详情页重构到不足200行

作者公台(企业代号名),目前负责贝壳找房新房B端Android。最近在做重构,将一个2000+行代码的详情页重构到不足200行。200行的代码实现2000+行代码的的业务逻辑?!当然不是了。我只是把原本耦合在一个页面的业务逻辑合理有效的拆分到多个模块中了。1背景传统的MVC模式,业务代码都堆积在Activity中。随着业务需求的复杂,我们的页面文件代码量越来越多,类似房源详情这种可以达到2K+行。例如Link的新房详情页面,2182行(单onClick回调方法占据了265行)。这样的代码存在着诸多问题,耦合性高,可读性差,维护成本非常大。本次采用新的架构方法(MVP+模块化),可以有效的解决以上问题。MVP模式解耦合。模块化职责分明,大大减少单文件代码量,有效提升可读性,降低维护成本。2架构方案基于MVP的设计模式,组合模块化(Part&ViewPart)。3方案概述3.1
2018年11月30日
其他

贝壳找房解决全局悬浮窗问题

推荐使用添加View的方式替代WindowManager。感悟:从技术角度多对标别的产品,找出产品或技术上的亮点,想想自己实现这个功能该怎么做,然后再看看别人怎么做的,取长补短。
2018年10月26日
其他

贝壳分布式调度框架简介

作者奇佐(企业代号名),目前负责贝壳找房java后端开发方向相关工作。1背景随着贝壳的业务功能的不断扩大,具有复杂功能的单体应用随之进入了微服务开发的迭代模式。项目需要作业调度模块是个常见需求,在之前单体系统中,集成了quartz完成作业调度模块,因为单体应用集成一次后,单从技术层面看几乎没有新的工作量,而且整体还是比较稳定的,但是当单体应用进行微服务拆分后,很多微服务项目都需要集成作业调度模块,常规的一些作业调度实现,已经无法满足公司级的微服务项目拓张,一种轻量级、分布式、统一管理的作业调度框架势在必行。2需求2.1
2018年10月19日
其他

ClickHouse Practice

作者阿苏勒(企业代号名),目前负责贝壳找房增长策略方向的相关工作。1引言用户行为分析在互联网产品运营和用户增长中起着指导性的作用。例如通过对比不同渠道的用户留存率,可以针对性的调整推广策略,获取高质量用户。在贝壳找房,我们建设了自有的用户行为分析产品——罗盘(compass.data.lianjia.com)。在开发过程中,我们使用ClickHouse作为查询引擎,支持了十亿级日志数据上的秒级自定义分析。下面结合近半年的实践经验,与大家分享一下ClickHouse这款很棒的查询引擎。2介绍ClickHouse是什么ClickHouse(https://clickhouse.yandex/)是一个面向OLAP的列式数据库,源自俄罗斯最大的搜索公司Yandex,是Yandex的工程师在实现其Web分析服务Metrica(类似google
2018年9月28日
其他

快速搭建tensorflow 线上服务

作者爱贝(企业代号名),目前负责贝壳找房图像处理方向的相关工作。1前言在这篇tutorial中,我将主要介绍如何freeze一个训练好的tensorflow模型并部署成webserver,webserver
2018年9月28日
其他

贝壳找房安卓端用Glide替换Picasso

高瑞,贝壳找房Android工程师,目前负责贝壳找房app安卓端研发工作。1现状近期贝壳找房安卓app在测试时发现报了OOM异常(即内存溢出),主要原因是图片占用内存空间过大。操作步骤:打开贝壳找房,设置城市为“徐州”,
2018年9月21日
其他

罗盘-贝壳流量分析平台

李世昌,贝壳找房资深大数据开发工程师,目前负责增长相关平台的架构设计和研发。1背景随着贝壳的不断发展,特别是今年年初专门成立了增长线,数据化思维和精细化运营的诉求越来越强烈。各个业务方急需了解自己系统的流量情况,从数据出发优化自己的产品,从而留住用户提高转化;而作为公司高层需要知道集团的整体流量情况,特别是比较核心的月活、商机转化、用户留存和渠道推广等情况,及时作出战略部署和调整,保证公司保持高效稳定的增长。在这样的大背景下我们搭建了一套流量分析平台-罗盘,为集团和各个业务方提供统一、权威的流量数据出口。2面临的问题1.日志埋点格式不统一,历史存在多套埋点标准,有些业务方还有自己的日志埋点规范,如何统一标准,兼容历史数据是我们面临的第一个问题;2.统计口径不一致,每个业务都有自己的统计口径,数据互相不认可,而从集团层面很难拿到整体的流量数据;3.每天TB级别上报数据,各种复杂的数据分析场景,在很多场景下需要保存明细数据才能分析,如何存储明细数据和分析数据是系统架构设计的一大挑战。3总体设计方案从纵向看分为数据需求、数据接入、数据处理、数据存储和数据分析五个过程,从横向能看到数据在每个环节中具体的流转过程,下面从纵向的角度展开介绍一下每个过程。4数据需求数据需求是整个环节的第一步,首先需要有一套全公司标准的埋点规范,并通过公司高层的推动下在各个业务方落地,而规范的落地需要有系统的支撑,埋点管理模块承担了所有埋点信息的申请、埋点文档的生成,辅助业务实现标准化的埋点。5数据接入主要负责快速接收业务方根据埋点需求上报的日志数据,其中Dig服务接收APP、PC、M站发送数据,通过lua程序将数据落地到kafka,对于APP端为了性能和节省流量会批量打包上传日志文件,Dig还会负责日志文件的解压。6数据处理1.首先通过spark任务消费Dig落地的kafka数据,做格式的清洗、历史日志格式的转换、字段的解析,并根据分析需求衍生出更多的维度,比如手机型号、品牌等,还会做日志数据格式的校验,对于不合法的数据进行统计后落地到DB中提供查看错误信息;2.spark清洗后的kafka数据会通过Hangout组建实时落地到ClickHouse提供实时数据分析的能力,Hangout是类似Logstash的日志收集组件,目前支持秒级的数据实时写入;3.spark清洗的数据也会落地到HDFS,用于离线仓库处理,罗盘目前能解决大部分公共的分析需求,但是对于部分个性化的需求还是需要通过hive
2018年8月31日
其他

精细化曝光策略

用于执行卡片的曝光埋点函数。在监听RecyclerView滑动事件时得到第一个可见位置、最后一个可见位置,根据参数判断是上滑或下滑,通过判断ViewHolder的itemView
2018年8月24日
其他

Spark Streaming实时计算在链家网的实践

spark.yarn.maxAppAttempts值不能超过hadoop集群中yarn.resourcemanager.am.max-attempts的值,原因可参照下面的源码或者官网配置。
2018年3月9日