上传文件服务器与web内容服务分离

如今难点在: 
    1\单击表单提交按钮后,图片上传到图片服务器,文字内容上传web服务器数据库,这两个服务器分别在两个城市. 
    2\图片不能经过web服务器中转. 
    3\web服务器内容能够登陆认证,可是怎么保证"upload"的提交图片表单是合法的用户?javascript

 

分析一下: 
1. WEB服务器和图片服务器分隔两地,这决定了确定有图片文件传递到远处的图片服务器上。那么可能有2种方式:1是先上传到WEB服务器,而后它在转到图片服务器;2是用户上传图片时直接上传到图片服务器上,不中转(这是我建议的) 

2. 前面几楼朋友介绍了各类技术,无论哪一种,底层其实都有数据传输的,即无论什么同步软件,都是要先让用户上传图片到WEB服务器,而后那个同步系统自动把图片传递到图片服务器。因此,我上面建议采用用户直接上传的方式。在图片服务器上创建个专门处理文件上传的应用(固然最好弄个web服务器),用户在页面提交上传时,检查若是是图片,则上传到图片服务器,其余内容传到WEB服务器。 

具体实现我就不细说了,有人说图片服务器创建WEB程序了会影响图片服务器的,可是那些同步软件或者FTP方式不同吗,和apache/tomcat之类底层都是socket通讯;与其先socket到WEB服务器而后再socket图片服务器,不如一步到位,前者影响了2个服务器性能,后者只影响一个。若是怕图片服务器效果下降,从此能够把图片服务器扩充为2台,它们之间能够搞个同步系统,而后用负载均衡来搞定压力问题。 至于,怎么在一个页面上将一个form的东西分传到2个服务器,这个就不用说了吧,好多方法可用,好比图片单独一个form,用javascript来让用户点一个提交,同时执行2个form等等......php

 

评论:css

(1) 用到了SSO 单点登录 html

(2) 远程mount过来前端

(3) 硬盘映射 吧B服务器的一个文件夹 映射到 A服务器的一个文件夹下!  操做系统本身会吧文件写到B服务器java

(4) 咱们公司是经过监控数据库服务器上的对应目录,只要该目录文件存在改变,立刻自动同步到文件服务器上,你须要解决几个问题:找到对对应的windows API、编写网络传输程序(能够用FTP实现,效率比较低。)node

 

 

WEB框架实现动静分离linux

  HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速而且可靠的一种解决方案。
      HAProxy特别 适用于那些负载特大的web站点,这些站点一般又须要会话保持或七层处理。HAProxy运行在当前的硬件上,彻底能够支持数以万计的并发链接。而且它的 运行模式使得它能够很简单安全的整合进您当前的架构中,同时能够保护你的web服务器不被暴露到网络上。
   HAProxy实现了一种事件驱动,单一进程模型,此模型支持很是大的并发链接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限 制,不多能处理数千并发链接。事件驱动模型由于在有更好的资源和时间管理的用户端(User-Space) 实现全部这些任务,因此没有这些问题。此模型的弊端是,在多核系统上,这些程序一般扩展性较差。这就是为何他们必须进行优化以 使每一个CPU时间片(Cycle)作更多的工做。web

wKioL1Npn2qDdiOwAAEUH5H3E2Y175.jpg

 

第一步:安装httpd、php以及haproxy,这里咱们直接用yum来安装便可,这里咱们使用三台虚拟机来作测试,前端一台haproxy作调度,后端两台httpd服务器提供web服务,在作动静分离时时前端haproxy来判断动态和静态内容分别调度到哪台服务器上;数据库

1. [root@node0 ~]# yum -y install httpd php haproxy

   第二步:安装好以后给这三台虚拟配置好相关的网络设备以及提供相关的测试页面等,在eth3这张网卡上选择相同的一个通讯通道,node0这台虚拟机上haproxy的主机,node1和node2是不一样的两台后端提供web服务器的虚拟主机;

wKiom1NpycrTigk9AAFTVY806zA030.jpg

