网站架构&安全&程序开发一

一.服务器架构原则

  • 架设适合自己网站特点的架构
  • 做好扩展接口
  • 简化不必要的
  • 使用自己最熟悉的架构
  • 尽量利用已有资源,切记一切重头开始.
  • 在架构上使用新产品的时候,先要问下自己,是否有足够的能力驾驭.
  • 为保险起见,最好先部分产品使用,然后逐步过度。

二.用户规模影响设计

  • 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>尝试着去了解新技术,并不是看看而已,而是在自己的机器进行开发,并且想想在什么情况下使用这种技术。

猜你喜欢

转载自rtxbc.iteye.com/blog/1138122