小网站向大网站转变的过程(小型集群的简单实现,反向代理的使用)

先上图:

大家可能都听说过:反向代理,主从数据库,读写分离,服务器集群这些名词,可是不知道着东西到底是干嘛的。

由于我是php开发,对架构上的东西也有兴趣,加上之前的项目是类似的方案,就拿出来和大家分享一下。

     一个网站初期使用一个vps或者虚拟主机就能搞定了,随着流量的增大,不能支撑更多的访问了,这个时候开始使用更多的服务器,但是如何让他们能够配合在一起使用呢,这个时候就开始使用小型集群了,随着时间的推移开始使用大型集群(高大上),不过小型集群的网站,能支撑的访问量就已经很大了。

     ① Nginx反向代理:当用户访问一个网站的时候,一台服务器支撑不住了,这个时候需要两台服务器,可是两台服务器如何来分摊流量呢,这个时候Nginx的反向代理来了,他的目的是将用户的访问转发到后面真正执行程序的服务器上,用户访问的都是Nginx反向代理服务器,当它接收到请求后,会将请求的内容转发到后端的服务器上(Apache或者Nginx),就像上图显示的,两台Apache服务器,可以并行添加多台这样的服务器,实现一个横向扩展。这样多台服务器支撑的访问量就会随着机器的增加而增加。

     ② 主备:为什么要使用两台Nginx做反向代理呢,实际上是一台,另一台睡觉就可以了,这样做的目的是一台宕机后,另一台起来继续工作,保证网站不会因为一台宕机而彻底不能使用了,两台Nginx反向代理使用软件做心跳监测,一台坏了切换过来,这样就能够不会出现什么大的问题了。

     ③ session共享问题: 这个时候还有一个问题就是session的问题,如何保证session不会重复生成或者丢失呢?其实按照我上图所画,共享session存储即可,其实不是必须使用memcache或者redis 其实可以使用mysql 、nfs,当然了如果这些都不用仍然是可以的,那就是nginx反向代理的 配置做手脚了,nginx可以进行简单配置就是实现iphash了,这样能够保证每台服务器访问的后端服务器都是同一台服务器。大家可能不太理解这个过程,其实这个过程很简单,就是对请求内容的判断和转发,根据请求来的ip地址进行哈希运算,这样每次请求的都是同一台后端的服务器。到这里访问基本就没有问题了,

     ④ MySQL主备(主从):剩下的就是数据库的解释了,使用MySQL主备或者叫做MySQL主从,实现数据库的备份,同时使用MySQL的备份机来做Sql的读操作,这样就减轻了,主数据库的读写压力了。既做了数据库的备份又能不至于浪费机器。

     ⑤ 有很多刚入门的程序员,看了会不理解这怎么连接到一起啊?就像我刚毕业那阵,就以为各种服务器软件都必须连在同一台服务器上才能工作一样。其实就是使用ip地址,指定ip地址就可以了,host设置为127.0.0.1或者192.168.1.100其实都一样,无非是连接到当前服务器和连接到其他服务器上,他们的过程基本上一致,当然了连接到其他服务器上的效果肯定没有直连本机要好,因为要延迟和数据传输的过程。

      优化过程无非就是分摊流量,加快数据的访问,单台服务器就是CPU数量多一些,内存容量大一些,硬盘从机械硬盘换成ssd(固态硬盘读写性能可是机械硬盘的十几倍甚至更高),代码写好一点,sql语句尽量简单就简单,少涉及多表关联查询,尽量通过主键id查找,多分一些数据库,多分一些数据库表(其实就是尽可能的将大数据块,切分成小的数据块)。就好比你从一万个人里找一个人,和从十个人里找一个的意思是一样的。

     啥?你要问我具体安装的命令啊,我还是那句话都这份上了,随便找个运维就能按照你的要求搞定,干嘛非得让一个懂linux 但又不够深的人来做这些事呢。

时间: 2024-10-10 21:58:18

小网站向大网站转变的过程(小型集群的简单实现,反向代理的使用)的相关文章

高性能高并发网站架构,教你搭建Redis5缓存集群

