dao技术方案选择
运行及部署环境
dao平台操作系统内核在freebsd及linux两者中选。从人力资源和未来发展空间看,Linux是最佳选择。不过不排除特定的应用也会在freebsd上跑,比如freenas。
dao定位是大规模分布式云计算平台,简单一致的运维管理和规模化部署能力是首要选择。这就决定了dao部署必然采用虚拟化技术。考虑到运行效率和dao所设计的体系结构,container技术最佳选择。freebsd的jail可以排除,openvz太旧,则只有LXC和docker两个选择。跟操作系统整合的最佳候选方案是CoreOS,采用的是docker技术。但是CoreOS操作系统太新,很多云主机提供商还不支持。因此云主机+docker是第二选择。
编程模式
因为有了编程模式的革新才有了dao项目,当然的选择是面向状态编程(state-oriented programming model)。不过sop模式太创新,还是先从理论完备、逼格高的actor model开始,然后平滑演进到sop。最终dao兼容这两种模式,actor与fsm和state等效。
编程语言
考虑到actor model的支持,内核编程语言有Erlang和Go两个选择。考虑到成熟度和平台化能力,Erlang是第一选择。不排除后期部分采用Go语言搭建特定功能的平台(比如需要支持go语言业务开发时)。
对计算性能要求高的模块,或者底层开发模块用C语言。不过尽量使用现成的编程库,尽最大可能压缩C语言的代码量。是的,C++语言因为面向对象的恶趣味而被排除。
业务逻辑及Web应用开发,没得选,就Javascript。
后端Web页面可选PHP和Django。从美学角度选Django。另一方面讲,dao平台就是取代PHP的。
Javascript语言引擎在Mozilla的SpiderMonkey和Google的V8两个里面选。SpiderMonkey有成熟的Erlang封装模块,可以直接拿来用。而V8则有一个大杀器:Node.js。直接使用SpiderMonkey或者V8采用开启并发引擎进程的模式来应对大量js调用是不可行的。而采用Node.js的异步事件驱动编程模式可以大大减少引擎并发数,实现js大并发的软实时调用。再加上node.js社区活跃、资源丰富,使其成为dao的必选。
数据层
考虑dao重度使用graph结构,也可以说dao是面向graph的架构。因此直接选择graph db作为数据层是非常必要的。比较糟糕的是,目前没有好的graph db可选择。现阶段考虑在digraph模块上进行优化开发,针对快速缓存层和持久化层分别设计。后期考虑使用neo4j作为慢速持久化层。riak堪用的话,也可以使用riak作为优化后的digraph分布式存储后端。