服务器端架构

摘自于某位大神PPT

一、技术架构的演变及使用场景

 

  • 单一架构 ORM(对象关系映射)
  • 垂直应用架构 MVC
  • 分布式服务架构 RPC
  • 流动计算架构 SOA

  Tip: 图片中数字是指并发量

二、架构优化之路

  • 应用服务器与数据服务器分离
  • 应用服务器集群
  • 负载均衡

三、现主要针对负载均衡问题进行讨论:

负载均衡问题:

  1. 用户的请求由谁来转发到具体的应用服务器
  2. 有什么转发的算法
  3. 应用服务器如何返回用户的请求
  4. 用户如果每次访问到的服务器不一样,那么如何维护sesion的一致性

负载均衡解决方案:

  针对第一个问题:用户请求由谁来转发到具体的应用服务器

  1. HTTP重定向
  2. DNS域名解析
  3. 反向代理技术
  4. IP层负载均衡
  5. 数据链路层负载均衡

  转发算法

  1. RR(轮询)
  2. WRR(加权轮询)
  3. SH(源地址散列)
  4. DH(目标地址散列)
  5. LC(最少链接)
  6. WLC(加权最少链接)
  7. SED(最短期望延迟)
  8. NQ(永不排队)
  9. LBLC(基于局部性的最少连接)
  10. LBLCR(带赋值的基于局部性的最少连接)

  集群模式相关问题(以下三种模式,具体了解可根据这个链接 http://www.linuxidc.com/Linux/2012-09/71340.htm 额 研究的话我就算了,我只负责记录)

  1. NAT(网络地址转换)
  2. DR
  3. 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

 

posted @ 2016-12-04 12:23  纳豆  阅读(416)  评论(0编辑  收藏  举报