PHP는 특히 웹 프로그램 개발에서 광범위한 응용 프로그램을 보유하고 있습니다. 최신 Wikipedia 통계에 따르면 2013년 4월 기준으로 PHP는 2억 4,400만 개 이상의 웹사이트에 설치되었으며, 10,000개의 서버에 210개가 설치되었습니다. W3Techs 보고서에 따르면 2021년 9월 현재 웹사이트의 78.9%가 PHP를 사용하고 있습니다. 따라서 PHP는 적어도 웹 개발 분야에서는 세계 최고의 언어입니다. 이는 농담이 아닙니다.
기술 선택 측면에서 PHP는 주로 LAMP(전체 이름은 Linux + apache + mysql + php) 또는 LNMP(전체 이름은 Linux + nginx + mysql + php)를 사용합니다. 이 성숙하고 안정적인 기술 프레임워크는 PHP 웹을 촉진합니다. 생태학적 번영과 상업적 성공을 개발합니다.
기존 개발 모델에서는 개발자가 직접 다양한 소프트웨어를 설치, 유지 관리 및 업그레이드해야 합니다.
기업 사용자인 경우 비즈니스 규모가 커지거나 생산 환경을 위해 안정성과 가용성, 로드 밸런싱 사용은 불가피한 옵션입니다.
이 시점에서 PHP 개발자 또는 온라인 운영 및 유지 관리 학생들은 더 많은 것에 대해 걱정합니다.
생산이 증가할 때마다 기계는 관련 소프트웨어를 다시 설치해야 합니다. , 동일한 nginx 구성 및 php-fpm 구성을 만들고 각 생산 시스템에 대한 보안 업데이트를 유지합니다
개발된 애플리케이션에 새로운 확장이 필요한 경우 확장을 추가하려면 각 시스템을 인간화해야 할 수도 있습니다
로드 비즈니스 변화에 따라 밸런서가 업그레이드되고 후속 작업자 기계가 중단됩니다. 운영 및 유지 관리 방법
비즈니스의 최고점과 최저점을 처리하여 자원 활용도를 높이는 방법
...
많은 수의 프로젝트 팀 개발 구성원이 있는 기업 사용자라면 각 개발마다 NLP가 설치된 Linux 시스템을 개발 및 테스트 시스템으로 구성(또는 여러 사람이 공유)할 필요가 없나요? 기계)?
웹 사이트 개발 및 호스팅을 제공하는 ISV, 아웃소싱 회사 또는 스타트업이라면 내 고객은 모두 중소기업의 포털입니다. 백엔드 머신 리소스의 활용도를 높이고 더 나은 서비스를 제공할 수 있는 방법은 무엇입니까? 커스터마이징?
학생이거나 PHP 개발을 배우려고 준비 중이고 로컬에 Windows 컴퓨터만 있는 경우 학습용 LNP(Linux+Nginx+PHP) 환경을 거의 무료로 직접 구할 수 있나요?
...
이러한 질문을 통해 서버리스가 이러한 문제점을 어떻게 해결하는지 살펴보겠습니다.
서버리스란 무엇인가요?
서버리스 = Faas(서비스로서의 기능) + Baas(서비스로서의 백엔드), 두 다이어그램을 통해 관련 개념을 빠르게 이해할 수 있습니다:
전통 모델
Serverless Model
사진의 CDN과 OSS는 BaaS 서비스이고, FC는 맞춤형 기능 로직을 갖춘 FaaS 플랫폼입니다. 이 비교를 통해 FaaS의 기능과 이점을 빠르게 얻을 수 있습니다.
Only 비즈니스에 집중 코드 개발은 해당 로직만 작성하세요
매우 탄력적인 확장, 서버 관리 필요 없음
종량제, 통화당 밀리초 단위로 요금 청구
...
이 기사의 뒷부분에서 설명하는 것처럼 서버리스는 주로 FaaS를 나타냅니다. 아래 다이어그램에 표시된 것처럼 몇 줄의 코드를 작성하여 클라우드 공급업체의 FaaS 플랫폼에 저장하면 유연하고 가용성이 높은 웹 API가 완성됩니다.
PHP는 Alibaba Cloud의 Function Compute, AWS의 Lambda(Custom Runtime을 통해 간접적으로 지원됨), Tencent의 SCF 등과 같은 주요 클라우드 공급업체의 개발 커뮤니티를 위한 매우 큰 언어입니다. PHP 언어에 대한 지원 외에도 phper는 프런트엔드 분야에서 서버리스 기술의 혁신적인 실행에 굴복해서는 안 됩니다(관심이 있는 경우 이 기사 끝에 있는 부록을 참조하세요). Alibaba Cloud Function Computing을 예로 들면, 많은 흥미로운 관행을 갖고 있는 많은 PHP 개발자가 있습니다.
gd 또는 ImageMagick 확장 프로그램을 직접 사용하여 탄력적이고 가용성이 높은 이미지, 워터마크 및 기타 CPU 집약적인 API를 구현합니다.
직접 ffmpeg + 성능 인스턴스 + 비동기 상태 저장 호출을 사용하여 비디오 편집 및 합성 등 오디오 및 비디오 처리 서비스 완료
HTTP 트리거로 구현된 기능을 사용하여 광고 플랫폼에 지점을 묻어 고가용성 구매 비즈니스를 빠르게 달성
기존 프레임워크(예: ThinkPHP) 기반으로 구현했던 WEB API를 FaaS 플랫폼으로 직접 마이그레이션하여 더 이상 다운타임과 운영 및 유지 관리 문제를 걱정할 필요가 없습니다.
...
FaaS이지만 phper를 매우 잘 해결합니다. 다음 문제:
신규 사업 또는 새로운 웹 API 개발
기존 사업에서는 CPU 집약적이거나 높은 탄력성을 요구하는 일부 API를 별도로 추출하여 FaaS 기반
그러나 기존 개발 모델이나 기존 비즈니스에서는 개발자가 시작하고 변환하는 데 특정 비용이 필요합니다. 예를 들어 특정 Faas 공급업체의 PHP 런타임 프로그래밍 인터페이스 예:
function handler($event, $context) { $eventObj = json_decode($event, $assoc = true); // do your thhings // .... return $eventObj['key']; }
하지만 개발자에게는 한 단계 더 나아갈 수 있습니까? 각 기능 항목을 구현하기 위해 FaaS 공급업체가 동의한 기능 항목을 따르도록 하려고 합니다. 하지만 전통적으로 LAMP 또는 LNMP에서 실행되는 프로젝트를 FaaS로 직접 전환할 수 있습니까?
답은 그렇습니다.
Alibaba Cloud Function Computing의 Custom Runtime과 HTTP 프로토콜에 직접 기반한 미니멀리스트 프로그래밍 모델은 모든 클라우드 공급업체의 선두에 있습니다.
Function Compute가 사용자 정의 런타임 실행 환경을 시작하면 기본적으로 부트스트랩 파일(또는 함수 생성 시 설정한 Args 매개변수)을 호출하여 사용자 정의된 HTTP 서버를 시작합니다. 그러면 이 HTTP 서버가 모든 작업을 대신합니다. Function Compute 시스템의 기능, 즉 모든 기능 호출 요청.
Function Compute Custom 런타임 실행 환경의 기본 시스템은 Linux이며 nginx/1.10.3 및 php-fpm7.4가 내장되어 있습니다. PHP 애플리케이션의 경우 직접 사용할 수 있습니다.
워드프레스 프로젝트를 다음과 같이 배포하세요. 예를 들어 다음 디렉터리를 zip 패키지로 패키징하고 함수 컴퓨팅 플랫폼에서 함수를 생성하기만 하면 됩니다.
- bootstrap - nginx.conf - php-fpm.conf - php.ini-production - wordpress
wordpress 디렉터리는 해당 웹 프로젝트이고 bootstrap은 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 개발과 결합한 후에는 더 이상 로드 밸런싱, 확장 또는 축소, 시스템 관리, 또는 가동 중지 시간이 기다리고 있으므로 안심하고 비즈니스 코드를 개발하면 됩니다.
위 그림에서 볼 수 있듯이 개발자는 자신의 비즈니스 코드만 개발하면 됩니다. 고려해야 할 유일한 것은 Function Compute의 확장이 너무 과하거나 과격해서는 안 된다는 것입니다(예: Function Compute 플랫폼에서 직접 설정하려면 이 함수가 팝업될 수 있는 최대 인스턴스 수를 설정하고 자체 다운스트림 Mysql 데이터베이스에 과도한 압력을 가하세요.
물론 원래의 기존 PHP 웹 애플리케이션에서 서버리스 함수 컴퓨팅 플랫폼으로 완전히 마이그레이션할 때 일부 시나리오에서는 데이터 지속성 문제를 고려해야 할 수도 있습니다. 함수 컴퓨팅은 상태 비저장이고 다음을 통해 데이터 지속성을 저장할 수 있기 때문입니다. NAS, Redis 및 기타 서비스가 완료되었습니다. NAS를 예로 들면 흐름도는 다음과 같습니다.
WordPress를 예로 들면, 백그라운드 시스템이나 세션 기능에서 업로드한 사진이 지속되어야 합니다. 디스크에.
웹 프로젝트의 파일 업로드 디렉터리나 세션 디렉터리를 NAS 디스크의 디렉터리로 설정하면 NAS 디스크가 유지됩니다.
이때 웹 프로젝트를 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!