架构系列一:大型项目架构演进过程

作为一名程序员,单单只会Coding是远远不够的,想要走的更高更完,还必需懂Coding之外的其他东西,如架构设计,系统分析等,今天就架构这块,谈谈自己的理解

一、单机时代 
单机时间的应用,都很简单,一个应用,一台服务器,就搞定了,大至的架构设计如下图 
 
用户通过Internet访问某个网站,经过DNS服务器解析,找到对应的服务器地址,请求服务器,响应用户请求的信息 
优点: 
1.部署简单 
2.维护方便 
3.成本低 
缺点: 
1.DNS服务器或应用服务器宕机,整个网站不可访问

单机的系统架构,缺点很明显,现在应该不会有哪个企业用这种部署方式,如果有,那只能说呵呵了。单机不好,那就多部署几个应用嘛,用DNS去扩展,因此就用了下面这种架构设计

二、基于DNS的集群部署 
先看图,DNS的集群部署如下 
 
在DNS服务器上,配置了一个域名对应三个IP(和Tomcat服务器的IP对应),同时部署了三台Tomcat服务器,这样用户发送请求,经过DNS解析,找到其中一台Tomcat服务器来响应用户的请求,是不是也达到了“集群”的效果 
优点: 
1.部署简单,只需要在DNS服务器上多加几条映射关系,再扩展几台应用服务器就可以了 
缺点: 
1.如果有一台Tomcat服务器宕机,经过DNS解析,正好解析到这台服务器的IP,就无法给用户提供响应 
2.服务器之间不能实现负载,可能会出现这种情况:一台服务器处理很多用户的请求,但是其他服务器却是空闲状态

这种集群方式缺点也很明显,Tomcat应用服务器之间不可以自动切换,如果一台服务器宕机或负载太高,有没有办法可以让服务器之间自动切换,分担负载呢,这必须有啊,请看下面这种基于Nginx的集群部署

三、Nginx集群部署 
Nginx集群部署的架构图如下 
 
这种架构,DNS只配置一条记录,该条记录的IP,是统一对外的IP地址;同时增加了Nginx做反向代理,所有的请求,都必须经过Nginx处理,根据权重负载等,Nginx会自动计算,选择一台服务器处理用户的请求 
优点: 
1.简化DNS配置 
2.安全性,所有请求都经过Nginx,避免用户直接与应用服务器直接通信,Nginx与应用服务器之间使用内网地址通信 
3.如果某台应用服务器宕机,Nginx会自动将这台服务器从集群中剔除,并指定另一台服务器作为响应,宕机的服务器恢复后,Nginx会自动将它加入到集群中 
缺点: 
1.部署复杂 
2.用户Session共享问题,例如目前使用Tomcat1服务器响应用户请求,突然宕机了,这时Nginx会切换到另一个服务器如Tomcat2继续响应用户的操作,但是用户已经登录,Session信息保存在Tomcat1服务器上,Tomcat2上没有用户的信息,因此需要解决Session共享的问题,只要是做集群,都会碰到这个问题 
3.Nginx万一宕机,整个应用将无法正常工作

以上这种架构,已经可以满足大部分小型企业的需求了,但难免Nginx会有宕机的可能,如果宕机,整个应用就完完了,实际在企业中,老板怎么可能容忍因宕机应用无法正常运作的事情发生呢,请看下面的另一种架构

四、keepalived+Nginx集群 
在介绍之间,先看下keepalived是做什么的

keepalived介绍: 
Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点

keepalived+Nginx集群架构图 
 
这种集群架构,在Nginx层,加了keepalived,都配置成相同的虚拟IP,保证nginx的高可用性,如果其中一个Nginx宕机,keepalived会自动检测到,并切换另一台Nginx处理用户的请求 

Nginx号称最大可抗并发数为10W,这不小了,已经可以满足大部分中小企业的需求,当然,Nginx毕竟也有上限,超出Nginx上限怎么办呢?此时就得LVS/F5登场了,LVS是Linux Virtual Server的简称,实施在操作系统层,F5性能比LVS更高,实施在硬件层面,当然,也比LVS昂贵

五、LVS+keepalived+Nginx集群 
LVS+keepalived+Nginx集群架构图如下 
 
纵向上增加了LVS,通过LVS来扩展多个Nginx,结合keepalived保证nginx的高可用,通过nginx来做负载均衡,基本上可以满足99%以上企业的需求了,那剩下的1%的企业,像淘宝,腾讯,百度这种级别的,超出nginx上限怎么办呢,这时候又回到了问题的开始,水平扩展NDS服务器,增加DNS轮询,想想淘宝,腾讯不可能只有一台DNS服务器吧,一定有很多台,这样才是解决性能问题的根本.

