做大系统设计,就和切蛋糕一样,把复杂问题简单化。一口吃不了一个胖子,就分块来吃。设计方法无非就以下几种方法:
一是横向切,最典型的的就是TCP/IP协议;把整个互联网通讯按实现的功能来分成几层,每一层专注自己那层的工作。比如链路层(IP)专门负责发送和接收IP数据报。这样,每层的工作比较明确清晰,实现起来也比较方便。
二是纵向切,比较典型的就是TCP和UDP的分离。TCP负责可靠信息的传送,UDP负责不可靠但快速的信息传送。大家各负责各的,界限很清晰。
三是异步脱离。就是将一些外围非实时服务通过消息或事件驱动的方式让他们独立出去,脱离主系统流程。比如日志系统,消息通知系统等都可以独立出去,然后由异步事件或消息的方式将它们和主系统连接起来。
四是加引擎的方法,把基本功能模块整理出来,做成基本服务。由引擎驱动控制,实现不同应用和流程。
这些方法并不是排它的。一个大系统,通常会把这几种方法结合起来做设计。先按应用范畴纵向切,再按功能范畴横向切;提炼一下基本公用服务,加引擎来实现多种多样的应用;最后把外围系统独立出去,由事件/消息去驱动它们工作。按这个模式去做,你大系统的设计就八九不离十,不会偏差太多。
扯了半天,我们回到引擎。(未完待续)