当前位置: 首页 > news >正文

1.3. 服务器部署与网络拓扑

所谓大型网站主要的特点是访问量大,既海量访问,对带宽要求大,而在中国的网络环境比较复杂,单单靠一家也难保访问的快速、稳定,我们可能选择多家网络运营商,才能得到保障。

我们不得不把服务器分散部署到各地

1.3.1. 小型网站

一个IP,多台服务器流水线方式解决方案。

这种方案必须使用带有双网卡的服务器,建议选择千兆网卡,web服务器与database连接建议采用交叉线互联,不要通过Hub,Switch连接。

当web和database在同一台服务器是建议采用 UNIX SOCK 来链接数据库,以代替TCP/IP Socket。

以上图中的第三套方案为例,当用户访问网站时,通过电信交换机连接到cache服务器,有两种情况。第一种是静态html文件或图片,将判断是否被缓存,如果缓存直接反馈给用户否则链接web服务器。第二种动态脚本,将处理立即送给web服务器。如果动态脚本有请求数据库操作,将连接database服务器。

这种方式适合中小型企业,非互联网运营商,仅仅是用一个IP实现。

两个IP,多台服务器解决方案。

建议你吧图片,缩图单独使用一台服务器实现。

多个IP,多台服务器解决方案。

这种方案要注意服务器全部暴露在WAN上,一定要谨慎设置iptables规则。

1.3.2. 集群网站

下面是负载均衡的例子

过程 1.1. 过程访问演示

  1. 访问用户 www.example.com 网站

    用户输入网址: www.example.com回车

  2. dns

    域名服务器将www.example.com解析到load balancing负载请均衡调度服务器。

  3. load balancing

    负载均衡器根据调度算法分配到某个squid节点上

  4. squid

    静态规则:判段是否是缓存,如果已经缓存从cache中直接取出内容,否则请求web服务器

    动态规则:直接请求web服务器

    请求web服务器是将再次由load balancing分配web节点

  5. web

    web server 处理动态脚本,连接数据库查询。连接数据库是仍然需要由load balancing分配database节点

  6. database

    database cluster

1.3.3. 关于服务器远程管理

将每一台服务器暴露在广域网上不是一个好主意,我的经验是,目前服务器基本都是双网卡。

eth0: 用于对外访问,如web服务器仅仅开放80端口,其他端口不允许在广域网上直接访问。

eth1: 对内有一个私有局域网,开放SSH的22端口。22端口仅仅能通过私有局域网访问,不能通过广域网访问。

在机房放置一台专门的管理服务器并安装有VPN服务,当远程管理服务器是通过VPN连接到这台服务器,登录到这台服务器上,然后在通过SSH登录到私有LAN上的其他服务器进行远程管理。

下面是VPN解决方案图




原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

相关文章:

  • MySQL 大表优化方案
  • 004-unity3d MonoBehaviour脚本方法简介
  • JS-DOM的知识点及应用
  • 怎样做网站优化才能更有效的吸引蜘蛛来访?
  • centos--git搭建之Gogs安装
  • 记一次kafka故障
  • Visual Studio Code支持JUnit
  • “大数据应用场景”之隔壁老王(连载四)
  • vfp9写的爬虫前段,基于webbrowser
  • CSS定宽居中的实现方案
  • 思科——NAT的应用
  • Webpack3之雪碧图插件(WEBPACK-SPRITESMITH配置简述)
  • 一万元搭建深度学习系统:硬件、软件安装教程,以及性能测试
  • linux 环境变量配置(node)
  • springboot 在IDEA下启动异常问题
  • 2017年终总结、随想
  • Apache的80端口被占用以及访问时报错403
  • CSS盒模型深入
  • Iterator 和 for...of 循环
  • JavaScript中的对象个人分享
  • JS题目及答案整理
  • js中的正则表达式入门
  • October CMS - 快速入门 9 Images And Galleries
  • python 装饰器(一)
  • Redis字符串类型内部编码剖析
  • SpiderData 2019年2月23日 DApp数据排行榜
  • sublime配置文件
  • vuex 学习笔记 01
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 分享几个不错的工具
  • 看域名解析域名安全对SEO的影响
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何学习JavaEE,项目又该如何做?
  • 异步
  • 自制字幕遮挡器
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • #预处理和函数的对比以及条件编译
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (4) PIVOT 和 UPIVOT 的使用
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (ZT)薛涌:谈贫说富
  • (二)windows配置JDK环境
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (原)Matlab的svmtrain和svmclassify
  • (转载)hibernate缓存
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net Stream篇(六)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET企业级应用架构设计系列之结尾篇