찾다
백엔드 개발PHP 튜토리얼服务端开发小感_PHP教程

服务端开发小感_PHP教程

Jul 20, 2016 am 10:59 AM
할 수 있다그리고개발하다가지다제공하다~의기록

从事服务端开发已经有一些日子了,静下来可以想想和记录些服务端开发的想法了。

服务端开发,特别是Web开发,基本上全是处理HTTP请求的处理。根据具体用途分为两种:Web页面开发和API接口开发。Web页面开发也完全可以看成是API接口开发,只是它的两个主要部分,页面和ajax请求,一个是返回html,另外一个可以返回html,也可以返回其他格式的而已。API接口开发是针对有客户端产品而言的。可能是移动设备,可能是PC应用等。

应用框架

应用框架一般使用的是LNMP或者LAMP,基本的框架就是前端N台Web服务机 + cgi访问PHP + php访问mysql。

PHP可以看成是C写的一个大型的Web框架,它的优势在于解释型,即时修改即时更新。所以线上代码更新维护成本极低,加之其为web开发几乎是专门定制的一些函数,所以适合用于web开发。相较于java开发web服务,动不动就需要重新编译的痛苦就很知足了。

web服务器现在nginx是越来越多使用,nginx比较apache的优势就在于轻便和静态页面的高并发性能。一般拿到设备先需要考虑下单机可承受的qps大概多少,方法大致就是先只考虑内存,计算同时能开启多少个php-cgi,比如一个4G内存的机器,每个php-fpm大概占用20M内存,所以差不多能开启200个php-cgi进程(一般会留些空余的),每个进程同一个时间只能跑一个php程序,所以假设每个php程序跑0.1s,1s就能处理10个请求,所以单机qps大概会是2000。当然,一般不会开启到这么极致的程度,有几个原因:

1 需要考虑到其他进程使用内存的情况

2 考虑到如果一旦全部内存都使用完了,是否启用swap,如果没有的话,那机器是否就立即当机

3 还需要考虑到CPU和带宽的使用情况。CPU对一些比如加解密,视频转码等操作比较耗时,这个时候如果没有使用队列,那么每个请求的时间就会加长。

文件服务器

一般会要求文件服务器和web服务器分开,分开的意思就是使用不同的域名进行拆分。当然web服务器也是可以当做文件服务器的,但是由于文件服务器需要上传文件,而上传文件是一个非常耗时的工作,即php的一个程序需要停留的时间很长,所以需要将它们分开。一则可以为以后扩展文件服务器提供便利,二则不会导致文件服务影响了正常的web服务。

从文件服务器拆分的理由上看,在运营过程中一些比较占用资源或者特别频繁调用的接口是可以或者应该考虑拆分到不同机器上的。

Web前端机始终要访问持久化的数据的,mysql的使用是最为频繁的。其实所有的web服务说到底都是对数据库进行增删改查的操作。说到性能,数据库的增删改查操作的性能其实就决定了一切。所以对数据库的建表,索引的使用对一个网站来说尤为重要。觉得最有用的几个mysql的技巧有:

1 覆盖索引。就是想办法让查询操作只查索引而不去查表的索引建立方法。建立合适的索引和能只在索引就能找到数据的查询能提高效率。

2 InnoDB表最好能使用自增键,提高插入操作的效率。

3 string类型的变量的存储格式,是使用varchar还是char比较好,曾经有个项目表设计从char到varchar之后的数据库大小差别达到70G和20G的大小…

4 建表的时候需要考虑下以后的分库分表,如果是使用分表,什么是分表键?是否需要反向查询表?

5 甚至当考虑到数据库和Web机器的机房分布,这个设计就更麻烦了...

mysql的建表环节和需求有很大关系。没有明确的需求,表设计一定是不正确的。

