• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回服务器栏目

1 - 基本 - 技术升级路线

作者:

贺及楼

成为作者

更新日期:2023-12-04 14:30:32

1.开始(1个服务器)

一台服务器,应用、DB、文件
优点很明显,开发部署都简单

mysql优化
IP多次访问拒绝

加内存
加带宽
加CPU(一个疑问:如果程序不是多核编写的话怎么办)

一台服务器同时可以处理7000个用户左右
计算方法根据内存大约是:
1个Django、Flask线程大约30mb内存

  1. 256g*1024/30mb = 8700
  2. 当然还有mysql、系统、Redis等等7000同时在线左右
  3. 10w/年左右吧,274元/天

所以腾讯大概有1000台服务器左右(估计而已,加上腾讯云估计是不止)
阿里云新闻说有200万台服务器???
全世界70亿人,3500人用一台???
我觉得有点离谱,是把一些小功率的都算上去吧

2.应用服务数据服务分离(应用服务器+数据服务器 = 2个服务器)

随着访问量的增长,出现问题了:web性能变差,数据存储空间不够
这时候需要更多的服务器,首要任务是将数据库分离出来,单独占用一台服务器,如果文件读写多,需要增加文件服务器;不同的服务器对硬件的要求也不尽相同:
应用服务器需要处理大量业务逻辑,这需要更强的CPU;
数据库服务器需要快速磁盘检索和数据缓存,这需要更快的硬盘和更大的内存;
文件服务器需要存储用户上传的文件,需要更大的硬盘;

数据库服务器2核cpu、4g内存,5000-6000元/年,如果觉得贵,那就是你的网站不值钱
AI机器学习 - 图片 - 服务器有好的GPU
轻载数据库服务器 - 大内存
重载数据库服务器 - 大内存 - SSD固态硬盘

3.redis缓存 +1服务器

访问量持续增长,web性能再次变差;
考虑使用缓存改善网站性能;web的访问规律:80%业务访问集中在20%的数据上;使用缓存,数据库压力得到有效缓解;
缓存可通过以下方式增加:
增加应用服务器本地缓存,这个最直接,也最简单;
增加远程分布式缓存集群;当本地的内存不足以放下需要缓存的数据时,就只有通过分布式;
使用类似Memcached之类的开源缓存产品,缓存更多的数据;

redis要独立一个数据库

4.负载均衡服务器Load Balance(应用服务器集群化)+1负载均衡服务器

单一应用服务器成为网站瓶颈;
解决方案:应用服务器集群化提高网站并发处理能力;
做成集群的关键是增加负载均衡服务器来调度应用集群

5.数据库读写分离 +1数据库(读)服务器

问题:当增加缓存之后,随着访问量的持续增长,数据库再次出现问题:数据库负载压力过高
数据写够要一个服务器承担
解决方案:数据库读写分离
利用数据库主从热备功能,实现读写分离;读写分离的细节这篇文章讲的很清楚了,就不多说,有需要的请参考:http://www.cnblogs.com/qlee/archive/2011/04/08/2009738.html

1写3读 - 甚至更多

6.全国甚至全球 - 使用反向代理和CDN

问题:网站做大,全国甚至全球各区域的访问量都来了,但是各区域的访问速度差别巨大;
解决方案:使用反向代理和CDN
CDN和反向代理基本原理都是缓存,CDN部署在网络提供商的机房,用户请求最近的节点访问;而反向代理则部署在网站的中心机房;

7.使用分布式FS和分布式DBS

问题:应用集群如果将session管理做好,或做成无状态的应用集群,可达到线性伸缩;而数据库的压力却不是很好解决;
解决方案:使用分布式数据库拆分,可使用的方法有:
单表拆分:将不同的表放到不同的库中,从而降低单个数据库的结点的负载;这样带来的问题就是不同库中的表无法做join操作;
另一种方法就是按业务拆分,将属于同一业务的表划分到一个库中,从而有效降低数据库负载,同时在业务逻辑实现上不至于过于复杂;

8.使用NoSQL和搜索引擎

问题:出现海量数据存储和检索的需求
解决方案:使用NoSQl产品分布式部署来支持海量数据的查询和存储;

9.业务拆分

按照业务来划分子系统,按产品线划分系统,通过分布式服务来协同工作;