也谈架构:百万pv项目与虚拟化

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

也谈架构:百万pv项目与虚拟化


一 说明
100万pv的项目网站,说大不大,说小又具备了一定规模,最近公司网站的xxx项目从物理机迁移到了VMware虚拟化平台(ESXI),这里总结下该项目的网站架构,如有不妥之处还肯请老鸟多指点,新同学可以当作简单的参考资料!


二 项目架构介绍
2.1 公司xxx项目开始于2007年,目前日均pv 100万左右,峰值流量(BGP)60Mbit左右,haproxy 负载均衡器峰值并发4000左右,xxx项目共占用两个机柜 14u机位,共计13台 由12台Dell 1950 与 1台Dell 2950组成,
包括 
1 台 CDN 源站服务器
1 台 haproxy 负载均衡器
4 台 iis web服务器
2 台 memcache 缓存服务器
2 台 lucene 检索服务器
1 台 SqlServer 主数据库服务器
2 台 SqlServer 从数据库服务器

2.2 网站架构
xxx项目逻辑上可以分为5层
1 CDN 层,为提高用户体验度,公司网站全部使用商用CDN来加速网站,cdn 源站服务器用于存储用户或者CMS发布的静态文件。
2 代理层,使用haproxy 反向代理IIS服务器,haproxy 拥有强大的负载均衡能力与健康检查功能,提供友好的监控页面。
3 应用层,IIS 服务器适用于.net ,同理如果你使用php|jsp 那么就要换成 apache|nginx|tomcat 等等。
4 缓存层,memcache  lucene 都是为了减轻数据库压力而存在的。
5 数据库层, SqlServer 数据库由1主(写)2从(读)组成。

2.3 网站架构拓扑图


2.4 架构存在的问题
a CDN 源站单点问题,不考虑费用的情况下这个可以考虑双机HA,或者将 xxximg.xxx.com 合并到主站CDN源服务器
b haproxy 单点问题,这个已经通过haproxy + keepalived 方式解决
c 其实有些经验的朋友都能看出来,缓存层中无论是 memcache 还是 lucene 都是为了减轻数据库压力而存在的,目前数据库是1主(写)2从(读)在缓存层服务器的帮助下,负载并不高,不过一旦缓存服务器崩溃,数据压力立刻增加!

三 项目虚拟化
3.1 为什么要进行虚拟化?
1 xxx项目的服务器已经运行近5年原计划考虑升级服务器配置,或者更换新的服务器代替老旧的服务器,但是不能忽略成本这个重要的因素!
2 XXX机房目前中国IDC行业数一数二的角色,但是它的机柜资源非常紧张,以我们公司为例四个月前向其申请新的机柜,至今还在“排队”等待!
3 XXX机房限制机柜用电量,比如每机柜限制在6.8安,所以老旧服务器耗电量是一个问题!
4 集中管理与集中控制,可以使用Vmware Vcenter 集中管理Vmware ESXI 主机,举个例子:如果我要重启一台服务器只需要在Vcenter直接reboot ESXI主机即可,非常方便!

3.2 虚拟化后服务器数量
1 台 CDN 源站服务器(保持不变)
4 台 Vmware ESXI 服务器

3.3 虚拟机划分


 
 
  1. haproxy01    sql_master  sql_slave01  sql_slave02 
  2. iis01        iis02       iis03        iis04 
  3. memcache01   memcache02  lucene01     lucene02 
  4.                                       haproxy02 
  5. -------------------------------------------------------- 
  6. Esxi-1       Esxi-2      Esxi-3       Esxi-4 


3.4 虚拟化注意事项

线上ESXI 服务器配置:


 
 
  1. Dell R610 1U 
  2. cpu  *2 XEON 5620 
  3. mem 32GB 
  4. disk *4 300G 10k sas  
  5. perc 6i raid 10 

线上虚拟机资源分配:


 
 
  1. haproxy 2 vcpu/2GB mem/30GB vdisk/       #耗网络(相对) 
  2. iis 4vcpu/6GB mem/60GB vdisk/            #耗cpu+内存 
  3. memcache 2vcpu/10GB mem/30GB vdisk/      #耗内存 
  4. lucene 4vcpu/10GB mem/80GB vdisk/        #耗内存 
  5. sqlserver 4vcpu/10GB mem/100GB vdisk/    #耗cpu+内存+IO 

