开源 Linux 服务器与中间件(二)嵌入式Linux服务器和中间件

文章的目的记录所使用的的Linux服务器和中间件的配置和使用,防止时间太长忘记,进行重复工作。

推荐链接:

linux C 语言开发 (一) Window下用gcc编译和gdb调试

linux C 语言开发 (二) VsCode远程开发 linux

linux C 语言开发 (三) 建立云服务器

linux C 语言开发 (四) linux系统常用命令

linux C 语言开发 (五) linux系统目录结构

linux C 语言开发 (六) 程序的编辑和编译(vim、gcc)

linux C 语言开发 (七) 文件 IO 和标准 IO

linux C 语言开发 (八) 进程基础

linux C 语言开发 (九) 进程间通讯--管道

linux C 语言开发 (十) 进程间通讯--信号

linux C 语言开发 (十一) 进程间通讯--共享内存

linux C 语言开发 (十二) 进程间通讯--消息队列

Linux C到Android App开发推荐链接(入门十二章):

开源 java android app 开发(一)开发环境的搭建_csdn 开源 java android app-CSDN博客

开源 java android app 开发(一)开发环境的搭建-CSDN博客

开源 java android app 开发(二)工程文件结构-CSDN博客

开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客

开源 java android app 开发(四)GUI界面重要组件-CSDN博客

开源 java android app 开发(五)文件和数据库存储-CSDN博客

开源 java android app 开发(六)多媒体使用-CSDN博客

开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客

开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客

开源 java android app 开发(九)后台之线程和服务-CSDN博客

开源 java android app 开发(十)广播机制-CSDN博客

开源 java android app 开发(十一)调试、发布-CSDN博客

开源 java android app 开发(十二)封库.aar-CSDN博客

linux C到.net mvc开发推荐链接:

开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客

开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客

开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客

开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客

内容:嵌入式linux中常用的服务器和中间件的介绍,技术架构组合,以及优缺点。

嵌入式Linux会极度追求精简、低功耗、实时性和稳定性


核心区别:从"通用"到"专用"

在服务器领域,我们讨论的是支持海量并发、处理复杂业务的通用软件。而在嵌入式领域,这些软件大多被"瘦身"或重写,甚至其角色被直接整合到应用程序中。

  • Web服务器 :目的不是为了服务公众,而是为了设备管理。通过一个简单的网页来配置设备参数、查看状态。

  • 中间件 :不是为了解耦复杂应用,而是为了提供关键的服务能力,如网络连接、数据传输、远程调用等。

  • 数据库:很少使用MySQL等大型数据库,而是使用轻量级的键值存储或文件系统。


一、轻量级 Web 服务器

用于提供设备的管理界面(Web UI)。

1. Boa
  • 特点:非常古老但极其小巧的单任务HTTP服务器。在一个时间点只能处理一个请求,但代码量极小。

  • 应用场景:对资源极度敏感,且管理页面访问频率极低的设备(如网络交换机、简单传感器网关)。

2. Lighttpd
  • 特点:相比Boa更强大,采用事件驱动模型,支持FastCGI,性能较好,同时内存占用仍远低于Nginx/Apache。

  • 应用场景:需要较好性能和管理功能的嵌入式设备,如路由器、网络摄像头、智能家居中枢。

3. GoAhead
  • 特点:专为嵌入式设备设计的Web服务器。非常轻量,安全性高,并内置了嵌入式JavaScript和表单处理等功能。

  • 应用场景:在工业控制、网络设备中非常流行。

4. uhttpd
  • 特点:OpenWrt项目默认使用的微型Web服务器,与LuCI(OpenWrt的Web配置界面)紧密集成。

  • 应用场景:几乎所有基于OpenWrt的路由器和其他网络设备。

小结:在嵌入式领域,Nginx和Apache由于资源消耗过大,很少见。


二、网络通信与中间件

这是嵌入式Linux的核心,负责设备与外界(云、手机、其他设备)的通信。

1. MQTT
  • 功能类型:轻量级的发布/订阅消息传输协议。专为受限环境和不稳定网络设计。

  • 常用实现

    • Eclipse Mosquitto:一个轻量级的MQTT代理(Broker),也可以嵌入到设备中。

    • Paho MQTT:提供了多种语言的客户端库,嵌入式C/C++版本非常常用。

  • 应用场景

    • 物联网设备的标配。设备作为客户端,将数据(如温度、状态)发布到Broker,或从Broker订阅指令。

    • 智能家居、工业物联网、车联网。

2. CoAP
  • 功能类型:受限应用协议,可以理解为"物联网世界的HTTP"。基于UDP,非常省电和带宽。

  • 应用场景:在计算能力极低的传感器节点间通信,特别是在电池供电的场景下。

