基于LDAP 的Web 邮件服务器的设计与实现
发布日期:2021-09-18 01:36:48 浏览次数:4 分类:技术文章

本文共 4476 字,大约阅读时间需要 14 分钟。

E mail 是Internet 最常用的服务之一。ISP (服务提

供商) 的E mail 系统能否支持数以百万计的客户将决定
整个服务的成败。
大容量邮件性能的决定因素是网络效率和数据存储
方式。收取邮件的延时由网络延时和邮件系统延时两部分
组成。网络延时可通过提高网络层效率来减少; 邮件系统
延时指检取邮件时, 邮件服务器搜索、认证、邮件存储服
务器定位和读取等多步操作带来的延时。为了提高网络效
率, 需提高每一步的效率, 尽量消除瓶颈。在充分采用如
千兆以太网、SAN 高速存储等硬件技术的基础上, 改进邮
件系统的存储方式非常关键, 先进的信息存储技术对于提
高系统响应速度是非常有效的。
随着需求的增长, 采用关系数据库存储方式的邮件系统
已显得越来越力不从心。采用“表”来实现对数据的管理, 仅
能在用户量较小的情况下满足用户的性能需求, 难以支持
Webmail 系统向大容量、可扩展性发展的要求。同关系数据
库相比, 目录服务不但对于大容量的查找操作响应速度非常
快, 并且支持分布式存储结构, 容易实现数据的扩展, 能满足
大容量存储要求。因此将目录服务在TCPöIP 上的实现
轻量级目录访问协议(L igh tweigh t D irecto ry A ccess
P ro toco l, LDA P) 引入Webmail 系统成为必然。
1 轻型目录服务协议
目录服务技术是以通用的格式和方式实现信息的存
储和共享。目录服务的实现方式有多种, 目前趋于统一到
ITU TX1500 系列建议标准。但X1500 要耗费大量计算
资源, 且不支持TCPöIP 协议。于是IETF 下的A S ID 小组
制定了轻量级目录访问协议LDA P, 用相当于X1500 标准
10% 的代价完成了其90% 的功能。LDA P 已成为Internet
上目录服务的事实标准。但LDA P 不能代替X1500, 他需
要X1500 系列标准的数据以及服务模型的支持。
2 LDAP 模型
LDA P 协议定义了4 个模型, 分别是信息模型、命名
模型、功能模型以及安全模型。
信息模型 描述储存在LDA P 目录里的信息的结构。
LDA P 目录里基本单元是目录项(Ent ry)。目录项表示诸
如人、部门、服务器等现实世界中的对象(object) , 由包
含该对象信息的属性(at t ribute) 集组成。每个属性描述
了该对象的属性由一个类型( type) 和一个或多个值(value) 来描述。目录中的任何一个目录项都
有一个包含必备的属性和可有可无的属性的集合。该集合
称为目录方案( schema) , 允许对存储在目录中的数据进行
控制和维护。
命名模型 定义了如何组织和识别目录项(Ent ry) ,
即目录信息库(D irecto ry Info rmat ion L ibrary, D IL ) 的逻
辑组织结构, 这个逻辑组织结构定义为目录信息树
(D IT)。D IT 是一种逆向树结构。命名模型也定义了如何
访问目录项。D IT 中的每一个结点都是一个目录项, 每个
目录项在D IT 内是基于其辨识名(D ist inguished N ame,
DN ) 来排放的。DN 是用以识别目录项的惟一名字, 是由
一系列自底向上递归连接其父结点的相关辨识名(RDN )
组成的字符串, 各个RDN 用逗号隔开。组成DN 的每个
RDN 是D IT 上由D IT 的根到这一相关目录项的各个分
支。每个RDN 都是该目录项的属性。通常, 一个RDN 的
形式为< 属性名称> = < 属性值> 。
功能模型 描述能对储存在LDA P 目录里的信息执
行什么操作, 他是X1500 目录抽象服务的一个子集。对目
录的操作集分为3 类: 搜索( Interrogat ion ) , 更新
(Update) , 认证和控制(A uthent icat ion and Cont ro l)。认
证和控制允许客户端认证自己以及控制一个任务的某些
方面, 包括绑定和解绑定、连接和断开LDA P 服务器、建
立访问控制权和保护信息等。
安全模型 描述如何保护LDA P 目录中的信息, 防止未
经许可的访问。基于绑定操作, 是面向连接的协议, 定义了如
何保护目录中的信息不受侵害。影响安全策略的2 个方面是:
认证过程与访问控制模型(A ccess Cont ro lModel)。
3 邮件系统各模式比较
311 传统的集中式CöS 模式的邮件系统
早期电子邮件系统采用共享文件的消息传递方式, 邮
件存储方式为典型的övaröspoo löm ail 方式。系统以非常消
极的方式为客户端提供对共享资源的访问, 用户必须登录
到特定的网络服务器, 才能访问共享目录。
20 世纪90 年代后期, CöS 结构占据了主导地位, 邮件
存储方式也发展为采用关系数据库, 即U nix userö
M ailbox 方式。与共享文件系统相比, CöS 系统中服务器的
工作要主动得多, 因此被称为主动邮件系统。CöS 模式的
邮件系统是基于关系数据库的集中式系统。邮件系统的所
有部件(如收发模块、用户认证模块、邮件存储模块等) 都
运行于同一台服务器上, 不能够将不同的功能模块放在不
同的机器上进行负载分担。对于用户认证模块, 验证用户
身份的信息都存放于同一文件中, 在大用户量的情况下,
队列效率将会大大降低。邮件存储模块使用关系数据库,
不能将用户数据库模块分割成几部分分别存储在几台存
储服务器上, 每个人的邮件是一个文件, 用户越多邮件文
件就越多, 而在U nix 系统中同一级目录中的文件超过一
定数量后, 文件系统运转效率将会大大降低; 另外, 由于
每一个用户的多封邮件都位于同一个文件中, 所以如果在
用户取信过程中出现网络异常, 则很容易引起邮箱的死
锁。
集中式CöS 模式邮件系统的先天性缺陷使之难以承
受大用户量的访问, 因而这类系统通常只适用于支持用户
量在15 万以下的系统。Sendmail 系统是此类系统的典范。
312 基于LDA P 协议的邮件系统
采用LDA P 协议的邮件系统也是主动邮件系统, 工作
原理与集中式CöS 模式的邮件系统基本相同, 不同的是他
既支持集中式的也支持分布式的CöS 模式系统构架, 邮件
存储方式使用新的useröM aildir 方式。在邮件系统中引入
LDA P 协议的最主要目的是为了构造能满足大容量需求
的分布式邮件系统。
分布式邮件系统的可以将软件的不同模块, 如收发模
块、用户认证模块、邮件存储模块、用户接入模块等, 分别
运行在不同的机器上, 共同完成整个邮件系统的功能, 实现负
载分担; 采用目录方式存储用户数据。目录服务作为分布式计
算环境中的一部分, 提供定位和确定系统中用户和资源的方
法, 系统可以根据需要和用户的使用模式进行定制。这种结构
所支持的用户量有比较大的灵活性, 目前采用这种架构的系
统均可以支持到几千万以上的用户量。例如最为著名的电子
邮件站点Ho tmail, 他采用基于LDA P 协议的多机分布式并
行操作的方式, 目前其用户已达3 000 万。
4 系统设计
由于BöS 结构的灵活性及应用的广泛性, 我们将
Web 访问技术与目录服务相结合, 采用3 层结构模型, 建
立一个基于Web 的目录服务的邮件系统。
E mail 服务从逻辑上可以划分为邮件交换服务、文
件存储服务、用户认证服务和邮件存取服务, 本系统由邮
件收发模块、用户在线服务模块和系统服务管理功能模块
来完成这些服务。通过这些功能模块, 可实现对LDA P 目
录的认证、添加、删除、查找、返回等操作。
411 总体结构
本系统中Web 浏览器和Web 服务器之间是BöS 结
构, 而Web 服务器和LDA P 服务器之间则是CöS 结构; 从
整体看可将Web 浏览器和Web 服务器整个看作客户端,
LDA P 服务器作为相应的服务器端。结构图如图1 所示。
(1) 系统管理服务功能模块
本系统的系统服务管理采用基于Web 的方式。主要
功能有: 邮件服务器的配置、增加用户, 邮箱容量控制; 查
询用户等;
(2) 用户在线服务功能模块
5 系统实现
本系统在L inux 平台上开发, 其开发环境由
OpenLDA P, Apache, PHP 组成。
应用程序主要分为: class addr_ ldap 的设计、系统管
理服务实现和用户在线访问服务的实现。下面以addr_
ldap 设计为例说明系统的实现。
LDA P 提供了很多C 语言编写的A P I 函数, PHP 语
言也支持这些函数, 调用他们能简化程序编写。采用定义
类的方式, 在类中封装常用函数(如ac_ start ( ) , ac_ clo se
() , get_ ldap_ data () 等) , 通过调用了各种LDA P A P I 函数
(如ldap_ bind () , ldap_ search ( ) , ldap_ add ( ) 等) 来实现对
LDA P 目录服务器的访问。在应用程序中通过声明该类的
对象来调用这些函数。
< ?
class addr_ ldap
{
  var $ldap_ ho st = " localho st";
  var $ldap_ po rt = 389;
  var $basedn  = "o= test, c= cn";
  var $roo tdn  = "cn= roo t, o= test, c= cn";
  var $roo tpw   = "123456";
  var $userdn  = U SERNAM E;
 var $uid_ dn;
  var $mn_ roo t_ dn;
⋯⋯
ö3 3 3 常用功能函数3 3 3 3 3 3 3 ö
funct ion ac_ start () {   111111  }
ö3 3 3 Email 地址操作函数3 3 3 3 3 3 3 ö
funct ion del_ addr ($uid, $name, $type) { }
ö3 ⋯⋯其余函数略⋯⋯3 ö
}
? >
6 结 语
本系统利用LDA P 的4 个模型实现了Webmail 系统的
分布式模型。存储模块将用户基本信息与用户邮件分开存储,
LDA P 目录里存储用户基本信息和邮件实际存储位置的路
径, 这样可以将该模块用多台计算机分布实现, 解决了关系数
据库存储邮件系统存在的扩展性差、对分布式系统支持不够
的缺点。在索引信息领域LDA P 服务远优于传统的关系数据
库, 因此LDA P 的应用必将更广泛、更普及。