数据库支持有可能还是不足够的,那么首先想到的可能就是缓存了。缓存是使用全局缓存?放在web前端机?需要用什么hash算法?用什么缓存?memcache?redis?mysql也有自带缓存,如何查询才能更好命中这个缓存?当数据更新的时候,缓存中的数据是否是脏数据?如何更新数据?

Web页面开发

当需要做一个网站的时候,首先要考虑的是用户量有多少?做一个SNS网站和做一个运营后台网站完全是两个不同的概念。

首先是在页面压力上,SNS网站的qps可能几千上万,而运营后台压力几乎完全可以不用计算。这个就意味着后端的数据库支持不同了。SNS网站可能最常调用的会是好友关系和个人信息的接口,这样的接口是不是需要独立出来处理?这样的请求会很多是重复的,是不是考虑使用中间件或者缓存来减轻对数据库的直接压力呢?运营数据一般使用单表就可以解决的。个人觉得运营中统计的需求是最难做的。首先统计并不是任意的统计要求都可以满足,这个需要和产品讨论需求。其次,统计一般需要使用些访问日志之类的,可能涉及到许多shell脚本。

API开发

其实相对于Web开发,API开发是属于被动的。意思就是,由于客户端可能是手机产品,可能是PC产品。往往都是有发布和版本的。这个意味着API接口没法像Web那样为所欲为随时更新代码。它更多需要考虑到各个版本之间的兼容问题。兼容问题在很大程度上会变为加法,永远不会是减法。个人感觉,如果毫无节制地满足需求,随着版本越来越多,你的代码中会越来越多if else,到最后,你的代码就根本无法维护了。然后就会是别人来接手你的工作,踩坑,边骂边重构….API开发是最需要依赖测试的。往往只有测试人员才对各个版本的小改动,小特性如数家珍。

再考虑到非功能配套:

你可能需要对API调用时间进行统计,这样你才明白你的接口表现如何。

你的代码可能还会用到其他机器上的服务,比如curl一个其他服务,这样的情况,最好考虑下错误处理和日志记录。

对于有金钱交易的接口服务,日志处理更是必不可少。

对于一些内部错误,最好不需要直接抛出显示给用户,所以需要使用的最好是白名单错误机制。

接口的加密方式,一般最少是需要有个签名机制的,考虑到加密方法,大致有几种:对称加密和非对称加密。加密的时候就需要考虑到一些情况了,比如手机客户端的用电量等。

如果是给手机开发接口,需要考虑流量问题,图片的规格问题。

框架永远是会变的,不说需求的变化,单就用户量的变化,20w用户和1000w用户的框架一定是不一样的。刚开始的时候你不可能根据1000w的用户量来设计框架来给20w人用。所以一个好的服务端框架一定是随着用户量变化会进行几次大的变化的。

后记

这篇是想到哪写到哪,写到这里发现写不下去了…总之,web服务开发的技巧和小东西还是很多的。有的坑是需要自己踩过才知道痛的。可爱的是,我还在继续踩坑中…

补充下,接口重构几乎是每个服务端开发人员必须经历过的。相较于开发一个新系统,接口重构的难度可以说是翻翻,当然这里的难度也可以理解为难受程度…也会是很锻炼人的一个活。对于重构来说,测试尤为重要,如何有个很好的测试集来保证你的重构的正确性是个难度。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445643.htmlTechArticle从事服务端开发已经有一些日子了,静下来可以想想和记录些服务端开发的想法了。 服务端开发,特别是Web开发,基本上全是处理HTTP请求...
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP의 목적 : 동적 웹 사이트 구축PHP의 목적 : 동적 웹 사이트 구축Apr 15, 2025 am 12:18 AM

PHP는 동적 웹 사이트를 구축하는 데 사용되며 해당 핵심 기능에는 다음이 포함됩니다. 1. 데이터베이스와 연결하여 동적 컨텐츠를 생성하고 웹 페이지를 실시간으로 생성합니다. 2. 사용자 상호 작용 및 양식 제출을 처리하고 입력을 확인하고 작업에 응답합니다. 3. 개인화 된 경험을 제공하기 위해 세션 및 사용자 인증을 관리합니다. 4. 성능을 최적화하고 모범 사례를 따라 웹 사이트 효율성 및 보안을 개선하십시오.

