应用架构演变.md

单体架构,简单,单节点,all in one,开发速度及其之快

但是系统的可拓展性差,鲁棒性差.且代码耦合度很高,所以可更改性也不高.

单点故障,一台机器不能用,全部就挂了.中间某些组件出了问题,整个应用的不可用性就很高.

先把数据库拆出来

在前面加入了一个Nginx,提供了反向代理的功能.Nginx基于7层网络,可以得到用户提交的一切数据.当一个网络数据包传输到接入层的时候,Nginx可以看到用户的URL.所以Nginx可以做一个动静分离,根据用户的URL请求,可以分析它的请求是静态资源还是动态的资源,对于静态资源的话可以用Nginx做代理,然后动态请求打到Tomcat中.

还可以根据用户的请求数,作一次流量清洗和资源隔离,防止恶意请求.软防火墙

对数据层做一次缓存,虽然数据库还是在一库中,但是加了一层Memcached,缓存热点数据,也可以用Redis等等

当数据库压力太大时,我们就要开始分库分表了.读写分离.并且还可以用商业级别的数据库,如SqlServer ,Oracle等等.不同的模块写到不同的数据库中,做跨库的表进行关联,里面涉及到跨库的join等等

将文件上传,下载的功能分离出来,可以做云服务,dfs,第三方文件集群等等.其他的方案:FTP(治理麻烦),Tomcat(谁用谁傻逼),数据库(...)

对于云服务来说,它的治理相对方便,而且可用率比较高

第三方的文件集群来说,是基本来说最优的选择,如FastDFS,高可用,低延迟,治理程度高.只是在第一次部署的时候会比较麻烦,但是后期的维护和治理很方便,并且性能比较高.还有最重要的一点来说,在传输图片的时候,可以自定义图片的裁剪,转码,水印等等.

再回到接入层中,给Nginx增加了一个负载均衡,Nginx的均衡负载器性能较高,同样的功能,可以使用linux的内置lvs作为均衡负载,其功能比较少,但是性能很高,QPS在30W+,而nginx的负载均衡器的qps在5w.Nginx的负载均衡可以有多种方式,比如轮询,ip哈希,权重等.

应用层做了Tomcat集群.关于如何选用,如果我们属于网络IO密集型的话,服务器瓶颈来自有IO.那么就可以用LVS,因为它不建立握手,只是做请求的转发,但是响应是从tomcat直接返回客户端,此时nginx的能力是做不到的.

但是如果我们的服务是计算密集型,不太依赖网络的IO,这个时候压力就来到了计算这边,在Tomcat集群中反复计算,那么可以用nginx

如果是既有IO,也有计算的,我们就需要用一个nginx集群和lvs做负载均衡了

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×