HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

专访吕毅:链家网技术架构的演进之路

  • 2016-07-21
  • 本文字数:4754 字

    阅读完需:约 16 分钟

链家网虽然成立于 2010 年,但是其技术团队却于 2014 年正式创立。此前技术开发采用的是传统模式,每个业务都会单独地重新开发,不仅造成各个模块孤立,并且开发人力投入成本巨大。鉴于互联网时代企业业务发展迅速,原有的传统化方式已经不适用,链家网正式建立技术团队,在原有的传统架构基础上开始了优化工作。

团队对已有的业务进行抽象,将各个业务模块中的公共部分综合出来,据此添加了一层公共的服务层,实现了平台服务化,扩展技术基础能力。此外,链家还重新搭建系统监控并完成日志监控,双级监控完善技术运营能力。目前的技术架构充分满足业务发展情况。InfoQ 就技术架构变迁对链家网平台服务架构师吕毅进行了采访。

受访嘉宾介绍

吕毅,链家网平台服务架构师,负责链家网多个公共服务。云计算浪尖时参与建设国内第一家 PaaS 平台 SAE,移动浪尖时作为初期成员与团队打造了国内 Top3 的 SuperAPP 手机百度,重度垂直时代加入链家网负责平台化服务建设。

InfoQ:谈谈您为什么会选择加入链家?

吕毅: 关于自我成长,相对于前两家我任职过的成熟互联网公司,在我入职时,链家网相对初期。这就预示着链家网这里会有很多挑战,我一直清晰认识到自己是有惰性的,所以我希望找到一家技术挑战多的公司,这样这些挑战会刺激我兴奋、鞭策我成长。在这里的一年,的确验证的当初我的这个想法,刚入职是我与两位伙伴做话务平台项目,不满一年,我们平台架构组已是 8 人的团队,负责着公司 6 项平台化服务,挑战与成长并行,大家都感受到架构设计、技术选型与实现、上下游沟通上突飞猛进的成长。

关于职业选择,我是技术角色,顺应之前的职业发展,我在抉择机会时候还是会选择互联网公司。然而,我将互联网公司分为两类,纯互联网公司与传统企业 + 互联网公司。在纯互联网公司这座大山里,我作为技术角色站在过最好的山头,虽未登顶但也看清了这座山头的风景,转头看,最近些年才被关注的传统企业 + 互联网公司的这片山林,一片荆棘,而我具备的能力可以开垦这片大山,为了追求开垦的乐趣从而来了这里。至于为什么是链家,当时做选择时链家人为我描绘的链家蓝图吸引了我,当时了解到产品整体负责人闫觅之前是百度的高工,这让我也对链家好感增加不少,我想技术出身的 PM 在产品规划上应该会更理性些。也恰巧那会做选择时想咨询下前辈鸟哥意见,鸟哥说他下个月也去链家,这让链家的 Offer 加分不少。

入职前的种种对传统行业的顾虑,在入职后逐渐的全部解除了。这里提供的空间与自由度,管理的扁平程度,都是让我在入职前难以想象的。在链家网,时常在露台碰见闫觅、鸟哥,吐槽吐槽对产品的不快,对公司的发展的不理解,他们都会耐心的解释为何如此,从什么角度考虑做的决策,每次聊完后我都能自我纠正了想法,同时我也乐意将这些解答传递给我们的组员。链家网给予员工充分的空间,在保证自身工作的基础上,我可以与 HRBP 组织录制平台化服务系列课程、与员工发展部规划初级工程师培训、与外部技术社团联络到链家来组织技术活动、与一些公司技术团队做技术交流都得到了大家的肯定与支持。这里有足够的空间,只怕你的想象力不够。

InfoQ:谈谈目前链家网的主要业务及团队规模?

吕毅: 链家网主要业务在很多公开资料中都有谈到,二手房方向是链家网目前的重心,围绕二手房开展的面向业主与客户的链家网、链家 APP,面向链家十万多经纪人的 Link 项目,都是链家网目前的重点业务。链家网目前员工 1000 人,产品技术角色占比达一半。