注意事项从四个方面考虑,包括

1. 处理器性能:为虚拟机分配资源要考虑服务器类型,不建议为虚拟机分配过多的vcpu"够用则好",否则将导致此虚拟机抢占资源太多,会影响同一宿主机上的其它虚拟机的正常共作 。 
2. 内存容量:分配内存与分配cpu大致相同“够用则好”,不过不要忘记为ESXI主机预留一定内存用于ESXI自身开销,线上ESXI主机一般预留1GB至2GB内存。 
3. I/O资源:结合实际i/o使用情况,建议一台ESXI主机虚拟机数量小于6个,以线上服务器为例,一般一台ESXI主机在3-4台虚拟机之间,当然这个不是绝对的,比如线上另一台mysql 从库服务器独享 ESXI主机全部资源。 
4. 网络资源:由于几台虚拟机共享ESXI主机网络设备,所以高带宽高流量的服务要注意,可以将ESXI主机的某个网卡独享给每台虚拟机


最后我们可以看到 ,虚拟机部署是按照不同服务类型来分摊到每个一ESXI主机上的,而不是把全部的鸡蛋放在一个篮子里面,这样做的原因是如果服务器硬件造成的故障,线上服务影响到最小限度;其次,分析不同服务类型占用的资源不同再对虚拟机作出调整,比如 haproxy 很省资源,只分给其 2 vcpu/2GB mem/30GB vdisk/ 。 

不适用于虚拟化
目前来讲,假如系统 负载/IO/cpu/内存/网络 等较小,都可以迁移至虚拟化平台,但是 IO/cpu/内存/网络 等等要求极高,
例如"繁忙"的数据库 或者本项目中的 cdn源站服务器(磁盘),虚拟化就需要三思而后行了,当然为了方便集中管理,可以将ESXI主机全部资源分给此虚拟机,此虚拟机独享ESXI全部资源 (VMware vsphere 5 )

四 成本对比


 
 
  1. XXX项目     服务器数量  机位数量    耗电量 
  2.  
  3. 物理机       13 台        14       约10安 
  4.  
  5. 虚拟化       5  台         6       约4安 


结束
此文资料来自公司线上某项目,这里我们讨论了网站架构与虚拟化,如有不妥之处还肯请老鸟多指点,新同学可以当作简单的参考资料,如有疑问欢迎到此讨论(你懂得) 37275208!


本文转自 dongnan 51CTO博客,原文链接:http://blog.51cto.com/dngood/764387

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
25天前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
26 3
|
2月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
120 2
|
22天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
83 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
1月前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
52 6
|
1月前
|
存储 前端开发 数据可视化
在实际项目中,如何选择使用 Flux 架构或传统的 MVC 架构
在实际项目中选择使用Flux架构或传统MVC架构时,需考虑项目复杂度、团队熟悉度和性能需求。Flux适合大型、高并发应用,MVC则适用于中小型、逻辑简单的项目。
|
2月前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
50 2
|
2月前
|
存储 分布式计算 Hadoop
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
Hadoop-33 HBase 初识简介 项目简介 整体架构 HMaster HRegionServer Region
57 2
|
3月前
|
负载均衡 数据库 开发工具
|
3月前
|
Java 数据库 Maven
谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器
项目介绍、项目环境搭建、docker配置mysql,redis,jdk,maven、人人开源、快速开发、安装nodejs、逆向工程搭建,人人开源代码生成器
谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器
|
2月前
|
缓存 前端开发 JavaScript
前端架构思考:代码复用带来的隐形耦合,可能让大模型造轮子是更好的选择-从 CDN 依赖包被删导致个站打不开到数年前因11 行代码导致上千项目崩溃谈谈npm黑洞 - 统计下你的项目有多少个依赖吧!
最近,我的个人网站因免费CDN上的Vue.js包路径变更导致无法访问,引发了我对前端依赖管理的深刻反思。文章探讨了NPM依赖陷阱、开源库所有权与维护压力、NPM生态问题,并提出减少不必要的依赖、重视模块设计等建议,以提升前端项目的稳定性和可控性。通过“left_pad”事件及个人经历,强调了依赖管理的重要性和让大模型代替人造轮子的潜在收益