一.Redis集群介绍 Redis真的是一个优秀的技术,它是一种key-value形式的NoSQL内存数据库,由ANSI C编写,遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis最大的特性是它会将所有数据都放在内存中,所以读写速度性能非常好.Redis是基于内存进行操作的,性能较高,可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动. 网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,需要

分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式处理,采用 flume 收集日志,发送到 kafka 队列做缓冲,storm 分布式实时框架进行消费处理,短期数据落地到 hbase.mongo中,长期数据进入 hadoop 中存储. 接下来打算将这其间所遇到的问题.学习到的知识记录整理下,作为备忘,作为分享,带给需要的人. 淘宝开源了许多产品组件

大数据平台Hadoop的分布式集群环境搭建

1 概述 本文章介绍大数据平台Hadoop的分布式环境搭建.以下为Hadoop节点的部署图,将NameNode部署在master1,SecondaryNameNode部署在master2,slave1.slave2.slave3中分别部署一个DataNode节点 NN=NameNode(名称节点) SND=SecondaryNameNode(NameNode的辅助节点) DN=DataNode(数据节点)2 前期准备 (1)准备五台服务器 如:master1.master2.slave1.sla

大数据(2)---HDFS集群搭建

一.准备工作 1.准备几台机器,我这里使用VMware准备了四台机器,一个name node,三个data node. VMware安装虚拟机:https://www.cnblogs.com/nijunyang/p/12001312.html 2.Hadoop生态几乎都是用的java开发的,因此四台机器还需要安装JDK. 3.集群内主机域名映射,将四台机器的IP和主机名映射分别写到hosts文件中(切记主机名不要带非法字符,图片中的下划线”_”请忽略) vim /etc/hosts 配好一个之后

大数据 时间同步问题 解决hbase集群节点HRegionServer启动后自动关闭

1)在hbase-site.xml文件中 修改增加 ,将时间改大点<property><name>hbase.master.maxclockskew</name><value>150000</value></property>2)修改系统时间,将时间改为一致(建议采用本方法):修改日期date -s 08/20/2016修改时间date -s 15:14:00检查硬件(CMOS)时间clock -r将系统时间写入CMOSclock -

【大数据日知录】集群资源管理与调度笔记

面对各种各样的服务需要的计算系统和框架,对于资源而言,常见的资源调度方法时静态划分方法,框架之间各行其是,但是利用效率低. 调度设计的基本问题: 资源具有异质性(有的机器配置高,有的低)所以要分成一个个小粒度的资源 数据局部性(移动计算而不是移动数据) 支持抢占资源 or not 分配资源粒度:全分or不分(MPI)  或者 增量满足式分配策略(MapReduce) 目前的发展将资源看成一个整体,上方抽象出一个资源调度系统. 常用的资源调度系统模型: 负责执行job的机器有一个节点管理器且可划分

大数据系列之Hadoop分布式集群部署

本节目的:搭建Hadoop分布式集群环境 环境准备 LZ用OS X系统 ,安装两台Linux虚拟机,Linux系统用的是CentOS6.5:Master Ip:10.211.55.3 ,Slave Ip:10.211.55.4 各虚拟机环境配置好Jdk1.8(1.7+即可) 资料准备 hadoop-2.7.3.tar.gz 虚拟机配置步骤 以下操作都在两台虚拟机 root用户下操作,切换至root用户命令 配置Master hostname 为Master ; vi /etc/sysconfi

大数据【三】YARN集群部署

一 概述 YARN是一个资源管理.任务调度的框架,采用master/slave架构,主要包含三大模块:ResourceManager(RM).NodeManager(NM).ApplicationMaster(AM). >ResourceManager负责所有资源的监控.分配和管理,运行在主节点: >NodeManager负责每一个节点的维护,运行在从节点: >ApplicationMaster负责每一个具体应用程序的调度和协调,只有在有任务正在执行时存在. 对于所有的applicati

[大数据入门]实战 安装Cloudera-Hadoop集群

echo -e 'export JAVA_HOME=/usr/java/default' >> /etc/profilealternatives --install /usr/bin/java  java /usr/java/jdk1.7.0_67-cloudera/bin/java 200alternatives --set java /usr/java/jdk1.7.0_67-cloudera/bin/javaalternatives --install  /usr/bin/javac j