Architecture
记录一些关于Linux服务器管理和系统架构方方面的信息。
程序架构
Nov 4th
大家都听过系统架构,软件架构,程序也要架构吗?
当然需求,我们不是常说“三层架构”吗?表现层,业务层,数据层。只有充分理解了三层架构的含义,才能更好的和其它人一起开发,使组内成员达成一致,能使程序路径清晰,明确任务分工和协作人员,提高了开发效率。
在此之前还想解释一个名词,程序设计,
所以,我想把程序架构解释成:对整个代码结构和规范的一个蓝图,有待补充。
下面是我做的拍拍项目的程序架构,由Raymond主持的项目,当时我是等Raymond架构好了业务层和数据层后加入项目的。也正是由于良好的程序架构,使得我很快的熟悉了代码,很容易的就理解了思想和需求,这不是就把方法的注释写到方法名里,把产品的需求写到程序架构里吗?
其实这个规范主要是遵循了一个达成共识,会让大多数人习惯。
表示层:按页面来分,比如:上传控制器,组图列表控制器。
业务层:按业务的需求来分,比如:图片管理器(组图,单图),用户管理器(用户信息,用户权限)。
数据层:这个是最好分的了,一般也不会有什么大的标新立异,直接和表一一对应。
所以说,经历了这个项目,培养了一种思维方式。
什么是反向代理
Nov 4th
Reverse Proxy 反向代理
反向代理指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。
Windows环境下的项目环境搭建(Tomcat+Apache+Memcached+ActiveMQ+MySQL)
Jul 26th
首先到 http://labs.xiaonei.com/apache-mirror/ 下载相关的软件。
http://labs.xiaonei.com/apache-mirror/activemq/apache-activemq/5.2.0/apache-activemq-5.2.0-bin.zip 这个软件现在不用,不过以
后会用的。
http://labs.xiaonei.com/apache-mirror/httpd/binaries/win32/apache_2.2.11-win32-x86-no_ssl.msi
http://labs.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.exe
http://labs.xiaonei.com/apache-mirror/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28/mod_jk-1.2.28-httpd-2.2.3.so
http://www.splinedancer.com/memcached-win32/memcached-1.2.4-Win32-Preview-20080309_bin.zip 这个软件以后也会用
现在这几个软件被安装在以下目录
D:\Program Files\Apache Software Foundation\Tomcat 6.0
D:\Program Files\Apache Software Foundation\Apache2.2
D:\Program Files\Apache Software Foundation\apache-activemq-5.2.0
首先把mod_jk-1.2.28-httpd-2.2.3.so文件复制到
D:\Program Files\Apache Software Foundation\Apache2.2\modules
改名为mod_jk.so
再在
D:\Program Files\Apache Software Foundation\Apache2.2\conf
创建文件
workers.properties
内容为
workers.tomcat_home=D:\Program Files\Apache Software Foundation\Tomcat 6.0
workers.java_home=D:\Program Files\Java\jdk
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
然后在文件D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 找到
LoadModule rewrite_module modules/mod_rewrite.so
去掉前面的#号
再添加
LoadModule jk_module modules/mod_jk.so
在文件的最后添加
JkWorkersFile “D:\Program Files\Apache Software Foundation\Apache2.2\conf\workers.properties”
JkLogFile “D:\Program Files\Apache Software Foundation\Apache2.2\logs\mod_jk2.log”
JkLogLevel inf
<VirtualHost *:80> DocumentRoot "D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\iguoer" ServerName www.iguoer.com DirectoryIndex index.html index.htm index.jsp ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common JkMount /dwr/* ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 </VirtualHost>
现在去配置Tomcat
找到文件
D:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\server.xml
如果你安装的Tomcat和我的版本是一样的话,在文件的最后面应该可以找到
<Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine>
我修改为
<Engine name="Catalina" defaultHost="www.iguoer.com"> <Host name="www.iguoer.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="iguoer" reloadable="true" /> </Host> </Engine>
修改这段后,此时Tomcat的根目录为
D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\iguoer
这样用Eclipse的插件,就能启动项目为根目录启动了。
当然还可以配置不同域名访问不同目录
<Engine name="Catalina" defaultHost="www.iguoer.com"> <Host name="www.iguoer.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="iguoer" reloadable="true" /> </Host> <Host name="img.iguoer.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\iguoer" reloadable="true" /> </Host> </Engine>
当然不要忘记修改你的C:\Windows\System32\drivers\etc\hosts
127.0.0.1 www.iguoer.com
127.0.0.1 img.iguoer.com
127.0.0.1 memcached.iguoer.com
127.0.0.1 mysql.iguoer.com
127.0.0.1 mq.igueor.com
抛弃在Hibernate的二级缓存使用Memcached
Jul 19th
Memcached就像一个调皮的精灵,在你困难的时候,他会跳出来帮你一把,那绝对是雪中送。
不过,也如精灵的天性一样,喜欢冲破任何约束,感觉都不太可靠。
在Hibernate的二级缓存加上Memcached,似乎是把这个精灵捆住了,也正因为如此,Memcached不再是Memcached了。
扔掉这种想法吧,如果你使用了Memcached,就要做好他上窜下窜的准备,这就是他的魅力。
根据Spring注释确定包命名规则
Jul 19th
包的命名规则很多,说法也很多,但再怎么变也脱离不了三层架构这一说法,至少目前可以这么说。
在说新的规则之前,先说下我熟悉的老的命名规则。
表现层命名为:com.iguoer.web
如果使用Struts的话,会命名为:com.iguoer.web.action
如果使用Spring MVC的话,会命名为:com.iguoer.web.controller
业务层一般命名有两种
com.iguoer.service 和 com.iguoer.business
数据层一般命名为:com.iguoer.dao
使用hibernate的话,就有com.iguoer.dao.hibernate
根据有些解释三层架构的图上说,穿越三层的是一个叫domain域的东西,所以就有了
com.iguoer.domain
实体被称为持久化对象
所以有了com.iguoer.domain.po
组装后给页面有值对象,所以有了com.iguoer.domain.vo
一般工具类被放在com.iguoer.util中
应用程序放在com.iguoer.app中
我现在根据Spring的注释,重新写一个包的命名,当然这首先建立在你对三层架构的熟悉上。
com.iguoer.app 应用程序
com.iguoer.combo 组合对象,传给页面,相当于com.iguoer.domain.vo
com.iguoer.controller MVC中的控制,Spring的注释@controller
com.iguoer.controller.admin 管理员表现层
com.iguoer.controller.filter 表现层的过滤器
com.iguoer.entity 实体,相当于com.iguoer.domain.po Spring的注释@entity
com.iguoer.repository 储藏室,相当于数据层,类似com.iguoer.dao Spring的注释@repository
com.iguoer.security 保密包,说明这里的东西尤为重要
com.iguoer.service 业务层,服务层,相当于com.iguoer.business Spring的注释@service
com.iguoer.util 工具类
注:上面所说的表现层,其实指的只是MVC设计模式中的控制
XX的优点
Jul 16th
- 异步消息机制处理用户动态
- 点击数用日志统计
- Squid+Memcached缓存机制(及时刷新)
- 读写分离(*)
- 索引文件伪静态实现半动态化(延时刷新)
- 使用Javascript框架(jQuery)实现页面效果
- 目录采用树形结构(树路径)-自定义目录
- 容许一定数据的冗余(不能是排序或搜索数据)。
Spring Community Downloads
Jul 8th
- Spring Framework
- SpringSource dm Server Samples
- Spring Security
- Spring Web Flow
- Spring Web Services
- Spring Dynamic Modules
- Spring Integration
- Spring Batch
- Spring.NET
- Spring JavaConfig
- Spring LDAP
- Spring IDE
- Spring BlazeDS Integration
- SpringSource Bundlor
- Spring Roo
- Spring Python
- SpringSource OSGi Test Stubs
