孟巍凭借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管理和阿里云服务的契合点,在此基础上开发更多的实用型工具。
\