服务器端架构
摘自于某位大神PPT
一、技术架构的演变及使用场景
- 单一架构 ORM(对象关系映射)
- 垂直应用架构 MVC
- 分布式服务架构 RPC
- 流动计算架构 SOA
Tip: 图片中数字是指并发量
二、架构优化之路
- 应用服务器与数据服务器分离
- 应用服务器集群
- 负载均衡
三、现主要针对负载均衡问题进行讨论:
负载均衡问题:
- 用户的请求由谁来转发到具体的应用服务器
- 有什么转发的算法
- 应用服务器如何返回用户的请求
- 用户如果每次访问到的服务器不一样,那么如何维护sesion的一致性
负载均衡解决方案:
针对第一个问题:用户请求由谁来转发到具体的应用服务器
- HTTP重定向
- DNS域名解析
- 反向代理技术
- IP层负载均衡
- 数据链路层负载均衡
转发算法
- RR(轮询)
- WRR(加权轮询)
- SH(源地址散列)
- DH(目标地址散列)
- LC(最少链接)
- WLC(加权最少链接)
- SED(最短期望延迟)
- NQ(永不排队)
- LBLC(基于局部性的最少连接)
- LBLCR(带赋值的基于局部性的最少连接)
集群模式相关问题(以下三种模式,具体了解可根据这个链接 http://www.linuxidc.com/Linux/2012-09/71340.htm 额 研究的话我就算了,我只负责记录)
- NAT(网络地址转换)
- DR
- TUN
针对之上提到的转发算法和集群模式,我们只需要了解即可,因为已有现有服务器本身就支持,所以我们可根据自己的需要,选择适合自己的就好。
- nginx目录支持的负载均衡算法有wrr、sh(支持一致性哈希)、fair。但nginx作为均衡器的话,还可以一同作为静态资源服务器。
- keepalived+ipvsadm比较强大,目前支持的算法有:rr、wrr、lc 、wlc、 lblc、 sh、 dh
- keepalived支持集群模式有:NAT DR TUN
如何保证session共享
- Session Sticky
- Session Replication
- Session集中存储
- 基于cookie
四、
a) 架构优化之路-带负载均衡的架构
b) 架构优化之路-用搜索引擎缓解读库的压力
c) 架构优化之路-用缓存缓解读库的压力
d) 架构优化之路-数据库水平拆分与垂直拆分
例子如下(从网上盗用):
摘:
数据库水平拆分和垂直拆分区别(以mysql为例)
案例:
简单购物系统暂设涉及如下表:
1.产品表(数据量10w,稳定)
2.订单表(数据量200w,且有增长趋势)
3.用户表 (数据量100w,且有增长趋势)
以mysql为例讲述下水平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万
垂直拆分:
解决问题:
表与表之间的io竞争
不解决问题:
单表中数据量增长出现的压力
方案:
把产品表和用户表放到一个server上
订单表单独放到一个server上
水平拆分:
解决问题:
单表中数据量增长出现的压力
不解决问题:
表与表之间的io争夺
方案:
用户表通过性别拆分为男用户表和女用户表
订单表通过已完成和完成中拆分为已完成订单和未完成订单
产品表 未完成订单放一个server上
已完成订单表盒男用户表放一个server上
女用户表放一个server上(女的爱购物 哈哈)
e) 架构优化之路-应用拆分
f) 架构优化之路-引入消息中间件
五、开发框架介绍:
常用开发框架说明:
SSM springmvc spring mybatis
SSH struts2+Spring+hibernate