SOA、微服务、插件式开发框--知识小结
概述为了摸索c/c++插件框架,顺便把相关知识捋一捋。SOA(面向服务的框架)和微服务的区别Service Oriented Ambiguity 即面向服务的架构, 简称SOA。SOA是一种设计方法或思想(没有具体的实现)。它面向服务的分布式计算,服务间松耦合,通过网络调用(而非进程内调用)来通信,从而配合起来提供一系列的功能。有种观点说, SOA有两种实现方式,中心化方式就是ESB(企业服务总线
概述
为了摸索c/c++插件框架,顺便把相关知识捋一捋。
SOA(面向服务的框架)和微服务的区别
Service Oriented Architecture 即面向服务的架构, 简称SOA。
SOA是一种设计方法或思想(没有具体的实现)。它面向服务的分布式计算,服务间松耦合,通过网络调用(而非进程内调用)来通信,从而配合起来提供一系列的功能。
有种观点说, SOA有两种实现方式,中心化方式就是ESB(企业服务总线),去中心化的服务就是微服务。
ESB主要是做了消息转化和路由工作,让不同的服务互联互通。但是ESB容易成为瓶颈,因为它跟所有业务都耦合了。所以后来出现了微服务的思想

微服务更加去中心化,强调服务根据业务来划分,彻底的组件化和服务化,将原来的单个业务拆分成多个可独立开发、运行的小服务。服务之间直接通信,不再有一个统一的中间的媒介。根本诉求是扩展性,方便开发、部署和运维。
微服务框架需要“RPC+服务治理”,其中RPC (SOPA-http+xml, REST-http+json,或者其它二进制RPC)负责通信,服务治理负责管理服务
我理解, SOA的出发点是为了治理臃肿的单块程序,提高程序的可复用性。
而微服务是SOA的更小粒度的实现,除了解决单块程序的问题,由于去中心化更加灵活。更强调对开发、部署和运维的快速变化。
微服务的好处
根据《微服务设计》这本书,微服务的好处包括:弹性(容灾)、扩展(插件化)、简化部署(分批上线)、与组织结构匹配、可组合性、对可替代性的优化。
不考虑微服务框架的复杂性,微服务的好处还是很吸引人的。
单机插件式编程的一些方案
我希望能在单机中借鉴微服务的思想, 使用这种插件化的方式构建本地程序,有什么办法吗?
我经过一些搜索理解,找到了一些框架。下面一一说明一下。
- 多进程使用轻量的消息队列来通信。ZeroMQ和NanoMsg, 这两个都是相对比较成熟的轻量级消息队列,支持多种编程语言绑定,使用socket通信。虽然不是专门为单机程序准备的,但是用来做单机IPC也是可以的。只是zeromg是GPL协议,使用起来稍有不便;
- 多进程使用IPC通信框架。android系统里的Binder是个不错的主意, Binder作为一种C/S架构的IPC,是android组件化的基石,但是非android用不了啊。当然Binder也有一个开源版本: openbinder,但是好久没维护了,好像针对的还是1inux2.6的内核,不值得推荐。Linux上并非没有IPC框架, D-Bus算是不错的一个方案(基于socket,和ZeroMQ类似),但是由于运行在用户态,需要两次拷贝,效率稍低,应用也不是很广(主要是Linux桌面的一些控件在使用)。而其内核版本kdbus又一直没能进入1inux内核,所以应用也不广(据说ali的yunos就是使用此方式作为IPC的) 。所以说, Linu.x上就没一个好用的、获得广泛认可的IPC机制。多说一句,Dbus和kdbus都属于软总线,属于一种可扩展的通信架构。
- Java的OSGi框架。OSGi是面向java的动态模块化系统,允许多个基于Java的组件在单个Java虚拟机(JVM)之中有效协作。Ec1ipse运行的底层框架Equinox是使用最广泛的OSGi R4.x实现。伴随着EClipseIDE的流行, OSGi迅速在Java ME以外的领域站稳脚跟。
- c/c++语言的类OSGi框架.。把动态库作为组件容器来加载到同一进程中,模仿0SGi的接口实现的c/c++ 框架。经过比较,有三个比较可靠: celix、CTK和CppMicroServices。其中celix虽然是apache下的项目,但是资料少,社区不活跃,不推荐。CTK是医学成像领域的,活跃度还可以,但是和QT绑定很深,做界面的可以考虑。CppMicroservices也算活跃,有官网和github。相对于Ecl ipse运行的底层框架Equinox, 这几个框架都是路人,聊胜于无。这更反应了c/c++ 孱弱的生态系统。
- 简化的c/c++插件框架。OSGi毕竟太重了,这里介绍两个可以动态加载动态库组件的轻量级框架。一个是国内的,叫x3c,开源很多年了,更新频率还可以,作者写了不少中文文档。另一个叫pluma,国外的,功能和x3c类似,但是作者貌似都停止维护了,资料也很少,不推荐。
综上,对c++ 开发来说,我的推荐顺序是:x3c > CppMicroservices > CTK> NanoMsg
参考资料
面试官问我:SOA架构和微服务架构的区别是什么?我居然答错了
【Android系统】binder 到底是什么?openbinder 又是什么?它是什么机制?
openbinder的github(非官方):https://github.com/seyko2/openbinder
为什么 Android 要采用 Binder 作为 IPC 机制?
OSGi 和 C++:这里比较了几种c++的OSGi实现,是CppMicroServices作者写的。
C++ 应用程序可借助C++微服务实现OSGi API:CppMicroServices作者接受采访
C++通用插件框架X3C已在公网开源:作者博客的介绍
pluma项目地址:http://pluma-framework.sourceforge.net/
pluma官网:http://pluma-framework.sourceforge.net/
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)