多语言协同开发利器:Polyglot
Please note: Polyglot 是一个实验性的项目,目前并不完善,使用时需谨慎并自负风险!
Polyglot 是一个创新的开源框架,它允许程序员使用多种编程语言、库和环境共同开发单个Web应用。这意味着什么呢?
这意味着你可以结束那些编程语言之争,自由选择最适合任务的语言或用你最爱的语言编写不同部分的代码。此外,同一个Web应用的不同部分可以使用不同的库。因此,如果新功能需要一个更新版本的库,你可以直接使用,无需顾虑旧有部分。
这也意味着你的Web应用可以更灵活地扩展和演进,可以在不影响原有功能的情况下替换部分组件,甚至避免“大刀阔斧”式的升级方式,让平台升级更加平滑。
复杂而强大的Web框架
然而,这并非没有代价。
与Rails、Django或Express等简化开发的框架相比,Polyglot的存在是为了增加应用的复杂性。它将复杂度转移到部署和开发中,以换取以下优势:
- 性能可扩展性 —— Polyglot的响应器是分布式独立进程,可分布在任何网络连接的服务器上。
- 可扩展性 —— 通过在现有Web应用中创建一个接受器作为控制器,你可以通过Polyglot扩展应用的功能。
- 多语言,独立开发 —— Polyglot的响应器可以使用不同语言、库和环境独立开发。
Polyglot并不适合所有Web应用。只推荐用于需要高性能扩展或者需要使用多种语言逐步开发的Web应用。例如,如果你的应用从不需要超过一台服务器的规模,那么可能其他单一语言框架更适合。同样,一旦应用完成且未来无需添加新功能,Polyglot可能就不太适用了。
为何要使用多种编程语言来开发Web应用呢?有实际的理由:
- Web应用是会随时间变化的系统,可能由不同的团队维护。如果不受特定平台或语言限制,那么逐渐改进软件的可能性就会更高。
- 你可以更换掉表现不佳的响应器,用性能更高的替换。不同的响应器可以针对性能、开发速度、维护便捷性或快速开发有不同的优先级。在一个单一的编程语言中,你往往不得不做出妥协。而在多种语言中,你可以为每个特定响应器选择合适的平台和语言。
- 不同的响应器可以针对特定的性能提升或可维护性进行编写。
尽管增加了开发初期的复杂性,但随着应用的发展,Polyglot确实能简化扩展和演进的过程。
架构详解
Polyglot的基本架构由三个主要部分组成:
- 接受器(Acceptor) —— 接受HTTP请求,并返回HTTP响应。默认实现为Go语言。为了扩展现有Web应用,您也可以选择在应用中实现接受器作为控制器。
- 经纪人(Broker) —— 中介接收代表HTTP请求的消息,并转发给相应的响应器。
- 响应器(Responder) —— 独立的处理进程,使用任何语言编写,接收来自经纪人的消息并作出响应。类似于大多数Web框架中的控制器,但它们是真正独立的进程,理论上可以位于任何远程服务器上。这里存放着你的业务逻辑。
Polyglot的架构核心在于利用经纪人将处理单元(响应器)与通信单元(接受器)分离,使响应器可以用多种语言编写。
工作流程
- 客户端发送HTTP请求至接受器
- 接受器将请求转换成JSON,并发送给经纪人,然后等待响应
- 经纪人路由消息到对应的响应器
- 响应器处理请求消息
- 响应器向经纪人返回响应信息。响应消息是一个数组,包含四个元素:路线ID、HTTP状态码、头部映射和主体。
- 经纪人根据路线ID将响应发送回正确的接受器
- 接受器使用HTTP状态码、响应头和主体构建HTTP响应并发送给客户端。
安装与设置
我的开发环境是OS X Mavericks,但在大多数类Unix环境中应该都能正常工作。
首先,安装ZeroMQ 4.0.4。
接下来,克隆本仓库到Go的工作空间中。默认接受器是用Go编写的。
对于接受器和响应器,请参考项目文件夹中的说明进行配置和启动。经纪人的安装和运行方式也类似,都是通过Go进行构建和启动。
现在,你已经对Polyglot有了全面了解。如果你想尝试一个多语言协作的Web开发新模式,不妨试试这个框架。它虽然带来了更多的复杂性,但也为大型、高性能应用的扩展和演变开辟了一条新路径。让我们一起探索这个框架的可能性,迎接Web开发的新挑战!