是的,为了更好的支持微服务,我们从PHP迁移到了Go

本文讲述了作者团队在面临微服务架构时,从PHP迁移到Go的决策过程。他们发现PHP在微服务场景下存在较高的启动开销和容器化的复杂性,而Go则凭借其性能优势、轻量级部署和强大的工具链成为了首选。在数据库选择上,团队最终决定继续使用MySQL,因为其在模块化微服务架构中仍能提供良好的性能。
摘要由CSDN通过智能技术生成

起初,我们认为坚持一门熟悉的语言是负责任的事情——我们是一个小团队,却已经冒了两次险:切换到微服务和完全重写我们的 Web 应用程序(高流量游戏平台)。


微服务和 PHP:概念性错配

我们熟悉的语言是 PHP,它支撑了我们现有的应用程序,有两个模糊的论据可以支持我们继续这么做下去:

  • 我们熟悉 PHP,它开发很快题。为什么要放弃对我们有用的东西?

  • 市面上有很多 PHP 开发人员。 选择 PHP 让我们更容易扩充团队。

这听起来非常合理,但是当我们清楚 PHP 真的不是我们的正确选择时,我们很快就放弃了这些想法。

1、PHP 具有较高启动开销

PHP 曾经被设计成(或长成)为运行短命令的脚本,因此持久并不是这个语言适合支持的特性。这意味着对于每个请求,数据库连接和类都必须重新被实例化,这增加了不必要的延迟开销。

当然熟悉这方面读者都知道,有解决方案,例如通过 PHP-FPM 或 Apache 的连接池或 C 绑定等方法,可以支持与 Redis 的持久连接。

但是,由于我们追求高性能,这些依赖使我们对选择 PHP 作为合适的工具存在疑虑。

2、容器化 PHP 是一个雷区

PHP 需要 Nginx 和 PHP-FPM(或类似工具)来实现进程和连接池管理等功能。这意味着对于每个部署的微服务,PHP-FPM 和 Nginx 也必须一起运行。这浪费了资源,也降低了扩展的效率。

还有优化配置的问题。优化单 PHP 实例已经很头大了,因为需要了解和配置 PHP,PHP-FPM 和 Nginx 这一堆组合,我们无法想象最终在弹性的 Kubernetes 环境中配置多个 PHP 栈的痛苦情形,您完全不知道在同一台机器上运行了哪些服务。

微服务器的复杂性在架构中:您正在处理一个由简单服务组成并且相互之间作用的复杂系统。既然我们已经致力于这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值