从一个系统架构展现我们需要掌握哪些技术

最近想总结下自己已掌握了哪些技术,还有哪些技术可以学习,所以写下这篇文章。

先从一张系统架构图开始说起:

这个系统没有具体的名称,严格来说只代表了一种“思想”。这种“思想”就是对外提供一种能力,这种能力根据业务处理层的service决定。比如将这种架构运用到“XX交易平台”,提供的能力就是转账、账户查询;将这种架构运用到“XX终端管理系统”,提供的能力就是终端设备的认证、升级等。

消息接收层:

系统的对外入口,提供对外接口给其他平台(也有可能是手机等智能终端)调用。对外的接口可以用各种形式展现。

基于HTTP协议可以是webservice或RESTful接口。webservice更加面向服务,RESTful更加面向资源。webservice的实现框架有jaxws、axis、CXF等。RESTful的实现框架有Jersey、Restlet等。

TCP/IP层的协议就是我们俗称的socket,有阻塞(BIO)还非阻塞(NIO)之分。为了提高性能常和线程池一起使用,JDK1.5并发库对线程池有比较好的封装类ThreadPoolExecutor。为了编码方便,Mina是一个开源的比较好的NIO封装框架。

JMS是java消息服务,开源框架ActiveMQ是一种比较好的实现。

消息解析层:

上一层主要负责接收数据,数据的封装可以是xml、json、二进制流等。消息解析层的主要任务就是将这些数据进行解析,给下一层的数据就是Java对象。有专门的数据解析模块负责做这件事情。xml的解析可以使用dom4j、SAX等。json的解析可以用Gson等。

为了保证数据的安全传输,要用到数据安全相关知识。采用对称加密和非对称加密保证数据不能被外部破解,采用摘要算法保证数据的完整性,采用签名/验签算法保证数据不可抵赖,把这些结合起来就形成了证书的概念,需要我们掌握SSL相关知识。有专门的安全模块负责做这些事情。

接下来我们需要对数据进行Validate,既要验证数据是否符合平台定义的格式,也要验证数据是否过期(采用token),由验证模块去做这些事情。

对于一个优秀的框架都有过滤器的概念,比如struts、mina等。同样这一层有可以自定义过滤器。

业务处理层:

系统的核心,决定了系统能“做什么”,类似于3层架构里面的service层。比如“转账”操作,我们可以称之为一个service,可以提供转账的能力。再打个比方,“转账”分为“PC转账”和“手机转账”,前者需要步骤1、2、3,后者需要步骤1、3、4,每个步骤我们可以定义成一个不能拆分的原子任务。“PC转账”有三个原子任务,“手机转账“也有三个原子任务,并且他们有两个共同的原子任务。我们可以用xml+反射写一套原子任务模板,不需要任何代码就能将这些原子任务组装成一个service,同样一个service的原子任务改变了,也不需要改任何代码,改个xml配置文件就生效。

最后简单说下反射机制,JDK里面提供了动态代理,但开源包cglib实现起来更加方便,spring和hibernate都用到了cglib。

数据持久层:

一般我们采用数据库存储数据。最原始的方式肯定是JDBC,为了提高效率采用数据库连接池DBCP、C3P0等。为了操作方便还可以采用一些ORM框架Hibernate、ibatis等。当业务复杂到jvm处理不过来的时候,我们可以考虑将复杂的流程写到存储过程里面去。

当数据到了一个数量级并且访问频繁,我们可以采用缓存技术,memcached和redis等。比如设备认证,当设备到了十万数量级,并且认证操作频繁发生,每次读取数据库应付不过来,可以将设备信息用缓存来存储。

每一层的功能都介绍完了,到时候肯定会有很多类,这时该spring登场了。将所有的业务方法都注册到spring的Ioc容器里面,管理起来更加方便。另外spring还提供了aop、事务管理等功能,能帮助我们开发出非侵入式的代码。并且很多框架都能和spring进行整合。

写了这么多,其实就是先介绍一种”思想“,要实现这种”思想“需要用到哪些技术,有哪些框架实现这些技术。最终我们有哪些东西需要去学习。

猜你喜欢

转载自ye-liang.iteye.com/blog/2028584