公司采集程序与tomcat比较


最近经领导介绍,有幸细读了一下《深入剖析Tomcat》一书,感觉颇深。发现其中有很多架构设计可以值得公司现在正在开发的采集程序借鉴。

一、我们通过tomcat和采集程序的生命周期,了解一下两者的相似之处

1、tomcat生命周期,此处引用网友解析

从Tomcat处理用户请求,我们可以清晰的看到容器Servlet的生命周期管理过程:
  1、客户发出请求—>Web 服务器转发到Web容器Tomcat;
  2、Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest和HttpServletResponse;
  3、从请求中的URL中找到正确Servlet,Tomcat为其创建或者分配一个线程,同时把2创建的两个对象传递给该线程;
  4、Tomcat调用Servlet的servic()方法,根据请求参数的不同调用doGet()或者doPost()方法;
  5、假设是HTTP GET请求,doGet()方法生成静态页面,并组合到响应对象里;
  6、Servlet线程结束,Tomcat将响应对象转换为HTTP响应发回给客户,同时删除请求和响应对象。
  从该过程中,我们可以理解Servlet的生命周期:Servlet类加载(对应3步);Servlet实例化(对应3步);调用init方法(对应3步);调用service()方法(对应4、5步);调用destroy()方法(对应6步)。

  servlet容器可以理解为服务器,tomcat就是一个servlet容器.当用户有一个请求发来的时候,送到了tomcat端,即送到了servlet容器中,容器就创建一个servlet实例用来处理这个请求.通过init()方法初始化实例,然后就调用service()方法处理请求,并将结果返回. tomcat就返回一个响应.servlet在之后的过程中,如果没有被继续使用就会调用destory()方法销毁. 要注意的是,servlet容器和servlet的区别.容器就好比一个篮子,里面有很多苹果,就是servlet.苹果可以不断的拿进拿出,但是篮子没了[服务器关闭]之后就什么也没有了.

2、采集程序的生命周期

采集程序的采集工作根据采集器的不同,可以分为三种方式

(1)采集程序等待采集器定时返回电表的电能数据。

这种方式采集程序设计比较简单,只需要采集程序监听某个端口,接收采集器发送回来的电能数据即可。


 
 这种工作方式采集程序的压力在后台处理线程上,当采集器达到一定数或者采集频率小到一定值时,会达到采集程序的瓶颈。目前测试认为一分钟同时发送400条数据,连续发送1小时,即24000个采集器时,采集程序将出现解析不过来的现象。

采集器支持电表的类型达到最大化,但是采集器的故障点比较多,采集器有时钟、存储、内部处理,如果一个有问题,采集器不能正常工作,存在的隐患比较多。

(2)采集器发送报文后,切换到服务器模式,等待采集程序采集。

 

这种工作方式,对与tomcat很像,每个采集器可以看作一个request请求。这种工作方式处理的重点是采集程序后台处理线程,因为采集器的数量和采集的频率,一个后台处理线程是远远不够的,所以在处理时,应当考虑多线程的处理方式。而且这种处理方式处理设备的实时性方面要比上一个方式要差一些。但由于采集器不存在时钟和存储,采集器只能支持目前电表带冻结的一部分645电表。采集程序的设计要比前两者要更加复杂。

3、采集程序主动读采集器 


 
这种方式,只用传输作为桥梁,硬件设计达到最简化,成本能够很好控制。

由于采集程序通过原文下发方式读取电表数据,所以网络压力比较大,传输过程中出现错误情况比较多。

这种方式下,采集程序承受的电表数量受到了严重的限制。

猜你喜欢

转载自wang-cheng.iteye.com/blog/1507430