ホームページ  >  記事  >  バックエンド開発  >  PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。

PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。

藏色散人
藏色散人オリジナル
2022-01-18 14:13:244134ブラウズ

はじめに

PHP は、特に Web プログラムの開発において幅広い用途に使用されています。最新の Wikipedia 統計によると、2013 年 4 月には、PHP はさらに多くのアプリケーションにインストールされています。 W3Techs のレポートによると、2021 年 9 月の時点で、Web サイトの 78.9% が PHP を使用しています。したがって、PHP は、少なくとも Web 開発の分野では世界でナンバーワンの言語です。これは冗談ではありません。

技術の選択に関して、PHP は主に LAMP (正式名は Linux apache mysql php) または LNMP (正式名は Linux nginx mysql php) を使用しており、この成熟した安定した技術フレームワークが PHP Web 開発を促進します。エコシステムの繁栄とビジネスの成功。

PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。

従来の開発モデルでは、開発者自身がさまざまなソフトウェアをインストール、保守、アップグレードする必要があります:

  • エンタープライズ ユーザーの場合、ビジネス量が増加する場合、または運用環境の安定性と可用性を確保するために、ロード バランシングの使用は避けられないオプションです:

PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。

現時点では、PHP 開発者やオンライン運用保守の学生は、さらに多くのことを懸念しています:

  • 追加の実稼働マシンはすべて再インストールする必要がある 関連ソフトウェア、同じ nginx 構成を作成し、 php-fpm 設定を行い、各運用マシンのセキュリティ更新を維持します。

  • ##開発されたアプリケーションに新しい拡張機能が必要な場合は、各マシンを追加および展開するたびに手動で更新する必要がある場合があります

  • 業務の変化に伴いロードバランサがバージョンアップし、次のワーカーマシンがハングアップする運用保守方法

  • 対処方法リソース利用率を向上させるためにビジネスの山と谷を調整する

  • ...

  • 企業の場合プロジェクト チームに多数の開発メンバーがいるユーザーの場合、開発ごとに NLP がインストールされた Linux マシンを開発およびテスト マシンとして構成する (または複数人でマシンを共有する) 必要はありませんか?

  • あなたが Web サイトの開発とホスティングを提供する ISV、アウトソーシング会社、または新興企業で、私の顧客が中小企業のポータルである場合、バックエンドを改善するにはどうすればよいですか?マシン リソースを活用し、カスタマイズされたサービスをより適切に提供しますか?

  • 学生であるか、PHP 開発を学ぶ準備をしていて、ローカルに Windows コンピューターしかない場合、学習用の LNP (Linux Nginx PHP) 環境をほぼ無料で直接入手できますか?

  • ...

これらの質問をもとに、サーバーレスがこれらの問題点をどのように解決するかを見てみましょう。

PHP とサーバーレスの出会い

サーバーレスとは​​何ですか?

サーバーレス = Faas (サービスとしての機能) Baas (サービスとしてのバックエンド)、2 つの図を通して関連する概念をすぐに理解できます:

  • 従来のモード

PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。

  • サーバーレス モード

PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。#写真の CDN と OSS は BaaS サービス、FC はカスタム関数ロジックを備えた FaaS プラットフォームです。この比較を通じて、FaaS の機能と利点をすぐに理解できます。

