首页 > 代码库 > 什么是分布式系统
什么是分布式系统
任务分解
任务分成两部分,client和server。client和server执行不同的任务,client需要调用server来实现自己的任务。
节点通信
在基于B/S架构的设计中,广泛采用HTTP作为通信协议。
三层架构(多层架构,3-tier architecture, n-tier architecture)
peer-to-peer架构
peer-to-peer的分布式系统中,各个节点都是对等的,运行同种类型的任务。各个节点协同工作,整个分布式系统对外看来,就像一台机器,只不过性能更强。这种p2p架构的分布式系统其实就是集群。
分布式系统和集群的关系
从狭义上说还是可以做一些区分:
集群:所有节点一起工作,实现同一服务。一个节点挂掉,不会对集群有任何影响。
分布式系统:系统每一个节点,都实现不同的服务,如果一个节点挂了,这个服务就不可访问了。在实际部署中,分布式系统中的每个节点都可以是一个集群,这样可以提高服务的可用性,性能等。
关于集群的介绍,可以参考之前的博文《什么是集群》
tier和layer的区别
这两个词的中文翻译都是层,而且在各种架构描述中大量使用。他们之间有什么区别?
tier用来描述系统的物理架构,或者说基础设施(infrastructure)设计。不同的tier之间是互相独立的,可以单独部署、监控。
layer用来描述系统的逻辑层次结构。针对每一个tier,可以使用layer来描述其设计实现架构。通常不同layer之间是有依赖关系的(上层依赖下层),而且运行在同一个进程空间中,比如经典的TPC/IP分层(layer)设计。
分布式系统实例
openstack架构
openstack包含了若干个组件(component),nova ,neturon,cinder,keystone等。其中的每个组件都是一个分布式系统。关于openstack的介绍可以看我的博文,有好多篇。
openstac中RPC基于消息队列实现,具体参考博文《openstack学习之RPC》
任务分解
任务分成3部分:
展现层(presentation tier, or web tier)
给用户提供操作界面GUI来使用该系统。一般是生成页面,使用HTTP协议访问,在浏览器中展现。随着移动端的流行,需要生成适合移动端访问的页面。
Java EE中在这一层,提供了很多的技术与规范,来支持应用开发。
Servlet:web tier的基石。
JSP
Unified Expression Language (EL)
JavaServer Pages Standard Tag Library (JSTL) 1.2 1.2
JavaServer Faces (JSF)
业务逻辑层(business tier, or application tier)
具体的业务代码实现。web层会调用这一层。系统中的一些通用服务(所谓的cross cutting)也可以放在这一层来实现,如安全,日志等,数据检索等服务。
Java EE在这一层的技术与规范
Java API for RESTful Web Services (JAX-RS) :开发基于rest的服务。rest是目前的主流技术了。
Enterprise JavaBeans (EJB) :ejb的服务。早起的EJB过于复杂和笨重,不知ejb lite是否会好点。
Java Transaction API (JTA):事物处理API,支持XA协议。
Java Persistence API (JPA) :OR mapping API,源于Hibernate的API。
数据层
用来保存系统中的持久化数据。数据层的存储方式可以是:
关系数据库 + SAN storage
分布式文件系统(根据文本的描写,应叫文件系统集群)
NoSQL系统:NOSQL的数据模型,各不相同,产品也多种多样,根据业务特点选择。
Amazon的 S3
mongo
缓存
目前的web系统都会使用缓存来提高系统性能,传统的三层架构中没有谈到缓存。
缓存可以分成
数据缓存:比如memcached
页面缓存:如CSN系统
节点通信
Web层广泛采用HTTP作为通信协议。
业务逻辑层使用web service(REST).
数据层,不同产品有不同的协议。针对关系数据库,Java提供了JDBC访问接口。