写点什么

阿里云大赛创意奖孟巍:邮件服务上的创新

  • 2012-12-12
  • 本文字数:2753 字

    阅读完需:约 9 分钟

孟巍凭借 OSS 本地文件和邮件服务获得了在阿里云开发者大赛的最佳创意奖,作品采用 Delphi 开发,灵感来源于日常工作的需求,InfoQ 就相关技术细节对他进行了采访。

InfoQ:首先请您做下自我介绍并介绍本次的参赛作品 OSS 本地文件和邮件服务?

孟巍:我在初中的时候开始接触编程并从那时开始深深迷上了这个行业,高中参加 NOI 竞赛有幸被保送到中山大学计算机系,2004 年本科毕业后先后加入了电信、软件、手机互联网企业从事软件开发和管理工作,2012 年初我在广州开始创业,成立了一家软件公司,目前主要负责医疗信息化和云计算方面的系统设计和技术选型工作。本次参赛的作品(OSS 本地文件和邮件服务)其实是为了解决我身边的一些非技术型创业者所面临的初创型公司内部 IT 管理的实际问题,将阿里云 OSS 服务作为公司内部文档和企业邮件的永久存储介质。本地文件服务为阿里云 OSS 提供了 FTP 和 Windows 虚拟盘的接口,简化用户的文件操作;本地邮件服务可以为企业架设自己的企业邮箱,实现了 POP3 和 SMTP 协议以及多用户管理,将企业邮件永久保存在阿里云 OSS。

InfoQ:你使用 Delphi 语言进行开发,能够说下选择 Delphi 是基于哪些考虑?在开发过程中是否遇到一些问题?

孟巍:Delphi 是我比较熟悉的一种编程语言,我相信有很多开发人员都有 Delphi 的编程经验,只是随着技术的飞速发展,现在 Delphi 不像原来那么大众化了,大家可能都转向了 Java、C#等其他广泛使用的编程语言。我使用 Delphi 的另外一个原因就是它全面提供了我参赛的作品所需要的基础控件,具体来说是 Indy 的一系列控件,包括 TIdHttp,TIdFtpServer,TIdPOP3Server,TIdSMTPServer,TIdSMTPRelay 等等,使用这些控件可以弱化协议的细节,将关注点放在界面实现、应用逻辑和与 OSS 的互操作上,提高开发效率。提到界面,我想说说 Delphi XE3 里面的 Fire Monkey 技术,我的理解是它基本上完全重写了 VCL 的 GUI 控件库,支持跨平台,还允许开发人员开发 Windows 8 界面的应用程序,大家有兴趣的话可以试试看。我在开发过程中曾遇到一个细节的技术问题,因为官方没有提供现成的 Delphi SDK,所以我需要从 SDK 开始做起,在编写和测试 SDK 的时候发现 TIdHTTP 的 CustomHeaders 里面的值不支持非 ASCII 编码的字符串,刚好在 OSS 的 API 中关于 Copy Object 需要在“x-oss-copy-source”这个 header 中存放源 object 的名字,如果这个名字包含非 ASCII 编码的字符(比如中文的 UTF8 表示),则会被 TIdHTTP 强制转换为问号(?)。我一度认为这是 Indy 控件的 bug,但后来我仔细查阅了 HTTP 的 RFC 2616 规范,发现是阿里云 OSS 与 RFC 规范关于 header 取值的编码要求不一致,我已经将此问题报告给阿里云的技术人员,正在等待进一步确认。我个人觉得,综合来说,使用 Delphi 来开发 Windows 原生应用程序仍是一个不错的选择。

InfoQ: 你对阿里云的 OSS 做了一次封装,让其支持 POP3 和 SMTP 协议,现在是否是完全兼容?在封装的实现中,你有哪些经验和教训可以分享给大家?

孟巍:通过使用不同的客户端测试,有关 POP3 和 SMTP 协议的实现是可以兼容的,但是由于参赛准备时间有限还没有进行过大范围测试。在动手实现这两个协议之前,我首先在技术层面了解清楚了电子邮件收发的全过程,具体包括:POP3 和 SMTP 协议分别是做什么的、每个协议里面有哪些消息、每个消息的参数是什么、返回码有哪些、两个邮件服务器之间是如何通信的、邮件内容该如何存储、什么是 MIME、IMAP4 协议有什么优势等相关问题。在这个过程中我有一个很深的感悟,那就是我发觉我们平时用的很多习以为常的技术方案的背后其实都有一份严谨的规范定义,如果要深入了解问题的实质就必须从这些规范入手,比如上面这些问题可以从 RFC 821、1939、2045-2049、3501 等规范中找到答案。

InfoQ:如果公司使用这个服务,如何将历史邮件迁移过来?并且在安全性上是如何做保证的?

孟巍:历史邮件的迁移目前还没有实现,我计划额外提供一个工具来批量导出原邮件服务器的邮件再批量导入到 OSS 邮件服务中去。关于安全性方面,首先企业用户需要自己去申请阿里云 OSS 的 Secret ID 和 Secret Key,企业用户的所有邮件都存储在自己账号所创建的私有 bucket 中,所以每个企业的邮件系统之间是彼此隔离开的,邮件内容存储的安全性和完整性则交由阿里云 OSS 来实现。另外,下一步我计划添加邮件加密功能,即企业用户可以独立设置一个密钥,所有的邮件内容必须经过 256 位加密后才存储在阿里云 OSS 上,这样可以进一步保证企业邮箱的安全性。

