热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从PHP迁移到Java后又返回:不玩微服务啦·allegro.tech

五年前,我们开始对Allegro平台进行重大技术改造。从那时起,我们已经从一个单片的1000万行代码PHP应用程序转变为一个800多个基于JVM的微服务系统。然而,这种新的架构结果



五年前,我们开始对Allegro平台进行重大技术改造。从那时起,我们已经从一个单片的1000万行代码PHP应用程序转变为一个800多个基于JVM的微服务系统。然而,这种新的架构结果却是一个死胡同,我们再也无法承受。今天,2019年4月1日,我们宣布回到我们的源头,希望在今年年底之前将所有JVM微服务重写为单个PHP应用程序。

现在的情况
经过5年的微服务,我们现在有800多个服务在生产中运行。其中大多数是用Java或Kotlin编写的,基于Spring Boot。我们每天都会制作数十种产品。然而,这些技术指标并未捕捉到我们的系统变得多么复杂。为了保持在竞争激烈的电子商务市场的顶端,我们需要一些根本简单的东西。我们需要PHP的简单性和可靠性。

改变的理由
我们目前的JVM微服务架构最令人失望的是单个功能落实到生产中到为用户服务正常运行需要的时间。我们主要归咎于Java和Kotlin的静态类型。它使代码冗长,并鼓励创建许多特定于域的类型。由于电子商务的上市时间很短的特点,我们开始重视PHP的表现力。

此外,PHP社区不太关注自动测试。因此,工程师花费更少的时间在编写测试代码上,而花更多的时间编写实际最终生成的代码。根据我们的经验,技术债务就像金融债务一样 - 只要你没有还清债务之前就有动力,这不是问题。
金丝雀部署现在是标准,PHP通过设计实现了这种做法。它就像通过SSH访问生产机器和修改终端中的文件一样简单。编写代码后,最终用户可以进行更改。这个敏捷过程允许我们的工程师在将更改提交到主存储库之前快速验证他们的想法。可以使用相同的过程在生产中应用快速修复。Java和Kotlin没有给我们这么强大的工具。
放弃微服务架构以支持monolith也将大大简化我们的基础架构。这意味着需要管理的应用程序更少,因此需要更少的业务流程,并且运行系统的人员也更少。这意味着更多的工程师正在进行实际的高效工作 - 为我们的网站制作表格并为我们的API制作JSON。

迁移
我们决定从小做起。3个月前,我们选择了7个工程团队,他们正在将他们的JVM微服务转换为单个PHP应用程序。我们通过为他们提供专门的培训来帮助我们的工程师适应新技术,旨在摆脱JVM世界的不良习惯。
其中一个培训课程我们称之为测试排毒。我们发现许多Java和Kotlin工程师都沉迷于自动测试覆盖他们的代码,发现很难不参与强制性的测试编写。在测试排毒会话期间,他们练习在没有单个测试用例的情况下创建大量代码,并要亲眼看看有无任何不好的事情发生。领导人需要确保所有工程师都能获得他们所需的支持。
我们还通过为工程师组织团队冥想,帮助从微服务转变为单片架构。它使他们能够融入他们在日常工作中迫切需要的团结和团结精神。
整体而言,迁移进展顺利。我们在前3个月内迁移了35个微服务,很快将确保每个工程团队采用新方法。

积极的影响
我们已经看到在新架构中工作对几个团队产生了很多积极影响。首先,让大量工程师投入一个存储库有助于将责任传播到我们的文化中。这导致工程师不会过分关注他们的产品并使他们保持放松和高效。
我们的工程师也变得更有效率,因为他们现在可以在像vim或emacs这样的轻量级编辑器中开发代码,而不是使用像IntelliJ这样的内存消耗工具。这允许他们在同时打开需要内存的Slack通信器的同时进行编码!
我们的用户似乎也对这一变化感到满意。他们过去常常每周都有几个新功能。现在他们每月获得一次稳定版本,这意味着更少的认知负担和安全感。我们希望将来能够在更长的迭代中发布。



最后,通过采用在初创公司中如此普及的PHP,我们希望证明,当我们说我们拥有创业文化时,我们的确意味着它。

结论
我们已经开始回到PHP monolith,并对结果感到兴奋。我们相信这将成为一种趋势,因为越来越多的公司对微服务和JVM语言感到失望。随着谷歌致力于支持PHP云功能的传言,PHP monolith似乎是未来的技术选择。​​​​​​​

推荐阅读
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • MVVM架构~mvc,mvp,mvvm大话开篇
    返回目录百度百科的定义:MVP是从经典的模式MVC演变而来,它们的基本思想有相通的地方:ControllerPresenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模 ... [详细]
  • PHP图床源码:集成化图床管理系统解决方案
    本项目提供了一套集成化的图床管理系统解决方案,适用于需要高效管理图片资源的场景。系统结构简洁,无需复杂的后台支持。主要文件包括 `huluxia.php`、`index.html`、`inews.php`、`kw.php` 和 `zz.php`,每个文件都承担了特定的功能,确保系统的稳定运行和易用性。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 如何使用Python高效绘制矩形图形
    本文详细介绍了如何利用Python的Turtle库高效绘制矩形图形,适合初学者快速上手。通过具体示例代码,帮助读者理解Turtle库的基本绘图方法和技巧,同时探讨了在不同应用场景中绘制矩形的实际操作,为后续复杂图形的绘制打下坚实基础。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • 如何利用Git实现高效的多人协作开发(远程仓库应用实例)——Ares Zhao
    Git作为一种分布式版本控制系统,每位开发者都是本地仓库的管理者。然而,为了实现团队间的高效协作,需要将本地的开发成果推送至远程共享仓库,以便其他成员能够同步更新。本文将以GitHub为例,详细介绍如何通过设置和使用远程仓库,实现多人协作开发的最佳实践。 ... [详细]
  • 在SpringBoot多模块Maven项目中,经常会遇到一个启动模块无法访问其他模块中的静态资源的问题。本文首先详细描述了该问题的具体表现,然后从配置文件入手,探讨了可能的原因,并提出了一种通过调整`application.yaml`配置来解决这一问题的有效方法。此外,还介绍了如何通过优化项目结构和使用Spring Boot的静态资源路径映射功能,进一步提高资源引用的灵活性和可靠性。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
author-avatar
Edwin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有