一.服务器架构原则
- 架设适合自己网站特点的架构
- 做好扩展接口
- 简化不必要的
- 使用自己最熟悉的架构
- 尽量利用已有资源,切记一切重头开始.
- 在架构上使用新产品的时候,先要问下自己,是否有足够的能力驾驭.
- 为保险起见,最好先部分产品使用,然后逐步过度。
二.用户规模影响设计
- 10万用户级别
单服务器,前端、后端、cache、db在一起。
- 百万级
db和cache单独部署服务器,db或按业务进行拆分(sharding)
cache或使用一致性hash扩展。
前端后端还是在一起,但是根据业务拆分,每个业务可分配不同数量的服务器
- 千万级
开始重视架构设计,有专门技术架构师
需跨机房部署,前端在远程增加反向代理加速,数据库在异地机房使用slave数据库副本
后端拆分出来,系统内部需要远程调用,内部需远程调用协议。
- 亿级
架构更细分,或增加数据架构师,cache架构师,分布式架构师
数据库sharding碰到烦恼,开始考虑分布式数据服务
数据访问需要根据业务特点细分。
开发、运维、测量、调优具备有自己的专有工具。
所有服务需要地理多机房分布,具备IDC容灾设计。
服务可降级
三.PV进行架构
10W以下
100W
缓存服务器
集群服务器
主从数据库
四.拥抱开源世界
- Nginx
1>高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.
2>内存消耗少:在3万并发下,10个Nginx进程消耗150M内存.
3>软件负载均衡器----比起几十万的硬件负载均衡交换机(F5 BIG-IP,NetScaler),更加低廉,适合中小型公司使用————(在配置中使用upstream)
4>反向代理
5>URL缓存(一般都使用squid或者varnish在前端使用,nginx自身也有此插件)
- HTTPSQS (张宴)
该产品,我看了下源码,里面使用tokyo cabinet作为key-value库,然后使用libevent作为网络接口层,进行 相关存储。
- MYSQL
可以作为存储大数据量的数据库.现在自身也往no-sql领域发展.
- Mongodb
现在比较流行的NoSql数据库(在高并发,大流量的web2.0条件下,传统数据库显得捉襟见肘.如及时反馈数据给用户时.在大存储的时候,可以添加服务器节点来实现横向扩展) ——适用于简单的SQL,对于复杂的SQL还是使用关系型数据库.
- TTSERVER
就是tokyo cabinet和tokyo tyrant(网络接口层)
- MEMCACHED
存储key-value的数据在内存中,但是在持久化方面并不是很理想,还有数据被踢的现象.
- PHP
- Centos
- Apache
- Subversion
- Varnish(代替squid)
五.PHP程序员必学
- DIV+CSS+Javascript;
- PHP ;
- Linux C;
- LINUX常规命令—建议要学会VIM,因为服务器&&系统上的很多配置都需要使用vim去进行修改(你可以用其他工具);
- 掌握网络知识TCP/UDP;
- 熟悉各种服务器配置,并了解每种服务器的特性;
- 各种服务器软件的应用.如memcached,TTServer,消息队列(如张宴的HttpSQS)等等;
- 了解什么是CDN服务器,CDN轮询;
- LINUX开源软件的二次开发;
- 服务器监控系统开发;
- 英文 ——很多开源软件的文档都是英文写的,很多源码都有安装步骤(英文版),就没必要每次都到google或者baidu去搜索相关步骤,有时没有人会贴出来;
- 一个优秀的技术人员至少精通两门编程语言;
六.明理
1>只有跟高手交流,自己才能知道自身的不足—然后在线下(网络,书籍)有针对性的进行弥补。很多情况下,对方会告诉你在开发中遇到的问题,并且告知当下的这个技术应用环境,以及自身的优势.
2>尝试着去了解新技术,并不是看看而已,而是在自己的机器进行开发,并且想想在什么情况下使用这种技术。