3. D-Bus
  • 功能类型:进程间通信总线。允许同一个设备上的不同应用程序相互通信和交换数据。

  • 应用场景

    • 在智能电视、车载信息娱乐系统中,一个应用(如媒体播放器)通过D-Bus通知另一个应用(如系统UI)更新状态。

    • 系统服务与用户应用程序之间的通信。

4. gRPC
  • 功能类型:高性能、跨语言的RPC框架。基于HTTP/2和Protocol Buffers。

  • 应用场景:在性能要求较高、需要强接口定义的复杂嵌入式系统中,如自动驾驶域控制器、高端机器人。

5. Avahi / mDNS
  • 功能类型:零配置网络服务发现。允许设备在没有中央DNS服务器的情况下在本地网络中发现彼此。

  • 应用场景:打印机、智能音箱、HomeKit设备等在局域网内自动被发现和连接。


三、轻量级数据存储

1. SQLite
  • 特点这不是一个服务器,而是一个库。整个数据库就是一个文件,零配置、无服务器、事务完整。它是嵌入式领域事实上的数据库标准。

  • 应用场景

    • 存储设备配置信息、历史运行数据、事件日志。

    • 手机App、浏览器内部都在大量使用SQLite。

2. 键值存储
  • 特点:比SQLite更简单,通常就是一个简单的库,将数据以键值对的形式存储。

  • 常见实现

    • Berkeley DB:一个经典的嵌入式键值数据库。

    • LMDB:极其快速且内存映射的键值存储。

  • 应用场景:缓存、快速配置存取。


四、特殊功能的"中间件"

1. Fluent Bit
  • 功能类型:轻量级的日志处理器和转发器。

  • 应用场景:在嵌入式设备上收集各种日志,然后高效地转发到中央日志系统(如ELK)或云平台。

2. EdgeX Foundry
  • 功能类型:一个开源的、微服务式的边缘计算平台。

  • 应用场景:在工业网关等边缘节点上,负责连接各种不同的物理设备(通过"设备服务"),进行数据标准化、本地处理,再上传到云端。它本身就是由一系列微服务中间件组成的。

典型嵌入式Linux系统架构示例

1. 智能家居网关

  • 硬件:ARM Cortex-A SoC, 128MB RAM

  • 软件栈

    • Web UILighttpd + 一个简单的CGI/后端程序,用于用户配置Wi-Fi、添加设备。

    • 通信Mosquitto MQTT Client 连接家庭内部的Zigbee/Z-Wave设备,并将数据聚合后通过 Paho MQTT 发布到云平台。

    • 数据存储SQLite 存储设备状态和简单的历史记录。

    • 进程通信D-Bus 让Web后端、MQTT客户端、设备驱动管理等服务之间可以互相通知状态变化。

2. 工业控制器

  • 硬件:高性能多核ARM或x86, 带实时补丁的Linux内核

  • 软件栈

    • 通信OPC UA 作为工业标准通信协议,gRPC 用于内部高性能模块间调用。

    • 边缘计算EdgeX Foundry 管理各种工业PLC和传感器。

    • 数据Fluent Bit 将关键指标和日志发送到中央监控系统。

总结

类别 服务器/桌面Linux 嵌入式Linux 核心理念
Web服务器 Nginx, Apache Boa, Lighttpd, GoAhead 设备管理,而非公众服务
应用服务器 Tomcat, Node.js 应用直接编译为二进制,或使用轻量级框架 无中间层,直接运行
数据库 MySQL, PostgreSQL, Redis SQLite, 键值存储 库而非服务,文件存储
消息中间件 RabbitMQ, Kafka MQTT, CoAP 轻量、低功耗、为IoT而生
服务发现 Etcd, Consul Avahi 零配置,局域网内

嵌入式Linux的世界是"小而美"的。选择任何组件的第一原则都是:在满足功能需求的前提下,资源占用最小,稳定性最高

相关推荐
ajassi20004 小时前
开源 Linux 服务器与中间件(一)基本介绍
linux·服务器·开源
“抚琴”的人4 小时前
C#中获取程序执行时间
服务器·前端·c#
赖small强4 小时前
深入理解 Linux NUMA:拓扑、分配策略与调优实践
linux·numa·pre-cpu·zone
javpy4 小时前
docker部署nacos报错 ‘env NACOS_AUTH_TOKEN must be set with Base64 String.‘
linux·docker·centos
Net_Walke4 小时前
【Linux系统】文件IO
linux·物联网·iot
阿巴~阿巴~5 小时前
Redis重大版本演进全解析:从2.6到7.0
服务器·数据库·redis·ubuntu·缓存·centos
刘某的Cloud5 小时前
ceph设置标志位
linux·运维·ceph·openstack
monkeyhlj5 小时前
excel-mcp-server rocky linux简单部署
linux·运维·excel
liulilittle5 小时前
HI3798MV100 运营商机顶盒NAS LINUX OS - IP地址静态绑定指南
linux·运维·服务器·网络·tcp/ip·nas·机顶盒