[原]如何用erldis来组织一个大的项目
我们上一个erlang项目,开始运行良好,开发速度也很快,但随着时间的进行,数据量不断加大,隐藏的错误不断的出现,导致我们在之上用了大量的时间来处理出现的问题,浪费了大量的时间, 于是我们考虑有没有一种好的机制,尽量减少这种问题的发生,之前我们也采用了一些方法来减少但一直没有从根本上解决这方面的问题,于是在新项目开始之前,我们用了大量的时间来研究如何实现,现在我们找到一种自认为合理的方案——用erldis来把一个个的小的otp项目连接在一起,所有的数据交流都是通过erldis来进行。我们的操作如下:
把我们的项目根据功能划分为N个小的otp小项目,一个小的otp只处理一个很小的逻辑,只有一个小的功能——从erldis中取出它对应的数据,然后根据要求处理它,处理完成之后再把数据写入到erldis,等待下一层次的otp项目来调用。如此就把这个项目分成了多个功能逻辑灰常简单的小项目。这样我们可以得到如下好处:
1、这时我们就可以通过监控erldis的情况来判断各个otp项目执行的效率,从而修改对应的参数来增加或者减少它们的执行速度。
2、出现问题时我们可以首先停止这个otp项目(这时数据被阻塞在redis中,只被写入而不被读取),然后查看erldis中数据生成情况,来进行排除错误。等错误排除完毕后,再启动这个otp项目。这样就可以快速的查找出错误,方式调试。
3、当系统升级时,可以先把它停止,然后升级。操作perfect的话,可以保证数据不丢失。
4、对错误日志的部分也可以用这种方式来实现。当发生错误时,捕捉到它,然后把错误信息写入到错误处理对应的erldis中,再起一个专门处理错误日志的otp项目从erldis中取出对应的数据再做对应操作(写日志文件,或者写数据库等)。
5、在分布式系统中,不同结点中的数据之间不用再通过rpc的方式来进行交流,只需要通过erldis的分布就可以实现。