golang怎么实现横向扩展

如题所述

第1个回答  2017-04-24
Golang进行服务器开发, 最显耀的就是其并发架构, 能充分榨干每一个CPU. 但是Golang和Erlang不一样, Golang使用了CSP的模型, 而Erlang采用的是Actor模型. 两者区别仅仅只是消息队列归属范围区别而已. 但带来的巨大的框架实现及使用差异让Golang和Erlang阵营里的童鞋们撕逼很久.

其实可以这么理解. Erlang基于Actor模型的并发架构真正是一个框架, 让每一个人用同样的方法处理事情. 而不用更多的担心横向扩展的问题. Golang的CSP并发架构没有很多框框条条. 让开发者自由发挥,设计自己想要的结构. 但碰到需要横向扩展时, 还是需要考验架构人的经验和实力.

所以说, CSP和Actor其实着眼点不一样. 所以还是不能同日而语. 但项目还得做, 问题还得解决. 不能为每一个项目重复设计, 编写重复的代码来应对各种横向扩展的问题. 烦了, 火了, 所以就准备造一个用Golang实现Actor的轮子.

调研了一段时间, 使用Golang做Actor模型的实现并不多. 而且大多是实验性项目, 并没有真正像Skynet一样, 在项目中使用同时做开源的.

说到Skynet, 这是一个极好的开源轻量级游戏服务器框架. 使用lua的coroutine模拟goroutine, 同步+多线程逻辑, 用C底层帮你处理了复杂的Actor模型. 留给上层只是发发消息, 管理下id, 很是惬意. 再加上lua天生动态语言, 模拟Erlang的动态更新更不是啥大问题. 因此在服务器界, Skynet变的有名了起来.

既然要做轮子, 我果断选择不关门. 讨论群都开了, 博客一直更新, github也有, 为啥不搞开源轮子呢? 因此这次的服务器框架计划定位于开源. 目的是为Golang贡献一款轻量级的游戏服务器框架, 由大家支持, 供大众使用.
相似回答