InfoQ:您提到链家网这两年在架构上做了很多的调整,可以谈谈链家网的架构演进历程吗?

吕毅: 链家网的架构演化的确从未停歇,从技术团队建立至今的两年时间,架构上大致分为两个阶段,如下图:

2014~2015 年技术上关注两件事,一块是将链家集团曾交付外包实现的面向经纪人业务改造为自主研发,另一块是从零打造面向用户的业务链家网与掌上链家 APP(目前已改名为链家 APP),即第一年的技术架构重在业务的建设。

2015 年至今,业务的逐渐成熟,引入了新的挑战。业务方向内的子业务细化伴随着链家新业务的开展,此时迫切希望抽离公共技术部分,避免重复造车的同时也希望由公共服务来支撑好业务线发展,让业务线更好的满足产品迭代。从 2015 年开始,一系列的公共服务的建设,构建成了整体技术架构上的服务层,同时也扩展了公司基础技术能力,并推动着建设起了系统、日志级的监控。

InfoQ:您对目前的架构满意吗?下一步优化的方向是什么?

吕毅: 从技术架构的演化可见链家网成立的两年间,技术架构从无到有、从有到完善,一切都在快速的发展着。我们目前的技术架构是充分满足当前的业务发展情况的。要说对架构是否有不满,的确是有的。如今链家网业务各个方向发展迅猛,技术架构上的压力不小,理想状态是希望技术架构在支撑业务时,时刻游刃有余,但这会是条任重道远的路。

下一步的调整与优化方向,还是配合业务上一起做好服务化。业务层面希望将目前打包在一起的功能逐渐服务化,而技术架构上需要提前调整与优化,提供服务维护、服务治理、服务监控、服务通信等一系列围绕产品服务、技术服务的周边技术支持,这块是明确的方向。然而,一些未知的方向,还得与业务线、管理者们常沟通,不断摸索,按需计划着开展。

InfoQ:服务层的优化已经进行一年多,这过程中有什么经验可以和大家分享的吗?

吕毅: 在来链家网前到现在,算起来的确有一年多在做平台化、公共服务这些事情,伴随着自我成长,感慨的确很多,列三点深刻感受的在这里与大家共勉。

第一,服务源自需求。只有业务需要的才是值得做的,只有多个业务线都需要的,才是值得拿出来做成平台服务的。多去关注业务,寻找业务线研发团队共性部分,才能发现需求,通过与业务线的沟通才能发现做平台服务的价值,所以做平台服务的技术角色切忌闭门造车,只有把自己当做半个业务线的 RD 才能感受到业务线的痛点。

第二,“第三选择”。常见行业内做公共服务的同学与业务线同学有些碰撞,双方各持观点,对一些边界问题拿捏不清。此时大家秉持第三选择,一起寻找更好的解决办法,目标达成一致,问题便可化解。当然第三选择的解决办法用在哪里都是合适的。

第三,服务的解耦。这是平台化服务的基本原则,服务间的解耦、服务内部的功能解耦,都是在日常设计、开发中需要注意的,只有将一块事情拆成多个点,才好做点与点之间的联系,以有限的功能点构建出无限的能力。这是老生常谈的点了,但依然值得再提一遍。

InfoQ:请讲讲你们的日志分析平台架构吧?目前的日志处理流程是怎么样的?处理的日志大概是怎样的数量级?

吕毅: 日志分析平台在前面技术架构图中,属于纵向的监控部分中的“日志监控”环节,主要解决业务模块、服务模块日志字段的数据收集、展示、监控。架构设计引用公开资料中的这张截图来说明。

日志通过 Kafka 收集,根据日志所属 RD 配置的统计、监控规则通过 Apache Storm 实时分析日志,并将结果集数据存储数据库,实时分析期间若触发了监控规则阈值,则触发报警。数据库中的数据可以做实时的数据展示,整套方案可以让研发、测试角色实时查看日志情况,避免了大家日常合并日志文件再做 shell 统计的问题,并提供平台可以持续使用。