01. [root@node0 ~]# ifconfig eth3 192.168.27.10/24 up   # 给eth3配置ip地址
02. [root@node0 ~]# ifconfig
03. eth0      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:BA 
04. inet addr:172.16.27.88  Bcast:172.16.255.255  Mask:255.255.0.0
05. inet6 addr: fe80::20c:29ff:feb2:adba/64 Scope:Link
06. UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
07. RX packets:11122303 errors:0 dropped:0 overruns:0 frame:0
08. TX packets:1193136 errors:0 dropped:0 overruns:0 carrier:0
09. collisions:0 txqueuelen:1000
10. RX bytes:697850934 (665.5 MiB)  TX bytes:74549101 (71.0 MiB)
11.  
12. eth3      Link encap:Ethernet  HWaddr 00:0C:29:B2:AD:C4 
13. inet addr:192.168.27.10  Bcast:192.168.27.255  Mask:255.255.255.0
14. inet6 addr: fe80::20c:29ff:feb2:adc4/64 Scope:Link
15. UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
16. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
17. TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
18. collisions:0 txqueuelen:1000
19. RX bytes:0 (0.0 b)  TX bytes:468 (468.0 b)
20. [root@node0 ~]#

[root@node1 ~]# ifconfig eth0 192.168.27.18/24 up在node1和node2上设置好相关配置,选择虚拟机上的VMnet2与haproxy上的eth3的同一通讯通道,再配置IP地址和默认网关接口,然后再提供不一样的页面以便测试用;

1. [root@node1 ~]# route add defaulte gw 192.168.27.18  # 网关指向haproxy主机的eth3地址
2. [root@node1 ~]# ping 192.168.27.10  # ping一下haproxy的节点看是否ping通
3. [root@node1 ~]# vim /var/www/html/index.html
4. <h3>node1.tanxw.com</h3>
5. [root@node1 ~]# service httpd start # 配置好以后就把web服务启动起来,再访问测试一下,测试的链接改成桥接方式                        
01. [root@node2 ~]# ifconfig eth0 192.168.27.19/24 up
02. [root@node2 ~]# route add defaulte gw 192.168.27.18  # 网关指向haproxy主机的eth3地址
03. [root@node2 ~]# ping 192.168.27.10  # ping一下haproxy的节点看是否ping通
04. [root@node2 ~]# vim /var/www/html/index.php
05. <h3>node2.tanxw.com</h3>
06. <?php
07. phpinfo();
08. ?>
09. [root@node2 ~]# service httpd start # 配置好以后就把web服务启动起来,再访问测试一下,测试的链接改成桥接方式
01. ############## 以上的使用默认配置就能够了 #######################
02.  
03. frontend web *:80   # *表示haproxy监听全部地址,监听的端口为80
04. # 定义访问控制,表示以url以.css .js .html .php结尾的分别调度到哪台服务器上访问
05. acl url_static       path_end       -i .css .js .html   
06. acl url_dynamic      path_end       -i .php
07.  
08. # usr_backend表示使用backend服务,if表示若是知足url_static这个条件就调度到这台服务器上
09. use_backend        static          if url_static   
10. default_backend    dynamic
11.  
12. backend static   # 定义调用后端的静态页面的服务器上
13. server node1 192.168.27.18:80 check inter 3000 rise 2 fall 2 maxconn 5000
14. backend dynamic  # 定义调用后端的动态页面的服务器上
15. server node2 192.168.27.19:80 check inter 3000 rise 2 fall 2 maxconn 5000  
16. listen statspage # 定义监控管理接口的界面
17. bind *:8888    # 定义访问页面端口
18. stats enable    # 启用管理界面
19. stats hide-version    # 隐藏版本
20. stats uri /admin?stats    # 访问路径
21. stats auth xiao:linux    # 访问时须要验证登陆
22. stats admin if TRUE    # 若是登陆成功就能够管理在线服务器

   第三步:配置haproxy的相关配置信息;

第四步:登陆到咱们配置好的管理界面:

wKioL1NpyEvQG7J1AAFJFJbGr34770.jpg

wKioL1NpyJGDqzq2AAXT8Ek41q0971.jpg

第五步:配置好相关的配置以后就能够测试一下了,

wKioL1NpyMmRMgcTAAC7idNwGA8311.jpg

wKiom1NpyRCSCcioAAJBUPeM-gA579.jpg

最后咱们再分别对这两个页面的请求作一下压力测试看看:

wKioL1NpyUSDI2rLAAVLyURyTn4797.jpg

wKioL1NpyWbjjJwLAAV5MtRD1BY046.jpg

总结:

   HAProxy是一款比较轻量级的负载均衡服务器,特别适用于那些负载特大的web站点,这些站点一般又须要会话保持或七层处理。HAProxy运行在 当前的硬件上,彻底能够支持数以万计的并发链接。而且它的运行模式使得它能够很简单安全的整合进您当前的架构中,同时能够保护你的web服务器不被暴露到 网络上。