SOA、微服务、插件式开发框--知识小结

概述

为了摸索c/c++插件框架,顺便把相关知识捋一捋。

SOA(面向服务的框架)和微服务的区别

Service Oriented Architecture 即面向服务的架构, 简称SOA。
SOA是一种设计方法或思想(没有具体的实现)。它面向服务的分布式计算,服务间松耦合,通过网络调用(而非进程内调用)来通信,从而配合起来提供一系列的功能。

有种观点说, SOA有两种实现方式,中心化方式就是ESB(企业服务总线),去中心化的服务就是微服务。
ESB主要是做了消息转化和路由工作,让不同的服务互联互通。但是ESB容易成为瓶颈,因为它跟所有业务都耦合了。所以后来出现了微服务的思想

SOA、微服务、插件式开发框--知识小结_第1张图片

微服务更加去中心化,强调服务根据业务来划分,彻底的组件化和服务化,将原来的单个业务拆分成多个可独立开发、运行的小服务。服务之间直接通信,不再有一个统一的中间的媒介。根本诉求是扩展性,方便开发、部署和运维。
微服务框架需要“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架构和微服务架构的区别是什么?我居然答错了

SOA、ESB、微服务的关系梳理

微服务与SOA的区别

【Android系统】binder 到底是什么?openbinder 又是什么?它是什么机制?

openbinder的github(非官方):https://github.com/seyko2/openbinder

为什么 Android 要采用 Binder 作为 IPC 机制?

Linux专属跨进程通信——D-Bus介绍

KDBUS在YUNOS上的移植

OSGi 和 C++:这里比较了几种c++的OSGi实现,是CppMicroServices作者写的。

C++ 应用程序可借助C++微服务实现OSGi API:CppMicroServices作者接受采访

celix的github

CppMicroServices官网

CppMicroServices GitHUb

第01课:入门篇——初识 CTK

CTK Plugin Framework 介绍

X3C github

C++通用插件框架X3C已在公网开源:作者博客的介绍

pluma项目地址:http://pluma-framework.sourceforge.net/

pluma官网:http://pluma-framework.sourceforge.net/

你可能感兴趣的:(C/C++)