首頁 後端開發 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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

拼多多買過的東西在哪裡查看記錄 查看買過的商品記錄的方法 拼多多買過的東西在哪裡查看記錄 查看買過的商品記錄的方法 Mar 12, 2024 pm 07:20 PM

拼多多軟體內提供的商品好物非常多,隨時隨地想買就買,而且每一件商品品質都是嚴格把關的,件件商品都是正品,不同還有非常多優惠的購物折扣,讓大家網購根本停不下來。輸入手機號碼在線登錄,在線添加多個收貨地址和聯繫方式,可以隨時查看最新的物流動態,不同品類的商品板塊都是開放的,搜索上下滑動選購下單,足不出戶輕鬆體驗便捷的網購服務,還能查看所有的購買記錄,包括自己買過的商品,數十個購物紅包、優惠券免費領取使用,現在小編在線詳細為拼多多用戶們帶來查看買過的商品記錄的方法。  1.打開手機,點選拼多多圖標,

四款值得推薦的AI輔助程式工具 四款值得推薦的AI輔助程式工具 Apr 22, 2024 pm 05:34 PM

這個AI輔助程式工具在這個AI快速發展的階段,挖掘出了一大批好用的AI輔助程式工具。 AI輔助程式設計工具能夠提升開發效率、提升程式碼品質、降低bug率,是現代軟體開發過程中的重要助手。今天大姚給大家分享4款AI輔助程式工具(而且都支援C#語言),希望對大家有幫助。 https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot是一款AI編碼助手,可幫助你更快、更省力地編寫程式碼,從而將更多精力集中在問題解決和協作上。 Git

AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 Apr 07, 2024 am 09:10 AM

2022年3月3日,距離世界首個AI程式設計師Devin誕生不足一個月,普林斯頓大學的NLP團隊開發了一個開源AI程式設計師SWE-agent。它利用GPT-4模型在GitHub儲存庫中自動解決問題。 SWE-agent在SWE-bench測試集上的表現與Devin相似,平均耗時93秒,解決了12.29%的問題。 SWE-agent透過與專用終端交互,可以開啟、搜尋文件內容,使用自動語法檢查、編輯特定行,以及編寫和執行測試。 (註:以上內容為原始內容微調,但保留了原文中的關鍵訊息,未超過指定字數限制。)SWE-A

學習如何利用Go語言開發行動應用程式 學習如何利用Go語言開發行動應用程式 Mar 28, 2024 pm 10:00 PM

Go語言開發行動應用程式教學隨著行動應用程式市場的不斷蓬勃發展,越來越多的開發者開始探索如何利用Go語言開發行動應用程式。作為一種簡潔高效的程式語言,Go語言在行動應用開發中也展現了強大的潛力。本文將詳細介紹如何利用Go語言開發行動應用程序,並附上具體的程式碼範例,幫助讀者快速入門並開始開發自己的行動應用程式。一、準備工作在開始之前,我們需要準備好開發環境和工具。首

Linux 重啟服務的正確方式是什麼? Linux 重啟服務的正確方式是什麼? Mar 15, 2024 am 09:09 AM

Linux重啟服務的正確方式是什麼?在使用Linux系統時,經常會遇到需要重新啟動某個服務的情況,但是有時我們可能會在重新啟動服務時遇到一些問題,例如服務沒有真正停止或啟動等情況。因此,掌握正確的重啟服務的方式是非常重要的。在Linux中,通常可以使用systemctl指令來管理系統服務。 systemctl指令是systemd系統管理員的一部分

Android開發最適合的Linux發行版是哪一個? Android開發最適合的Linux發行版是哪一個? Mar 14, 2024 pm 12:30 PM

Android開發是一項繁忙而又令人興奮的工作,而選擇適合的Linux發行版來進行開發則顯得尤為重要。在眾多的Linux發行版中,究竟哪一個最適合Android開發呢?本文將從幾個方面來探討這個問題,並給出具體的程式碼範例。首先,我們來看看目前流行的幾個Linux發行版:Ubuntu、Fedora、Debian、CentOS等,它們都有各自的優點和特點。

如何解決jQuery AJAX報錯403的問題? 如何解決jQuery AJAX報錯403的問題? Feb 23, 2024 pm 04:27 PM

如何解決jQueryAJAX報錯403的問題?在開發網頁應用程式時,經常會使用jQuery來發送非同步請求。然而,有時在使用jQueryAJAX時可能會遇到錯誤代碼403,表示伺服器禁止存取。這種情況通常是由伺服器端的安全性設定所導致的,但可以透過一些方法來解決這個問題。本文將介紹如何解決jQueryAJAX報錯403的問題,並提供具體的程式碼範例。一、使

了解VSCode:這款工具到底是用來做什麼的? 了解VSCode:這款工具到底是用來做什麼的? Mar 25, 2024 pm 03:06 PM

《了解VSCode:這款工具到底是用來做什麼的? 》身為程式設計師,無論是初學者或資深開發者,都離不開程式碼編輯工具的使用。在眾多編輯工具中,VisualStudioCode(簡稱VSCode)作為一款開源、輕量級、強大的程式碼編輯器備受開發者歡迎。那麼,VSCode到底是用來做什麼的呢?本文將深入探討VSCode的功能和用途,並提供具體的程式碼範例,以幫助讀者

See all articles