网站构建的发展路径(17年5月)

阶段一、单机构建网站
网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如把以上的所有软件都装载同一台机器上,应用跑起来了,也算是一个小系统了。

阶段二、应用服务器与数据库分离
增加的机器用来做什么呢?此时我们可以把数据库,web服务器拆分开来,这样不仅提高了单台机器的负载能力,也提高了容灾能力

阶段三、应用服务器集群
随着访问量继续增加,单台应用服务器已经无法满足需求了。在假设数据库服务器没有压力的情况下,我们可以把应用服务器从一台变成了两台甚至多台,把用户的请求分散到不同的服务器中,从而提高负载能力。多台应用服务器之间没有直接的交互,他们都是依赖数据库各自对外提供服务。

系统演变到这里,将会出现下面四个问题:
1、第一个问题即是负载均衡的问题
2、第二个问题即是集群调度算法问题,常见的调度算法有10种。
3、第三个问题是集群模式问题,一般3种解决方案:
4、第四个问题是session问题,一般有4种解决方
nginx作为均衡器的话,还可以一同作为静态资源服务器。
nginx本身并没有提供session同步的解决方案,而apache则提供了session共享的支持。

阶段四、数据库读写分离化
主从数据库之间数据同步问题,我们可以使用MYSQL自带的master+slave的方式实现主从复制。

阶段五、用搜索引擎缓解读库的压力

阶段六、用缓存缓解读库的压力
后台应用层和数据库层的缓存,可以使用redis作为数据库层的缓存。
而分析一下我们要存储的数据,无非就是类似{ip:errorNumber}这样的key:value数据。对于这种数据,我们可以用NOSQL数据库来代替传统的关系型数据库。

阶段七、数据库水平拆分与垂直拆分
交易、商品、用户的数据都还在同一个数据库中。尽管采取了增加缓存,读写分离的方式,但随着数据库的压力继续增加,数据库的瓶颈越来越突出,此时,我们可以有数据垂直拆分和水平拆分两种选择。
7.1、数据垂直拆分
垂直拆分的意思是把数据库中不同的业务数据拆分道不同的数据库中,结合现在的例子,就是把交易、商品、用户的数据分开。解决了原来把所有业务放在一个数据库中的压力问题。
7.2、数据水平拆分
数据水平拆分就是把同一个表中的数据拆分到两个甚至多个数据库中。产生数据水平拆分的原因是某个业务的数据量或者更新量到达了单个数据库的瓶颈,这时就可以把这个表拆分到两个或更多个数据库中。
阶段八、应用的拆分
用户、商品、交易拆分开。变成“用户、商品”和“用户,交易”两个子系统。
我们把对数据库的交互放在了各个服务中心,让”前端“的web应用更注重与浏览器交互的工作。
阶段九、引入消息中间件
随着网站的继续发展,我们的系统中可能出现不同语言开发的子模块和部署在不同平台的子系统。此时我们需要一个平台来传递可靠的,与平台和语言无关的数据,并且能够把负载均衡透明化,能在调用过程中收集调用数据并分析之。开源消息中间件有阿里的dubbo,可以搭配Google开源的分布式程序协调服务zookeeper实现服务器的注册与发现。

数据量和访问量的急速增加所带来的性能问题是所有技术发展的驱动力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值