开源 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的世界是"小而美"的。选择任何组件的第一原则都是:在满足功能需求的前提下,资源占用最小,稳定性最高

相关推荐
qq_401700412 小时前
嵌入式用Unix时间的优势及其C语言转换
服务器·c语言·unix
xu_yule4 小时前
Linux_12(进程信号)内核态和用户态+处理信号+不可重入函数+volatile
linux·运维·服务器
虾..4 小时前
Linux 环境变量&&进程优先级
linux·运维·服务器
i***t9194 小时前
Linux下MySQL的简单使用
linux·mysql·adb
偶像你挑的噻4 小时前
11-Linux驱动开发-I2C子系统–mpu6050简单数据透传驱动
linux·驱动开发·stm32·嵌入式硬件
稚辉君.MCA_P8_Java5 小时前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
K***72846 小时前
开源模型应用落地-工具使用篇-Spring AI-Function Call(八)
人工智能·spring·开源
郝学胜-神的一滴7 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
宾有为7 小时前
【Linux】Linux 常用指令
linux·服务器·ssh
wanhengidc7 小时前
云手机性能如何?
运维·服务器·科技·智能手机·云计算