浅谈web网站架构演变过程

由于工作较忙,随性更新。admin@stgod.com

前言

  我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。
  该系统具备的功能:
  • 用户模块:用户注册和管理
  • 商品模块:商品展示和管理
  • 交易模块:创建交易和管理

 

阶段一、单机构建网站

  网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate、maven+spring+springmvc+mybatis;最后再选择一个数据库管理系统来存储数据,如mysql、sqlserver、oracle,然后通过JDBC进行数据库的连接和操作。
  把以上的所有软件都装载同一台机器上,应用跑起来了,也算是一个小系统了。此时系统结果如下:
浅谈web网站架构演变过程

阶段二、应用服务器与数据库分离

  随着网站的上线,访问量逐步上升,服务器的负载慢慢提高,在服务器还没有超载的时候,我们应该就要做好准备,提升网站的负载能力。假如我们代码层面已难以优化,在不提高单台机器的性能的情况下,增加机器是一个不错的方式,不仅可以有效地提高系统的负载能力,而且性价比高。
  增加的机器用来做什么呢?此时我们可以把数据库,web服务器拆分开来,这样不仅提高了单台机器的负载能力,也提高了容灾能力。
  应用服务器与数据库分开后的架构如下图所示:
浅谈web网站架构演变过程

阶段三、应用服务器集群

  随着访问量继续增加,单台应用服务器已经无法满足需求了。在假设数据库服务器没有压力的情况下,我们可以把应用服务器从一台变成了两台甚至多台,把用户的请求分散到不同的服务器中,从而提高负载能力。多台应用服务器之间没有直接的交互,他们都是依赖数据库各自对外提供服务。著名的做故障切换的软件有keepalived,keepalived是一个类似于layer3、4、7交换机制的软件,他不是某个具体软件故障切换的专属品,而是可以适用于各种软件的一款产品。keepalived配合上ipvsadm又可以做负载均衡,可谓是神器。
  我们以增加了一台应用服务器为例,增加后的系统结构图如下:
浅谈web网站架构演变过程