InfoQ:在开发的过程中,你用到了阿里云的哪些服务?请列举这些服务的优点和需要改进的地方?

孟巍:本次开发我使用了阿里云 OSS 和 ECS 服务,前者提供企业邮件的存储介质,后者提供了部署的服务器。ECS 和 OSS 之间采用内网连接,对于大附件的邮件也不会出现因为网络不稳定而导致的存储失败的问题;使用这两种服务的另一个好处就是在阿里云的价格表里面从 OSS 到 ECS 的流量是不计费的,这样就可以进一步减轻初创企业的 IT 开销。OSS 服务非常强大、高效和完整,但是个人觉得在一些技术细节上还有待雕琢,比如上述的 header 编码问题,以及最近论坛里面提到的事务性操作问题,都还需要逐步地完善。ECS 服务的配置和使用都很容易,还有免费数据迁移、免费备案、云盾、LBS 等配套服务,可以看出这些服务都是为了解决站长的实际问题而推出的,非常贴心。

InfoQ:请你分享一下获奖的感受?

孟巍:本次参赛我的最大收获是,其实创意和创新每天都会时不时地冒出来,但是无论多小的创新,只要能够解决一个实际问题,就是有价值的,如果还能够把这个创新继续延续下去,成为产品,就能够帮助更多的遇到相同问题的人。我本次参赛的起源是看到朋友的公司 IT 资源有限,却又非常需要可靠的文档和邮件存储服务,这个问题一直无法得到彻底解决,毕竟对于一家公司来说,这两者有任何的数据丢失都是非常大的损失。通过思考我发现了阿里云 OSS 正是解决这个问题的最佳答案,只是还缺少中间层的适配工具,将文档和邮件变成 OSS 的 object 来实现永久存储。恰好我有能力制作这样的工具,我想,如果我能实现这样的工具帮助我的朋友,也应该同样能帮助到类似的初创公司。阿里云给予我这个奖项,我觉得充分肯定了我的这个思路和前期的尝试。我想,这次的经历会激励我在今后做更多的有实质需求的创新探索。

InfoQ: OSS 本地文件和邮件服务下一步的发展计划是什么?

孟巍:接下来我会继续开源和完善 OSS 本地文件服务、OSS 邮件服务,以及 OSS Delphi SDK,制作相关的帮助文档和操作视频,收集用户的修改意见和新需求。希望我开发的这两个小工具可以帮助更多的初创企业更便捷地使用阿里云 OSS 服务。同时我将继续深入挖掘企业 IT 管理和阿里云服务的契合点,在此基础上开发更多的实用型工具。

2012-12-12 00:093466
用户头像

发布了 89 篇内容, 共 36.8 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

ES5、ES6中继承的几种写法

Manito

Java

B站Up主自制秃头生成器,一键get张东升同款发型,网友:秃的太过真实

程序员生活志

程序员 B站 隐秘的角落 张东升 秃头生成器

Tomcat 架构原理解析到架构设计借鉴

码哥字节

Tomccat 「Java 25周年」

面试官:为什么 HashMap 的加载因子是0.75?

哪吒来踢毽子

hashmap

分布式缓存 - 第五周总结

孙志平

架构师训练营-第五周-命题作业

sljoai

极客大学架构师训练营 第五周

小师妹学JVM之:JVM中的Safepoints

程序那些事

Java JVM 小师妹 性能调优 签约计划第二季

一致性哈希实现

娄江国

极客大学架构师训练营

架构师训练营第 5 周作业——一致性Hash算法

在野

极客大学架构师训练营

【第九课 + 第十课】技术选型:缓存架构 + 消息队列与异步架构

Aldaron

可变对象和不可变对象

Leetao

Python Python基础知识

漫画:Integer 竟然有 6 种比较方式?

王磊

Java 编程 漫画 java编程 漫画编程

缓存、一致性哈希和负载均衡总结(训练营第五课)

看山是山

缓存 极客大学架构师训练营 一致性hash

golang实现基于虚拟节点的一致性hash算法

朱月俊

分布式缓存总结

朱月俊

架构师训练第五周一致性Hash

Hanson

架构师训练营:第五周作业-一致性 hash实现

zcj

极客大学架构师训练营

第五次作业

王锟

一致性hash算法及java实现(转载,学习了)

王锟

华为厦门DevCloud创新中心正式揭牌,“上云用数赋智”新助力

Geek_116789

架构师训练第五周

Hanson

IOTA架构实战:大数据即时多维查询引擎构建【视频】

易观大数据

大数据 架构模式 查询引擎 数据算法

架构师训练营第五周作业 设计分布式缓存系统

Melo

极客大学架构师训练营

第5周作业

田振宇

高性能系统设计

dapaul

极客大学架构师训练营

真懂Spring的@Configuration配置类?你可能自我感觉太良好

YourBatman

Spring Boot Spring Framework @Configuration Spring配置类

架构师课程第五周总结

dongge

嗯?阿里为啥不用 ZooKeeper 做服务发现?

Java小咖秀

zookeeper 分布式 技术人生

视读——沟通的艺术,看入人里,看出人外(第一章)

废材姑娘

读书笔记 视觉笔记

重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」

小傅哥

Java 设计模式 小傅哥 重构 代码规范

架构师训练营第五周作业 一致性哈希

sunnywhy

阿里云大赛创意奖孟巍:邮件服务上的创新_阿里巴巴_水羽哲_InfoQ精选文章