[知了开发]“知了”优化-整体架构

写在前面

知了开发的整体架构在前面的博客中有介绍:
http://blog.csdn.net/wsrspirit/article/details/51960147
先看一下,然后再说优化
[优化这种东西会不定期的更新,毕竟也是一点点摸索出来的]

最重要的

既然是优化,那么一定存在着不理想或者不可用,这些都是实际开发过之后才遇到的问题,也就是说在我们想着优化之前,你是否认真的接触过你项目的每一部分开发,以及是否理解项目各个业务的组成及重要性,这才能决定应该如何的优化

组成

这里写图片描述
项目主要的组成是如下,最核心的是get,也就是获得信息的功能。JPush是极光推送模块,WebMagic是爬虫模块,SQL是连接池及MySQL。
目前由于,而且一个工程开发也确实简单易行,所以这些东西目前全部在一个工程中,在最近的测试中,经常发现服务器内存和cpu被占的很满,然后get的响应时间慢的一笔,这是不能接受的。
那我们来分析一下,首先get请求是我们项目中最最核心的东西,如果挂了,那么直接导致APP不可用,get请求主要是接受http请求,它最需要的是线程资源。
WebMagic是CPU密集型,爬数据又是IO密集型,同样也需要线程资源,往往一开爬虫整个服务器的CPU+内存空间之间满了。
JPush同样是IO密集,而且Jpush的Java SDk在推送时没有实现线程池,也就是说你的推送功能是同步阻塞的,OMG!就算使用线程池,那也同样会耗费线程资源。
SQL同样会消耗大量的服务器资源,连接池使用的是阿里的druid,又是线程。。

优化

那么我预想的系统架构可以是这样
这里写图片描述
系统的各个组成将会分开。get仍然是最最重要的,单独分一台机子。同时这台自己必须要外网能够访问。
Jpush可以通过MQ传递,推荐使用阿里的RocketMq,如果想造轮子也可以模仿一下,毕竟存在一点点的时延是可以接受的。这样讲比较大较少对get系统的负担。
WebMagic可以完全独立,只讲爬到的数据存储至数据库即可。
SQL基本上可以定位为服务了,因为每个get请求都会涉及数据库数据的访问,所以我们可以设计一套RPC系统,将服务注册至该系统,基于Spring的RPC框架也是有一些的,这样就可以同时为get和WebMagic提供服务了。
如果我们将SQL放置在另外一台机子,那么访问的速度一定没有本机快,网络资源也是我们需要考虑的,像我这种1M的带宽是有点吃力的,为什么,因为get请求会与SQL同时消耗网络请求,也就是说每一个get请求将会导致一个或更多的SQL网络请求。这在1M带宽下还是有影响的。但同时也将会使get系统变得更轻,更服务化,也更便于运维~

还有哪些优化

这些是我目前涉及到的,会陆续加的
- 既然是get请求,又涉及数据库,那么SQL的优化怎么可能少?
- 是get就一定会有缓存吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值