架构系列一:大型项目架构演进过程相关推荐

  1. 系统架构系列(一):系统架构概念、分类和特性

    一.推导系统架构的公式 1.1 系统架构概念拆分 在学习一门技术的时候,一定要知道是什么.为什么.怎么做.系统架构这个概念本身就非常大,而且有各种各样的定义,初学者会遇到这样的困境:到底什么是系统架构 ...

  2. 跟着架构师学习大型网站架构的技术细节:前端架构需要解决的问题

    前端架构需要解决的问题 前端网页就是这么简单,除去图片.视频等资源外只有三部分,即标记网页元素的HTML.设置元素样式的CSS和负责交互处理的JavaScript. 在软件开发上,普遍认为架构设计能把 ...

  3. 【数据架构系列-01】数据架构之数据血缘:数据从哪里来,到哪里去

    为了直观的感受数据血缘,先从网上找了两张典型的数据血缘的图.下图特点是按照数据仓库数据管理模型给出了基于表(实体)的数据血缘图. 此图是截取Solidatus软件生成的数据血缘图,该图与上图的区别在于 ...

  4. java大型项目架构,一个Java应届生从上海离职

    最重要的话 2021年,真希望行业能春暖花开. 去年由于疫情的影响,无数行业都受到了影响,互联网寒冬下,许多程序员被裁,大环境格外困难. 我被公司裁掉后,便着急地开始找工作,一次次地碰壁,完全消磨掉了 ...

  5. 系统架构系列 (三):业务架构实战上篇

    引言 业务架构一般不被开发重视,开发人员喜欢追求新技术,而技术是服务于业务的,现在没有一项技术是自娱自乐的,一定要支撑业务,否则没有场景.设计好业务架构要考虑的方面比较多,要做到业务彼此隔离.业务与技 ...

  6. 《大型网站技术架构》1.大型网站架构演练

  7. 大型网站架构系列:电商网站架构案例(1)

    大型网站架构系列:电商网站架构案例(1) 大型网站架构是一个系列文档,欢迎大家关注.本次分享主题:电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功 ...

  8. VIPER,更清晰的架构,解决复用和测试问题的利器系列1:VIPER架构演进史

    VIPER: 更清晰的结构,解决复用和测试问题的利器架构系列1:VIPER架构演进史 洋葱模型 洋葱模型,是从冰山模型上演变而来的,用来进行层次分析的模型,这是Redux的洋葱模型. action从最 ...

  9. 《大型网站架构技术》系列分享专栏

    在这里整理一些大型网站架构方面的技术文章,包括大型网站存储,架构,静态化处理,高并发,高性能方面的问题处理,解决方案等知识 <大型网站架构技术>已整理成PDF文档,点击可直接下载至本地查阅 ...

最新文章

  1. APUE(第八章)进程控制
  2. 在ASP.Net中如何彻底杀死Excel进程
  3. 细述vim编码格式配置
  4. centos7安装tomcat_手把手教你,使用 Nginx 搭配 Tomcat 实现负载均衡!
  5. leader选举的源码分析-runFromConfig
  6. 在线编写php文件,php单文件版在线代码编辑器_php实例
  7. 【转】如何在 Visual Studio 2019 中连接中国版 Azure
  8. python编程入门视频推荐_Python编程入门2021攻略,书籍推荐,视频推荐,每天更新...
  9. arm hisiv100 linux,hisiv100交叉编译工具链安装
  10. 如何招到烂程序员(续)
  11. 【禁忌搜索】基于禁忌搜索算法实现经典VRP问题的matlab仿真
  12. 【洛谷P4826】Superbull S【最大生成树】
  13. 控制测量步骤及其内业计算
  14. Debian折腾笔记
  15. 华为如何开启找回服务器,华为服务器BIOS恢复出厂设置
  16. postgis对矢量进行切片(更新中)
  17. Jupyter notebook无法执行代码
  18. 【渝粤题库】陕西师范大学164103 网络贸易 作业 (高起专)
  19. linux生产文本处理掌握这些就够了:awk,gawk,sed,grep,sort
  20. 谷歌SEO排名受哪些因素的影响?(一)

热门文章

  1. 数据结构之线索化二叉树
  2. CPU亲和性(affinity)sched_setaffinity() 和 sched_getaffinity()
  3. 路由表(FIB)的初始化
  4. 数字接口系列文章:SPI 总线
  5. C++ - STL迭代器失效
  6. 计算机系统操作技师考试题,机关事业单位技术工人计算机操作技师考试题库
  7. linux默认安装数据库密码是多少,Linux服务器上安装MySql数据库(默认安装,密码为空),首次使用需要修改密码(示例代码)...
  8. uc for linux,在uClinux文件系统中增加应用程序
  9. 程序设计工程师c语言,《C语言程序设计》自学百问.doc
  10. 【LeetCode】【HOT】21. 合并两个有序链表(递归)