大型网站架构演变过程、大并发服务器架构

大型网站架构演变过程:

[Step1]web server与数据库分离

web动静资源分离

静态请求:如html, js, css, img

动态请求:如jsp, php

[Step2]缓存处理

客户端(浏览器)缓存 前端页面缓存(squid) 页面片段缓存ESI(Edge Side Includes) 本地数据缓存

[Step3]web server集群+读写分离

负载均衡:

前端负载均衡

DNS负载均衡

在DNS服务器中,可以为多个不同的地址配置同一个名字,对于不同的客户机访问同一个名字,得到不同的地址。

反向代理

使用代理服务器将请求发给内部服务器,让代理服务器将请求均匀转发给多台内部web服务器之一,从而达到负载均衡的目的。标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。

基于NAT的负载均衡技术 LVS F5硬件负载均衡

应用服务器负载均衡 数据库负载均衡

[Step4]CDN、分布式缓存、分库分表

分布式缓存

目前流行分布式缓存方案:memcached、membase、redis等,基本上当前的NoSQL方案都可以用来做分布式缓存方案

分库(垂直分区)

分表(水平分区shared)

[Step5]多数据中心+分布式存储与计算

技术点[DFS、Key-Value DB 、 Map/Reduce ]

DFS分布式文件系统,如:Lustre\HDFS\GFS\TFS\FreeNas等 Key-Value DB,也作为NoSQL解决方案,如:BigTable\Tair\Hbase\HyperTable等 Map/Reduce算法(计算框架),基本上现有NoSQL数据库中都支持此算法。 提供完整解决方案:

   Google(GFS|BigTable|Map/Reduce)    Apache Hadoop(HDFS|HBase|Map/Reduce) 

大并发服务器架构:

垂直分区:比如用户表、业务表、基础表各有各自的读写数据库。

水平分区:比如用户表、业务表、基础表各有1000条记录,则水平分割分布在10对读写库。

服务器性能杀手:

1、数据拷贝:(缓存,不是指分布式缓存,指的是服务器内部的,如从内核拷贝到应用层的缓存)

2、环境切换:(理性使用多线程)单核(使用状态机编程效果最佳),多线程能够发挥多核服务器最佳性能

3、内存分配:(内存池)减少向操作系统申请内存的次数

4、锁竞争:(通过逻辑尽量减少锁的使用,或者锁的竞争)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏YG小书屋

kudu介绍与操作方式

Kudu是cloudera开源的运行在hadoop平台上的列式存储系统,拥有Hadoop生态系统应用的常见技术特性,运行在一般的商用硬件上,支持水平扩展,高可用...

1.5K5
来自专栏京东技术

老板们不知道的秘密:开启自动化测试,让我们一起以逸待劳

我认为所有的UI自动化测试都分成基本的三个步骤:定位元素,操作元素和执行断言。大家在做UI自动化不同的主要是方案的选型,封装优化的方式不同。目前移动App的更新...

1833
来自专栏Jerry的SAP技术分享

C4C Product Price List的模型中和有效期相关的两个字段

SAP C4C的price list实例可以在工作中心Products,视图Price Lists里看到。

1427
来自专栏性能与架构

Kafka 高可用设计

Kafka在早期版本中,并不提供高可用机制,一旦某个Broker宕机,其上所有Partition都无法继续提供服务,甚至发生数据丢失 对于分布式系统,当集群规...

5837
来自专栏jeremy的技术点滴

开发者的博客写作环境

2747
来自专栏程序人生

谈谈用户权限系统

登录这事之于一个需要识别用户身份的产品,就仿佛cs101之于computer science。感谢各种语言里各种优秀的登录模块(比如nodejs的passpor...

2794
来自专栏小文博客

在线检测WP站点是否安全

1912
来自专栏人云亦云

Storm参数配置及代码优化

3885
来自专栏北京马哥教育

一篇了解爬虫技术方方面面

原理 传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件...

4239
来自专栏云计算

基于Go语言使用NATS Streaming构建分布式系统和微服务

一段时间前,我写了一篇名为向 Go 语言开发者介绍 NATS 的博客文章以便使用Apcera NATS 作为基于GO语言的构建分布式系统和微服务的消息系统。在本...

1K3

扫码关注云+社区