PHP : 데이터베이스 및 서버 측 로직 처리PHP : 데이터베이스 및 서버 측 로직 처리Apr 15, 2025 am 12:15 AM

PHP는 MySQLI 및 PDO 확장 기능을 사용하여 데이터베이스 작업 및 서버 측 로직 프로세싱에서 상호 작용하고 세션 관리와 같은 기능을 통해 서버 측로 로직을 처리합니다. 1) MySQLI 또는 PDO를 사용하여 데이터베이스에 연결하고 SQL 쿼리를 실행하십시오. 2) 세션 관리 및 기타 기능을 통해 HTTP 요청 및 사용자 상태를 처리합니다. 3) 트랜잭션을 사용하여 데이터베이스 작업의 원자력을 보장하십시오. 4) SQL 주입 방지, 디버깅을 위해 예외 처리 및 폐쇄 연결을 사용하십시오. 5) 인덱싱 및 캐시를 통해 성능을 최적화하고, 읽을 수있는 코드를 작성하고, 오류 처리를 수행하십시오.

PHP에서 SQL 주입을 어떻게 방지합니까? (준비된 진술, pdo)PHP에서 SQL 주입을 어떻게 방지합니까? (준비된 진술, pdo)Apr 15, 2025 am 12:15 AM

PHP에서 전처리 문과 PDO를 사용하면 SQL 주입 공격을 효과적으로 방지 할 수 있습니다. 1) PDO를 사용하여 데이터베이스에 연결하고 오류 모드를 설정하십시오. 2) 준비 방법을 통해 전처리 명세서를 작성하고 자리 표시자를 사용하여 데이터를 전달하고 방법을 실행하십시오. 3) 쿼리 결과를 처리하고 코드의 보안 및 성능을 보장합니다.

PHP 및 Python : 코드 예제 및 비교PHP 및 Python : 코드 예제 및 비교Apr 15, 2025 am 12:07 AM

PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

PHP 실행 : 실제 예제 및 응용 프로그램PHP 실행 : 실제 예제 및 응용 프로그램Apr 14, 2025 am 12:19 AM

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

PHP : 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다PHP : 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다Apr 14, 2025 am 12:15 AM

PHP를 사용하면 대화식 웹 컨텐츠를 쉽게 만들 수 있습니다. 1) HTML을 포함하여 컨텐츠를 동적으로 생성하고 사용자 입력 또는 데이터베이스 데이터를 기반으로 실시간으로 표시합니다. 2) 프로세스 양식 제출 및 동적 출력을 생성하여 htmlspecialchars를 사용하여 XSS를 방지합니다. 3) MySQL을 사용하여 사용자 등록 시스템을 작성하고 Password_Hash 및 전처리 명세서를 사용하여 보안을 향상시킵니다. 이러한 기술을 마스터하면 웹 개발의 효율성이 향상됩니다.

PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다Apr 14, 2025 am 12:13 AM

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP의 지속적인 관련성 : 여전히 살아 있습니까?PHP의 지속적인 관련성 : 여전히 살아 있습니까?Apr 14, 2025 am 12:12 AM

PHP는 여전히 역동적이며 현대 프로그래밍 분야에서 여전히 중요한 위치를 차지하고 있습니다. 1) PHP의 단순성과 강력한 커뮤니티 지원으로 인해 웹 개발에 널리 사용됩니다. 2) 유연성과 안정성은 웹 양식, 데이터베이스 작업 및 파일 처리를 처리하는 데 탁월합니다. 3) PHP는 지속적으로 발전하고 최적화하며 초보자 및 숙련 된 개발자에게 적합합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경