特鲁里亚如何开始偿还其技术债务-王其杉博客|程序员|科技新闻
每个软件公司都知道,随着时间的推移,随着代码老化和工作区建立在工作区之上,代码库会变得膨胀。随着时间的推移,要摆脱技术债务变得越来越困难。要避免这种现象确实是不可能的,但在某种程度上,公司意识到债务太大,以致于限制了他们构建新功能的能力。这正是Trulia在2017年面临的问题,当时它开始偿还债务并使其建筑现代化。
Trulia是一家房地产网站,成立于2005年,就技术而言,是永恒的。该公司于2012年上市,并于2014年以35亿美元被Zillow收购,但在Zillow的保护下继续作为独立品牌运营。它明白,自工程开始思考这一点以来的12年里,技术上发生了很大的变化。该团队知道它有一个庞大的、单一的代码库,这抑制了更新站点的能力。
虽然他们试图将一些新的功能作为服务推出,但它并没有真正使站点变得更加灵活,因为这些服务总是必须与单一的中央代码库联系在一起。开发团队知道,如果要摆脱这个编码陷阱,就需要彻底检修。
头脑风暴大变革
正如您所期望的,这样的过程不会在一夜之间发生,需要几个月的时间来计划和实施。这一切始于2017年,当时公司与整个工程团队举办了他们称之为“创新周”的活动。一组工程师想出了解决这个问题的方法,但最受关注的是一个叫做“项目岛”的方法,它把站点的不同部分分解成独立运行的编码岛。
这听起来很简单,但实际上它涉及到将整个代码库分解为服务。他们将使用next.js和react来重建前端和graphql,这是一种开源图形数据库技术来重建后端。
Trulia的工程副总裁Deep Varma指出,作为一家成立于2005年的公司,该网站建立在PHP和MySQL上,这是从那时起两种流行的开发技术。瓦尔玛说,每当他的工程师对站点的任何部分进行更改时,他们都需要做一个完整的系统发布。这造成了一个主要的瓶颈。
他们真正需要做的是转移到一个完全现代化的微服务体系结构中,该体系结构允许工程团队以连续的交付方式独立工作,而不会破坏任何其他团队的代码。这就是岛屿的概念开始发挥作用的地方。
河流中的岛屿
这些岛屿实际上是微服务。每个人都可以与一组中央公共服务进行通信,如身份验证、A/B测试、导航栏、页脚——所有迷你代码库都需要的部分,同时允许构建这些孤岛的团队独立工作,而不需要每次添加新元素或更改某个内容时都进行大幅度的重建。
库辛岛。塞舌尔。照片:Martin Harvey/Getty Images
当团队意识到必须在旧系统仍在运行的情况下编写新的部件时,这种彻底检修的严酷现实成为了焦点。在该公司描述这一努力的一段视频中,一位工程师将其比作在飞行途中更换747的引擎。
瓦尔玛说,他并没有立即尝试做每件事,因为他需要看看这些岛屿的方法是否会首先在实践中起作用。2017年11月,他召集了第一个工程团队,到1月,该团队已经构建了应用程序外壳(通用服务部件)和一个微服务岛。当概念验证成功后,瓦尔玛知道他们在做生意。
建造群岛
建造一座孤岛是一回事,但建造一条连岛又是另一回事,这将是下一步。到去年4月,工程部已经显示出足够的进展,他们能够向高级管理层展示整个想法,并推动更复杂的项目向前发展。
岩石群岛照片,帕劳,密克罗尼西亚:J.W.Alker/Getty图片
首先,它与next.js开发团队进行了一些工作,以使开发框架按照他们想要的方式工作。瓦尔玛说他引进了下一个JS团队和他的工程师一起工作。他说,他们需要弄清楚如何将各个岛屿连接在一起,并解决不同服务之间的依赖关系。下一个JS团队实际上改变了Trulia的开发路线图,加快了这些需求的交付,理解到其他公司也会遇到类似的问题。
到去年7月,该公司发布了社区,这是该网站上第一个完全独立的岛屿功能。最近,它将市场上的房产转移到了岛上。正如其名称所暗示的,场外物业是指包含不再上市的物业信息的页面。Varma说,这些页面实际上占了公司流量的很大一部分。
尽管瓦尔玛没有透露目前有多少网站被转移到了岛上,但他表示,目标是在2019年将大部分网站转移到新的平台上。所有这些都表明,对一个复杂场地的彻底检修并非一朝一夕就能完成,但Trulia正在采取措施,从2005年创建的原始系统转移到一个更现代、更灵活的由岛屿创建的建筑。它可能在2018没有完全偿还它的技术债务,但它为奠定这一基础奠定了很长的基础。
亚特兰蒂斯为期两年的云之旅