#ビジネス コードの開発に集中して、対応するロジックを作成するだけで済みます

  • 究極の柔軟なスケーリング、サーバーの管理は必要ありません

  • 従量課金制、各通話はミリ秒単位で請求されます

  • ##...
  • この記事で後述するサーバーレスとは​​主に FaaS を指します次の図に示すように、いくつかのコード行が書き込まれ、クラウド ベンダーの FaaS プラットフォームに保存されると、柔軟で可用性の高い Web API が完成します。
  • PHP とサーバーレスの融合

    PHP は、Alibaba Cloud の Function Compute、AWS の Lambda (カスタム ランタイム間接サポート経由) などの主要なクラウド ベンダーの FaaS である開発コミュニティにとって重要な言語です。 、Tencent の SCF などが PHP 言語のサポートを開始しました。フロントエンド分野でのサーバーレス技術革新の実践に直面して (興味がある場合は、この記事の最後にある付録を参照してください)、phper も同様に寛大であるべきではありません。 。 Alibaba Cloud Function Computing を例に挙げると、多くの興味深い実践を行っている PHP 開発者がたくさんいます。

    • gd または ImageMagick 拡張機能を直接使用して、柔軟で可用性の高い画像、ウォーターマークなどを実現します。 CPU 負荷の高い API

    • ffmpeg パフォーマンス インスタンスを直接使用して非同期ステートフル呼び出しを行い、ビデオ編集や合成などのオーディオおよびビデオ処理サービスを完了します

    • HTTPを利用 トリガーで実装した機能を広告プラットフォームに埋め込み、高可用性の購入ビジネスを迅速に実現

    • これまでフレームワークベースで実装していたWEB APIを直接移行(例: ThinkPHP として) を FaaS プラットフォームに移行すると、ダウンタイムや運用およびメンテナンスの問題を心配する必要がなくなります

    • ...

    FaaS は解決できますが、 phper の次の問題は非常によくわかります:

    • 新規事業または新しい Web API の開発

    • 既存事業では、CPU を使用する一部の API FaaS

    ただし、従来の開発モデルや既存のビジネスでは、開発者が開始して変革するために一定のコストがかかります。たとえば、PHP ランタイムなどです。 Faas ベンダーのプログラミング インターフェイスの例:

    function handler($event, $context) {
         $eventObj = json_decode($event, $assoc = true);
        // do your thhings
         // ....
         return $eventObj['key'];
    }

    しかし、開発者が FaaS ベンダーが合意した機能入口に従って API を 1 つずつ実装する必要がなく、FaaS ベンダーが合意したプロジェクトを直接変換できるように、さらに一歩進めることはできますか?従来は LAMP または LNMP で FaaS を実行していましたか?

    答えは「はい」です

    Alibaba Cloud Function Compute のカスタム ランタイムと、HTTP プロトコルに直接基づいた最小限のプログラミング モデルは、すべてのクラウド ベンダーの最前線にあります。

    PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。

    Function Compute がカスタム ランタイム実行環境を開始すると、デフォルトでブートストラップ ファイル (または関数の作成時に設定した Args パラメーター) が呼び出され、カスタマイズされたランタイム実行環境が開始されます。 HTTP サーバー、およびこの HTTP サーバーが関数コンピューティング システムからのすべてのリクエスト、つまりすべての関数呼び出しリクエストを引き継ぎます。

    #Function Compute Custom ランタイム実行環境の基盤となるシステムは Linux であり、nginx/1.10.3 と php-fpm7.4 が組み込まれています。PHP アプリケーションの場合は、直接使用できます

    展開する wordpress プロジェクトを例に挙げると、関数コンピューティング プラットフォームで関数を作成するには、次のディレクトリを zip パッケージに直接パッケージ化するだけです:

    - bootstrap
    - nginx.conf
    - php-fpm.conf
    - php.ini-production
    - wordpress

    wordpress ディレクトリは、対応する Web プロジェクトです。ブートストラップは nginx を起動し、php-fpm スクリプトを使用できます:

    ...
    echo "start php-fpm"
    php-fpm7.4 -c /code/php.ini-production -y /code/php-fpm.conf
    echo "start nginx"
    nginx -c /code/nginx.conf
    ...

    bootstrap 詳細については、FC

    の WordPress を参照してください。そこで、サーバーレス製品である Function Compute を使用した後、従来のPHP開発のように負荷分散を考慮する必要がなくなり、拡張や縮小を考える必要がなく、マシンの管理やダウンタイムを気にする必要もなく、安心して業務コードを開発するだけで済みます。心。

    PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。

    上の図からわかるように、開発者は独自のビジネス コードを開発するだけで済みます。考慮する必要がある唯一のことは、関数コンピューティング側は開発すべきではないということです。強すぎる場合 (たとえば、関数がポップアップできるインスタンスの最大数を関数コンピューティング プラットフォームの設定で直接設定する場合)、ダウンストリームの MySQL データベースに過度の負荷がかかります。

    もちろん、元の従来の PHP Web アプリケーションからサーバーレス ファンクション コンピューティング プラットフォームに完全に移行する場合、ファンクション コンピューティングはステートレスであるため、シナリオによってはデータの永続性の問題を考慮する必要がある場合があります。 , データの永続化は、NAS、Redis、その他のサービスを利用して完了できます。NAS を例に取ると、フローチャートは次のとおりです。 #WordPress を例に挙げると、システムまたはセッション関数によってアップロードされたバックエンド画像はディスクに保存する必要があります。

    #Web プロジェクトのファイル アップロード ディレクトリまたはセッション ディレクトリを NAS ディスク上のディレクトリに設定すると、NAS ディスクを永続化できます

    PHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。# #Web プロジェクトを NAS ディスクに直接配置することもできます。現時点では、関数コンピューティングは純粋に LNP 実行環境です

    • 比如将 wordpress 工程不作为函数的代码包的一部分, 而已提前上传到 NAS 盘, 只需要设置好 nginx.conf 中的 root 能知道 web 工程即可, 如上面的 nginx.conf, /mnt/auto 表示挂载的 NAS 目录,mnt/auto/wordpress 则表示在 NAS 上的 web 工程。

      此时对您来说, 函数再也不用变了, 您可能只是需要开发新的业务代码, 然后上传到 NAS 上即可(或者直接使用 git 直接在 NAS 操作,实现 web 工程的版本和 git 上的 commit 绑定, 使用 git 实现代码的快速升级和混滚)

      但是从安全生产的角度来说, 还是建议您 web 工程变更最好和函数的变更相关联

      小结

      从上面的讨论和陈述中, 我们不难发现, PHP 遇见 Serverless 是一件令人兴奋的事情, 让 phper 有了更大的想象空间。 Serverless 的理念和 PHP 这个语言出现的理念也是一致的: 即让开发者最大精力集中在自己的业务价值。 PHP 语言一直是 web 领域最好的生产力代表, 而 Serverless 将会让 PHP 如虎添翼。

      我们最后来一一解答下前言中提出的问题:

      如果您是一个企业用户, 业务体量变大或者为了生产环境的稳定和可用性, 如何做?

         如上面陈述, 使用函数计算和传统的 PHP 开发相结合后, 您再也不用考虑负载均衡的事情, 不用考虑扩缩容的事情, 不用管理机器、担心宕机的事情等等, 只需要安安心心把业务代码开发好即可。

       

      如果您是项目组开发成员比较多的企业用户,能不能不需要给每个开发配置一个安装的 NLP 的 Linux 机器作为开发测试机器(或者多人共享一个机器)?

         是的, 每个开发者在函数计算上创建一个自己的 Service/函数即可, Service/函数配置开发测试环境的 VPC,实现内网安全访问数据库等其他下游服务。 函数调用的时候, 函数计算会拉一个 NLP 的执行环境来运行您分支上正在开发的 PHP 代码。

      • 每个执行环境是相互隔离的

      • 按调用次数计费, 不需要预留机器, 免除了机器成本上的浪费

      • 也可以很方便进行压测等各种事宜

      如果您是一个提供网站开发和托管的 ISV 、外包公司或者创业公司, 我的客户都是一些中小企业的门户网站, 我怎么提高我后端机器资源利用率以及更好提供定制化服务?

         通常来说, 很多企业门户网站访问量不大, 但是网站挂掉了会引起客户投诉。每个客户的网站通过service 或者函数区分, 通过函数名或者service去区分您自己的客户: i. 管理方便  ii. 做定制化方便  iii. 做不同vip等级服务方便。 举个例子, 您可以快速通过某个函数的调用指标情况, 可以看出哪个客户的网站访问量大,可以做出客户画像以及制定不同的收费和 vip 服务级别。

      如果您是一个学生或者准备学习 PHP 开发,本地只有 Windows 电脑, 能不能直接近乎免费的方式获取 LNP(Linux+Nginx+PHP)  的环境用来学习呢?

         是的, 只要将如下的文件和文件夹打包成 zip 包去函数计算控制台创建函数即可

      - bootstrap
      - nginx.conf
      - php-fpm.conf
      - php.ini-production
      - myweb
        | - hello.php

      这里构建了一个钉钉群: 31897696,  如果您对 PHP 落地 Serverless 感兴趣,您有观点、想法或者想吐槽的, 可以和大家一起交流。

      本文作者:罗松(西流)

      阿里云函数计算技术专家

      负责阿里云函数计算产品功能开发(runtime 开发、事件源集成以及企业级 Serverless 解决方案落地等),目前专注在 Serverless 开发者工具链的建设,是云原生 Serverless Dev Tools 研发负责人,主导了 S/fc 等组件的开发工作,关注 Serverless 最新技术动态以及企业级解决方案的落地,致力于推动 Serverless 在开发者群体的流行。

以上がPHP とサーバーレスが融合して、これらの問題点の解決に役立ちます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。