目前日志平台每秒处理的 30 万行日志,处理结果的展示与报警延迟在 2s 以内,并且这套解决方案有计划在后续开源,让业内同学低学习成本掌握并构建到生产环境中。

InfoQ:要设计一个高可用、高吞吐的日志平台,您认为需要重点考虑和解决哪几个方面的问题?

吕毅: 设计这样一套日志方案,有以下几点需要关注:数据的收集、数据的处理、数据的存储、数据的展示。

其中数据的收集部分行业内部不少用 flume 采集日志,我们最早期的 beta 版本也是如此,但在我们方案中缓存日志数据的组建 Kafka 在年初版本中发布了 Kafka Connector 功能,实现了类似 flume 能力,故我们上线前就改用 Kafka 全套解决日志收集问题。

数据的处理,因为要求实时性,行业内也有两套方案,Spark Streaming 与 Apache Storm。两者共性很多,但选择 Storm 的原因主要是 Storm 的设计与 Feature 更专注实时运算,而 Spark 做离线的大并发流式处理是不错的,例如流式批运算、图片处理等等。

数据的存储,选型比较多,大家做 DB 选型时需关注企业级日志系统需要有大批量数据写入,特别是业务高峰时期,那么选择一个良好支持高并发写入特性的 DB 即可,我们使用的 HBase。

数据的展示,这块就比较灵活,根据自己需求,从 DB 中选择数据通过组织拼装成格式化数据,配合上前端特效展示即可。

InfoQ:在你们的平台中,日志数据会采集哪些信息?你们是如何统一其他开发人员的日志格式和信息的?

吕毅: 如日志平台的架构图所示,数据的采集基本是全量的,日志文件大部分是研发关注的信息,这些被关注的日志文件都会被收集,用作实时分析计数。

在日志格式这块,我们在接入层做了统一日志格式,故这份日志将会是所有业务的请求日志全集。对于业务模块、服务模块自己的日志,我们会给予建议,但没有强制规定日志格式,这部分有差异的日志格式,会在日志平台中研发角色配置统计规则时,通过正则匹配自助扣取想要的日志字段用作统计、监控。

InfoQ:与日志监控相比,系统级监控对业务层、服务层的监控指标及目的是怎样的?

吕毅:系统监控和日志监控比较,有这么几点差异:

  • 面向人群:
    系统监控,主要面向运维角色,RD 角色关注较少,RD 对于系统监控,更关注报警;日志监控,主要面向 RD、QA 角色,他们关注业务日志某些字段出现的频次、某些值的最大最小值等,同时也可以设置基于日志的业务报警。
  • 数据源:
    系统监控,更多收集 syslog、机器设备数据;日志监控,主要手机业务线自己打的日志内容。

两者互补,在需要了解业务所属的服务器信息时候,在系统监控上查看;想了解业务数据情况时,在这套日志监控平台上看。

InfoQ:链家也是一家从传统公司转型为互联网公司的代表,你认为这中间,最大的挑战是什么?你有什么经验分享?

吕毅: 传统公司转型互联网,我认同链家集团老总发表的观点,这样的转型并不是将原有业务打死,全部线上化,而是传统公司加入互联网属性,是传统业务与互联网业务相结合的过程。链家网闫觅也曾说过“这是一次人文革命”,互联网更多的是一个工具, 一个新型的商机渠道, 一个提升效率的系统方案。

那么链家在做线上线下结合的过程中,最大的挑战应该有两点:传统业务的梳理与互联网化改造,线上业务与传统业务的融合。

传统业务的梳理与互联网化改造,链家网从创立之初就在践行,至今仍是重点工作之一,可见难度并非一般。在几次与经纪人业务侧的 PM 交流后,深感房产交易的复杂性,就北京而言交易中的一个环节可能会有 30 多种角色参与,全国各个城市政策不一,更是难上加难,而链家网在努力优化流程,给业主、用户提供清晰明了的房产业务体验。这方面的挑战折射在技术上,就是复杂的业务流程控制、风控体系、数据安全等技术难点。