转载地址:https://blog.csdn.net/yuezu1026/article/details/4533564 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Memcached集群,客户端自动hash到不同服务器的实现
下一篇:nginx+多resin进程实现负载均衡

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月14日 23时21分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python架构与执行流程_scrapy架构图与执行流程 2019-04-21
python 快速排序 非递归_非递归全排列 python实现 2019-04-21
jupyter notebook代码导出_jupyter notebook导出pdf并支持中文 2019-04-21
python滤波器处理数据的优点_Python气象数据处理与绘图(16):去趋势与滤波 2019-04-21
python 读取内存二叉树_Python 二叉树遍历的优雅写法 2019-04-21
python中lstrip是什么的缩写_你真的了解strip()、lstrip()、rstrip()函数吗? 2019-04-21
llvm编译器实战教程第二版_LLVM IR入门指南(2)——Hello world 2019-04-21
用python绘制太阳花_用 Python 绘制数据的7种最流行的方法 | Linux 中国 2019-04-21
dll文件中static_vcpkg——Cpp中的包管理神器 2019-04-21
mysql数据库读取文件_安卓读取mysql数据库文件 2019-04-21
mysql 字符串前四位_mysql 字符串截取 2019-04-21
mysql 查找分组的最大值_mysql-分组以查找每个组的最小值,最大值 2019-04-21
查看mysql内存压力_MySQL InnoDB内存压力判断以及存在的疑问 2019-04-21
查看php mysql扩展库_php使用mysql扩展库链接mysql数据库(查询) 2019-04-21
python 彩带图_三角彩带【主图 说明 源码 贴图 有未来】 2019-04-21
java中文逗号替换成英文逗号_织梦中文逗号怎么自动替换成英文逗号 2019-04-21
hibernate java.util.date 精度_Hibernate映射中 date类型 和 javabean里的java.util.Date变Timestamp的问题... 2019-04-21
java graph结构_graph: 一个对“图”数据结构进行操作的通用库 2019-04-21
java 维护_如何在Java中维护会话 2019-04-21
php数据库建立教程,php创建数据库 2019-04-21