线上业务与传统业务的融合,存在于在 To C 业务与 To B 业务存在交集的部分。To C 业务是我们所长,但如何让还未进入房产交易流程内的普通用户,快速了解链家房产信息、交易流程,让普通用户在有需求时第一时间通过链家网、掌上链家 APP 发起沟通、交易,这都是挑战。折射在技术上就是如何保证好线上用户如何快速、满足需求的查找到信息、如何与经纪人快速建立有效沟通、如何沉淀意向客户并建立起关系等等的技术问题。

作为链家网平台架构组负责人,与组内 7 位伙伴一起,对技术追求极致的同时,我们也时刻关注着业务线的难点、痛点,希望通过技术手段提供支持与帮助,我想所有链家网角色的信念是一致的:让房产交易不再难,提供诚信便捷的服务体验!


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-07-21 19:006727
用户头像

发布了 58 篇内容, 共 43.8 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

MongoDB的原理、基本使用、集群和分片集群

神农写代码

哈希值游戏DAPP开发|区块链哈希值竞猜游戏开发

薇電13242772558

区块链 哈希值

Substrate Builders Program | 了解波卡生态云计算平台与最先进的查询节点框架

One Block Community

区块链 Substrate 波卡

C/C++程序员黄金方向-音视频基础知识和ffmpeg编译

玩转音视频技术

HLS SRS 音视频开发 流媒体开发 C/C++程序员

内存是什么?一文搞懂内存是怎么实现的

简说Linux内核

内存管理 Linux内核 嵌入式开发 设备驱动

从单机定时到多层分发

程序员小航

Java 定时任务 XXL-JOB

mass哈希娱乐游戏Dapp开发搭建

薇電13242772558

区块链

Tomcat:应用加载原理分析

IT巅峰技术

Tomccat

crmeb Java 项目打包可运行jar文件详细教程

CRMEB

Go 学习笔记——Only For

为自己带盐

Go 4月月更

音视频&流媒体的原理以及基础入门知识

玩转音视频技术

Linux SRS 音视频开发 流媒体开发

模块2作业

KennyQ

2022第13周-技术分享记事

李印

随笔 工作经验

关于数据湖几个问题详细剖析

五分钟学大数据

数据湖 4月月更

框架中的自定义网关

Rubble

4月日更

微信朋友圈的高性能复杂度

锎心😌😌😌

Spring定义BeanDefinition

IT巅峰技术

架构实战营 第 6 期 模块二课后作业

火钳刘明

#架构实战营 「架构实战营」

微服务分布式事务处理

俞凡

架构 微服务

浅析基于Linux下的调度类分析(代码演示)

简说Linux内核

内存管理 Linux Kenel Linux内核 进程管理 嵌入式开发

Go 实现 WebSockets:2. 如何在 Go 中创建 WebSockets 应用程序

宇宙之一粟

Go 语言 web socket 4月月更

LotusDB 设计与实现—1 基本概念

roseduan

Go 数据库 存储

全链路压测(九):容量评估和容量规划

老张

性能测试 全链路压测 稳定性保障

Linux驱动开发-编写NEC红外线协议解码驱动

DS小龙哥

4月月更

在终端中使用 GitHub Personal Access Token 访问仓库

信号量

茴字有四种写法,HTAP呢?

MatrixOrigin

数据库 MatrixOrigin MatrixOne 矩阵起源 超融合数据库

对话核心开发者,波卡的EVM+最新技术分享活动回顾

One Block Community

区块链 Substrate EVM 波卡

CRMEB多商户后台前端代码打包并更新打包的代码到项目里面教程详解

CRMEB

手写实现分布式锁

Linux服务器开发

分布式锁 协程 定时器 后端开发 Linux服务器开发

网络安全之红蓝对抗实战

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

一文读懂Linux内核进程调度原理

简说Linux内核

内存管理 Linux内核 进程管理 驱动开发 嵌入式开发

专访吕毅:链家网技术架构的演进之路_架构_木环_InfoQ精选文章